| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
Pablo
Registrado: 13 Oct 2004 Mensajes: 11
| Publicado: 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
| Publicado: 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 | |
 |
Pablo
Registrado: 13 Oct 2004 Mensajes: 11
| Publicado: 14/10/2004 11:44 pm | | | Título: |
| Muchas gracias por responder, pero ese valor está mal , 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  A ver si seguis contestando y me ayudais a corregirlo, Un saludo  |
|
| Volver arriba | |
 |
|
rir3760

Registrado: 01 Oct 2004 Mensajes: 3657 Ubicación: Mexico
| Publicado: 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
| Publicado: 15/10/2004 3:09 am | | | Título: |
| Muchas gracias tio , lo he comprovado de mil formas, y está bien, ahora la duda es:¿por qué se raya por poner1 ó 1.0?????????  tal vez por que estoy operando con números float?
Un saludo y denuevo muchísimas gracias  |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3657 Ubicación: Mexico
| Publicado: 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 | |
 |
|
|