Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
II Semestre 2013
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Tarea #3 [solución]

Cambio al Rep de la calculadora de números racionales

// ...
class racional {
private:
    long m_num; ///< Numerador
    long m_den; ///< Denominador

public:
    //...
    racional operator  - (); // menos unario
    friend racional operator + (const racional&, const racional&);
    friend racional operator - (const racional&, const racional&);
    friend racional operator * (const racional&, const racional&);
    friend racional operator / (const racional&, const racional&);

    friend bool operator == (const racional&, const racional&);
    friend bool operator <  (const racional&, const racional&);
    friend bool operator != (const racional&, const racional&);
    friend bool operator <= (const racional&, const racional&);
    friend bool operator >= (const racional&, const racional&);
    friend bool operator >  (const racional&, const racional&);

    friend ostream& operator << (ostream &, const racional& );
    friend istream& operator >> (istream &,       racional& );

    friend double real   (const racional& );   // Conversión a real
    friend long   integer(const racional& );   // Conversión a long
}; // racional

// ...
Figura 1: Código de rational.h

      Con alguna frecuencia es necesario hacer aritmética con números racionales, para lo que conviene contar con una clase números racionales. En el siguiente artículo, disponible en Internet, se describe una implementación de la clase rational para el lenguaje Turbo Pascal:

Di Mare, Adolfo
"La Implementación de Rational.pas"; Reporte técnico ECCI-94-03; Proyecto 326-89-019; 1994.

      http://www.di-mare.com/adolfo/p/rational.htm
      http://www.di-mare.com/adolfo/p/src/rational.zip

      El objetivo de esta tarea programada es darle la oportunidad de modificar una clase C++ cambiándole por completo el Rep. Por eso, en lugar de utilizar los campos (num,den) para el denominador y denominador de la clase rational, usted los sustituirá por una lista que siempre contenga 2 valores: el primero es el numerador y el segundo es el denominador. Use la lista std::list<> de la biblioteca estándar de C++. No olvide implementar el la función check_ok() que verifica la invariante de la clase.

/* p2-ta-3.cpp  (c) 2013 adolfo@di-mare.com */

#include <iostream>     // cin+cout
#include <iomanip>      // setw()
#include <climits>      // INT_MAX
#include "rational.h"   // clase de números racionales

int main(void) {
/*  resultado
    <><><><><><><><> Qué hace el programa... */
/*  programador <><><><><><><><>
    Ponga aquí su nombre y carnet
    <><><><><><><><> */

    rational<long> r,    // <><><><><><><><>
                   acum; // <><><><><><><><>
    char op;             // <><><><><><><><>

    // <><><><><><><><>
    acum = 0;

    // <><><><><><><><>
    std::cout << acum << " > ";
    std::cin  >> op;


    // <><><><><><><><>
    while (op != '.') {
        // <><><><><><><><>
        std::cin >> r;        // <><><><><><><><>

        // <><><><><><><><>
        switch (op) {
            case '+': acum += r;          break;
            case '-': acum  = acum - r;   break;
            case '*': acum *= r;          break;
            case '/': acum  = acum / r;   break;
        default:
            // <><><><><><><><>
            std::cout << "\n(" << op << ")==> Operación inválida\n";
        }

        // <><><><><><><><>
        std::cout << acum << " > ";
        std::cin.ignore(INT_MAX, '\n');
        std::cin >> op;
    }

    // <><><><><><><><>
    return 0;
}  // main()

/* EOF: p2-ta-3.cpp */
Figura 2: Calculadora de números racionales

      Tome la implementación de la Figura 2, hágala funcionar y documéntela apropiadamente. Use Doxygen.

      Entregue 2 versiones de su clase rational. En el subdirectorio llamado simple incluya la implementación con la cantidad mínima de cambios para que compile el programa p2-ta-3.cpp de la Figura 2 compile y funcione. En la segunda carpeta, llamada completo, incluya otra implementación que sirva para que el programa de prueba test_rational.cpp también funcione. Explique por qué la versión simple (que obviamente tiene errores de compilación) funciona correctamente con p2-ta-3.cpp pese a que no funciona con test_rational.cpp.

      Entregue su tarea por correo electrónico, como lo hizo anteriormente.

[mailto:] Entrega de Tareas

Tiempo de entrega: 7 días
Modalidad: Individual

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2013
Derechos de autor reservados © 2013
[home] <> [/\]