Prog. orientada a objetos

Práctica 2: Clase Pentagon

Objetivos

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.

IMPORTANTE

Para esta actividad de programación, el uso de herramientas asistidas por IA, como GitHub Copilot, ChatGPT, Gemini o plataformas similares, para generar código automáticamente está estrictamente prohibido. El uso de herramientas de IA de esta manera socava el proceso de aprendizaje y viola las políticas de integridad académica. El propósito de esta tarea es evaluar su comprensión y aplicación de los conceptos cubiertos en el curso. El incumplimiento de estas pautas puede resultar en sanciones académicas, que incluyen, entre otras, una calificación más baja.

Si tienes alguna pregunta sobre la tarea o necesitas una aclaración sobre algún concepto, no dudes en visitar a tu profesor durante las horas de asesoría. Confía únicamente en tu conocimiento, los materiales del curso y cualquier recurso autorizado proporcionado por el profesor.

Descripción de la actividad

Esta práctica debe ser elaborada en los equipos de dos personas ya constituidos.

A partir del código de C++ elaborado en clase, crea una nueva clase llamada Pentagon que herede de la clase Figure. La nueva clase debe tener un atributo privado llamado _side de tipo double para representar la longitud de cada lado del pentágono. Así mismo debe proporcionar las siguientes operaciones declaradas en el archivo pentagon.h y definidas en el archivo pentagon.cpp:

Función miembro Descripción

Pentagon(double side)

Constructor usado para inicializar una instancia de la clase Pentagon. Su atributo _side toma el valor del parámetro side.

double perimeter()
    const override

Sobrescribe la función perimeter de su clase base Figure. Regresa el cálculo del perímetro del pentágono que representa el objeto receptor.

Fórmula:

$$ \textit{perimeter} = 5 \times \textit{side} $$

double area()
    const override

Sobrescribe la función area de su clase base Figure. Regresa el cálculo del área del pentágono que representa el objeto receptor.

Fórmula:

$$ \textit{area} = \frac {\textit{perimeter} \times \textit{apothem}}{2} $$

En donde:

$$ \textit{apothem} = \frac{\textit{side}}{2 \times \tan\left ( \frac{\pi}{5} \right )} $$

NOTA: Para usar la función tan() se debe añadir la siguiente directiva al inicio del archivo en la que se utiliza:

#include <cmath>

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 <vector>
#include "figure.h"
#include "rectangle.h"
#include "circle.h"
#include "square.h"
#include "pentagon.h"

int main() {
    Circle a(1.0);
    Circle b(2.5);
    Rectangle c(2.0, 3.0);
    Rectangle d(7.25, 2.4);
    Square e(5.0);
    Square f(8.5);
    Pentagon g(6.0);
    Pentagon h(1.25);
    std::vector<Figure*> figures = {&a, &b, &c, &d, &e, &f, &g, &h};
    for (Figure* p : figures) {
        std::cout << *p << "\n";
    }
    return 0;
}

Asegúrate que la salida sea idéntica a lo siguiente:

I'm a circle. My area is: 3.141593, my perimeter is: 6.283185
I'm a circle. My area is: 19.634954, my perimeter is: 15.707963
My area is: 6.000000, my perimeter is: 10.000000
My area is: 17.400000, my perimeter is: 19.300000
My area is: 25.000000, my perimeter is: 20.000000
My area is: 72.250000, my perimeter is: 34.000000
My area is: 61.937186, my perimeter is: 30.000000
My area is: 2.688246, my perimeter is: 6.250000

Consideraciones adicionales

¿Qué se debe entregar?

Crea un archivo comprimido TAR GZ o ZIP con el contenido completo del directorio figures. El archivo resultante se debe llamar figures.tar.gz o figures.zip.

Instrucciones para subir archivo

Para entregar el archivo figures.tar.gz/figures.zip, ingresa los siguientes datos:

Solicitar NIP

Solo es necesario que lo entregue un miembro del equipo.

La fecha límite es el lunes 9 de junio.