rat-calc.cpp

Ir a la documentación de este archivo.
00001 /* rat-calc.cpp  (c) 2005 adolfo@di-mare.com */
00002 
00003 /** \file rat-calc.cpp La calculadora polimórfica de Adolfo
00004 */
00005 
00006 /** \mainpage
00007 
00008     \section rat-calc La calculadora polimórfica de Adolfo
00009 
00010     Este programa es una calculadora polimórfica muy simple
00011     que funciona con los siguientes objetos:
00012 
00013     - <code> long, int</code>: números enteros
00014     - \c rational:  números rationales
00015     - \c poly:      polinomios
00016 
00017     La calculadora funciona de la siguiente manera:
00018 
00019     - Al principio el valor acumulado es <code> [ 0 ] </code>
00020     - Se puede usar cualquier de los 4 operadores aritméticos
00021     - Para terminar se usa el operador de salida punto "."
00022 
00023     Traza de ejecución:
00024     \code
00025     [0] > + [ 2 / 3 ]
00026     [2/3] > / [ 6 / 2 ]
00027     [2/9] > * [ 18 ]
00028     [4] > - [ 45 / 9 ]
00029     [-1] > / [ 13 / 8 ]
00030     [-8/13] > * [ 2 ]
00031     [-16/13] > + [ 7 ]
00032     [75/13] > .
00033     [75/13] >
00034     \endcode
00035 
00036     \author Adolfo Di Mare <adolfo@di-mare.com>
00037     \date    2004
00038 
00039     - Why English names??? ==> http://www.di-mare.com/adolfo/binder/c01.htm#sc04
00040 */
00041 
00042 #include "rational.h"
00043 #include <limits.h>
00044 
00045 USING_namespace(ADH);     // ADH_port.h ==> using namespace ADH;
00046 
00047 /// Función principal en la que empieza la ejecución del programa
00048 int main() {
00049 
00050     rational r,        // último valor ingresado
00051              acum;     // acumulador de la calculadora
00052     char     op;       // operación a efectuar
00053 
00054     // inicializa el acumudador
00055     acum = 0; // acum.op=( 0 );
00056 
00057     // despliega el valor inicial del acumulador
00058     std::cout << acum << " > ";
00059     std::cin  >> op;
00060 
00061 
00062     // ciclo para leer la siguiente operación a efectuar
00063     while (op != '.') {
00064         // valor a operar con el acumulador
00065         std::cin >> r;             // operator>> (cin, r);
00066 
00067         // selección de la operación a realizar
00068         switch (op) {
00069             case '+': acum += r;          break; // acum.op += ( r ); // op += (acum, r)
00070             case '-': acum  = acum - r;   break; // acum.op  = (op- (acum, r));
00071             case '*': acum *= r;          break; // acum.op *= ( r );
00072             case '/': acum  = acum / r;   break; // acum.op  = (op/ (acum, r));
00073         default:
00074             // operación inválida
00075             std::cout << "\n(" << op << ")==> Operación inválida\n";
00076         }
00077 
00078         // despliega el nuevo valor del acumulador
00079         std::cout << acum << " > ";
00080         std::cin.ignore(INT_MAX, '\n');
00081         std::cin >> op;
00082     }
00083 
00084     // despliega el valor final del acumulador
00085     std::cout << acum << " > ";
00086     return 0;
00087 }  // main()
00088 
00089 /* EOF: rat-calc.cpp */

Generado el Wed Apr 9 13:16:23 2008 para Prueba de la clase rational: por  doxygen 1.5.4