Certas linguagens não possuem o comando de repetição repeti...
repita S até que C
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: Alternativa D
Vamos entender a questão e discutir cada uma das alternativas. A questão trata de simular o comportamento de um comando repeat-until utilizando um laço while. Primeiro, vamos revisar como cada um desses comandos funcionam:
O comando repeat-until executa um bloco de código repetidamente até que uma condição específica seja verdadeira. A estrutura básica é:
repita
S
até que C
Isso significa que o bloco de código S será executado pelo menos uma vez, e continuará executando até que a condição C torne-se verdadeira.
Por outro lado, o comando while continua a executar um bloco de código enquanto uma condição específica for verdadeira. A estrutura básica é:
enquanto que (C)
S
fim-enquanto
Agora, vamos analisar como podemos simular repeat-until utilizando while:
Para transformar um repeat-until em um while, precisamos garantir que o bloco S seja executado pelo menos uma vez antes de verificar a condição. Isso pode ser feito da seguinte maneira:
C:=falso
enquanto que (não C)
S
fim-enquanto
Isso garante que o bloco S será executado pelo menos uma vez, e continuará executando enquanto a condição C for falsa.
Agora, vamos justificar a alternativa correta e analisar as alternativas incorretas:
Alternativa D é a correta porque ela inicializa a condição C como falsa e usa enquanto que (não C), garantindo que o bloco S seja executado pelo menos uma vez e continue executando enquanto C for falsa. Isso simula adequadamente o comportamento de repeat-until.
Alternativas incorretas:
A - Inicializa C como verdadeiro e verifica enquanto C for verdadeiro. Isso não simula corretamente o repeat-until porque não garante que S seja executado pelo menos uma vez.
B - Inicializa C como verdadeiro e verifica enquanto não C. Novamente, isso não garante que S seja executado pelo menos uma vez.
C - Inicializa C como falso e verifica enquanto C for verdadeiro. Isso resulta em um laço que pode nunca ser executado.
E - Inicializa C como falso e usa enquanto que (não C), mas inclui uma reatribuição de C no final do laço, o que pode levar a resultados inesperados e não simula corretamente o comportamento desejado.
Portanto, a alternativa D é a única que simula corretamente o comportamento do comando repeat-until utilizando o comando while.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Não entendi, alguém consegue me explicar? (Eu marquei a A)
Eu fico entre duas alternativas: A e D.
Começo com as alternativas (aparentemente) incorretas:
B) se a expressão booleana C começa com valor verdadeiro, a negação dela (não C) torna falsa a condição avaliada (resultado). Portanto, o bloco de instruções da repetição não é executado.
C) a expressão booleana C começa e permanece com valor falso. Portanto, o bloco de instruções da repetição não é executado.
E) a expressão booleana C começa com valor falso, mas a negação dela (não C) torna verdadeira a condição avaliada. Portanto, o bloco de instruções da repetição é executado ao menos um vez. Depois da "sequência arbitrária de valores" S, a expressão booleana C tem explicitamente seu valor invertido, neste caso para verdadeiro. Porém, na próxima iteração da repetição, a negação da expressão booleana C é reavaliada e o resultado é valor falso. Portanto esse bloco de repetição tende a ser executado apenas uma vez.
As alternativas A e D executam a repetição (continuamente, enquanto a expressão booleana C for avaliada como verdadeira). A diferença está no valor inicial da expressão booleana C. Enquanto uma recebe um valor verdadeiro e assim é avaliada, a outra recebe uma valor falso, tem-no negado (resultando em valor verdadeiro) e assim avaliado.
Tenho apenas um PALPITE porque a alternativa tida como correta é a D: a condição da expressão booleana C no pseudocódigo de exemplo (repetir-até-que) começa como falso para que o bloco de instruções da repetição seja executado (1 ou n vezes) até que expressão booleana C seja avaliada como verdadeira.
Ficarei muito grato se alguém puder contribuir com alguma outra observação ou solução.
Força Guerreiro!!!!!!
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo