Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-1201 Programación II - I-2013
Profesor Jeisson Hidalgo-Céspedes
Grupo 03. Entrega límite: 25-may-2013 11:55 p.m.

Tarea 04: Calculadora fraccional

Escriba un programa orientado a objetos en C++ 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 [como en la 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 Fraction

Su solución en C++ debe consistir de al menos dos clases: Calculator y Fraction. Es evidente la relación entre ellas: la clase Calculator crea fracciones a demanda. Por su parte la clase Faction se encarga de tareas como:

Puede utilizar la clase Fraction elaborada durante las lecciones del curso, la cual realiza parte de la funcionalidad solicitada previamente y que se presenta en el siguiente listado.

]]>
]]>
Clase Fraction desarrollada durante las lecciones del curso. Obtener Fraction.h y Fraction.cpp.

Evaluación

  1. [10%] Clase Fraccion. Simplifica y evita negativos en el denominador cuando se crea una nueva fracción o se lee del teclado. Si la fracción representa un entero, lo imprime como tal y no como una fracción.
  2. [10%] Resta y divide fracciones correctamente.
  3. [20%] Sobrecarga los operadores de asignación aritméticos (+=, -=, *=, /=) de manera eficiente y correcta. Nótese que deben funcionar incluso si se invocan con el mismo objeto (por ejemplo, f1 -= f1).
  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 únicamente los archivos fuente (.cpp, .h) que haya creado y suba el comprimido a la Plataforma Educativa en la asignación con nombre Tarea04.