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.


Descripción de la actividad

IMPORTANTE

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, 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() 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() 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 10 de junio.