Defina um conjunto de instruções para fazer o Computador Simplificado (CS) ler um conjunto indeterminado de valores positivos em cartões, obter e imprimir o menor valor lido. O último cartão, que não deverá entrar nos cálculos tem o valor igual a -1. Assuma que os valores são sempre positivos.
Passo 1
Beleza, o problema é o seguinte: temos um “Computador Simplificado” (CS) que vai ler cartões com valores sempre positivos até encontrar um cartão com valor –1 (que é só pra dizer “acabou”, não entra no cálculo). A missão é imprimir o menor valor lido.
Conteúdo / teoria envolvida:
• Comandos de leitura (LEIT) e escrita (ESCR) no CS
• Uso de memória pra guardar variáveis (“menor” e um temporário)
• Comparações com salto condicional (SUB + JN/JPOS)
• Estrutura de repetição (loop) até a sentinela (–1)
Conteúdo / teoria envolvida:
• Comandos de leitura (LEIT) e escrita (ESCR) no CS
• Uso de memória pra guardar variáveis (“menor” e um temporário)
• Comparações com salto condicional (SUB + JN/JPOS)
• Estrutura de repetição (loop) até a sentinela (–1)
Passo 2
Vamos primeiro desenhar o algoritmo em alto nível:
- Ler o primeiro cartão e guardar esse valor em “menor”.
- Repetir:
a) Ler o próximo cartão.
b) Se for –1, sai do loop.
c) Senão, comparar com “menor”:
– Se for menor, atualiza “menor” com esse novo valor. - Depois que sair do loop, imprimir “menor” e parar.
Cada passo vira instrução do CS: leitura (LEIT), comparação (SUB), salto (JPOS/JN), gravação em memória (ARMM), etc.
Passo 3
Aqui está o código completo em linguagem do CS, com comentários pra facilitar:
// 1) Leitura do primeiro valor e inicialização de “menor”
INICIO: LEIT // lê cartão → AC
JN FIM // se AC < 0 (sentinela = -1), vai pro fim
ARMM MENOR // menor ← AC
LOOP: LEIT // lê próximo cartão → AC
JN FIM // se AC < 0, acabou o loop
ARMM TMP // TMP ← AC (guarda temporariamente)
CARG MENOR // AC ← menor
SUB TMP // AC ← menor – TMP
JPOS ATUALIZA // se AC > 0, então TMP < menor → atualiza
JMP LOOP // senão, volta pro loop
ATUALIZA: CARG TMP // AC ← TMP
ARMM MENOR // menor ← AC
JMP LOOP // continua o loop
FIM: CARG MENOR // AC ← menor
ESCR // imprime AC
STOP // para o programa
// Área de dados
MENOR: 0 // espaço pra guardar o menor valor
TMP: 0 // espaço temporário pra comparação
Resposta
O conjunto de instruções acima faz o CS ler valores até –1, comparar cada novo valor com o mínimo atual e, no fim, imprimir o menor valor lido.