A estrutura ENQUANTO é muito útil quando precisamos fazer um teste e não sabemos quantas vezes exatamente esse teste precisa ser feito. Contudo, você deve ter percebido que nós repetimos a leitura da nota em nosso exemplo anterior. Lemos a nota uma vez para então testar se ela era válida ou não. Caso fosse uma nota inválida, então fizemos a leitura da nota novamente dentro da repetição, como a seguir:
escreva("\nDigite uma nota: ")
leia(nota)
enquanto(nota < 0 ou nota > 10){
escreva("Nota inválida!\nDigite uma nota entre 0 e 10: ")
leia(nota)
}
Perceba que nós repetimos exatamente a mesma leitura feita antes da estrutura ENQUANTO. Não há nenhum problema e está correto, porém, há uma forma mais eficiente de fazer isso.
A estrutura ENQUANTO inicia testando para só depois realizar uma ação. Na lógica do nosso exemplo é exatamente o contrário, perceba que primeiro queremos tomar uma ação (pedir e ler uma nota) para só depois testar se ela é válida ou não.
Nestes casos podemos lançar mão da estrutura de repetição FAÇA ENQUANTO e nosso exemplo fica assim:
faca{
escreva("Digite uma nota: ")
leia(nota)
enquanto(nota < 0 ou nota > 10)
Dessa forma, primeiro será executado o que está entre o par de chaves, pedindo e lendo uma nota, para só depois testar se é válida ou não. Se o teste for verdadeiro, ou seja, se a nota for inválida, será feito novamente o que está dentro do par de chaves, até que seja digitada uma nota válida, quebrando assim a repetição.
programa{
// calcular a média de 20 notas válidas
funcao inicio(){
real nota, media, somaNotas = 0.0
inteiro contador
// primeira versão ***************************************
para(contador = 1; contador <= 20; contador += 1){
escreva("\nDigite uma nota: ")
leia(nota)
enquanto(nota < 0 ou nota > 10){
escreva("Nota inválida!\nDigite uma nota: ")
leia(nota)
}
somaNotas = somaNotas + nota
}
media = somaNotas / 5
escreva("Média: ", media)
// segunda versão ***************************************
para(contador = 1; contador <= 20; contador += 1){
faca{
escreva("\nDigite a nota ", contador, ": ")
leia(nota)
}enquanto(nota < 0 ou nota > 10)
somaNotas = somaNotas + nota
}
media = somaNotas / 5
escreva("Média: ", media)
}
}
