Durante esta práctica, los alumnos serán capaces de:
Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.
Para esta actividad de programación, se prohíbe el uso de sistemas de inteligencia artificial (IA) como ChatGPT o Copilot. El propósito es evaluar tu habilidad de programar de manera auténtica y sin ayuda de herramientas externas.
El incumplimiento de esta regla será considerado una violación académica y puede resultar en sanciones. Revisa la documentación oficial y otros recursos educativos, y no dudes en preguntar a tu profesor si tienes dudas.
¡Confía en tus habilidades y demuestra tu potencial!
Esta práctica debe ser elaborada en los equipos de dos personas ya constituidos.
A partir del código de C++ elaborado en clase, agrega las declaraciones y definiciones necesarias a la clase Rational
para incorporar las funciones miembro (métodos) que se describen a continuación. Debes modificar los archivos rational.h
y rational.cpp
según corresponda.
Función miembro | Descripción |
---|---|
|
Multiplicación (operador binario): regresa un nuevo objeto Fórmula: $$ \frac{a}{b} \times \frac{c}{d} = \frac{a \cdot c}{b \cdot d} $$ |
|
Recíproco (operador unario): regresa un nuevo objeto El recíproco de un número racional es un número que, al multiplicarse por el original, da como resultado uno, obteniéndose al intercambiar el numerador y el denominador del número original. Fórmula: $$ \left ( \frac{a}{b} \right )^{-1} = \frac{b}{a} $$ |
|
División (operador binario): regresa un nuevo objeto Fórmula: $$ \frac{a}{b} \div \frac{c}{d} = \frac{a}{b} \times \left ( \frac{c}{d} \right )^{-1} = \frac{a \times d}{b \times c} $$ |
|
Menor que (operador binario): regresa Fórmula: $$ \left ( \frac{a}{b} < \frac{c}{d} \right ) = ( a \times d < b \times c) $$ |
|
Menor o igual (operador binario): regresa Fórmula: $$ \left ( \frac{a}{b} \le \frac{c}{d} \right ) = ( a \times d \le b \times c) $$ |
|
Mayor que (operador binario): regresa Fórmula: $$ \left ( \frac{a}{b} > \frac{c}{d} \right ) = ( a \times d > b \times c) $$ |
|
Mayor o igual (operador binario): regresa Fórmula: $$ \left ( \frac{a}{b} \ge \frac{c}{d} \right ) = ( a \times d \ge b \times c) $$ |
Prueba tu código utilizando el siguiente archivo main.cpp
:
// Archivo: main.cpp // Para compilar y correr: // // g++ *.cpp -o main && ./main #include <iostream> #include <iomanip> #include <stdexcept> #include "rational.h" int main() { Rational a(1, 2); Rational b(6, 4); Rational c(4, 8); Rational d; Rational e(-3); // Para imprimir los booleanos como true o false // en lugar de 1 o 0. std::cout << std::boolalpha; std::cout << "a: " << a << "\n"; std::cout << "b: " << b << "\n"; std::cout << "c: " << c << "\n"; std::cout << "d: " << d << "\n"; std::cout << "e: " << e << "\n"; std::cout << "a + b: " << a + b << "\n"; std::cout << "c + d: " << c + d << "\n"; std::cout << "a == c: " << (a == c) << "\n"; std::cout << "a == b: " << (a == b) << "\n"; std::cout << "a != b: " << (a != b) << "\n"; std::cout << "a != c: " << (a != c) << "\n"; std::cout << "-a: " << -a << "\n"; std::cout << "-e: " << -e << "\n"; std::cout << "a - b: " << a - b << "\n"; std::cout << "c - e: " << c - e << "\n"; std::cout << "static_cast<double>(a): " << static_cast<double>(a) << "\n"; std::cout << "static_cast<double>(b): " << static_cast<double>(b) << "\n"; std::cout << "a * b: " << a * b << "\n"; std::cout << "c * e: " << c * e << "\n"; std::cout << "~b: " << ~b << "\n"; std::cout << "~e: " << ~e << "\n"; std::cout << "b * ~b: " << b * ~b << "\n"; std::cout << "e * ~e: " << e * ~e << "\n"; std::cout << "a / b: " << a / b << "\n"; std::cout << "c / e: " << c / e << "\n"; try { Rational t = a / d; std::cout << "a / d: " << t << "\n"; } catch (const std::invalid_argument& e) { std::cout << "a / d: " << e.what() << "\n"; } std::cout << "a < b: " << (a < b) << "\n"; std::cout << "a < c: " << (a < c) << "\n"; std::cout << "a <= c: " << (a <= c) << "\n"; std::cout << "a <= d: " << (a <= d) << "\n"; std::cout << "b > c: " << (b > c) << "\n"; std::cout << "a > c: " << (a > c) << "\n"; std::cout << "a >= c: " << (a >= c) << "\n"; std::cout << "e >= d: " << (e >= d) << "\n"; return 0; }
Asegúrate que la salida sea idéntica a lo siguiente:
a: 1/2 b: 3/2 c: 1/2 d: 0 e: -3 a + b: 2 c + d: 1/2 a == c: true a == b: false a != b: true a != c: false -a: -1/2 -e: 3 a - b: -1 c - e: 7/2 static_cast<double>(a): 0.5 static_cast<double>(b): 1.5 a * b: 3/4 c * e: -3/2 ~b: 2/3 ~e: -1/3 b * ~b: 1 e * ~e: 1 a / b: 1/3 c / e: -1/6 a / d: Denominator cannot be zero! a < b: true a < c: false a <= c: true a <= d: false b > c: true a > c: false a >= c: true e >= d: false
Todos los archivos de esta actividad deben estar contenidos en un directorio llamado rational
.
Cada uno de los archivos fuente (archivos .h
y .cpp
) debe incluir en la parte superior y dentro de un comentario la información personal de los autores (matrícula y nombre). Por ejemplo:
// ---------------------------------------------------------- // Práctica 1: Clase Rational // Fecha: 7 de junio, 2024. // Autores: // A01770771 Sylvie Laufeydottir // A01777771 Loki Laufeyson // ----------------------------------------------------------
Crea un archivo comprimido TAR GZ o ZIP con el contenido completo del directorio rational
. El archivo resultante se debe llamar rational.tar.gz
o rational.zip
.
Para entregar el archivo rational.tar.gz/rational.zip
, ingresa los siguientes datos:
Solo es necesario que lo entregue un miembro del equipo.
La fecha límite es el viernes 7 de junio.