Você está na página 1de 4

Código em C de calculadora com menu

#include <stdio.h> //biblioteca

int recv(int *a, int *b){ //recv é a função que recebe os dois valores por parâmetro

printf("Digite dois numero\n");//pede os valores para o usuário

scanf("%d", &*a);//lê o primeiro valor e armazena no local para onde o ponteiro "a"
aponta

scanf("%d", &*b);//lê o primeiro valor e armazena no local para onde o ponteiro "b"
aponta

void menu(){ //Menu é a função que mostra o menu

printf("Calculadora Binaria
UTFPR\n*****************************************\nPara efetuar soma digite
1\n*****************************************\nPara efetuar subtracao digite
2\n*****************************************\nPara efetuar multiplicacao digite
3\n*****************************************\nPara efetuar divisao digite
4\n*****************************************\nPara sair do programa digite 5\n");

} //printa o menu na tela

////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////

int soma (int a, int b){ //int soma é a função que soma os valores recebidos em recv

int c, d = 1; //declara as variáveis "c" e "d", com d diferente de 0 para poder entrar no loop

while(d != 0){ // início do laço de repetição

c = a^b; //c é o xor entre os dois valores

d = a&b; //d é o valor que sobe na soma de 1 com 1, cujo resultado é 10

d = d<<1; //d precisa ser deslocado para esquerda para tranformar o 1 em 10

a = c; //a recebe c

b = d; //b recebe d, isso acontece para que o laço de repetição repita o passo a
passo com os valores novos

} //o laço só para quando o and a e b resulta em 0, pois não há mais valor para somar

return a; //retorna "a" que é o resultado

}
////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////

int subtrai (int a, int b){ // int subtrai é a função que subtrai os valores recebidos em recv

int c, d = 1;

b = (~b); //Nega o número

b = soma(b, 1); //Implementa o número, isso tranforma um número positivo em um


negativo.

a = soma(a, b);

return a;//retorna o resultado

////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////

int multiplica(int a, int c){ //Faz a função multiplicação

int b = 0;

while((a & 1) == 0)//enquanto a for par, ele é dividido por dois. Ou deslocado a diretira

a = a>>1;

b = soma(b, 1);//Para cada deslocamento ele incrementa o b em 1.

c = c<<b;//Ele desloca para a esquerda o c o número de vezes que ele pode ser dividido
por dois.

b = c;// b recebe c

while(a > 1)//enquanto a for maior que 1

c = soma(c, b);//c soma com ele mesmo

a = subtrai(a, 1);//a decrementa em 1

return c;

////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////

int divide(int a, int c){ // A função divide faz a divisão

int b = 0, n = 0;
b = c;

while(a >= b)//enquanto o a for maior igual a b

b = soma(b, c); //b soma com c, sendo que b recebeu o valor de c

n = soma(n, 1);//incrementar o n toda vez que o loop se repetir

return n;//n é o resultado

////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////

void main()

int a, b, c, a1, a2;

//o loop se repete enquanto o usuário não digitar 5 no menu

while(a != 5)

menu();//chama o menu

scanf("%d", &a);//pede o que se quer acessar no menu

switch(a)//função switch que faz o que se escolhe

case 1:

recv(&a1, &a2);//recebe as variáveis, isso se repete em todos


os case

c=soma(a1, a2);//soma as variáveis

printf("%d + %d = %d\n\n**************", a1, a2, c);//printa


o resultado, também se repete em todos os case

break;

case 2:

recv(&a1, &a2);

c = subtrai(a1, a2);//subtrai as variáveis

printf("%d - %d = %d\n\n**************", a1, a2, c);


break;

case 3:

recv(&a1, &a2);

c = multiplica(a1, a2);//multiplica as variáreis

printf("%d * %d = %d\n\n**************", a1, a2, c);

break;

case 4:

recv(&a1, &a2);

if(a2 == 0){//se o segundo número for 0, ele mostra que a


divisão é indefinida

printf("INDEFINIDO\n");

break;//caso o segundo número seja 0, é logo dado um break


na função

c = divide(a1, a2);//faz a divisão

printf("%d / %d = %d\n\n**************", a1, a2, c);

break;//break para o que se faz no case

case 5:

printf("\n***** Turned off *****\n\n");

break;//5 desliga a calculadora

default:

printf("ERROR 404 \nCOMANDO INVÁLIDO\n");

break;// se algum número que não está no menu for pedido,


ele mostra mensagem de erro.

Você também pode gostar