Universidad de Costa Rica
|
|
|
Diseñe e
implemente su clase RPN
para que funcione
con el programa de prueba
TestRPN.java
que ejercita
los
métodos que permitan traducir una hilera que contiene
una expresión infija, en la que es necesario usar paréntesis,
en una
posfija equivalente. Para obtener su implementación, use
el algoritmo que funciona usando
pilas. Además, su implementación de la clase
RPN
debe ser polimórfica, de manera que la
expresión pueda tener números enteros o números de
punto flotante. También incluya el método
useLista()
y el método usaVector()
que
cambia el tipo de pila de una implementada con listas a otras
implementada con vectores, y viceversa. De esta forma, su clase
podrá modificar en tiempo de ejecusión su rendimiento
tanto en uso de espacio como en tiempo de ejecución.
Además, incluya más datos de prueba para
RPN
, con el fin de ejercitar la mayor parte de las
posibles variantes de ejecución para su clase. Luego, agregue un
interfaz amigable usando ventanas. Recuerde que las clases
lista y
vector de Java necesitan empacar
(box/unbox) en una clase los objetos que
contienen, por lo que usted está obligado a lidiar con esta
necesaria incomodidad del lenguaje.
Para esta tarea programada ustedes debe entregar, por lo menos, estos archivos:
RPN.java
Calculadora.java
TestRPN.java
CARNET.docx
CARNET.html
CARNET.url
En el documento CARNET.docx
deben describir su
experiencia de aprendizaje para completar esta tarea. Explique
qué hizo, cómo lo hizo y por qué lo hizo. En
especial, es importante que mencionen por qué escogieron
las instrucciones que incluyeron y cuáles fueron las
dificultades que enfrentaron.
El archivo CARNET.html
es copia de la página Internet en donde usted
instaló la solución de su tarea programada. El
archivo de enlace Internet CARNET.url
contiene solo
2 renglones y sirve para abrir la página Internet en que
está la documentación completa de su programa (para
crearlo puede usar cualquier editor de texto).
[InternetShortcut] URL=http://www.di-mare.com/adolfo/cursos/if-3001.htm |
if-3001.url
parámetro <E>
en su encabezado.
Algoritmo
,
Interfaz
,
Controlador
y
Datos
en el programa?
/** @(#)TestRPN.java 2013 adolfo@di-mare.com Datos de prueba para {@code RPN}. @author Adolfo Di Mare <adolfo@di-mare.com> */ import junit.framework.*; /** Datos de prueba para la clase {@code RPN}. */ public class TestRPN extends TestCase { /** test -> RPN. */ public static void test_RPN() { RPN calc = new RPN(); calc.cargue( "(5 * 3)" ); assertTrue( calc.posfijo().compareTo( "53*" ) == 0 ); assertTrue( 15 == calc.evaluar() ); calc.cargue( "(1 + 2) * (3 - 4 - 5)" ); assertTrue( calc.posfijo().compareTo( "12+34-5-*" ) == 0 ); assertTrue( -18 == calc.evaluar() ); calc.cargue( "(( (((((1 + 2))))) * ((((3 - 4 - 5)))) ))" ); assertTrue( calc.posfijo().compareTo( "12+34-5-*" ) == 0 ); assertTrue( -18 == calc.evaluar() ); calc.cargue( "1 / ( 3 - (2+1) )" ); assertTrue( calc.posfijo().compareTo( "1321+-/" ) == 0 ); assertTrue( 0 == calc.evaluar() ); calc.cargue( ")" ); assertTrue( calc.posfijo().compareTo( "" ) == 0 ); assertTrue( 0 == calc.evaluar() ); calc.cargue( "1++)" ); assertTrue( calc.posfijo().compareTo( "" ) == 0 ); assertTrue( 0 == calc.evaluar() ); calc.cargue( "1+2*)" ); assertTrue( calc.posfijo().compareTo( "" ) == 0 ); assertTrue( 0 == calc.evaluar() ); calc.cargue( "(x +" ); assertTrue( calc.posfijo().compareTo( "" ) == 0 ); assertTrue( 0 == calc.evaluar() ); } } // EOF: TestRPN.java |
RPN.java
&&
TestRPN.java
&&
Calculadora.java
(sin intefaz gráfica: lea una hilera del teclado usando la clase
Scanner de Java).
Calculadora.java
(con intefaz gráfica). Calculadora | |||
---|---|---|---|
(25+32)÷3×12 =228 |
|||
C | ÷ | × | ← |
7 | 8 | 9 | − |
4 | 5 | 6 | + |
1 | 2 | 3 | ( ) |
0 | . | +/− | = |
Adolfo Di Mare <adolfo@di-mare.com>.
|