// 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)
}
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:
- Ler a opção do usuário (
). - Se
, ler dois números ( , ), calcular a soma e mostrar o resultado. - Se
, ler dois números ( , ), calcular a subtração e mostrar o resultado. - Se
, 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:
. - É 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
inteiroindica números inteiros. Aqui cada variável guarda um valor numérico inteiro. Exemplos:declara duas variáveis inteiras chamadas e . - Entrada e saída:
leia(x)lê do teclado um valor e guarda em. escreva(...)mostra texto/valores na tela. - Estrutura de repetição do-while: em portugol fica
faca { ... } enquanto (condição). O bloco dentro defacaé executado pelo menos uma vez e, ao final, a condição é verificada; se verdadeira, repete.- Exemplo:
- Exemplo:
- 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 osenao. - 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):
- Fechamento de chaves: o código abriu
programa {efuncao inicio() {, mas no trecho final parece faltar ao menos uma}para fechar o blocoprograma. Isso causa erro de sintaxe pois o compilador/interprete espera a chave de fechamento final. - Possível ambiguidade/estética nas condições
senaosem chaves: em algumas linguagens ou estilos, não usarfimse/}ouentao/fimsepode levar a confusão se alguém adicionar linhas depois. É melhor sempre delimitar blocos com chaves para clareza. - Texto do menu e acentuação:
SUBTRACÃOcontém acento incorreto (deve serSUBTRAÇÃO) — não é um erro de execução mas melhora a apresentação. - 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 aosenaofinal e que só será executada quando a opção não for 1, 2 nem 3. - 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 {efuncao inicio() {no começo; ao final adicionei a}que faltava para fechar oprograma. - Reescrevi o bloco do
faca/enquantocom indentação correta e com chaves consistentes. - Em vez de misturar
}senao sena mesma linha (que pode confundir), escrevi cadasenao seem sua própria linha com chaves de abertura e fechamento explícitas. - Coloquei
escreva("Opção Inválida!\n")dentro dosenaofinal, 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
3o programa escreve “FIM DO PROGRAMA!” e, como a condição doenquantoé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 é: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 dofaca, caso contrário o laço teria uma condição checada comopindefinido.
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)
}
}
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)
}
}