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!