Exemplo n.º 1
0
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());
}
Exemplo n.º 3
0
Elemento * OperadorTangente::operar(DoublyLinkedList<Elemento>& valores) {
	IteradorLista<Elemento *> iterador = valores.begin;
	Operando * valor = dynamic_cast<Operando *>(*iterador);
	return new Operando(sin(valor->getValor()));
}
Exemplo n.º 4
0
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()));
}
Exemplo n.º 5
0
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());
}