| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
jaime-guatemala
Registrado: 26 Sep 2007 Mensajes: 2
| Publicado: 26/09/2007 10:19 pm | | | Título: Ayuda con un algoritmo |
| Buen dia antes que todo:
Soy nuevo, acabo de encontar este sitio espero pueda encontrar ayuda, soy estudiante de Ing. en sistemas, pero apenas estoy empezando, tengo que estregar un algoritmo en Borland c++ el cual no le he hayado forma, este es:
"elabora un programa en borland c++ que lea un entero N y calcule el resultado de la siguiente serie:"
1-1/2+1/3-1/4+............(+-)1/N
yo lo escribi de la siguiente manera pero no funciono:
/*Serie de Números*/ /*23/09/07*/ /*Muestra el resultado de una operacion entre fracciones*/
#include <iostream.h> #include <iomanip.h> #include <conio.h> #include <stdio.h> #include <dos.h>
int opc, den, frac; float res, pr;
void main()
{
printf ("ingrese cuantas veces se hara el proceso"); cin>>opc;
for (den=2; den<opc; den++) { pr=den%2;
if (pr== 0) frac =1/(den*-1);
else frac=1/den;
res=1+frac; } cout<<"el resultado es"<<res<<frac; getch(); }
Agradesco consejos o si me pueden resolver este algoritmo el cual me ha agotado ideas
gracias |
| | Volver arriba | |  | mamntc02
Registrado: 30 Abr 2007 Mensajes: 277
| Publicado: 27/09/2007 3:30 am | | | Título: |
| Hola,
Bueno, vayamos por partes. Primero te comentaré ciertas cosas q están mal sobre el código, después el algoritmo.
El problema q yo veo empieza en el enunciado, q obviamente no es culpa tuya, pero eso de poner 'hacer un programa en BC++' del cual imagino q usáis la famosa versión 3.1 para DOS, es bastante penoso a parte de estar totalmente obsoleta, y demuestra q quién os da la asignatura no se ha dignado a actualizar sus conocimientos en al menos 10años, pero por desgracia es muy normal.... Me imagino q es ese compilador por como veo q empiezas el programa usando librerías como iostream.h y usando void main(), etc... Bueno, al grano.
- La función main jamás devuelve void siempre devuelve int. La dos únicas posibles declaraciones válidas para la función main() son:
| Código: | int main(){...} int main(int argc, char** argv){...} | Cualquier otra declaración es incorrecta (basándonos en el standard de C, ya q puede q tu compilador se trague otro tipo de declaraciones, como hace BC 3.1 si se usa void main()) La librería iostream es una librería de C++ (q no de C), y todas las librerías de C++ se incluyen sin el .h y están incluidas en espacio con nombre std. Cualquier compilador moderno te dirá en la sentencia| Código: | #include <iostream.h> | es obsoleta y la correcta sería | Código: | #include <iostream> using namespace std; //Para decirle q estás usando el espacio con nombre std |
Usas librerías q no te hacen falta como iomanip.h o dos.h, elimínalas. Por otro lado, intenta evitar tanto como puedas el uso de la librería <conio.h> por no ser estandard y ser 'prácticamente' exclusiva de Borland (al menos varias de sus funciones). Aunque en esto no me voy a meter demasiado, pq puede q sea 'imperativo' de vuestro profesor (y sepa o no sepa, es el quien tiene q aprobarte). Pero si además de aprobar quieres aprender evita su uso, ya q la mayoría de compiladores q no son Borland no tiene dicha librería o si la tienen prácticamente se limitan a las funciones getch() y kbhit() Inicializa todas las variables. Generalmente no acostumbran a dar problemas ya q la mayoría el compilador las inicializa, pero es una buena recomendación. De hecho, lenguajes como Java te obligan a hacerlo (por algo será...). No obstante, en tu caso dichas variables se incializarán por defecto: punteros a NULL, float y double a 0.0 e int a 0.
En cuanto al algoritmo sí lo tienes mal. Piensa un poco q hace: Vas calculando una fracción en función si estamos en 'paso' par o impar y luego haces 1+frac. Primero: en ningún momento almacenas los resultados anteriores, por tanto si el valor entrado fuese 5, lo único q te daría sería 1-1/5, q no es lo q quieres. Debes ir almacenando el resultado. Segundo: Al hacer 1/den siempre te dará 0 (si den es diferente de 0 y 1, claro). La razón es q den es un entero, y 1 también. Por tanto hace la división entera. Para q tenga en cuenta los decimales puedes hacer un par de cosas:| Código: | //Método 1: frac = 1./den; //Método 2: Hacer un cast a double o float del entero frac = 1/((double)den); |
Por último, tienes declarado frac como entero, por tanto siempre será 0, debes declararlo como float o double.
No te pongo el código corregido para q lo hagas tu mismo, a ver si has entendido algo de todo el rollo q te he explicado  Si tienes dudas, vuelve a preguntar.
Saludos. |
| | Volver arriba | |  | jaime-guatemala
Registrado: 26 Sep 2007 Mensajes: 2
| Publicado: 28/09/2007 8:32 pm | | | Título: |
| Primero, gracias por tu respuesta;
El programa que usamos es el Borland C++ 5.02, muchas gracias por tus correcciones, me han servido bastante pero esto solo con lo que me darias un exelente empujon es como hago que guarde el resultado y siga la secuencia, aun no le he encontrado, he hecho 3 diseños diferentes pero no me sale el resultado deseado
y como un extra que me recomiendas para usar en vez el conio
una vez mas, gracias por tu ayuda, me es bastante util |
| | Volver arriba | |  | | rir3760

Registrado: 01 Oct 2004 Mensajes: 3841 Ubicación: Mexico
| Publicado: 29/09/2007 6:46 am | | | Título: |
| | jaime-guatemala escribió: | como hago que guarde el resultado y siga la secuencia, aun no le he encontrado, he hecho 3 diseños diferentes pero no me sale el resultado deseado
y como un extra que me recomiendas para usar en vez el conio |
Para guardar la secuencia utilizas una variable como acumulador (almacenar el total) cuyo valor inicial es uno y a la cual le vas sumando (o restando) los valores 1.0/2.0, 1.0/3.0, etc. dentro de un bucle que procesa la mentada serie:
| Código: | int N; int i; int total;
/* ... asignacion de N ... */
total = 1; for (i = 2; i <= N; i++){
/* aqui se procesa la serie 2, 3, ..., N */
}
|
En cuanto a la biblioteca conio de Borland si eres un principiante en C++ el mejor consejo es no utilizarla como tampoco cualquier otra que no sea parte de la biblioteca estandar.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | dama_sistemas
Registrado: 04 Oct 2007 Mensajes: 11
| Publicado: 04/10/2007 1:47 pm | | | Título: |
| Necesito el codigo para resolver la ecuacion de segundo grado...alguien me puede ayudar por favor!! muchas gracias. Saludos Lenguaje C. |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3841 Ubicación: Mexico
| Publicado: 04/10/2007 1:56 pm | | | Título: |
| Si necesitas el codigo fuente de un programa utiliza el foro apropiado: Trabajos de clase.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |