PRÁCTICA Nº 2: 1 sesión

(del 20 al 26 de Marzo de 2003)

Construcción de una clase Fracción

0. Objetivos

El objetivo de esta práctica es la implementación de una clase en C++ y la construcción de un programa que la utilice. La clase a implementar será la clase ‘fFracción’ y realizaremos un programa que calcule el sumatorio de una serie de fraccciones.

1. Introducción

Una fracción (número racional) está caracterizada por un numerador y por un denominador, teniendo la forma: numerador / denominador (Ej.: 7 / 3, -15 / 18). Una fracción puede tener un valor real equivalente, pero no es un número real.

2. Realización de la práctica

a. Implementación de la clase y comprobación de su correcto funcionamiento

En esta segunda práctica, se debe implementar una clase en C++ que permita representar el tipo ‘Fracción’, asumiendo el siguiente interfaz:


    class Fraccion
    {
        public:
            void Asignar (int num, int denom);
            void Leer ();
            void Escribir ();
            Fraccion Sumar (Fraccion f) const;
            Fraccion Restar (Fraccion f) const;
            Fraccion Menos () const;
            float Evaluar ();
            bool Igual (Fraccion f);
        private:
            int numerador;
            int denominador;
            void Simplificar ();
   }

La clase debe de estar implementada de manera que:

(i) La fracción siempre se almacene en forma canónica (simplificada).

Ej.: 4 / 2, no → 2 / 1, sí.

(ii) El signo de la fracción debe de ir asociado al numerador. Por lo que, el denominador siempre será positivo.

Ej.: 5 / -2, no → -5 / 2, sí. –7 / -3, no → 7 / 3, sí.

(iii) Debe de avisar si la fracción tiene un denominador con valor 0 (cero), indicando que esa fracción no es válida (mensaje por pantalla).

La interpretación de los métodos declarados en el interfaz es la siguiente:

void Asignar (int num, int denom);

Almacena la fracción que tiene numerador num y denominador denom en el objeto fracción que recibe el mensaje.

void Leer ();

Lee por teclado los datos de una fracción y los almacena en el objeto que recibe el mensaje.

void Escribir ();

Escribe por pantalla la fracción correspondiente al objeto que recibe el mensaje.

Fraccion Sumar (Fraccion f) const;

Suma dos fracciones, el objeto que recibe el mensaje más el objeto f. Devuelve el resultado de la suma y no modifica ninguno de los operandos.

Fraccion Restar (Fraccion f) const;

Resta dos fracciones, el objeto que recibe el mensaje menos el objeto f. Devuelve el resultado de la resta y no modifica ninguno de los operandos.

Fraccion Menos () const;

Devuelve, cambiada de signo, la fracción correspondiente al objeto que recibe el mensaje.

float Evaluar ();

Devuelve el valor real equivalente a dividir el numerador y el denominador de la fracción correspondiente al objeto que recibe el mensaje.

bool Igual (Fraccion f);

Compara la fracción correspondiente al objeto que recibe el mensaje y la fracción f y devuelve como resultado true si las dos fracciones son iguales y false en caso contrario.

void Simplificar ();

Simplifica la fracción correspondiente al objeto que recibe el mensaje (es un método privado).

El funcionamiento de la clase construida se debe comprobar con el siguiente programa:


    #include <iostream.h>
    #include "fraccion.h"

    int main()
    {
        Fraccion a, b, res;
    
        a.Leer();
        b.Asignar (5,-6);
        if (a.Igual (b) )
            cout << "a y b son iguales." << endl;
        res = a.Sumar (b);
        cout << "Suma de a y b: ";
        res.Escribir();
        cout << endl;
        res = a.Restar (b);
        cout << "Resta de a y b: ";
        res.Escribir();
        cout << endl;

        return 0;
}

b. Realización de un programa que utilice la clase implementada

Como final de la práctica se debe escribir un programa que permita calcular:

La variable n debe de ser una entrada del programa. Este programa realizará el cálculo de dos formas:

(i) Usando fracciones.

(ii) Usando el tipo float

En cada ejecución del programa se deberán mostrar 3 resultados:

(i) Fracción resultante del cálculo con fracciones.

(ii) Valor real equivalente a la fracción anterior.

(iii) Valor real resultante del cálculo con float.

4. Entrega de Programas

Al comienzo de la siguiente sesión de prácticas se entregarán al profesor tres ficheros:

1) Ficheros de la clase Fraccion (##Fraccion.cpp y ##Fraccion.h)

2) Programa principal donde se realizan y comparan los sumatorios (##Sumas.cpp).

Nota Muy Importante

Antes de poder empezar a realizar cualquiera de las prácticas es necesario presentar las hojas de especificación de programas (documentación de programas) con las tareas que se van a realizar en la práctica, explicando brevemente como se van a solucionarse los problemas que se plantean.

 

ENTREGA DE PROGRAMAS: Al comenzar la sesión de prácticas del 27 de Marzo al 4 de Abril.