3ㅇ Implemente uma calculadora para números inteiros de até 8 bits, com as operações de multiplicação, adição, subtração e divisão. Deve inserir o primeiro operando, depois o segundo operando e após isso a operação desejada.
Passo 1
O enunciado pede para escrever um programa que funcione como uma calculadora de inteiros de até
bits, permitindo as operações de adição, subtração, multiplicação e divisão. Para isso vamos precisar:
– de um tipo que represente números de a
(
bits com sinal),
– ler dois operandos neste intervalo,
– ler um caractere que indique a operação,
– executar a operação tratando divisão por zero e verificar se o resultado cabe em bits.
– de um tipo que represente números de
– ler dois operandos neste intervalo,
– ler um caractere que indique a operação,
– executar a operação tratando divisão por zero e verificar se o resultado cabe em
Passo 2
Declaramos as variáveis:
–
–
Usamos também macros
–
\(int8_t\) a, b, res;
para os operandos e resultado (vem de <stdint.h>
),–
char op;
para armazenar o símbolo da operação.Usamos também macros
\(INT8_MIN\)
e \(INT8_MAX\)
para validar o intervalo de entrada.Passo 3
Fazemos a leitura do primeiro operando com
scanf("%hhd", &a);
e verificamosSe estiver fora, exibimos erro e encerramos. Repetimos o mesmo para
b
.Passo 4
Lemos o caractere da operação com
scanf(" %c", &op);
O espaço antes de
%c
descarta eventuais quebras de linha na entrada. Verificamos se op
é um de '\(+\)','-','*','/'
. Se não for, avisamos operação inválida e encerramos.Passo 5
Usamos um
– Em
– Em
– Em
– Em
Após o cálculo, podemos checar se o resultado ficou fora de . Se sim, indicamos estouro de
bits. Caso contrário, seguimos.
switch(op)
para executar cada operação:– Em
case '\(+\)': res \(=\) a \(+\) b; break;
– Em
case '-': res \(=\) a - b; break;
– Em
case '*': res \(=\) a * b; break;
– Em
case '/':
antes de dividir, checamos se b \(==0\)
; se for, imprimimos erro de divisão por zero e encerramos; senão res \(=\) a / b;
Após o cálculo, podemos checar se o resultado ficou fora de
Passo 6
Por fim, exibimos o resultado com
printf("Resultado: %hhd\n", res);
e retornamos
para indicar término correto.
Resposta
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
int main(void) {
int8_t a, b, res;
char op;
printf("Digite o primeiro operando (-\(128\) a \(127\)): ");
if (scanf("%hhd", &a) != 1 ||
a < INT8_MIN || a > INT8_MAX) {
printf("Erro: operando invalido\n");
return 1;
}
printf("Digite o segundo operando (-\(128\) a \(127\)): ");
if (scanf("%hhd", &b) != 1 ||
b < INT8_MIN || b > INT8_MAX) {
printf("Erro: operando invalido\n");
return 1;
}
printf("Digite a operacao (\(+\), -, *, /): ");
if (scanf(" %c", &op) != 1) {
printf("Erro ao ler operacao\n");
return 1;
}
switch (op) {
case '+':
res = a + b;
break;
case '-':
res = a - b;
break;
case '*':
res = a * b;
break;
case '/':
if (b == 0) {
printf("Erro: divisao por zero\n");
return 1;
}
res = a / b;
break;
default:
printf("Operacao invalida\n");
return 1;
}
/* Verificar overflow em \(8\) bits */
if (res < INT8_MIN || res > INT8_MAX) {
printf("Erro: resultado fora do intervalo \(8\) bits\n");
return 1;
}
printf("Resultado: %hhd\n", res);
return 0;
}