00001 /* rat-calc.cpp (c) 2005 [email protected] */ 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 <[email protected]> 00037 \date 2004 00038 00039 - Why English names??? ==> http://www.di-mare.com/adolfo/binder/c01.htm#sc04 00040 */ 00041 #include "rational.h" 00042 #include <limits.h> 00043 00044 /// Función principal en la que empieza la ejecución del programa 00045 //template <class INT> 00046 int main() { 00047 00048 rational<int> r, // último valor ingresado 00049 acum; // acumulador de la calculadora 00050 char op; // operación a efectuar 00051 00052 // inicializa el acumudador 00053 acum = 0; 00054 00055 // despliega el valor inicial del acumulador 00056 cout << acum << " > "; 00057 cin >> op; 00058 00059 00060 // ciclo para leer la siguiente operación a efectuar 00061 while (op != '.') { 00062 // valor a operar con el acumulador 00063 cin >> r; // operator>> (cin, r); 00064 00065 // selección de la operación a realizar 00066 switch (op) { 00067 case '+': acum += r; break; // acum.op += ( r ); 00068 case '-': acum = acum - r; break; // acum.op = (op- (acum, r)); 00069 case '*': acum *= r; break; // acum.op *= ( r ); 00070 case '/': acum = acum / r; break; // acum.op = (op/ (acum, r)); 00071 default: 00072 // operación inválida 00073 cout << "\n(" << op << ")==> Operación inválida\n"; 00074 } 00075 00076 // despliega el nuevo valor del acumulador 00077 cout << acum << " > "; 00078 cin.ignore(INT_MAX, '\n'); 00079 cin >> op; 00080 } 00081 00082 // despliega el valor final del acumulador 00083 cout << acum << " > "; 00084 return 0; 00085 } // main() 00086 00087 /* EOF: rat-calc.cpp */
1.4.1