Laços while no Octave
Nesta lição, temos como objetivo explorar a construção de um laço while no Octave. Vamos desvendar juntos?
Então, o que é de fato um laço while? Trata-se de uma estrutura de controle de fluxo que possibilita a execução repetida de um conjunto de instruções (ou seja, através de iterações) até que uma condição lógica específica seja satisfeita.
Antes de partir para a execução de um bloco de instruções, o laço while avalia uma condição lógica inicial.
Esse ciclo persiste até que a condição inicial deixe de ser atendida, ocasião na qual o laço é interrompido.
while condição
bloco de instruções
endwhile
Caso a condição inicial não seja satisfeita desde o começo, o laço while sequer concluirá uma única iteração.
Esse tipo de laço é denominado laço indefinido, pois pode ser que não saibamos quantas iterações serão necessárias de antemão.
Diferentemente de outras linguagens de programação, como Java ou C, você não precisa encapsular o código entre chaves em alguns idiomas. Contudo, é importante destacar que a indentação, tal como em Python, não é obrigatória. Para aprimorar a legibilidade do código, sugiro posicionar o bloco de instruções um pouco mais à direita em relação à instrução while.
A título de exemplo, vamos considerar um caso prático onde o laço é responsável por calcular o quadrado dos números de 1 a 9.
x=1;
while x<10
disp(x**2);
x=x+1;
endwhile
O resultado que obtemos é:
1
4
9
16
25
36
49
64
81
Nesse cenário, o laço while realiza um ciclo completo, pois sabemos quantas iterações serão necessárias de antemão.
Contudo, nem sempre é assim, e o laço while também pode ser responsável por um número indefinido de iterações.
O risco de um laço infinito
Quando programamos um laço, é essencial estarmos atentos à possibilidade de ocorrer um laço infinito.
Um laço infinito é caracterizado quando o número de iterações é incerto, e o laço continua sendo executado indefinidamente. Essa situação pode levar o programa a se tornar irresponsivo e ocasionar travamentos no sistema.
Para contornar essa situação, sempre recomendo a inclusão de uma condição de saída forçada após um número máximo de iterações.
Por exemplo, consideremos o script a seguir, que gera um número aleatório entre 1 e 100 e solicita que o usuário tente adivinhá-lo.
number=randi(100);
x=0;
while x!=number
x = input("Que número eu tirei? ")
if (x!=number)
disp("Errado")
else
disp("Acertou!")
break;
endif
endwhile
À primeira vista, parece um laço simples que é interrompido quando o usuário acerta o número.
No entanto, caso o usuário não consiga adivinhar o número, o laço seguirá em execução indefinidamente, resultando em um laço infinito.
Para prevenir tal ocorrência, é imprescindível estabelecermos um limite para o número de iterações do laço.
Isso pode ser feito através da adição de uma variável de contagem, t, que é incrementada a cada iteração.
Quando t atinge o limite de iterações, o laço é encerrado mesmo que o usuário não tenha acertado o número.
number=randi(100);
x=0;
t=0;
while x!=number
x = input("Que número eu tirei? ")
if (x!=number)
disp("Errado")
else
disp("Acertou!")
break;
endif
t=t+1
if (t==10)
disp("Você fez tentativas demais.")
break;
endif
endwhile
Ao incluir essa condição, asseguramos que o laço seja finalizado em um número razoável de iterações, evitando que o programa se torne irresponsivo e prevenindo potenciais travamentos do sistema.