int _tmain(int argc, _TCHAR* argv[]) { stack<Elemento *> s; s.push(new OperadorMultiplicacion()); s.push(new Operando(5)); s.push(new Operando(5)); while (s.size() > 1) { Operando * a = static_cast<Operando*>(s.top()); Operando * b = static_cast<Operando*>(s.top()); s.pop(); s.pop(); Operador * op = static_cast<Operador*>(s.top()); s.pop(); s.push(op->operar(a, b)); delete op; delete b; delete a; } Operando * r = static_cast<Operando*>(s.top()); s.pop(); cout << "El resultado es " << r->get() << endl; system("pause"); return 0; }
Elemento * OperadorFuncion::operar(DoublyLinkedList<Elemento *>& valores) { IteradorLista<Elemento *> it = valores.begin(); Operando * a = dynamic_cast<Operando *>(*it); Operando * b = dynamic_cast<Operando *>(*++it); Operando * c = dynamic_cast<Operando *>(*++it); return new Operando(a->getValor() + b->getValor() + c->getValor()); }
Elemento * OperadorTangente::operar(DoublyLinkedList<Elemento>& valores) { IteradorLista<Elemento *> iterador = valores.begin; Operando * valor = dynamic_cast<Operando *>(*iterador); return new Operando(sin(valor->getValor())); }
Elemento * OperadorLn::operar(Elemento * a, Elemento * b) { Operando * izq = dynamic_cast<Operando *>(a); Operando * der = dynamic_cast<Operando *>(b); return new Operando(log(izq->getValor())); }
Elemento * OperadorCoseno::operar(DoublyLinkedList<Elemento *> listaOperandos) { Operando * a = dynamic_cast<Operando *>(listaOperandos.getPosicionCualquiera(0)); return new Operando(cos(a->getValor()*3.14159265 / 180)); }
Operando * OperadorFuncion::operar(Lista<NodoArbol <Elemento*> *> * hijos) { Operando* a = static_cast<Operando*>(hijos->buscarPorPosicion(0)->getActual()); Operando* b = static_cast<Operando*>(hijos->buscarPorPosicion(1)->getActual()); Operando* c = static_cast<Operando*>(hijos->buscarPorPosicion(2)->getActual()); return new Operando((b->getOperando()*c->getOperando())/a->getOperando()); }