Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Eliseu M.

[Resolvido] Séries Fibonacci, Ricci e Fetuccine

Recommended Posts

Meus cumprimentos, pessoal.

 

Estou fazendo curso técnico de programação e acabamos de aprender o FOR, WHILE e DO WHILE. O professor passou três exercícios sobre séries matemáticas, usando FOR: Fibonacci, Ricci e Fetuccine, vocês devem conhecer. Quando aprendemos progressões no colégio, é fácil pegar a posição do número, mas como fazer isso na programação?

 

 

Imagem Postada Fibonacci

Os dois primeiros números são 1 e 1, e o resto é a soma dos dois anteriores. Imprima os 10 primeiros.

 

Imagem Postada Ricci

Mesmo esquema da série de Fibonacci, porém os dois primeiros números são fornecidos pelo usuário (como saber onde o FOR vai parar?)

 

Imagem Postada Fetuccine (não encontro nada falando dele, só macarrão)

É o seguinte... se o número for ímpar, ele faz a soma dos dois anteriores e, se for par, faz a subtração.

 

 

Eu não sei se o professor está tirando sarro com esse Fetuccine, mas a lógica é essa aí. Falou!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tpo, Eliseu...basicamente a de Fibonacci consiste na formula (n-1)+(n-2)... caiu uma questão dessa na prova de Informatica Fundamental a pouco tempo, e eu conseguiu desenrolar na hora, so nao sei se ta certo. Vo fazer em visualG, pra ve se te ajuda!

algoritmo "Fibonacci"
var n, i, soma: inteiro
inicio
leia(n)
para i de 0 ate n passo 1 faca
se i = 0 entao
escreval (i)
fimse
se i = 1 entao
escreval (i)
fimse
se i> 1 entao
soma<- (i-1)+(i-2)
escreval (soma)
fimse
fimpara
fimalgoritmo

agora eu to achando que acertei aqui e errei na prova :angry: :angry:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso não imprime a sequência de fibonacci: 0 1 1 3 5 7 9 11 13 15 17

O correto é 1 1 2 3 5 8 13 21 34 55 89

O teu conceito de sequência de fibonacci tem um erro de definição: p/ um inteiro N > 2, a função é F(N) = F(N-1) + F(N-2), e não (N-1)+(N-2) [F(1) = F(2) = 1].

 

unsigned int a = b = 1, c;
unsigned int termos;
scanf("%ud", &termos);
unsigned int i;
for(i=1; i<= termos; i++) {
if (i < 3) {
printf("1 ");
} else {
printf("%ud ", a+B);
c = b;
b = a+b;
a = c;
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eliseu,

 

Fibonacci:

/**
* @param integer $i
*/
function fibonacci( $i ){
	$sqrt5 = sqrt( 5 );

	return ( 1 / $sqrt5 ) * ( pow( ( 1 + $sqrt5 ) / 2 , $i ) - pow( ( 1 - $sqrt5 ) / 2 , $i ) );
}

 

Calculando os 10 primeiros números da sequencia:

for ( $i = 0 ; $i < 10 ; ++$i ){
printf( "fibonacci(%d) => %d\n" , $i , fibonacci( $i ) );
}

 

Saída:

fibonacci(0) => 0

fibonacci(1) => 1

fibonacci(2) => 1

fibonacci(3) => 2

fibonacci(4) => 3

fibonacci(5) => 5

fibonacci(6) => 8

fibonacci(7) => 13

fibonacci(8) => 21

fibonacci(9) => 34

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

[MODO CHATO]

 

João, a sua seqüência está certa, mas, apenas a título de melhor exemplificação, $i do loop for teria de ser inicialmente UM, para não mostrar o zero inicial.

 

Mas, só de curiosidade, pra quê raiz quadrada de 5?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso se chama fórmula de Binet, normalmente estudada em matemática discreta. Já teve um tópico estilo saga em Java sobre qual era o melhor modo de se calcular os números de fibonacci.

Compartilhar este post


Link para o post
Compartilhar em outros sites

apenas a título de melhor exemplificação, $i do loop for teria de ser inicialmente UM, para não mostrar o zero inicial.

 

Como "melhor exemplificação" se 0 é o primeiro número da sequencia ???

 

fibonacci(n) = 0 http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Se n = 0

fibonacci(n) = 1 http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Se n = 1

fibonacci(n) = fibonacci( n - 2 ) + fibonacci( n - 1 ) http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Se n >= 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso não imprime a sequência de fibonacci: 0 1 1 3 5 7 9 11 13 15 17

O correto é 1 1 2 3 5 8 13 21 34 55 89

O teu conceito de sequência de fibonacci tem um erro de definição: p/ um inteiro N > 2, a função é F(N) = F(N-1) + F(N-2), e não (N-1)+(N-2) [F(1) = F(2) = 1].

 

unsigned int a = b = 1, c;
unsigned int termos;
scanf("%ud", &termos);
unsigned int i;
for(i=1; i<= termos; i++) {
 if (i < 3) {
	printf("1 ");
 } else {
	printf("%ud ", a+B);
	c = b;
	b = a+b;
	a = c;
 }
}

Valeu cara, eu havia pesquisado sobre o assunto e encontrei uma solução muito parecida, aliás é igual.

 

Obrigado a todos aí pelo help, deu um bom tópico XD Agora falta uns programinhas de 50 linhas... tô até vendo :P

 

Falou!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.