como programo el vector polapo en c++
Publicado por jacobo (3 intervenciones) el 17/02/2003 23:17:28
busco el programa del vector polaco en c++ pára untrabajo final usando pilas en el programa y validar la expresion
Valora esta pregunta


0
#include <iostream>
#include <stack>
#include <sstream>
#include <string>
#include <cctype>
using namespace std;
// Función para verificar si un carácter es un operador
bool esOperador(const string& token) {
return (token == "+" || token == "-" || token == "*" || token == "/");
}
// Función para realizar la operación
int operar(int a, int b, const string& operador) {
if (operador == "+") return a + b;
if (operador == "-") return a - b;
if (operador == "*") return a * b;
if (operador == "/"){
if (b == 0) {
throw runtime_error("Error: División por cero.");
}
return a / b;
}
throw runtime_error("Error: Operador desconocido.");
}
// Función para evaluar la expresión en notación polaca inversa
int evaluarRPN(const string& expresion) {
stack<int> pila;
stringstream ss(expresion);
string token;
while (ss >> token) {
if (isdigit(token[0]) || (token.size() > 1 && token[0] == '-')) {
// Si el token es un número, lo empujamos a la pila
pila.push(stoi(token));
} else if (esOperador(token)) {
// Si el token es un operador, sacamos los dos últimos números de la pila
if (pila.size() < 2) {
throw runtime_error("Error: Expresión inválida.");
}
int b = pila.top(); pila.pop();
int a = pila.top(); pila.pop();
int resultado = operar(a, b, token);
pila.push(resultado);
} else {
throw runtime_error("Error: Token inválido.");
}
}
// El resultado final debe ser el único elemento en la pila
if (pila.size() != 1) {
throw runtime_error("Error: Expresión inválida.");
}
return pila.top();
}
int main() {
string expresion;
cout << "Ingrese una expresión en notación polaca inversa (RPN): ";
getline(cin, expresion);
try {
int resultado = evaluarRPN(expresion);
cout << "El resultado de la expresión es: " << resultado << endl;
} catch (const runtime_error& e) {
cout << e.what() << endl;
}
return 0;
}