Certas linguagens não possuem o comando de repetição repeti...
repita S até que C
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!!!!!!
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.