Menu
Coddy logo textTech

Implementación del rectángulo

Parte de la sección Object Oriented Programming del Journey de C de Coddy — lección 46 de 61.

challenge icon

Desafío

Fácil

Continuemos construyendo el proyecto Shape Drawer implementando el Rectangle — otra forma concreta que incorpora la estructura base Shape, tal como hicimos con Circle.

Basándote en tu proyecto existente, añadirás la funcionalidad de rectángulo en estos archivos:

  • shape.h: Mantén tu interfaz base Shape con los tipos de punteros a función DrawFunc y AreaFunc de las lecciones anteriores.
  • circle.h y circle.c: Mantén tu implementación de Circle de la lección anterior.
  • rectangle.h: Define tu estructura Rectangle aquí. Un rectángulo incorpora Shape como su primer miembro y añade los campos width y height (ambos double). Declara una función constructora create_rectangle que reciba los parámetros width y height y devuelva un Rectangle por valor.
  • rectangle.c: Implementa el comportamiento específico del rectángulo:
    • draw_rectangle — imprime Drawing Rectangle with width: X.XX and height: X.XX (ambos valores mostrados con 2 decimales)
    • area_rectangle — devuelve width × height
    • create_rectangle — inicializa un Rectangle, conecta los punteros a función de la Shape incorporada con las funciones del rectángulo, establece las dimensiones y devuelve el rectángulo
  • main.c: Demuestra ambas formas funcionando a través de la misma interfaz. Lee dos entradas: width y height para un rectángulo. Crea un rectángulo usando tu constructor, luego llama tanto a draw como a area a través de los punteros a función de la Shape incorporada. Imprime el área con 2 decimales.

Tu programa recibirá dos entradas: los valores de width y height (como números de punto flotante).

Ejemplo de salida cuando las entradas son 4.0 y 3.0:

Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00

Ejemplo de salida cuando las entradas son 7.5 y 2.5:

Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75

Al igual que con Circle, el Rectangle incorpora Shape como su primer miembro, lo que te permite acceder a los punteros a función a través del miembro incorporado. Este patrón consistente es lo que permite el polimorfismo — ambas formas pueden ser tratadas uniformemente a través de su interfaz Shape. Recuerda usar protectores de inclusión (include guards) en todos los archivos de cabecera.

Pruébalo tú mismo

#include <stdio.h>
#include "shape.h"
#include "rectangle.h"

int main() {
    double width, height;
    scanf("%lf", &width);
    scanf("%lf", &height);
    
    // TODO: Crear un rectángulo usando create_rectangle(width, height)
    
    // TODO: Llamar a draw a través del puntero de función de la Shape embebida
    
    // TODO: Llamar a area a través del puntero de función de la Shape embebida
    // TODO: Imprimir el área con 2 decimales: "Area: %.2f\n"
    
    return 0;
}

Todas las lecciones de Object Oriented Programming