Questão de Arquitetura de Software — Software — FUNDATEC 2023
Arquitetura de Software›Software
Código
qq890417
Banca
FUNDATEC
Órgão
CAU-RS
Ano
2023
Nível
Médio
Cargo
Técnico em Microinformática
Analise o algoritmo Teste apresentado a seguir:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Algoritmo“Teste”
Var
Res, X, Y: real
Inicio
procedimentoENTRADA()
Inicio
escreval(“”)
escreva(“X: “)
leia(X)
escreva(“Y: “)
leia(Y)
fimprocedimento
procedimento SAIDA()
inicio
escreval(“”)
se X > Y então
RES <- X – Y
senão
RES <- Y – X
fimse
escreval (“RES: “,RES)
escreval (“”)
fimprocedimento
repita
ENTRADA()
SAIDA()
Até X=Y
Fimalgoritmo
Ao executar esse algoritmo, o que acontece quando se lê o mesmo valor 10 para as variáveis X e Y?
AÉ exibido o valor 0 (zero) como resultado da operação X – Y e o algoritmo termina.
BÉ exibido o valor 0 (zero) como resultado da operação X – Y e o procedimento ENTRADA() é chamado novamente.
CNão é exibido valor algum porque X não é nem maior e nem menor do que Y e o algoritmo termina.
DNão é exibido valor algum porque X não é nem maior e nem menor do que Y e o procedimento ENTRADA() é chamado novamente.
EO algoritmo não pode ser executado porque X=Y não satisfaz a condição do comando de desvio condicional.
Revelar gabarito e comentário▾
GabaritoA — É exibido o valor 0 (zero) como resultado da operação X – Y e o algoritmo termina.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Análise do algoritmo Teste
Gabarito: letra A. Quando X e Y recebem o mesmo valor (10), o procedimento SAIDA() é executado, e como X não é maior que Y, o comando senão é acionado, calculando RES <- Y - X, ou seja, 10 - 10 = 0. O valor 0 é exibido e, em seguida, a condição Até X=Y é avaliada como verdadeira, encerrando o laço de repetição e, portanto, o algoritmo termina.
O algoritmo apresentado é um exemplo clássico de estrutura de repetição com teste no final (repita...até), que garante que o bloco de comandos seja executado pelo menos uma vez antes de verificar a condição de parada. Dentro desse laço, dois procedimentos são chamados: ENTRADA(), que lê os valores de X e Y, e SAIDA(), que calcula e exibe o resultado.
O procedimento SAIDA() contém um desvio condicional simples (se...senão). A lógica é: se X for maior que Y, calcula X - Y; caso contrário (ou seja, se X for menor OU igual a Y), calcula Y - X. Essa estrutura é comumente usada para garantir que o resultado seja sempre um valor não negativo, representando a diferença absoluta entre os dois números.
A pegadinha da questão está em interpretar corretamente o fluxo de execução quando os valores são iguais. Muitos candidatos podem pensar que, como X não é maior que Y, o comando senão não seria executado ou que nenhum valor seria exibido. No entanto, a condição se X > Y é falsa, então o bloco senão é executado, realizando a subtração Y - X, que resulta em 0. Além disso, a condição de parada Até X=Y é imediatamente satisfeita, pois X e Y são iguais, encerrando o laço.
Alternativa A — ✅ Correta ⟵ GABARITO
Esta alternativa descreve exatamente o que acontece. Com X = 10 e Y = 10, a condição X > Y é falsa, então o comando senão é executado, calculando RES <- Y - X, que resulta em 10 - 10 = 0. O valor 0 é exibido. Em seguida, a condição Até X=Y é avaliada como verdadeira (10 = 10), o que encerra o laço repita...até e, consequentemente, o algoritmo termina. A alternativa está correta em todos os aspectos.
Alternativa B — ❌ Incorreta
O erro desta alternativa está na segunda parte: "o procedimento ENTRADA() é chamado novamente". Após exibir o valor 0, a condição Até X=Y é verdadeira, o que faz o laço terminar imediatamente. O procedimento ENTRADA() não é chamado novamente, pois a repetição é interrompida. A primeira parte (exibir 0) está correta, mas a consequência está errada.
Alternativa C — ❌ Incorreta
Esta alternativa afirma que "não é exibido valor algum" porque X não é nem maior nem menor que Y. Isso está incorreto. No comando se...senão, quando a condição X > Y é falsa, o bloco senão é executado. Não existe uma terceira possibilidade de "não fazer nada" quando os valores são iguais. O comando senão cobre todos os casos em que X não é maior que Y, incluindo quando são iguais. Portanto, o valor 0 é exibido, e não "nenhum valor".
Alternativa D — ❌ Incorreta
Esta alternativa combina dois erros: afirma que não é exibido valor algum (incorreto, como explicado na alternativa C) e que o procedimento ENTRADA() é chamado novamente (incorreto, pois a condição Até X=Y é verdadeira e o laço termina). Ambos os pontos estão errados, tornando a alternativa completamente falsa.
Alternativa E — ❌ Incorreta
Esta alternativa afirma que o algoritmo não pode ser executado porque X=Y não satisfaz a condição do comando de desvio condicional. Isso é um equívoco. O comando se X > Y é uma condição válida, e quando ela é falsa, o bloco senão é executado. Não há nenhum impedimento para a execução do algoritmo quando X = Y. O algoritmo é perfeitamente executável e produzirá o resultado 0. A condição Até X=Y é justamente a condição de parada do laço, que é satisfeita, encerrando o algoritmo normalmente.
NÃO CAIA NESSA!
A banca explora a confusão entre a condição do se e a condição do repita. O candidato pode pensar que, como X não é maior que Y, o senão não seria executado ou que o algoritmo entraria em loop. Na verdade, o senão cobre o caso de igualdade, e a condição Até X=Y é justamente a que encerra o laço. Fique atento: em um se...senão, a condição se define apenas o primeiro bloco; todo o resto (incluindo a igualdade) vai para o senão.
PEGA ESSA DICA!
Para resolver questões de interpretação de algoritmos, trace a execução passo a passo com os valores fornecidos. Anote o valor de cada variável em cada linha e verifique as condições. No caso de repita...até, lembre-se de que o bloco é executado pelo menos uma vez, e a condição é verificada ao final. Essa técnica evita erros de interpretação e garante a resposta correta.