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.

Tarea 04

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
Ejemplo de ejecución del programa.

Modo ingreso de fracción

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.

Modo ingreso de operador

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:

Clase 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:

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.

Ejemplos de las clases Calculadora.java y Fraccion.java hechas durante las lecciones del curso.

Evaluación

  1. [20%] Clase Fraccion. Simplifica y evita negativos en el numerador cuando se crea una nueva fracción o se lee del teclado.
  2. [10%] Lee fracciones correctamente del teclado. Ignora el / 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.
  3. [10%] Resta y divide fracciones correctamente.
  4. [20%] Clase 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.
  5. [20%] Estado leer fracción. Imprime el indicador "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.
  6. [20%] Estado leer operador. Imprime el indicador "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.