Ejemplo 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;
}
Ejemplo n.º 2
0
void Arbol::resolverRe(Elemento *& nodo){
	Operador * operador = dynamic_cast<Operador*>(nodo);
	if (operador != NULL){
		if (nodo->getHijoIzq() != NULL){
			resolverRe(nodo->getHijoIzq());
		}
		if (nodo->getHijoDer() != NULL){
			resolverRe(nodo->getHijoDer());
		}
		nodo = operador->operar(nodo->getHijoIzq(), nodo->getHijoDer());
	}
}
void Arbol::solucionarRec(Elemento *& actual) {
	Elemento * izq = actual->getHijoIzquierdo();
	Elemento * der = actual->getHijoDerecho();
	Operador * op = dynamic_cast<Operador*>(actual);
	if (op != NULL) {
		if (izq != NULL) {
			solucionarRec(actual->getHijoIzquierdo());
		}
		if (der != NULL) {
			solucionarRec(actual->getHijoDerecho());
		}
		Elemento * solucion = op->operar(actual->getHijoIzquierdo(), actual->getHijoDerecho());
		delete actual;
		actual = solucion;
	}
}