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.