| Ver tema anterior :: Ver tema siguiente |
zuva89 Novato por aquí
Registrado: 11 Oct 2009 Mensajes: 1
|
Publicado: Dom Oct 11, 2009 7:57 pm Asunto: si me pueden ayudar, yo se que tampoco es hacerlo obvio |
|
|
|
1. El sistema deberá poseer un menú (Repetitivo) con las siguientes opciones:
1. Convertir expresión infija a posfija
2. Salir
Los compiladores usan pilas para facilitar el proceso de evaluar expresiones y generar código en lenguaje máquina.
Las personas generalmente escriben expresiones como 3 + 4 y 7 / 9 en las que el operador (+ o / aquí) se escribe entre sus operando; esto de denominan notación infija. Las computadoras “ prefieren” la notación postfija en la que el operador se escribe a la derecha de sus operando. Las expresiones infijas anteriores se escribirían en notación posfija como 3 4 + y 7 9 /, respectivamente.
Para evaluar una expresión infija compleja lo primero que haría un compilador es convertir la expresión a notación posfija, y luego evaluarla a la versión posfija de la expresión. Estos algoritmos requieren un solo recorrido aunque en cada uno la pila se usa para un propósito distinto.
Escriba un programa en java que realice las siguientes operaciones por medio de un menú:
Para convertir una expresión aritmética infija ordinaria (suponiendo que se introdujo una expresión válida) con enteros de un solo dígito como:
(6 + 2) * 5 – 8 / 4
En una expresión posfija. La versión posfija de la expresión anterior es:
6 2 + 5 * 8 4 / -
El programa deberá colocar la expresión leída en String Infija y usar unas de las clases de pila implemetadas en clases para ayudar a crear la expresión posfija en String Posfija. El algoritmo para crear una expresión posfija es el siguiente:
1. Si el carácter actual de infija es un paréntesis izquierdo, meterlo en la pila.
2. Mientras infija no sea final de línea, leer infija de izquierda a derecha y hacer lo siguiente:
Si el carácter actual de infija es un dígito, anexarlo a posfija.
Si el carácter actual infija es un paréntesis izquierdo, meterlo en la pila.
Si el carácter actual infija es un operador,
Sacar operadores( si los hay) del tope de la pila mientras tengan la misma o más alta procedencia que el operador actual, y anexar los operadores sacados a posfija.
Meter el carácter actual de infija en la pila.
Si el carácter actual de infija es un paréntesis derecho
Sacar operadores del tope de la pila y anexarlos a posfija
Hasta que haya un paréntesis izquierdo en el tope de la pila
Sacar (y desechar) el paréntesis izquierdo de la pila
3. Mientras la pila no sea vacia extraer los operadores y anexarlos a posfija.
Se permiten las siguientes operaciones aritméticas en una expresión:suma resta mul y divsion
La pila deberá mantenerse con nodos de pila que contengan, cada uno, una variable de ejemplar y una referencia al siguiente nodo de la pila
Entre los métodos que seguramente querrá incluir están:
* Método convertirPosfija que convierte la expresión infija a notación posfija.
* Método isOperador que dermina si C es un operador.
* Método precedencia que termina si la precedencia del operador1(de la expresión infija) es menor, igual o mayor que la precedencia de operador 2 (de la pila). El método devuelve trae si operador 1 tiene una precedencia más baja que operador2; si no devuelve false.
* Método pilatope(tope de pila, que deberá agregarse a la clase pila) que devuelve el valor que esta hasta arriba de la pila sin sacar un elemento de la pila,
En el momento en que el usuario escoja una de las opciones deberá pedirse el dato (Valor) a convertir, y posteriormente se despliega en pantalla el valor convertido.
El código fuente del proyecto debe estar documentado internamente, utilizando Java Doc y los otros tipos de comentarios. |
|
| Volver arriba |
|
|
|
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
|
|
|
|
|
|