elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [?] Error en secuencia de Fibonacci.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?] Error en secuencia de Fibonacci.  (Leído 7,395 veces)
LlaboneTM

Desconectado Desconectado

Mensajes: 9


Ego sum Qui sum


Ver Perfil
[?] Error en secuencia de Fibonacci.
« en: 25 Mayo 2013, 22:37 pm »

Saludos,

Andaba haciendo ejercicios de programacion C y se cruzo el conocido ejercicio de imprimir la serie de Fibonacci. Ahora, el problema es el siguiente: Luego de haber resuelto el ejercicio, resulta que anda sin problemas hasta el numero 47 de la serie, a partir de ahi entran numeros negativos.
Ya intente otros modelos para realizar el mismo programa, incluso use predefinidos por otros, y sucede lo mismo, intenté usando unsigned long, tampoco lo corrige ¿que falla?
(uso Dev-c++)

El programa:

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3.  
  4. main()
  5. {
  6. int n,s,A=0,B=1;
  7.  
  8. printf("\n\nFIBONACCI SEQUENCE\n\n");
  9. printf("Insert number:\n");
  10. scanf("%d", &n);
  11.  
  12.  
  13. while(n<=0)
  14. {
  15. printf("\nERROR\n\n");
  16. getch();
  17. printf("Insert number:\n");
  18. scanf("%d", &n);
  19.  
  20. }
  21.  
  22. printf("\n\nFIBONACCI SEQUENCE\n\n");
  23.  
  24. for(s=1;s<=n;s++)
  25. {
  26. printf("%d ", A);
  27. A+=B;
  28. B=A-B;
  29. }
  30.  
  31. getch();
  32. return 0;
  33. }


El error:



Espero sus respuestas.


« Última modificación: 25 Mayo 2013, 22:42 pm por LlaboneTM » En línea

◄Ego.sum.qui.sum►
Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: [?] Error en secuencia de Fibonacci.
« Respuesta #1 en: 25 Mayo 2013, 22:41 pm »

El fallo es que a partir del número 47 los números son muy grandes y no se pueden representar con 4 bytes. Puedes probar con unsigned long long que son 8 bytes, pero llegará un momento en el que vuelvas a tener el mismo problema.

Puedes buscar librerías matemáticas para C que te permitan trabajar con números más grandes, van a ser lentas, pero te darán esa opción.

Saludos.


En línea

LlaboneTM

Desconectado Desconectado

Mensajes: 9


Ego sum Qui sum


Ver Perfil
Re: [?] Error en secuencia de Fibonacci.
« Respuesta #2 en: 25 Mayo 2013, 22:53 pm »

Vale, gracias por la resuesta, con unsigned long queda varado en el mismo lugar; pero si, otra opcion son esas librerias, voy a intentar por ese lado.
« Última modificación: 25 Mayo 2013, 22:54 pm por LlaboneTM » En línea

◄Ego.sum.qui.sum►
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: [?] Error en secuencia de Fibonacci.
« Respuesta #3 en: 25 Mayo 2013, 23:25 pm »

No sé cual es el problema pero es algo raro. En C da ese error, en cambio en c++ no  :xD
Código
  1. #include <iostream>
  2.  
  3.  
  4.  
  5. using namespace std;
  6. main()
  7. {
  8. unsigned long int n,s,A=0,B=1;
  9.  
  10. cout << endl << endl << "FIBONACCI SEQUENCE" << endl << endl ;
  11. cout <<"Insert number:" << endl;
  12. cin >> n;
  13.  
  14. while(n<=0)
  15. {
  16. cout << endl << endl << "ERROR" << endl << endl;
  17. getchar();
  18.  
  19.  
  20. }
  21.  
  22. cout << endl << endl << "FIBONACCI SEQUENCE" << endl << endl;
  23.  
  24. for(s=1;s<=n;s++)
  25. {
  26. cout <<" " << A;
  27. A+=B;
  28. B=A-B;
  29. }
  30.  
  31. getchar();
  32. getchar();
  33. return 0;
  34. }

Voy a seguir mirando el código en C remplazando los trozos de source a C++ para saber que elemento da el problema.
Un saludo.
En línea

I like to test things.
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: [?] Error en secuencia de Fibonacci.
« Respuesta #4 en: 25 Mayo 2013, 23:47 pm »

El problema es simplemente que en algún momento el número se sale de rango, si quieres hallar numeros de Fibonacci de una forma prácticamente ilimitada, tienes un par de opciones:

1) Crearte una clase para trabajar con números muy grandes, sobrecargando operadores para realizar las operaciones aritméticas (esto si que es un ejercicio de programación).

2) Usar una librería para este fin, como GMP

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: [?] Error en secuencia de Fibonacci.
« Respuesta #5 en: 25 Mayo 2013, 23:55 pm »

No sé solucionar el error, seguramente alguien con más experiencia en C te pueda ayudar.

Código
  1. /*El problema esta en el:*/
  2.      printf("%d ", A);
  3. /*Lo cambio por el:*/
  4.      cout <<" " << A;
  5. /*y no da problemas*/

Si te vale en C++ el código sería el que te puse o podrías añadirle solo lo mínimo en C++ (por algo programarás en C jeje) quedando así :

Código
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<conio.h>
  4.  
  5. main()
  6. {
  7. unsigned long int n,s,A=0,B=1;
  8.  
  9. printf("\n\nFIBONACCI SEQUENCE\n\n");
  10. printf("Insert number:\n");
  11. scanf("%d", &n);
  12.  
  13.  
  14. while(n<=0)
  15. {
  16. printf("\nERROR\n\n");
  17. getch();
  18. printf("Insert number:\n");
  19. scanf("%d", &n);
  20.  
  21. }
  22.  
  23. printf("\n\nFIBONACCI SEQUENCE\n\n");
  24.  
  25. for(s=1;s<=n;s++)
  26. {
  27. std::cout <<" " << A;
  28. A+=B;
  29. B=A-B;
  30. }
  31.  
  32. getch();
  33. return 0;
  34. }
  35.  
Los cambios que hice fueron: Cambié el trozo que ya te comenté(linea 27), incluí la librería de entrada/salida(linea 1) y declaré las locales como unsigned long int.(linea 7) 

El problema es simplemente que en algún momento el número se sale de rango, si quieres hallar numeros de Fibonacci de una forma prácticamente ilimitada, tienes un par de opciones:

1) Crearte una clase para trabajar con números muy grandes, sobrecargando operadores para realizar las operaciones aritméticas (esto si que es un ejercicio de programación).

2) Usar una librería para este fin, como GMP

Saludos.

¿Y porque con el mismo source en C++ funciona y en C no?  :xD
Saludos.
En línea

I like to test things.
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [?] Error en secuencia de Fibonacci.
« Respuesta #6 en: 26 Mayo 2013, 00:45 am »

El fallo es que a partir del número 47 los números son muy grandes y no se pueden representar con 4 bytes. Puedes probar con unsigned long long que son 8 bytes, pero llegará un momento en el que vuelvas a tener el mismo problema.

Puedes buscar librerías matemáticas para C que te permitan trabajar con números más grandes, van a ser lentas, pero te darán esa opción.



No,no tienen que ser necesariamente lentas. C incorpora una librería básica para manejar números algo más grandes de lo habitual:  #include <inttypes.h>.

Una salida para la que tu planteabas de 70 es:


Dame un numero :70

1       1       2       3       5       8       13      21      34      55
89      144     233     377     610     987     1597    2584    4181    6765
10946   17711   28657   46368   75025   121393  196418  317811  514229  832040
1346269 2178309 3524578 5702887 9227465 14930352        24157817        39088169
        63245986        102334155       165580141       267914296       43349443
7       701408733       1134903170      1836311903      2971215073      48075269
76      7778742049      12586269025     20365011074     32951280099     53316291
173     86267571272     139583862445    225851433717    365435296162    59128672
9879    956722026041    1548008755920   2504730781961   4052739537881   65574703
19842   10610209857723  17167680177565  27777890035288  44945570212853  72723460
248141  117669030460994 190392490709135

Que si no he revisado mal se corresponde con el resultado más poderoso del programa Mathmatica:


{1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049, 12586269025, 20365011074, 32951280099, 53316291173, 86267571272, 139583862445, 225851433717, 365435296162, 591286729879, 956722026041, 1548008755920, 2504730781961, 4052739537881, 6557470319842, 10610209857723, 17167680177565, 27777890035288, 44945570212853, 72723460248141, 117669030460994, 190392490709135}


Pero sí, el tema de los números grandes es una pena que no venga implementado en el propio C. Pero menos es nada, con lo anterior ya tienes valores bastantes más altos.

Saluditos!. ... ..
« Última modificación: 26 Mayo 2013, 15:35 pm por leosansan » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [?] Error en secuencia de Fibonacci.
« Respuesta #7 en: 26 Mayo 2013, 15:43 pm »


Con la emoción de los resultados obtenidos me olvidé poner el código  >:D , ahí va:

Código
  1. #include <stdio.h>
  2. #include <inttypes.h>
  3. int main()
  4. {
  5.  uint64_t n,a,b,c,aux;
  6.  do
  7.  {
  8.      printf("\nDame un numero :");
  9.      scanf("%llu",&n);
  10.      puts("");
  11.  }
  12.  while(n<=0);
  13.  a=1;b=0;
  14.  for(c=1;c<=n;c++)
  15.  {
  16.    printf("%llu\t",a);
  17.    aux=a;
  18.    a+=b;
  19.    b=aux;
  20.  }
  21.  return 0;
  22. }
  23.  

Saluditos!. .... ..
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Secuencia fibonacci
Java
Erik# 7 16,934 Último mensaje 1 Octubre 2008, 18:04 pm
por Sk9ITk5Z
Sucesión Fibonacci [Batch] « 1 2 »
Scripting
leogtz 17 15,173 Último mensaje 15 Junio 2009, 17:26 pm
por leogtz
FIBONACCI « 1 2 »
Programación C/C++
JOSE23 12 16,332 Último mensaje 24 Febrero 2011, 00:09 am
por RyogiShiki
Serie Fibonacci C++
Programación C/C++
Manimecker 3 22,579 Último mensaje 16 Enero 2012, 22:34 pm
por Manimecker
jasperReport error: Byte no válido 1 de la secuencia UTF-8 de 1 bytes
Java
mgc 0 5,213 Último mensaje 14 Noviembre 2014, 13:47 pm
por mgc
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines