Calculadora em C utilizando pilhas
Autor: Bolívar Arthur Butzke | Publicado: 2009-03-30T15:45:00-03:00

Olá, exemplo muito básico, mas muito básico mesmo, de uma calculadora com as 4 operações básicas feito no Dev-C++ utilizando a linguagem C e também o conceito de pilhas. Este programa pede para o usuário digitar dois valores e armazena eles em uma pilha (vetor), depois pede para o usuário informar a operação desejada, desempilha os valores e armazena eles em variáveis auxiliares, isso poderia ser tirado fora mas pro melhor entendimento preferi deixar assim, feita a operação é armazenado o resultado na pilha novamente e chamado a função que exibe o resultado final./*  Name: Calculadora  Author: Bol�var Arthur Butzke  Date: 23/03/09 21:52  Description: Calculadora. Programa que utilize pilhas para efetuar as opera��es b�sicas:                adi��o, subtra��o, divis�o e multiplica��o.*//* Bibliotecas de Fun��es */#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;/* Constantes */#define MAX 10#define BASE 0/* Vari�veis */int TOPO=0, OPERACAO=0;float VETOR[MAX], VALOR=0, N1=0, N2=0, RESULTADO=0;/* Fun��o para inserir elementos na pilha */void EMPILHAR(float VALOR){     if (TOPO == MAX)        printf("Buffer OverFlow - Pilha Cheia.\n");     else                        VETOR[TOPO] = VALOR;     TOPO++;}/* Fun��o para retirar elementos da pilha */float DESEMPILHAR(){     if (TOPO == BASE)        printf("Buffer UnderFlow! Pilha Vazia.\n");     else      {        TOPO--;           RESULTADO = VETOR[TOPO];      }     return RESULTADO;}/* Fun��o para efetuar as opera��es */void CALCULA(){    int RESULT = 0;             if (OPERACAO == 1) {              printf("\nOperacao de Adicao\n");               N1 = DESEMPILHAR();              N2 = DESEMPILHAR();              RESULTADO = N1 + N2;              printf("\n%f + %f = %f\n",N1,N2,RESULTADO);              EMPILHAR(RESULTADO);               RESULT = 1;              }         if (OPERACAO == 2) {              printf("\nOperacao de Subtracao\n");               N1 = DESEMPILHAR();              N2 = DESEMPILHAR();              RESULTADO = N1 - N2;              printf("\n%f - %f = %f\n",N1,N2,RESULTADO);              EMPILHAR(RESULTADO);               RESULT = 1;              }                       if (OPERACAO == 3) {              printf("\nOperacao de Multiplicacao\n");               N1 = DESEMPILHAR();              N2 = DESEMPILHAR();              RESULTADO = N1 * N2;              printf("\n%f * %f = %f\n",N1,N2,RESULTADO);              EMPILHAR(RESULTADO);               RESULT = 1;              }         if (OPERACAO == 4) {              printf("\nOperacao de Divisao\n");               N1 = DESEMPILHAR();              N2 = DESEMPILHAR();              RESULTADO = N1 / N2;              printf("\n%f / %f = %f\n",N1,N2,RESULTADO);              EMPILHAR(RESULTADO);               RESULT = 1;              }//         printf("Operacao informada invalida. Operacoes validas sao:\n adicao (+)\n subtracao (-)\n multiplicacao (*)\n divisao (/)\n");       if (RESULT==0)         {            printf("\nOperacao nao encontrada. \n1 -&gt; Adicao\n2 -&gt; Subtracao\n3 -&gt; Multiplicacao\n4 -&gt; Divisao\nInforme a operacao novamente: ");            scanf("%d",&amp;OPERACAO);            CALCULA();         }    }/* Fun��o para exibir o resultado */void MOSTRARESULTADO(){      printf("Resultado da operacao e' %f\n",VETOR[BASE]);}/* Fun��o Principal */int main(){    int AUXILIAR=1;    printf("\n  Calculadora 1.0\n");    while (AUXILIAR != 0)    {          printf("\nDigite o valor1: ");          scanf("%f",&amp;N1);          EMPILHAR(N1);          printf("\nDigite o valor2: ");          scanf("%f",&amp;N2);          EMPILHAR(N2);          printf("\n1 -&gt; Adicao\n2 -&gt; Subtracao\n3 -&gt; Multiplicacao\n4 -&gt; Divisao");          printf("\nDigite a operacao: ");          scanf("%d",&amp;OPERACAO);          CALCULA();          MOSTRARESULTADO();          printf("\nDigite 0 para sair ou 1 para realizar outra operacao: ");          scanf("%d",&amp;AUXILIAR);          // nencess�rio para limpar a pilha ap�s realizar uma opera��o, sem isso vai mostrar sempre o resultado da primeira opera��o.          TOPO = BASE;    }    return 0; }Para entender melhor o conceito de pilhas, pense em uma pilha de pratos, quando você precisa de um prato você vai e retira o que está em cima, quando não precisa mais, você coloca ele em cima novamente, assim, sempre o último prato empilhado é o primeiro que sai, leia este post sobre listas encadeadas para saber mais.