Notación Polish Inversa De Pila De Cola - Ejercicio De Programacion C# Sharp

En este ejercicio, deberás crear un programa que lea una expresión en Notación Polaca Inversa (RPN, por sus siglas en inglés) desde un archivo de texto, como por ejemplo:
3 4 6 5 - + * 6 +
(Resultado 21). En este ejercicio, los elementos de la expresión se almacenarán en una cola. Una vez que la cola haya almacenado todos los elementos, deberás transferirlos de la cola a una pila utilizando las clases Queue y Stack proporcionadas en C#.

Una vez que los elementos estén en la pila, deberás realizar las operaciones matemáticas según la notación polaca inversa utilizando los métodos adecuados de la clase Stack. En este ejercicio, se evaluará cómo puedes manipular estas estructuras de datos para evaluar correctamente la expresión y obtener el resultado.

Al final de este ejercicio, deberás mostrar el resultado final de la expresión en la consola. Este ejercicio te ayudará a entender cómo trabajar con las estructuras de datos de cola y pila en C# y cómo aplicar la notación polaca inversa para resolver expresiones matemáticas de forma eficiente.

 Categoría

Gestión Dinámica de Memoria

 Ejercicio

Notación Polish Inversa De Pila De Cola

 Objectivo

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.

 Ejemplo Ejercicio C#

 Copiar Código C#
// 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.");
        }
    }
}

 Salida

Suppose the rpn_expression.txt file contains the following RPN expression:
3 4 + 2 * 7 /

The output will be:
Result: 2

 Comparte este Ejercicio C# Sharp

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

¡Explora nuestro conjunto de ejercicios de programación C# Sharp! Estos ejercicios, diseñados específicamente para principiantes, te ayudarán a desarrollar una sólida comprensión de los conceptos básicos de C#. Desde variables y tipos de datos hasta estructuras de control y funciones simples, cada ejercicio está diseñado para desafiarte de manera gradual a medida que adquieres confianza en la codificación en C#.

  •  ArrayList

    En este ejercicio, deberás crear una lista de cadenas utilizando la clase ArrayList que ya existe en la plataforma .NET. La clase ArrayList permite almacenar e...

  •  ArrayList duplicar un archivo de texto

    En este ejercicio, deberás crear un programa que lea el contenido de un archivo de texto y lo almacene en otro archivo de texto, pero invirtiendo el orden de las líneas. Est...

  •  Suma ilimitada

    En este ejercicio, deberás crear un programa que permita al usuario ingresar una cantidad ilimitada de números. Además de ingresar números, el programa debe permitir al usua...

  •  ArrayList - Lector de archivos de texto

    En este ejercicio, se debe crear un lector básico de archivos de texto que muestre 21 líneas de texto y permita al usuario navegar usando las teclas de flecha hacia arriba y...

  •  Hast Table - Diccionario

    En este ejercicio, se debe crear un diccionario utilizando una tabla hash. El propósito de este ejercicio es practicar la implementación de una estructura de d...

  •  Paréntesis

    En este ejercicio, se debe implementar una función que verifique si una secuencia de paréntesis abiertos y cerrados está balanceada. En otras palabras, la función debe compr...