Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Contador vai a 102

Olá, fiquei um pouco "travado" nesse exercício tentando entender o motivo de meu contador ir até 102 e parar nesse número. Criei algumas hipóteses, mas lógica não funciona com base em hipóteses então gostaria de saber qual foi meu erro.

var x = 2;
    while(x <= 100){
    x = x + 2;
    mostra(x);
    }
3 respostas
solução!

Oi Leandro, tudo bem?

O problema que você mencionou ocorre por conta da ordem dos comandos colocados dentro da estrutura de repetição while, onde o incremento (x = x + 2), ocorre antes da função mostra(x).

Quando escrevemos um código, cada linha é lida pelo navegador uma a uma de cima para baixo, na sequência em que foi escrita. No caso da estrutura de repetição que você compartilhou, acrescentamos 2 unidades antes de mostrar o resultado para o novo valor de "x".

Dessa forma, quando chegamos ao valor x=100, o valor será mostrado na tela e comparado para saber se o resultado é menor ou igual a 100, como ele é igual, o laço de repetição será realizado novamente, o valor será acrescido de 2 e será instantaneamente computado na tela junto com os demais valores, fazendo com que o número 102 seja mostrado. Em uma nova verificação este valor será tido como maior que 100 e portanto o laço de repetição será interrompido e a mensagem "Fim" será mostrada ao final das linhas de números pares.

Por exemplo:

//quando o valor chega em 100:

while(98 <= 100){
    x = 98 + 2;
    mostra(100);
}

//quando o valor é igual a 100:

while(100 <= 100){
    x = 100 + 2;
    mostra(102);
}

while(102 <= 100) // valor maior que 100 o loop é interrompido

Para que a lógica correta seja aplicada, precisamos inverter a ordem fazendo com que o valor seja acrescido após ser mostrado na tela. Assim a escrita do código seria feita da seguinte maneira:

while(x <= 100){
    mostra(x);
    x = x + 2;
}

Com isso a leitura do exemplo anterior seria feita como mostrado abaixo:

//quando o valor chega em 100:

while(98 <= 100){
    mostra(98);
    x = 98 + 2;
}

//quando o valor é igual a 100:

while(100 <= 100){
    mostra(100);
    x = 100 + 2;
}

while(102 <= 100) // valor maior que 100 o loop é interrompido

Espero ter ajudado. Caso tenha outras dúvidas, estarei à disposição.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Olá, realmente, o mostra(), antes fez muita diferença. Que detalhe!!

Muito boa, a sua explicação Rodrigo!! Entrei por curiosidade e saí ganhando!!! :) Obrigado.

Bons estudos!!

Muito obrigado pela explicação Rodrigo.