Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Fibonacci - interação com o usuário

Bom, estou abrindo outro tópico por que surgiu outra dúvida... Eu fiz meu código do Fibonacci usando o loop for e usando interação com o usuário através de uma TextBox, onde o usuário determina o tamanho da sequência. Contudo no exercício, falava que deveríamos fazer até 100, então a sequência parava no número 89 e não chegava no 100, só que o meu código, quando o usuário determina a sequência, o programa reconhece como se fosse "Quantos números da sequência você vai querer?" Então ao digitar 100, aparece 100 número e o resultado fica bem grande... no outro tópico que eu abri, me disseram para trocar as variaveis de int para ulong, eu fiz isso, porém ainda continua dando errado. segue o código abaixo:

 public void btnCalcula_Click(object sender, EventArgs e)
        {
            try
            {
                string serie = "";
                ulong atual = 0;
                ulong anterior = 1;
                ulong proximo;
                ulong sequencia = ulong.Parse(txtFibonacci.Text);

                for (ulong i = 0; i <= sequencia; i++)
                {
                    serie += atual + " ";
                    proximo = atual + anterior;
                    anterior = atual;
                    atual = proximo;
                }

                MessageBox.Show(text: "A série de Fibonacci até " + txtFibonacci.Text + ": " + serie);
            }
            catch (FormatException)
            {
                MessageBox.Show("Digite um número!");
            }
    }
1 resposta
solução!

Olá novamente, Gabriel,

A sugestão da utilização da tipo ulong foi somente porque como o 100 estava representando o número de elementos da sequência, estava atingindo valores gigantescos. Agora que irá trabalhar realmente com o número máximo da lista julgo que pode voltar com o int ou uint (trabalhando apenas com números positivos, que o limite é 4294967295).

Voltando agora para o problema, acredito que em uma situação destas eu daria preferência a utilização do while. Resolvi utilizando o for de uma forma que ficou parecido com um while, na verdade.

string serie = "";
ulong anterior = 0;
ulong auxiliar;
ulong maximo = ulong.Parse(txtFibonacci.Text);

for (ulong proximo = 1; proximo <= maximo;)
    {
        serie += proximo + " ";
        auxiliar = proximo;
        proximo += anterior;
        anterior = auxiliar;
    }

Algumas observações:

Fiz a declaração da variável proximo no próprio for e como critério de parada comparei com a variável maximo. Detalhe que não coloquei o incremento de proximo dentro da declaração, fazendo a mesma internamente.

Guardo o valor de proximo em auxiliar apenas para depois repassar para anterior Lembrando também que proximo += anterior é similar a proximo = proximo + anterior.

Apesar de ter funcionado ainda sugiro a utilização de While

Espero ter ajudado!