// Calculadora
programa {
funcao inicio() {
inteiro op, n1, n2, result
faca{
escreva("- - - CALCULADORA - - - “)
escreva(”\n1 - SOMA\n2 - SUBTRACÃO\n3 - SAIR\nSua opção -> “)
leia(op)
se(op == 1){
escreva(”\nDigite um número: ")
leia(n1)
escreva("Digite um número: ")
leia(n2)
result = n1+n2
escreva("A soma é: ", result, “\n\n”)
}senao se (op==2){
escreva("Digite um número: ")
leia(n1)
escreva("Digite um número: ")
leia(n2)
result = n1-n2
escreva("A subtração é: ", result, “\n\n”)
}senao se(op == 3){
escreva(“FIM DO PROGRAMA!\n”)
}senao
escreva(“Opção Inválida!”)
} enquanto (op != 3)
}

Passo 1

Você me deu um programa em estilo portugol (em português) que pretende ser uma calculadora de terminal com um menu repetido. O que o enunciado (o código) pede / pretende fazer é:
  • Mostrar um menu com as opções: 1 - \text{SOMA},\quad 2 - \text{SUBTRAÇÃO},\quad 3 - \text{SAIR}ÇÃ
  • Ler a opção do usuário ( op).
  • Se op = 1, ler dois números ( n1, n2), calcular a soma e mostrar o resultado.
  • Se op = 2, ler dois números ( n1, n2), calcular a subtração e mostrar o resultado.
  • Se op = 3, mostrar mensagem de fim e encerrar o programa.
  • Se outra opção, mostrar “Opção Inválida!”.
  • O menu deve repetir enquanto o usuário não escolher a opção de sair.
Informações relevantes dadas no código:
  • Há declaração de variáveis inteiras: op, n1, n2, result.
  • É usado um laço do-while (sintaxe com faca { ... } enquanto (op != 3)).
  • São usadas estruturas condicionais em cadeia: se (...) { ... } senao se (...) { ... } senao.
  • O código já tem os blocos de soma e subtração e a mensagem de fim; porém há pequenos problemas de forma/estrutura que afetam a confiabilidade do programa (vou apontar e corrigir em seguida).

Passo 2

Entendendo as construções que o programa usa (aula rápida e prática):
  • Variáveis: declarar com inteiro indica números inteiros. Aqui cada variável guarda um valor numérico inteiro. Exemplos: \text{inteiro } a, b declara duas variáveis inteiras chamadas a e b.
  • Entrada e saída: leia(x) lê do teclado um valor e guarda em x. escreva(...) mostra texto/valores na tela.
  • Estrutura de repetição do-while: em portugol fica faca { ... } enquanto (condição). O bloco dentro de faca é executado pelo menos uma vez e, ao final, a condição é verificada; se verdadeira, repete.
    • Exemplo: \text{faca \{ escreva("oi"); \} enquanto (condicao);}
  • Estrutura condicional encadeada: se (cond) { ... } senao se (cond2) { ... } senao { ... }. Funciona em cascata: a primeira condição verdadeira executa seu bloco e ignora o resto; se nenhuma é verdadeira, executa o senao.
  • Boas práticas de programação (importante para prova):
    • Manter blocos bem fechados (abrir e fechar chaves corretamente) para não perder controle do fluxo.
    • Indentar para facilitar leitura.
    • Tratar mensagens de erro/entrada inválida explicitamente dentro do senao.
    • Fechar todas as estruturas (função, programa) com as chaves correspondentes.

Passo 3

Identificando os problemas no código original (explicando por que atrapalham):
  1. Fechamento de chaves: o código abriu programa { e funcao inicio() {, mas no trecho final parece faltar ao menos uma } para fechar o bloco programa. Isso causa erro de sintaxe pois o compilador/interprete espera a chave de fechamento final.
  2. Possível ambiguidade/estética nas condições senao sem chaves: em algumas linguagens ou estilos, não usar fimse/} ou entao/fimse pode levar a confusão se alguém adicionar linhas depois. É melhor sempre delimitar blocos com chaves para clareza.
  3. Texto do menu e acentuação: SUBTRACÃO contém acento incorreto (deve ser SUBTRAÇÃO) — não é um erro de execução mas melhora a apresentação.
  4. Mensagem de “Opção Inválida!” no final: no código isso está escrito logo após o senao, mas, pela formatação, pode causar confusão de leitura; devemos garantir que pertence ao senao final e que só será executada quando a opção não for 1, 2 nem 3.
  5. Pequena melhoria: oferecer “Digite outro número” no segundo prompt para deixar claro que é o segundo valor.
Nenhum desses problemas é matematicamente complexo; são problemas de sintaxe/estrutura/clareza que quebram ou dificultam o entendimento do programa durante a prova.

Passo 4

Como corrigir — estratégia e escolhas de método (por que escolhi essa forma):
  • Vou manter a ideia original (usar faca ... enquanto) porque é apropriada para menus que repetem até o usuário pedir para sair.
  • Mantive as variáveis como inteiro (compatível com enunciado).
  • Vou usar chaves explicitamente para todos os blocos condicionais, para garantir que não haja dúvidas sobre o escopo de cada senao.
  • Vou adicionar a chave faltante para fechar programa.
  • Pequenas melhorias nas mensagens e na formatação (acentuação correta, prompts claros).
  • Essa correção é a mais simples e direta, usa conceitos básicos (entrada/saída, laço, condicional) que costumam estar na prova e que você precisa saber bem.

Passo 5

Correções linha a linha (explicando o que mudei e por quê):
  • Mantive programa { e funcao inicio() { no começo; ao final adicionei a } que faltava para fechar o programa.
  • Reescrevi o bloco do faca/enquanto com indentação correta e com chaves consistentes.
  • Em vez de misturar }senao se na mesma linha (que pode confundir), escrevi cada senao se em sua própria linha com chaves de abertura e fechamento explícitas.
  • Coloquei escreva("Opção Inválida!\n") dentro do senao final, com quebras de linha, para que seja executado somente quando necessário.
  • Mantive os nomes das variáveis e a lógica de cálculo (soma/subtração) idênticos, só ajustei prompts e formatação.
  • Verifiquei que ao escolher 3 o programa escreve “FIM DO PROGRAMA!” e, como a condição do enquanto é op != 3, o laço termina logo em seguida.

Passo 6

Exemplo extra curto para fixar a ideia (mini-aula prática):
  • Se você tivesse só duas opções e quisesse usar faca ... enquanto, o padrão é: \text{faca \{ ... ler opção ... if ... \} enquanto (op != valorDeSaida);}çãOu seja, o laço garante que o menu apareça pelo menos uma vez e que termine quando a condição de saída for satisfeita.
  • Lembre-se: ler a opção (com leia(op)) deve ocorrer dentro do corpo do faca, caso contrário o laço teria uma condição checada com op indefinido.

Passo 7

Agora que verifiquei e corrigi todos os pontos importantes, abaixo está o programa corrigido e pronto para execução (mantendo o estilo original, com chaves explícitas, prompts claros e fechamento correto das estruturas).

Resposta

programa {
funcao inicio() {
inteiro op, n1, n2, result
faca {
escreva("- - - CALCULADORA - - - “)
escreva(”\n1 - SOMA\n2 - SUBTRAÇÃO\n3 - SAIR\nSua opção -> “)
leia(op)
se (op == 1) {
escreva(”\nDigite um número: ")
leia(n1)
escreva("Digite outro número: ")
leia(n2)
result = n1 + n2
escreva("A soma é: ", result, “\n\n”)
} senao se (op == 2) {
escreva("Digite um número: ")
leia(n1)
escreva("Digite outro número: ")
leia(n2)
result = n1 - n2
escreva("A subtração é: ", result, “\n\n”)
} senao se (op == 3) {
escreva(“FIM DO PROGRAMA!\n”)
} senao {
escreva(“Opção Inválida!\n”)
}
} enquanto (op != 3)
}
}

Exercícios relacionados