Calculadora en C++
Enviado por eddale • 11 de Febrero de 2016 • Apuntes • 578 Palabras (3 Páginas) • 156 Visitas
#include "LCP.cpp"
#include
//int ItemMaxEn = 20;
class CsCalculador{
public:
CsCalculador(void);
void CorreFa(void);
void DespejaFa(void);
private:
CsPilas
void IngresaFa(double NoDb);
bool ObtDosOpdosFabo(double &Opdo1Db, double &Opdo2Db);
void CalculaFa(char OpdoCa);
};
//
CsCalculador::CsCalculador(void){}
// Almacena en la pila un valor
void CsCalculador::IngresaFa(double NoDb){
LaPilaCsPilas.AgregaFa(NoDb);
}
//
bool CsCalculador::ObtDosOpdosFabo(double &Opdo1Db, double &Opdo2Db){
if(LaPilaCsPilas.EsVaciaFabo()){
cerr << "Operador omitido" << endl;
return false;
}
Opdo1Db = LaPilaCsPilas.RemueveFaGn(); // remueve el opdo derecho
if(LaPilaCsPilas.EsVaciaFabo()){
cerr << "Operador omitido" << endl;
return false;
}
Opdo2Db = LaPilaCsPilas.RemueveFaGn(); // remueve el opdo izquierdo
return true;
}
//
void CsCalculador::CalculaFa(char OpdoCa){
bool Rdobo;
double Opdo1Db, Opdo2Db;
Rdobo = ObtDosOpdosFabo(Opdo1Db, Opdo2Db);
if(Rdobo == true)
switch(OpdoCa){
case '+': LaPilaCsPilas.AgregaFa(Opdo2Db+Opdo1Db);
break;
case '-': LaPilaCsPilas.AgregaFa(Opdo2Db-Opdo1Db);
break;
case '*': LaPilaCsPilas.AgregaFa(Opdo2Db*Opdo1Db);
break;
case '/': if(Opdo1Db == 0.0){
cerr << "Division por 0";
LaPilaCsPilas.DespejaPilaFa();
}else
LaPilaCsPilas.AgregaFa(Opdo2Db/Opdo1Db);
break;
case '^': LaPilaCsPilas.AgregaFa(pow(Opdo2Db, Opdo1Db));
break;
}
else
LaPilaCsPilas.DespejaPilaFa();
}//
void CsCalculador::CorreFa(void){
char CaraCa;
double NvoOpdoDb;
while(cin >> CaraCa, CaraCa != '='){
switch(CaraCa){
case '+':
case '-':
case '*':
case '/':
case '^':
CalculaFa(CaraCa);
break;
default:
cin.putback(CaraCa);
cin >> NvoOpdoDb;
IngresaFa(NvoOpdoDb);
break;
}
}
if(!LaPilaCsPilas.EsVaciaFabo())
cout << "Resultado: " << LaPilaCsPilas.TopeFaGn() << endl;
...