/
Inicio :: Foros

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

no entiendo que es lo que hago mal!!!! ayudadme porfaaaaaaaa

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



Registrado: 13 Oct 2004
Mensajes: 11

MensajePublicado: 14/10/2004 10:08 am
Título: no entiendo que es lo que hago mal!!!! ayudadme porfaaaaaaaa

Hola es mi pimer mensaje, y a ver que tál se me da...estudio ingeniería técnica industrial electrónica industrial, y tengo ejercicios que no pueden esperar a que pueda preguntárselo al profesor, el caso es que tengo que hacer un programa que hace el sumatorio de ((i*i)+1)/i para i=1 hasta i=100,esto es lo que he hecho, pero no me funciona, estoy cansado, y confío en que será alguna estupidez, a ver si me podeis decir que tengo mal:


#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i;
float a,b=0;
printf("Programa que hace el sumatorio de ((i*i)+1)/i para i=1 hasta i=100\n");
for ( i=1 ; i<101 ; i++ )
{
a=((((i*i)+1)/i)+b);
b=a;
printf("%f\n",a);
}
printf( "El valor del sumatorio es: %f\n",a );
system("PAUSE");
return 0;
}
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 14/10/2004 2:38 pm
Título:

A mí me sale como valor 5051. Puedes simplificar la expresión del cálculo:
Código:
float a = 0;
....
a+=(i*i+1)/i;
....

pero el resultado es el mismo: 5051

Un saludo.
Volver arriba
Yahoo Messenger
Pablo



Registrado: 13 Oct 2004
Mensajes: 11

MensajePublicado: 14/10/2004 11:44 pm
Título:

Muchas gracias por responder, pero ese valor está mal Crying or Very sad , es el que me sale a mí tambien, lo he repasado mil veces, y me sigue saliendo eso, de hecho el printf que pongo dentro del for es para ver como hace los primeros bucles, ya que estos si los puedo hacer a mano, y comprobarlo...
el primer bucle tiene que dar 2, ese lo hace bien
el segundo bucle es la suma del primero más el segundo, es decir tendría que dar 2(del primer bucle)+2.5(del segundo bucle)=4.5, y da 4 Exclamation Question Exclamation Question Question
A ver si seguis contestando y me ayudais a corregirlo,
Un saludo Very Happy
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 15/10/2004 2:37 am
Título:

El error esta en la linea:

a=((((i*i)+1)/i)+b);

Utiliza 1.0 en vez de 1, de la siguiente forma:

a=((((i*i)+1.0)/i)+b);

o mejor todavia, como te recomendo alp:

a += (i*i + 1.0) / i;

Saludos
Volver arriba
Pablo



Registrado: 13 Oct 2004
Mensajes: 11

MensajePublicado: 15/10/2004 3:09 am
Título:

Muchas gracias tio Very Happy , lo he comprovado de mil formas, y está bien, ahora la duda es:¿por qué se raya por poner1 ó 1.0????????? Confused
tal vez por que estoy operando con números float?

Un saludo y denuevo muchísimas gracias Very Happy
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 15/10/2004 6:06 am
Título:

Bueno, tiene que ver con dos aspectos del lenguaje C.

Primero, en C las constantes numericas que no llevan punto decimal se consideran de tipo int (o long int). Por ejemplo en la version original de tu programa al utilizar 1 en lugar de 1.0 estabas utilizando una constante numerica de tipo int.

Segundo, en C la division entre numeros enteros trunca, esto es, la parte decimal (o fraccion) se desecha. En la version original de tu programa tanto la variable i como el 1 son enteros y es por eso que te estaba devolviendo valores sin fraccion, como (2*2+1)/2 = 2 en lugar de 2.5.

Saludos
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