Notación Polish inversa de pila de cola Ejercicio C# - Curso de Programación C# (C Sharp)

 Ejercicio

Notación Polish inversa de pila de cola

 Objetivo

Cree un programa que lea desde un archivo de texto una expresión en notación polaca inversa como, por ejemplo:

3 4 6 5 - + * 6 +
(Resultado 21)

Cada elemento se almacenará en una cola.

Una vez que la cola tenga todos los elementos almacenados, tendrá que almacenarlos de la cola a una pila (utilizando la clase Queue y Stack proporcionadas en C#).

Finalmente, operarás con la pila para obtener el resultado correcto de la expresión en RPN, y la mostrarás por consola.

 Código de Ejemplo

// Importing the necessary namespaces for basic functionalities and collections
using System; // For basic functionalities like Console
using System.Collections.Generic; // For using the Queue and Stack classes
using System.IO; // For reading from a file

class Program
{
    static void Main(string[] args)
    {
        // Reading the Reverse Polish Notation (RPN) expression from a file
        string filePath = "rpn_expression.txt"; // File where the RPN expression is stored
        if (!File.Exists(filePath))
        {
            Console.WriteLine("The file does not exist.");
            return;
        }

        // Read the contents of the file (RPN expression)
        string[] rpnExpression = File.ReadAllText(filePath).Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

        // Create a Queue to store the elements from the RPN expression
        Queue queue = new Queue();

        // Enqueue the elements of the RPN expression into the queue
        foreach (var item in rpnExpression)
        {
            queue.Enqueue(item);
        }

        // Create a Stack to evaluate the RPN expression
        Stack stack = new Stack();

        // Process each element in the queue, transferring to the stack and calculating the result
        while (queue.Count > 0)
        {
            string current = queue.Dequeue(); // Dequeue the next element from the queue

            if (IsOperator(current))
            {
                // If it's an operator, pop two values from the stack, perform the operation and push the result
                int operand2 = stack.Pop();
                int operand1 = stack.Pop();
                int result = PerformOperation(operand1, operand2, current);
                stack.Push(result);
            }
            else
            {
                // If it's a number, push it onto the stack
                stack.Push(int.Parse(current));
            }
        }

        // The result of the RPN expression will be the last item in the stack
        if (stack.Count == 1)
        {
            Console.WriteLine($"Result: {stack.Pop()}");
        }
        else
        {
            Console.WriteLine("Invalid RPN expression.");
        }
    }

    // Helper method to check if a string is an operator
    static bool IsOperator(string str)
    {
        return str == "+" || str == "-" || str == "*" || str == "/";
    }

    // Helper method to perform the operation based on the operator
    static int PerformOperation(int operand1, int operand2, string operatorSymbol)
    {
        switch (operatorSymbol)
        {
            case "+":
                return operand1 + operand2;
            case "-":
                return operand1 - operand2;
            case "*":
                return operand1 * operand2;
            case "/":
                return operand1 / operand2;
            default:
                throw new InvalidOperationException("Invalid operator.");
        }
    }
}

Más ejercicios C# Sharp de Gestión Dinámica de Memoria

 Implementación de una cola usando una matriz
Implementación de una cola...
 Implementar una pila usando una matriz
Implementar una pila...
 Colecciones de colas
Cree una cola de cadenas, utilizando la clase Queue que ya existe en la plataforma DotNet. Una vez creado, muestra todos los elementos almacenados ...
 ArrayList
Cree una lista de cadenas utilizando la clase ArrayList que ya existe en la plataforma DotNet. Una vez creado, muestra todos los elementos almacena...
 ArrayList duplicar un archivo de texto
Cree un programa que lea desde un archivo de texto y lo almacene en otro archivo de texto invirtiendo las líneas. Por lo tanto, un archivo de texto...
 Suma ilimitada
Cree un programa para permitir que el usuario ingrese una cantidad ilimitada de números. Además, pueden ingresar los siguientes comandos: "suma", par...
 ArrayList - Lector de archivos de texto
Entregue aquí su lector básico de archivos de texto. Este lector de archivos de texto siempre muestra 21 líneas del archivo de texto, y el usuario ...
 Hast Table - Diccionario
Entregue aquí su diccionario usando Hash Table...
 Paréntesis
Implementar una función para comprobar si una secuencia de paréntesis abierto y cerrado está equilibrada, es decir, si cada paréntesis abierto corresp...
 Mezclar y ordenar archivos
Cree un programa para leer el contenido de dos archivos diferentes y mostrarlo mezclado y ordenado alfabéticamente. Por ejemplo, si los archivos conti...
 ArrayList de puntos
Cree una estructura "Point3D", para representar un punto en el espacio 3-D, con coordenadas X, Y y Z. Cree un programa con un menú, en el que el us...
 Buscar en archivo
Cree un programa para leer un archivo de texto y pida al usuario oraciones para buscar en él. Leerá todo el archivo, lo almacenará en un ArrayList,...

Juan A. Ripoll - Tutoriales y Cursos de Programacion© 2025 Todos los derechos reservados.  Condiciones legales.