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

Tarea #1 [solución]

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 tomar un programa C++ completo para que usted le agregue la documentación externa y aprendo a compilarlo.

/* p2-ta-1.cpp  (c) 2005 adolfo@di-mare.com */

#include "rational.h"   // clase de números racionales

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

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

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

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


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

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

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

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

/* EOF: p2-ta-1.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.

Fuentes para

Doxygen
/** Calcula el Máximo Común Divisor de los números \c "x" y \c "y".
    - Se usa el algoritmo de Euclides para hacer el cálculo.
    - <code> mcd(x,y) >= 1 </code> siempre.
    - MCD <==> GCD: <em> Greatest Common Divisor </em>.

    \pre
    <code> (y != 0) </code>
*/
long mcd(long x, long y);

Documentación generada por

long mcd ( long x, long y )
Calcula el Máximo Común Divisor de los números "x" y "y".
  • Se usa el algoritmo de Euclides para hacer el cálculo.
  • mcd(x,y) >= 1 siempre.
  • MCD <==> GCD: Greatest Common Divisor .
Precondición:
(y != 0)

 

Entrega de la tarea

PROJECT_NAME          = "952809 Tarea Programada #1"
OUTPUT_LANGUAGE       = Spanish
OUTPUT_DIRECTORY      = .
GENERATE_LATEX        = NO
GENERATE_MAN          = NO
GENERATE_RTF          = NO
CASE_SENSE_NAMES      = YES
INPUT                 = p2-ta-1.cpp rational.cpp check_ok.cpp rational.h
RECURSIVE             = NO
QUIET                 = YES
JAVADOC_AUTOBRIEF     = YES
EXTRACT_ALL           = YES
EXTRACT_PRIVATE       = YES
EXTRACT_STATIC        = YES
EXTRACT_LOCAL_CLASSES = YES
INLINE_INHERITED_MEMB = YES
SOURCE_BROWSER        = NO
INLINE_SOURCES        = NO
STRIP_CODE_COMMENTS   = NO
REFERENCED_BY_RELATION= NO
REFERENCES_RELATION   = NO
FULL_PATH_NAMES       = NO

SORT_MEMBER_DOCS      = NO
SORT_BRIEF_DOCS       = NO
CLASS_DIAGRAMS        = YES

ENABLE_PREPROCESSING  = YES
MACRO_EXPANSION       = YES
EXPAND_ONLY_PREDEF    = YES
PREDEFINED            = "_MSC_VER= 1300"

#--- TODOS ESTOS SON MENOS COMUNES ---
# DISTRIBUTE_GROUP_DOC = YES
# ENABLE_PREPROCESSING = YES
# EXAMPLE_PATH         = example_test.cpp
# FILE_PATTERNS        = diagrams_*.h
# GENERATE_TAGFILE     = example.tag
# HAVE_DOT             = YES
# PERL_PATH            = perl
# TAGFILES             = example.tag=../../example/html

# Manual ==> http://www.doxygen.org/manual.html

      Luego de imprimir la documentación de su programa, y entregarla en clase, envíe su trabajo por correo electrónico. Para esto, haga un archivo empacado .zip cuyo nombre sea su número de carnet. Incluya en ese archivo lo siguiente:

  1. Un documento en formato HTML que describa el trabajo que realizó. Incluya el nombre del compilador que usó.
  2. La especificación de su programa.
  3. Archivo de configuración Doxygen (los asistentes usrarán este archivo de configuración para generar la documentación de su programa, por lo que sobra que usted incluya esa documentaciónen su archivo .zip).
  4. El código fuente de sus programas (archivos de implementación *.c, *.cpp, *.h, etc.).
  5. Los archivos y datos de prueba para su programa.
  6. Un archivo de enlace Internet, con extensión .url que permita abrir la página Internet en que está la documentación completa de su programa.

      Las cuentas de computador en la ECCI se asignan de acuerdo al número de carnet. Por ejemplo, si su carnet es el número 95-28-09, para entregar su tarea usted debe crear el archivo 952809.zip para enviarlo por correo electrónico. Si varios alumnos participaron en la confección de la tareas, sus carnets deben incluirse en el nombre del archivo .zip: 952809-952810-952811.zip.

      Luego haga en su cuenta personal un subdirectorio llamado public_html, que es bajo el que se instalan todas sus páginas Internet. Por ejemplo, si su solución está en el archivo HTML llamado "OLP/t3sol952809.htm", entonces usted debe instalar esa página en el archivo
      public_html/OLP/t3sol952809.htm
de su cuenta. Luego, para acceder esa página Internet, debe entrar a este sitio:
      http://anubis.ecci.ucr.ac.cr/~e952809/OLP/t3sol952809.htm

[InternetShortcut]
URL=http://anubis.ecci.ucr.ac.cr/~e952809/OLP/t3sol952809.htm
952809.url

      Como todas las cuentas de estudiante son la letra "e" seguida del número de carnet, para el estudiante de carnet "952809" la cuenta es "e952809". Para indicarle al servidor Internet a cuál cuenta entrar se usa el caracter "~" (Alt-126), seguido del nombre de la cuenta: "~e952809". En este caso, el archivo de acceso rápido a su página Internet se llamaría "952809.url".

      Después de la fecha de entrega del programa, puede usted instalar en su cuenta personal su solución (no instale antes su solución en Internet, pues en ese caso sería usted culpable de facilitar la copia de su trabajo, y en consecuencia se haría acreedor a la sanción respectiva).

      Por ejemplo, para entregar su tarea programada, el estudiante 952809 crea su archivo 952809.zip en el que aparece estos archivos (este alumno no hizo los programas de prueba):

p2-ta-1.cpp
Solución programada de la tarea
 
rational.h
Declaraciones e interfaz de la clase "rational"
rational.cpp
Definiciones para la clase "rational"
 
952809.doc
Documentación, escrita con Word (incluye la portada)
952809.htm
Página Internet con toda la documentación
952809.dxg
Archivo de configuración Doxygen.
952809.url
Enlace para abrir la página Internet
 
rational.dsp
Archivo para compilar el programa con MSC++ v6.x
rational.vcproj
Archivo para compilar el programa con MSC++ .NET

[mailto:] Entrega de Tareas

Tiempo de entrega: 7 días
Modalidad: Individual

Soluciones

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