Generalidades del Proyecto: Los seres humanos normalmente escriben las expresiones como 3 + 4 y 7 / 9, en el cual el operador (+ o /) se escribe entre los operandos (esto se conoce como notación infija). Las computadoras prefieren la notación postfija, en la cual el operador se escribe a la derecha de sus dos operandos. Las expresiones infijas anteriores aparecerían en notación postfija como 3 4 + y 7 9 /, respectivamente. Para evaluar una expresión infija compleja, un compilador primero convertiría la expresión a notación postfija, y a continuación evaluaría la versión postfija de la expresión. Cada uno de estos algoritmos requiere de una pasada de izquierda a derecha en la expresión. Descripción del Proyecto: El proyecto consiste en hacer un programa que lleve a cabo lo siguiente: 1. Convertir una expresión infija aritmética válida como: (6 + 2) * 5 - 8 / 4 a una expresión postfija. La expresión postfija de la expresión infija anterior es: 62+5*84/- 2. Evaluar la expresión postfija 3. Presentar el resultado en Sistema Decimal, Binario, Octal y Hexadecimal (Desarrollar los algoritmos) Los operandos deben de ser de varios dígitos sin punto decimal y las operaciones permitidas son: + Adición - Substracción * Multiplicación / División % Módulo Las estructuras que se van a manejar son: 1. Lista postfija en modo de Queue, que contiene la traducción del String de entrada infija a postfija. 2. Lista operadores, en modo de Stack, que maneja los operadores del String de entrada infijo. 3. Lista operandos en modo de Stack, que maneja los operandos para la solución de la operación postfija. Modo de Operación: El cliente puede dar una sola expresión infija o un archivo de expersiones infijas. El servidor debe recibir la información del cliente y en caso de ser una sola expresión mandar al cliente el resultado de su expresión postfija correspondiente y el resultado de realizar la expresión en notación decimal, Practica 4: POO, Notación Postfija 2/ 3 binaria, octal y hexadecimal. En caso de que el cliente mande un archivo de n expresiones infijas, el servidor debe regresar al cliente un archivo en el que determine la expresión postfija y sus resultados en las cuatro notaciones, o en caso de que sean inválidas las expresiones infijas, los mensajes de error que podrían contener dichas expresiones. El algoritmo para crear una expresión postfija es como sigue: 1. Si del String de entrada se lee un paréntesis izquierdo ‘(‘, éste debe insertarse a la lista de operadores 2. Si del String de entrada se lee un paréntesis derecho ‘)’ se sacan de la lista de operadores todos los operadores hasta encontrar un paréntesis izquierdo ‘(‘. 3. Si del String de entrada se lee un número, este se inserta en la lista postifija. 4. Si del String de entrada se un operador ‘+’, ‘-‘, ‘*’, ‘/’ o ‘%’: a. Si es un operador de mayor prioridad, entra siempre al Stack sacando al operador de igual prioridad que se encuentre en el Satck. b. Si es un operador de menor prioridad, entre siempre al Stack sacando al operador de mayor o igual prioridad que se encuentre en el Stack. 5. Si se termina de leer caracteres en la infija y quedan elementos en el Satck se añaden a la postfija
Precedencia de operadores matemáticos u orden de cálculo
Operador Operación Precedencia
( ) Paréntesis Se evalúan primero. Si los paréntesis están anidados, la
expresión en el par más interno se evalúa primero. Si existen varios pares de paréntesis en el mismo nivel, se calcularán de izquierda a derecha.
*, /, % Multiplicación, división Se evalúan en segundo lugar. Si existen varios se
y módulo calcularán de izquierda a derecha.
+, - Suma, resta Se evalúan al último. Si existen varios se calcularán de
izquierda a derecha.
Su aplicación debe cumplir con lo siguiente:
1. Su diseño debe estar basado en orientado a objetos. 2. Los operandos pueden estar conformados por varios dígitos, deben ser enteros y los resultados tambien deben ser enteros positivos o negativos. Las expresiones infijas pueden contener errores. 3. Debe utilizarse manejo de archivos. 4. Debe utilizarse networking. Practica 4: POO, Notación Postfija 3/ 3 Ejemplo: String de Entrada: (6 + 2) * 5 - 8 / 4 Expresión Infija 8*5–8/4 40 – 8 / 4 Forma de resolver tomando en 40 – 2 cuenta la precedencia o jerarquía 38 operaciones
Para convertir una expresión infija a postfija de acuerdo al algoritmo se tiene:
Para obtener el resultado desde una expresión postfija:
El programa debe presentar un menú con las opciones a realizar: