SóProvas


ID
449911
Banca
FGV
Órgão
MEC
Ano
2009
Provas
Disciplina
Algoritmos e Estrutura de Dados
Assuntos

Observe o trecho de código abaixo.
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:

Alternativas
Comentários
  • A primeira vez que o algoritmo chega ao loop repetir, é impresso "MEC" e x recebe o valor de "não x" que é TRUE (! FALSE = TRUE).
    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#:

    bool X = false;
    string Y = "MEC";
    do
    {
          System.Console.Out.Write(Y);
           X = !X;
    } while (!X);

    Vai ver que Y só será impresso uma vez.
     
  • repetir
      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", na primeira interação o valor de X é modificado para "Verdadeiro", porém o que deve ser verdadeiro para sair é "(NÃO X)". Dessa forma será realizada uma segunda interação, e ao fim do laço, agora com o valor de X igual a "Falso" o laço é finalizado.
  • 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