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 */