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#
Mostrar 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
Código de Ejemplo Copiado!
Comparte este Ejercicio C# Sharp