Menu
Coddy logo textTech

Métodos auxiliares

Parte de la sección Programación Orientada a Objetos del Journey de C de Coddy. Lección 10 de 61.

Hasta ahora, hemos visto funciones que modifican los datos de una estructura (como player_take_damage) y funciones que simplemente los muestran. Pero hay otra categoría importante: funciones que calculan valores derivados a partir de los miembros de una estructura sin cambiar nada.

Considera una estructura Rectangle que almacena el ancho y la altura. El área no se almacena: se calcula cuando se necesita:

typedef struct {
    double width;
    double height;
} Rectangle;

double rectangle_area(const Rectangle *self) {
    return self->width * self->height;
}

double rectangle_perimeter(const Rectangle *self) {
    return 2 * (self->width + self->height);
}

Estos son métodos auxiliares. Toman los datos existentes de la estructura y producen un nuevo valor. Observa que usan punteros const, ya que solo leen y nunca escriben. El resultado calculado se devuelve en lugar de almacenarse en la estructura.

Rectangle box = {5.0, 3.0};
printf("Area: %.1f\n", rectangle_area(&box));       // 15.0
printf("Perimeter: %.1f\n", rectangle_perimeter(&box)); // 16.0

Este patrón mantiene tus estructuras optimizadas: almacena solo los datos esenciales y calcula todo lo demás cuando sea necesario. También garantiza que los valores derivados sean siempre coherentes con el estado actual.

challenge icon

Desafío

Fácil

Construyamos un módulo Circle que calcule valores derivados a partir de datos almacenados. Practicarás la escritura de métodos auxiliares: funciones que calculan resultados a partir de miembros de una estructura sin modificarlos.

Crearás tres archivos:

  • circle.h: Declara una estructura Circle con un único miembro double radius. Declara también dos métodos auxiliares:
    • circle_area: recibe un puntero const a Circle y devuelve el área
    • circle_circumference: recibe un puntero const a Circle y devuelve la circunferencia
    Usa protectores de inclusión con el símbolo CIRCLE_H.
  • circle.c: Implementa ambos métodos auxiliares. Para los cálculos, usa 3.14159 como valor de pi. La fórmula del área es pi * radius * radius, y la fórmula de la circunferencia es 2 * pi * radius. Ambas funciones solo deben leer el radio: nunca lo modifiques.
  • main.c: Crea un Circle y usa los métodos auxiliares para calcular y mostrar sus propiedades.

Recibirás una entrada: el radio del círculo (como un double).

En tu archivo principal, inicializa un Circle con el radio proporcionado; después, usa los métodos auxiliares para calcular e imprimir el área y la circunferencia.

Imprime los resultados con este formato:

Area: {area}
Circumference: {circumference}

Usa %.2f para ambos valores para mostrar dos decimales.

Por ejemplo, con un radio de 5.0, la salida sería:

Area: 78.54
Circumference: 31.42

Pruébalo tú mismo

#include <stdio.h>
#include "circle.h"

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Crea un struct Circle con el radio dado
    
    // TODO: Use circle_area and circle_circumference helper methods
    // para calcular e imprimir los resultados
    
    // Formato de impresión:
    // printf("Area: %.2f\n", ...);
    // printf("Circumference: %.2f\n", ...);
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C online