Calculadora polonesa
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define S 1
#define N 0 class pilha { private: int topo, base, m, len; float *a; public: pilha(int); int cheia(); int vazia(); float topo2(); int empilhar(float); int desempilhar(); void mostrar();
};
pilha :: pilha(int len)
{
topo = 0; base = 0; m = 0; this->len = len; a = (float *)malloc(sizeof(float) * len);
};
int pilha :: cheia()
{
if (m==len) return(S); return(N);
};
int pilha :: vazia()
{
if (m==0) return(S); return(N);
};
int pilha :: empilhar(float y)
{
if (cheia() == S) return(-1); a[topo]=y; topo++; m = topo; return(0);
};
int pilha :: desempilhar()
{
if (vazia() == S) return(-1); topo--; m = topo; return(0);
};
float pilha :: topo2()
{
int topoA; topoA = topo; topoA --; return(a[topoA]);
};
void pilha :: mostrar()
{
int i; system("cls"); printf("\nPilha [base=%d, topo=%d, m=%d, A = { ",base,topo,m); printf("\nDigite um numero ou um operador: "); if (vazia() == SIM) printf(" vazia "); for(i=0 ; i < topo ; i++) printf(" %.2f", a[i]); printf(" }\n]\n\n");
};
int main()
{
pilha s(8); char cValor[20]; float fCalcula; do { s.mostrar(); fflush (stdin); scanf("%[^\n]", cValor); if(cValor[0] == '+'){ fCalcula = s.topo2(); s.desempilhar(); fCalcula += s.topo2(); s.desempilhar(); s.empilhar(fCalcula); }else if(cValor[0] == '-'){ fCalcula = s.topo2(); s.desempilhar(); fCalcula -= s.topo2(); s.desempilhar(); s.empilhar(fCalcula); }else