Ir ao conteúdo
  • Cadastre-se

VisualG Exercício Sequência Fibonacci, não consigo fazer a soma com o anterior


Posts recomendados

Estou fazendo um exercício no qual preciso dar a sequencia Fibonacci, eu já entendi a sequencia da mesma, mas eu não consigo pegar o numero anterior resultado para fazer a soma.

 

var
n: inteiro //n1
cont: inteiro //contador
s: inteiro //n2
f: inteiro //sequencia

inicio
// Seção de Comandos
cont <- 0
f <- 0
s <- 1

REPITA

f <- f + s

s <-f

escreva(f)

cont <- cont+1

ATE cont>5

fimalgoritmo

Se alguém souber como posso fazer agradeço desde já.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Gabriel Pancaldi     esse algoritmo é bem difícil de fazer mesmo,  use variáveis mais sugestivas para conseguir entender melhor, por exemplo pode ser assim :

novoTermo,cont,Termo1,Termo2 : inteiro

o primeiro e o segundo termo você já sabe que são zero e um ,  então escreva eles na tela antes do loop e depois dentro do loop faça a soma do Termo1 com o Termo2 e coloque no novoTermo e escreva na tela e em seguida pegue o Termo2 e coloque no Termo1 e pegue o novoTermo e coloque no Termo2 depois soma o valor de cont. 

   então seu código ficaria assim :

Algoritmo "fibonacci com repita"
var
  novoTermo,cont,Termo1,Termo2 : inteiro //n1
inicio
  cont <- 3
  Termo1 <- 0
  Termo2 <- 1
  escreval(" 1º Termo = ",Termo1)
  escreval(" 2º Termo = ",Termo2)
  REPITA
      .
      .
     aqui você coloca as variáveis para fazer a soma
     e trocar o valor das variáveis, Termo1 = Termo2
     e as outras .
      .
      .
    cont <- cont+1
  ATE cont > 10
fimalgoritmo

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

@Simon Viegas, sei que já tem um bom tempo que vocês falaram sobre isso, mas estou iniciando agora algoritmos. Poderia me explicar porque você colocou Termo1 no Termo2 e Novotermo dentre do Termo2? A partir de novoTermo = Termo1 + Termo2 entendi tranquilo.

 

Meu algoritmo:

algoritmo "SEQUÊNCIAFIBONACCI"
var
   limite, Seq, Termo1, Termo2, TermoNovo: Inteiro
inicio
   Escreval("=======================================")
   Escreval("| SEQUÊNCIA FIBONACCI      |")
   Escreval("=======================================")
   Escreval("DIGITE A QUANTIDADE DE NÚMEROS QUE TERÃO NA SEQUÊNCIA:")
   Leia(limite)
   Termo1 <- 1
   Termo2 <- 1
   Escreva(Termo1,",")
   Escreva(Termo2,",")
   Enquanto limite >= Seq faca
      TermoNovo <- Termo1 + Termo2
      Escreva(TermoNovo,",")
      Termo1 <- Termo2
      Termo2 <- TermoNovo
      Seq <- Seq + 1
   FimEnquanto
fimalgoritmo

 

Ele tá funcionando, mas só queria entender essa parte que mencionei.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Miquéias Moreira, eu? :)

 

Teu código ficou muito bom!

 

Sugiro apenas verificar se realmente vai começar com 1 ou se deveria começar com 0.

 

Um outro ponto é que a quantidade informada não está batendo a quantidade mostrada, ou seja: se o usuário informar 4, não deveria exibir 4 números? (1, 1, 2, 3   ou   0, 1, 1, 2)

 

Está aparecendo mais.

 

image.png

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas Eu pedi para Escrever na Tela dois 1 e acabou não dando tão certo o que eu queria fazer, mas refiz aqui e ficou desse jeito que coloquei na imagem abaixo. Você pode me explica só o que você mencionou sobre colocar o Termo2 dentro do Termo1 e o TermoNovo dentro do Termo2? Essa parte eu me perdi um pouco.

image.thumb.png.f9bcb8296d99c8e3a019c0b5a3d89021.png

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Sobre:

3 horas atrás, Miquéias Moreira disse:

Você pode me explica só o que você mencionou sobre colocar o Termo2 dentro do Termo1 e o TermoNovo dentro do Termo2? Essa parte eu me perdi um pouco.

 

Seria sobre esta citação abaixo?

Em 12/09/2017 às 22:10, devair1010 disse:

[...] e em seguida pegue o Termo2 e coloque no Termo1 e pegue o novoTermo e coloque no Termo2 depois soma o valor de cont. 

 

No caso foi o @devair1010. Seria apenas um modo de falar...

 

"pegue o Termo2 e coloque no Termo1" = copie o valor da variável Termo2 para variável Termo1, ou seja: Termo1 vai ser igual ao Termo2. Idem para os outros 2... Termo2 vai ser igual ao TermoNovo. Foi o que você fez no teu código

 

 

@Miquéias Moreira, sempre poste também o texto do código. Desta forma dá para copiar e também ser indexado pelos robôs da internet.

 

Sobre o teu código, agora não está aparecendo os 2 primeiros termos... a quantidade está certa, mas os números da sequência não.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas, acabei esquecendo de postar aqui o meu código refeito. Refiz o meu algoritmo tem uns dias e ficou certinho agora.

algoritmo "FIBONACCI"
var
limite, Cont, Termo1, Termo2, TermoNovo: Inteiro
inicio
      Escreval("=======================================")
      Escreval("|       SEQUÊNCIA FIBONACCI            |")
      Escreval("=======================================")
      Termo1 <- 0
      Termo2 <- 1
      Escreval("DIGITE O LIMITE DA SEQUÊNCIA: ")
      Leia(limite)
      Para Cont <- 1 ate limite faca
           TermoNovo <- Termo1 + Termo2
           Termo2 <- Termo1
           Termo1 <- TermoNovo
           Escreva(TermoNovo)
      FimPara
fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Miquéias Moreira, sobre o algoritmo:

 

10 horas atrás, Miquéias Moreira disse:

      Para Cont <- 1 ate limite faca
           TermoNovo <- Termo1 + Termo2
           Termo2 <- Termo1
           Termo1 <- TermoNovo
           Escreva(TermoNovo)
      FimPara

 

Tirando a questão do Fibonacci começar com 0 ou não, precisaria rever essa lógica para calcular os próximos termos... Veja: O Termo 2 é POSTERIOR ao Termo 1, logo, não faz sentido o Termo 2 ser igual ao Termo 1. Seria o contrário...

 

O resultado pode até está saindo certo, mas fórmula está errada. Precisaria ajustar a fórmula e ajustar o código para dar a resposta correta.

 

adicionado 14 minutos depois

ADENDO:

Só para ficar mais claro... ao entrar no para/faca, o Termo Novo logo em seguida já é o 3ª número da sequência (considerando que o primeiro foi o 0 e o segundo foi o 1). Daí, você está imprimindo o 3ª termo na tela, e está exibindo ele como se fosse o primeiro. No final, vai gerar uma falsa lista.... tanto pela questão que considerou o 0 como sendo o primeiro, e exibiu como iniciando com 1. Tanto pela fórmula de gerar os próximos que está errada...

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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...