Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 29 Junio 2012, 04:58 am



Título: series en C
Publicado por: m@o_614 en 29 Junio 2012, 04:58 am
Saludos tengo el siguiente programa que me calcula e imprime la siguiente serie:

a) 1/1+1/2+1/3......1/n   n seria el numero que el usuario le de

pero no me imprime el calculo correcto y no se por qué

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int i,n;
  7.    float suma=0;
  8.    printf("Dame el numero de terminos\n");
  9.    scanf("%d",&n);
  10.    for(i=1;i<=n;i++)
  11.        suma= suma+1/i;
  12.    printf("a) %.2f",suma);
  13.    return 0;
  14. }

de antemano gracias


Título: Re: series en C
Publicado por: BlackZeroX en 29 Junio 2012, 05:06 am
En lugar de float usa double...

Dulces Lunas!¡.


Título: Re: series en C
Publicado por: twins en 29 Junio 2012, 05:43 am
El error es bastante simple solo debes cambiar los int por float ya que c tiene problemas cuando combinas los tipos de datos. saludos


#include <stdio.h>
#include <stdlib.h>
int main(){
    float suma=0,n,i;
    printf("Dame el numero de terminos\n");
    scanf("%f",&n);
    for(i=1;i<=n;i++)
      suma=suma+1/i;
    printf("%.2f",suma);
    return 0;
}   


Título: Re: series en C
Publicado por: ryan parker en 29 Junio 2012, 06:52 am
El unico detalle es solo usar casting float en la division 1/i (pues i es entero).
Y con eso si que va de padre.

twins: No es nada recomendable usar comparacion de punto flotante  :silbar:


Título: Re: series en C
Publicado por: durasno en 29 Junio 2012, 06:52 am
Hola! el problema es que estas haciendo una division de enteros: i y 1 son enteros por lo tanto la division va a dar un entero. Podes hacer lo que te dijeron(trabajar todo con float o double) ó indicar que 1 es un float, ¿como?
Código
  1. suma= suma+1.0/i; // fijate q use 1.0

o directamente castear la division:
Código
  1. suma= suma+(float)1/i;


Saludos