Grupo
Gestión Dinámica de Memoria en C#
Objectivo
1. Leer una expresión RPN de un archivo de texto.
2. Almacenar cada elemento en una cola.
3. Transferir elementos de la cola a una pila.
4. Procesar la pila para calcular el resultado de la expresión RPN.
5. Mostrar el resultado final en la consola.
Crear un programa que lea una expresión de Notación Polaca Inversa de un archivo de texto, por ejemplo:
3 4 6 5 - + * 6 +
(Result 21)
Cada elemento se almacenará en una cola. Una vez que la cola tenga todos los elementos almacenados, deberá transferirlos de la cola a una pila utilizando las clases Queue y Stack de C#.
Finalmente, operará con la pila para obtener el resultado correcto de la expresión RPN y mostrarlo en la consola.
Ejemplo de ejercicio en C#
Mostrar código C#
using System;
using System.Collections.Generic;
using System.IO;
class ReversePolishNotation
{
static void Main()
{
// Define the file path where the RPN expression is stored
string filePath = "rpn_expression.txt";
// Read the expression from the file
string expression = File.ReadAllText(filePath).Trim();
// Split the expression into individual tokens (numbers and operators)
string[] tokens = expression.Split(' ');
// Create a queue to store the tokens
Queue queue = new Queue();
// Enqueue each token into the queue
foreach (string token in tokens)
{
queue.Enqueue(token);
}
// Create a stack to process the RPN expression
Stack stack = new Stack();
// Process the queue and evaluate the RPN expression
while (queue.Count > 0)
{
string currentToken = queue.Dequeue();
// Check if the token is a number
if (int.TryParse(currentToken, out int number))
{
// Push the number onto the stack
stack.Push(number);
}
else
{
// If the token is an operator, pop two values from the stack
int b = stack.Pop();
int a = stack.Pop();
// Perform the corresponding operation
int result = currentToken switch
{
"+" => a + b,
"-" => a - b,
"*" => a * b,
"/" => a / b,
_ => throw new InvalidOperationException("Invalid operator encountered.")
};
// Push the result back onto the stack
stack.Push(result);
}
}
// The final result will be the only value left in the stack
Console.WriteLine($"Result: {stack.Pop()}");
}
}
Output
Result: 21
Código de ejemplo copiado
Comparte este ejercicio de C#