C/Visual C - como programo el vector polapo en c++

 
Vista:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Programa en C++ para evaluar expresiones en notación polaca inversa (RPN) usando pilas

Publicado por Alejandro (1153 intervenciones) el 05/05/2025 20:56:18
A continuación, te presento un programa en C++ que utiliza pilas para evaluar expresiones en notación polaca inversa (RPN). Este programa también incluye la validación de la expresión ingresada.

Código del programa



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#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;
}

Cómo funciona el programa



1. Entrada de la expresión: El programa solicita al usuario que ingrese una expresión en notación polaca inversa. Por ejemplo, para la expresión `3 4 +`, el resultado será `7`.

2. Uso de pilas: Utiliza una pila para almacenar los operandos. Cuando se encuentra un operador, se extraen los dos últimos operandos de la pila, se realiza la operación y se empuja el resultado de nuevo en la pila.

3. Validación de la expresión: El programa valida la expresión ingresada, asegurándose de que:
- No haya más de un resultado final en la pila.
- No se intente dividir por cero.
- Se manejen correctamente los operadores y operandos.

4. Salida del resultado: Finalmente, el programa imprime el resultado de la expresión o un mensaje de error si la expresión es inválida.

Ejemplo de uso



- Entrada: `3 4 + 2 * 7 /`
- Salida: `El resultado de la expresión es: 2`

Consideraciones



- Asegúrate de que la expresión ingresada esté en el formato correcto de notación polaca inversa.
- Puedes extender el programa para manejar más operadores o mejorar la validación según sea necesario.

Este programa es un buen punto de partida para tu trabajo final y puedes adaptarlo según tus requerimientos específicos. ¡Buena suerte, Jacobo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar