Exercícios Resolvidos de Estruturas de Repetição: while e do-while

Ver Teoria

Enunciado

Faça um programa para gerar os n primeiros termos da sequência:

1 1 2 3 5 8 13 21 …

Passo 1

E aí pessoal. Vamos resolver esse exercício!

Talvez a sequência do enunciado possa parecer um pouco aleatória. Mas na verdade é a famosa Sequência de Fibonacci, que é muito usada nos estudos de biologia e física.

Essa sequencia sempre começa com dois números pré-definidos, e daí pra frente os números seguintes é formado pela soma dos dois anteriores:

a 0 = 1 a 1 = 1 a n = a n - 1 + a n - 2

Para resolver essa sequência a gente pode utilizar um loop w h i l e para calcular cada valor da sequência.

Se a gente vai usar um loop w h i l e a gente vai precisar de pelo menos uma variável inteira para contar as iterações, vamos chamar de i . Também vamos precisar receber do usuário a quantidade de iterações que ele deseja, então precisamos de uma variável inteira N .

Mas aí tem um problema, se você ainda não sabe quantos termos vai ter a sequência de Fibonacci, então como você vai saber quantas variáveis vai precisar? Isso tem solução, acompanha comigo.

Para calcular um termo da sequencia você só precisa saber os dois termos anteriores. Então o que vamos fazer é, vamos calcular o termo a i da sequência, e imprimir o valor de a i na mesma hora. E antes de terminar a iteração a gente vai modificar o valor contido em a i - 1   e a i - 2 , para preparar para a próxima iteração:

Vamos por a mão na massa. Pra começar vamos declarar as variáveis que vamos precisar.

Inicializamos i = 0 pois essa é a variável de iteração, e o primeiro termo da sequência ocorre quando i = 0 . E as variáveis a _ n _ 2 = 1 e a _ n _ 1 = 1 são iniciadas desta forma pois representam os primeiros termos da sequência Fibonacci. E a variável a _ n será usada para calcular cada termo novo da sequência.

Passo 2

No passo seguinte, vamos usar o c o u t para pedir um número pro usuário, e com c i n vamos armazenar o valor na variável N

Passo 3

Show! Agora vamos pra parte massa da questão.

Primeiro de tudo, vamos iniciar o nosso loop. Ele vai durar enquanto a variável de iteração for menor que a quantidade de termos

A primeira coisa interessante pra notar é que no começo a nossa sequencia tem valores fixos. Quero dizer que, os dois primeiros termos da sequencia sempre são iguais a 1. Podemos usar uma estrutura i f - e l s e para resolver isso:

  • SE i = 0 OU i = 1 ENTÃO imprima 1.
  • CASO CONTRÁRIO: calcule e imprima o próximo termo da sequencia

A primeira parte da condição fica assim. Note que devemos colocar um espaço em branco após o número. Isso vai evitar que o número seguinte fique colado no anterior.

Agora vamos considerar o caso em que precisaremos calcular a sequência. Abrimos dentro do comando e l s e adicionamos a expressão que calcula a sequência: a n = a n - 1 + a n - 2

Em seguida a gente vai utilizar o comando c o u t para imprimir o conteúdo recém calculado.

E depois temos que atualizar as variáveis da sequência. Para calcular o próximo termo da sequência, o valor atual de a _ n _ 1 passa para a variável a _ n _ 2 , e o valor contido em a _ n passa para a variável a _ n _ 1 . Isso é necessário para preparar os as variáveis para a próxima iteração do laço!

E antes de concluir o loop a gente não pode esquecer de atualizar a variável de iteração i :

E prontinho! Finalizamos mais uma questão.

Resposta