/* Acadêmico: MARCOS GERONIMO DA SILVA ********* Trabalo 1 de programação de computadores 1 ************ OBJETIVO: Fazer um programa que simule a calculadora do windows, para números de quatro dígitos.*/ //Bibliotécas requeridas #include //cout #include //getch(), gotoxy(), clrscr() #include //isalpha(), isdigit() //Função para exibir informações na tela void display(int num); //Função para captura de números e manupulação das teclas int lenum(int& num, int& ac, int& aux, int& ut); //Corpo do programa void main() //Início de main() { int num=0; //Variável para armazenar o último número entrado int ac=0; //Variável para armazenar os resultados int aux=0; //Variável auxiliar que armazena a última tecla int opa=0; //Variável auxiliar que armazena a operação anterior int ut; //Variável auxiliar que armazena a penúltima tecla int n=1; //Variável para trocar o sinal do número //Laço principal, é finalizado precionando-se a tecla ESC do { //Chama a função lenum() para iniciar a leitura e análise das teclas digitadas lenum(num, ac, aux, ut); ac=num; //inicializa a variável ac com o primeiro número formado //Se o ultimo caracter digitado for de uma operação ou a tecla ENTER, entra no laço while(aux==13||aux==42||aux==43||aux==45||aux==47) { //Se a ultima tecla for '+' entra no laço if(aux==43&&ut!=43) //Tecla + Operação de Soma { lenum(num, ac, aux, ut); //Solicita outro número ac+=num; //Soma ac com num e guarda o resultado em ac if(aux==13) //Se a última tecla precionada na função lenum for ENTER opa=43; //Armazena o código desta operação para posterior análise } //Se a ultima tecla for '-' entra no laço else if(aux==45&&ut!=45) //Tecla - Operação de Subtração { lenum(num, ac, aux, ut); //Solicita outro número ac-=num; //Subtrai num de ac e guarda o resultado em ac if(aux==13) //Se a última tecla precionada na função lenum for ENTER opa=45; //Armazena o código desta operação para posterior análise } //Se a ultima tecla for '*' entra no laço else if(aux==42&&ut!=42) //Tecla * Operação de Multiplicação { lenum(num, ac, aux, ut); //Solicita outro número ac*=num; //Multiplica ac por num e guarda o resultado em ac if(aux==13) //Se a última tecla precionada na função lenum for ENTER opa=42; } //Se a ultima tecla for '/' entra no laço else if(aux==47&&ut!=47) //Tecla / Operação de Divisão { if(num==0) //Se mun for zero dá mensagem de erro { clrscr(); cout << "Erro: divisao por zero!"; } else //Senão, divide ac por num { lenum(num, ac, aux, ut); //Solicita outro número ac/=num; //Divide ac por num e guarda o resultado em ac if(aux==13) //Se a última tecla precionada na função lenum for ENTER opa=47; //Armazena o código desta operação para posterior análise } } display(ac); //Exibe as alterações em ac if(aux==13) //Se a última tecla for ENTER { ut=aux; aux=getch(); //aux recebe outra tecla num=num*n; while(aux==13) //Se for outro enter entra no laço e repete a operação anterior { if(opa==43) //Repete a Operação de Soma ac+=num; if(opa==45) //Repete a Operação de Subtração ac-=num; if(opa==42) //Repete a Operação de Multiplicação ac*=num; if(opa==47) //Repete a Operação de Divisão { if(num==0) { clrscr(); cout << "Erro: divisao por zero!"; } else ac/=num; } display(ac); ut=aux; aux=getch(); } if(aux==42||aux==43||aux==45||aux==47) num=ac; //Caso o usuário faça combinações das teclas ENTER e uma operação, ex: +=, -=, etc } else if(aux!=27) lenum(num, ac, aux, ut); } }while(aux!=27); clrscr(); } //Função para imprimir o número processado na tela //Recebe como parâmetro de entrada o numero a ser impresso //Não tem parâmetro de saída void display(int num) { clrscr(); gotoxy(1,3); cout << "========================================================"; cout << "\nCalculadora simples, baseada na calculadora do windows,"; cout << "\naceita apenas numeros de quatro digitos"; cout << "\nImplementada por: MARCOS GERONIMO DA SILVA"; cout << "\nAcadenico do primeiro ano de ciencia da computacao"; cout << "\nUFMS-Universidade Federal de Mato Grosso do Sul"; cout << "\n========================================================"; cout << "\nZ ou z ==> Apaga a memoria\nN ou n ==> Torna o número negativo"; cout << "\nBACKSPACE ou C ou c ==> Apaga o ultimo digito\nTcle ESC ==> Para sair"; if(num>=0) { gotoxy(2,1); if (num>9999) cout << "ERRO: A calculadora trabalha apenas com numero de quatro digitos!"; else cout << num; } else if(num<0||num>=(-9999)) { gotoxy(1,1); if (num<=(-9999)) cout << "ERRO: A calculadora trabalha apenas com numero de quatro digitos!"; else cout << num; } } /* Função para ler um número. Recebe como parâmetro de entrada (por referência) todas as variáveis manipuladas nesta função e que são usadas no programa principal Tem como parâmetros de saída, as alterações feitas nas variáveis */ int lenum(int& num, int& ac, int& aux, int& ut) { int i=0; //Contador para controle do tamanho do numero int n=1; //Variável para alterar o sinal do numero quando precionada a tecla n ou N do { /* Como aux foi inicializada com zero, na 1ª execuão do programa ela só será avaliada no retorno do laço e se for uma tecla validada por este laço Se for um digito ou uma das quAtro teclas especiais Z, C, N, ou BACKSPACE*/ if(isdigit(aux)) //Se for número entra no laço { if(i<4) //Forma numeros de até quatro caracteres { num=(num*10)+(aux-48); //monta os digitos para formar o numero i++; //incrementa o contador display(num*n); //Exibe as alterações em num } else //Caso o o suário tecle mais de quatro dígitos consecutivos cout << "\nErro: A calculadora trabalha apenas com numeros de quatro digitos!"; } //Se for precionado a tecla BACKSPACE e 0