#pragma once #include #include #include "complex.h" #include "stack-c.h" #include "calc-c.h" class Calculadora : public Stack { private: int getops(TPELEM* n1, TPELEM* n2); int getop(TPELEM* n1); public: Calculadora(int size=10); void sum( void ); void subtract( void ); void divide( void ); void multiply( void ); void exp( void ); }; Calculadora::Calculadora(int size): Stack(size) { } int Calculadora::getops(TPELEM* n1, TPELEM* n2) { if( isEmpty() ) { printf("empty stack!\n"); return 0; } *n2 = pop(); if( isEmpty() ) { push(*n2); printf("two operands needed!\n"); return 0; } *n1 = pop(); return 1; } int Calculadora::getop(TPELEM* n1) { if( isEmpty() ) { printf("empty stack!\n"); return 0; } *n1 = pop(); return 1; } void Calculadora::sum( void ) { TPELEM n1, n2; if (getops(&n1, &n2)) push(n1+n2); } void Calculadora::exp( void ) { TPELEM n1, n2; if (getops(&n1, &n2)) { push(0); // Implementar .... } } void Calculadora::subtract( void ) { TPELEM n1, n2; if (getops(&n1, &n2)) push(n1-n2); } void Calculadora::divide( void ) { TPELEM n1, n2; if (getops(&n1, &n2)) { if( !(n2 == 0) ) push(n1/n2); else printf(" nao divide por zero \n"); } } void Calculadora::multiply( void ) { TPELEM n1, n2; if (getops(&n1, &n2)) push(n1*n2); }