Menu
Coddy logo textTech

Métodos auxiliares

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

Hasta ahora, hemos visto funciones que modifican datos de estructuras (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 la estructura sin cambiar nada.

Considera una estructura Rectangle que almacena el ancho y el alto. El área no se almacena; se calcula bajo demanda:

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 del struct y producen un nuevo valor. Observa que utilizan punteros const, ya que solo leen, nunca escriben. El resultado calculado se devuelve en lugar de almacenarse en el struct.

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 structs ligeros: almacena solo los datos esenciales y calcula todo lo demás cuando sea necesario. También garantiza que los valores derivados sean siempre consistentes con el estado actual.

challenge icon

Desafío

Fácil

Vamos a construir 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. También declara 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 (include guards) con el símbolo CIRCLE_H.
  • circle.c: Implementa ambos métodos auxiliares. Para los cálculos, usa 3.14159 como el 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 modificarlo.
  • main.c: Crea un Circle y usa los métodos auxiliares para calcular y mostrar sus propiedades.

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

In su archivo principal, inicializa un Circle con el radio dado, luego usa tus métodos auxiliares para calcular e imprimir el área y la circunferencia.

Imprime los resultados en 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: Crear una estructura Circle con el radius dado
    
    // TODO: Usar los métodos auxiliares circle_area y circle_circumference
    // 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 Object Oriented Programming