Observe o trecho de código abaixo. algoritmo ALG; variáve...
algoritmo ALG;
variáveis
X: lógico;
Y: string;
início
Y:=´MEC´;X:=FALSO;
repetir
imprimir(Y);
X:=NÃO X;
até que (NÃO X);
fim.
Após a execução, a quantidade de vezes que a variável Y será impressa é igual a:
Como a instrução de repetição do loop é até que (Não X) o loop repete (até que (não X) equivale há até que (x == TRUE), ou seja para quando X for TRUE).
A segunda vez que o algoritmo entra no loop é impresso a segunda vez "MEC" e X recebe o valor TRUE.
Finalmente o algortimo termina. Não entendi Bernardo. Se a primeira vez que X passa no loop ele recebe TRUE, então deveria já sair do Loop não? Já que x:Não X => x==TRUE. Ou seja Y seria impresso somente uma vez. Estou certo? É isso mesmo Diguinho. Você deduziu corretamente parte da questão. A primeira vez que o loop é executado X assume valor TRUE. O problema é que a condicional de Parada é (NÃO X) ou seja, para que esta expressão seja validade (=TRUE), X deve ser FALSE. Por isso o Loop é executado novamente, X passa a ser FALSE e quando chega na condição de parada, (NÃO X) -> (NÃO FALSE) -> TRUE! Pessoal o Y SÓ VAI SER IMPRESSO UMA VEZ, o próprio X está sendo utilizado como teste lógico e ele está sendo alterado dentro da estrutura de repetição:
Ao entrar na estrutura de repetição X = NÃO X, ou seja X = TRUE o While vai ser NÃO X, ou seja enquanto (NÃO X = FALSE)
repetir
imprimir("MEC")
X = TRUE
até que (FALSE)
Quem quiser testar em C#:
do
Vai ver que Y só será impresso uma vez.
imprimir(Y);
X:=NÃO X;
até que (NÃO X);
O Laço é sempre executado ao menos uma vez e é finalizado apenas quando a condição "(NÃO X)" for verdadeira.
Nessa questão, X começa como "Falso"
Acho que o problema desta questão é a falta de padrão do portugol(Português estruturado). Assim fica mais fácil de entender.
algoritmo "ALG"
var
x: logico
y: caractere
inicio
y<-"MEC"
x<-falso
repita
escreva(y)
x<-nao X
ate (nao X)
fimalgoritmo