/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ayuda con un algoritmo

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
jaime-guatemala



Registrado: 26 Sep 2007
Mensajes: 2

MensajePublicado: 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

MensajePublicado: 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 Wink
    Si tienes dudas, vuelve a preguntar.

    Saludos.
    Volver arriba
    jaime-guatemala



    Registrado: 26 Sep 2007
    Mensajes: 2

    MensajePublicado: 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

    MensajePublicado: 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

    MensajePublicado: 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

    MensajePublicado: 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
          Índice del Foro elrincondelc.com -> Principiantes C/C++
    Página 1 de 1Todas las horas están en GMT - 8 Horas

     
    No puede crear mensajes
    No puede responder temas
    No puede editar sus mensajes
    No puede borrar sus mensajes
    No puede votar en encuestas

    (c) ElRincondelC.com

    Un proyecto de UrlanHeat.com