Ir ao conteúdo
  • Cadastre-se
jeffprog

RESOLVIDO Dúvida em exercício sobre Fibonacci

Posts recomendados

Olá pessoa. Estou com algum problema no meu código para resolver um exercício sobre Fibonacci. O enunciado do exercício é o seguinte: Fazer um programa para mostrar os 100 primeiros termos da série de Fibonacci.

 

Como pode ser visto no código abaixo utilizei variáveis do tipo float pois com int e long int não consegui exibir os valores depois de um certo número que era muito grande.

 

Outro detalhe é que a solução de forma não recursiva é proposital pois o exercício encontra-se na parte de Estruturas de Repetição da lista que estou praticando.

 

Eu conferia a sequência por esse site http://www.educ.fc.ul.pt/icm/icm99/icm41/os100.htm e detectei que o programa informa os valores corretamente até o fib(36).

 

Utilizei como IDE o Dev-C++ 5.6.0 mas testei também no CODE::BLOCKS e problema continuou o mesmo.

 

Serei grato caso alguém possa me ajudar.

 

Código:

#include <stdio.h>#include <stdlib.h> int main(){ int i;float f1 = 0.0f;float f2 = 1.0f;float f3; printf("%.f\n",f1); printf("%.f\n",f2); for(i=2;i<100;i++){    f3 = f1 + f2;    printf("%.f\n",f3);     f1 = f2;   f2 = f3;} printf("\n"); system("pause"); return 0;}
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O último da série (o 99) é:

F(99) = 218.922.995.834.555.169.026

 

E pra representar ele você vai precisar de mais de 8 bytes.

Dependendo do compilador que você esteja usando, do sistema operacional (32bits, 64bits), etc, é bem provável que o valor máximo que você consiga representar usando apenas o C puro e as bibliotecas padrão, seja 8 bytes usando um "unsigned long long int".

 

Eu testei aqui e consegui ir até F(93):

 

#include <stdio.h>#include <stdlib.h> int main() {     int i;    unsigned long long int f1 = 0;    unsigned long long int f2 = 1;    unsigned long long int f3;     printf("%llu\n",f1);    printf("%llu\n",f2);     for( i=2; i<100; i++) {        f3 = f1 + f2;         printf("%d - %llu\n",i,f3);        f1 = f2;        f2 = f3;    }    printf("\n");     return 0;}
 

Depois do 93, nem mesmo os 8 bytes do longlongint dão conta... daí pra representar valores maiores que esse você vai precisar usar alguma biblioteca própria pra isso.

Eu sei que no visual studio existe alguns tipos que são capazes se representar valores maiores. Mas como você tá usando o gcc, recomendo dar uma olhada numa biblioteca chamada inttypes.h.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@jeffprog

 

 

Uma outra possível solução seria implementar uma rotina própria de soma que permitisse valores de tamanho praticamente arbitrários.

 

Tem um tópico aqui meio antigo onde dou uma ideia sobre como implementá-la.

 

 

http://forum.clubedohardware.com.br/topic/1062816-sequencia-de-fibonacci/

 

 

 

LNW

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

dontpanic, pesquisei sobre a biblioteca inttypes.h, utilizei seus recursos mas também só consegui chegar até o F(93).

 

A estratégia do LNW é interessante, poderei usar em aplicações futuras.

 

Obrigado pela ajuda.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

12(16) bytes, você tem através da seguinte declaração;<br />

long double ld_val;<br />

Ao exibir esse número, pode haver problemas por causa do compilador se estiver desatualizado.<br />

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
int  x, y,z;
x=0;
y=1;
z=0;
   while(z<100){
    printf("%i \n",z);
    z=x+y;
    x=y;
   y=z;

   }
return 0;
}

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Aprenda_a_Ler_Resistores_e_Capacitores-capa-3d-newsletter.jpg

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!