Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-0202 Principios de informática - III-2012
Profesor Jeisson Hidalgo-Céspedes
Grupo 903. Entrega límite: 26-feb-2013 11:55 p.m.
Escriba un programa en Java que simula una sencilla calculadora fraccional sin prioridad de operaciones. Su calculadora trabajará en dos modos o estados: modo ingreso de fracción donde estará esperando que el usuario ingrese una fracción en la forma a / b
, y el modo ingreso de operación, en el cual el usuario debe ingresar un operador aritmético o la letra C
para limpiar el resultado de una operación previa. Ejemplo de ejecución:.
Calculadora fraccional fr> 4 / 26 2/13 op> + fr> 2 / 26 2/13 + 1/13 = 3/13 op> * fr> 13 / -2 3/13 * -13/2 = -3/2 op> + fr> 1 / 1 -3/2 + 1 = -1/2 op> C 0 fr> 1 / 1 1 op> + fr> 4 / 2 1 + 2 = 3 op> / fr> 15 / 6 3 / 5/2 = 6/5 op> q
Al iniciar la calculadora entrará en modo ingreso de fracción, y lo indicará con la leyenda fr>
para ayudar al usuario, quien debe ingresar una fracción válida en formato a / b
[línea 3 del ejemplo anterior]. Si se ingresa una fracción de la forma a / 0
, puede indicar un mensaje de error o si gusta, terminar la ejecución de su programa.
Su calculadora debe tener espacio de memoria para almacenar al menos dos fracciones: la fracción resultado de operaciones previas (llamada en adelante la fracción resultado) y la fracción que está ingresando el usuario (llamada fracción ingresada). Cada vez que el usuario ingresa una fracción válida, ésta se almacenará en la fracción ingresada.
La primera vez que se lee una fracción, no hay una operación pendiente y por ende, la fracción ingresada es copiada directamente en la fracción resultado, y se imprime en la pantalla. Si por el contrario, hay una operación pendiente (representada por operador
), a la fracción resultado se le asignará el resultado de la expresión: .
fraccionResultado = fraccionResultado operador fraccionIngresada
y en tal caso, se imprimirá la operación anterior en la pantalla de la calculadora, como se hizo en la línea 7 del ejemplo de ejecución.
Una vez leída correctamente una fracción en el modo ingreso de fracción, la calculadora pasa al estado ingreso de operador indicado al usuario con la leyenda op>
, como ocurre en la línea 5 del ejemplo de ejecución. En este modo, el usuario debe ingresar uno de los 4 operadores aritméticos (+
, -
, *
, /
), con el fin de aplicar esa operación a la fracción recién leída (o al resultado de operaciones previas) con una nueva fracción que ingresará seguidamente.
Si en el modo ingreso de operador el usuario ingresa uno de los 4 operadores aritméticos, éste se almacena internamente en un espacio de memoria para operadores, y se pasa silenciosamente al modo ingreso de fracción (como ocurre en la línea 6 del ejemplo de ejecución). Sin embargo, el usuario puede ingresar otros operadores:
=
. Simplemente se imprime la fracción resultado en la pantalla y se pasa al modo ingreso de fracción.C
ó c
. Indica a la calculadora que debe limpiar (clean) la fracción resultado, es decir, volverla a su condición inicial de 0 / 1
. Luego pasa al modo ingreso de fracción.Q
ó q
. Termina (quit) la ejecución del programa simulador de calculadora fraccional.Calculadora
y clase Fraccion
Su solución en Java debe consistir de al menos dos clases: Calculadora
y Fraccion
. La primera debe ser pública y la segunda puede no serlo si se encuentra dentro del mismo archivo (Calculadora.java
). Es evidente la relación entre ellas: la clase Calculadora
crea fracciones a demanda. Por su parte la clase Fraccion
se encarga de tareas como:
mcd
con el Algoritmo de Euclides; y luego se divide tanto el numerador como del denominador por mcd
.teclado.skip("\\s*/\\s*)
para ignorar el /
que introduce el usuario entre el numerador y denominador.String
con la fracción en la forma "a/b"
{Hecho en los ejemplos de abajo}.f1.sumar(f2)
, f1.restar(f2)
, f1.multiplicar(f2)
, y f1.dividir(f2)
, que retornan una nueva fracción resultado de aplicar la operación entre las fracciones f1
y f2
.Puede tomar como punto de partida las clases Calculadora
y Fraccion
hechas como ejemplos en las lecciones del curso, y se muestran a continuación.
Fraccion
. Simplifica y evita negativos en el numerador cuando se crea una nueva fracción o se lee del teclado./
si el usuario lo ingresa. No imprime los textos "numerador" o "denominador" cuando se está leyendo. Avisa si la fracción que ingresó el usuario fue válida o no con un valor de retorno.Calculadora
. Mantiene dos fracciones y la operación pendiente como atributos de la clase. Se mantiene en un ciclo alternando entre los dos estados (leer fracción y leer operación), hasta que se indique la operación salir o se ingrese una fracción no válida."fr> "
para ayudar al usuario. Copia la fracción ingresada en la fracción resultado si no hay una operación pendiente. Si la hay, aplica la operación pendiente en la fracción resultado. En cualquier caso avisa el resultado de estas operaciones en la pantalla."op> "
para ayudar al usuario. Lee el operador del teclado. Reimprime la fracción resultado si el operador es "="
. Sale del programa si el operador es "Q"
ó "q"
.Para presentar su solución, comprima los archivos .java
que haya creado y suba el comprimido a Mediación virtual en la asignación con nombre Tarea04
.