C/Visual C - ayuda del vector polaco

 
Vista:

ayuda del vector polaco

Publicado por JACOBO (3 intervenciones) el 13/02/2003 17:56:29
nesesito ayuda para la realizacion de un programa del vector polaco en denotacion posfija con todo y parentesis(opcional)programado en c++. me sera de gran ayuda ya que estoy estudiando para lic. en sistemas computacionales y administrativos. thank.
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 posfija (postfix)

Publicado por Alejandro (1153 intervenciones) el 05/05/2025 19:54:19
A continuación, te presento un programa en C++ que evalúa expresiones en notación posfija (postfix) utilizando una pila (stack). Este programa también incluye la opción de manejar paréntesis en la entrada, aunque en la notación posfija no son necesarios.

Código en C++



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
#include <iostream>
#include <stack>
#include <sstream>
#include <string>
#include <cctype>
 
using namespace std;
 
// Función para evaluar una expresión en notación posfija
int evaluatePostfix(const string& expression) {
    stack<int> s;
    istringstream iss(expression);
    string token;
 
    while (iss >> token) {
        // Si el token es un número, lo empujamos a la pila
        if (isdigit(token[0])) {
            s.push(stoi(token));
        }
        // Si el token es un operador, realizamos la operación
        else {
            int operand2 = s.top(); s.pop();
            int operand1 = s.top(); s.pop();
 switch (token[0]) {
                case '+':
                    s.push(operand1 + operand2);
                    break;
                case '-':
                    s.push(operand1 - operand2);
                    break;
                case '*':
                    s.push(operand1 * operand2);
                    break;
                case '/':
                    s.push(operand1 / operand2);
                    break;
                default:
                    cout << "Operador desconocido: " << token << endl;
                    return 0;
            }
        }
    }
    return s.top(); // El resultado final estará en la parte superior de la pila
}
 
int main() {
    string expression;
 
    cout << "Ingrese una expresión en notación posfija (separada por espacios): ";
    getline(cin, expression);
 
    int result = evaluatePostfix(expression);
    cout << "El resultado de la expresión es: " << result << 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 posfija, donde los operandos y operadores están separados por espacios. Por ejemplo: `5 3 + 2 *`.

2. Evaluación de la expresión: Utiliza una pila para evaluar la expresión:
- Si el token es un número, se convierte a entero y se empuja a la pila.
- Si el token es un operador (`+`, `-`, `*`, `/`), se sacan los dos operandos de la pila, se realiza la operación y el resultado se empuja de nuevo a la pila.

3. Resultado: Al final, el resultado de la expresión se muestra en la consola.

Ejemplo de uso



Si ingresas la expresión `5 3 + 2 *`, el programa calculará `(5 + 3) * 2`, y mostrará el resultado `16`.

Notas adicionales



- Este programa no maneja errores de entrada, como divisiones por cero o entradas no válidas. Puedes agregar validaciones adicionales según sea necesario.
- La notación posfija no requiere paréntesis, ya que el orden de las operaciones se determina por la posición de los operadores y operandos.

Espero que este programa te sea útil para tu estudio en la Licenciatura en Sistemas Computacionales y Administrativos. ¡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