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.
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
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.
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 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:
mcd
con el Algoritmo de Euclides; y luego se divide tanto el numerador como del denominador por mcd
.+
, -
, *
, y /
para realizar sumas, restas, multiplicaciones y divisiones de dos objetos Fraction
.f1 += f2
, f1 -= f2
, f1 *= f2
, f1 /= f2
), que guardan en la fracción de la izquierda f1
el resultado de realizar la operación entre f1
y f2
. Nótese, por ejemplo, que aunque f1 -= f2
equivale a f1 = f1 - f2
, el operador -=
debe implementarse de una manera mucho más eficiente.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.
]]>
]]>
Fraction
desarrollada durante las lecciones del curso. Obtener Fraction.h y Fraction.cpp.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.+=
, -=
, *=
, /=
) de manera eficiente y correcta. Nótese que deben funcionar incluso si se invocan con el mismo objeto (por ejemplo, f1 -= f1
).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 únicamente los archivos fuente (.cpp
, .h
) que haya creado y suba el comprimido a la Plataforma Educativa en la asignación con nombre Tarea04
.