Menu
Coddy logo textTech

Méthodes utilitaires

Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 10 sur 61.

Jusqu’à présent, nous avons vu des fonctions qui modifient les données d’une structure (comme player_take_damage) et des fonctions qui se contentent de les afficher. Mais il existe une autre catégorie importante : les fonctions qui calculent des valeurs dérivées à partir des membres d’une structure sans rien modifier.

Considérez une structure Rectangle qui stocke la largeur et la hauteur. L’aire n’est pas stockée : elle est calculée à la demande :

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);
}

Ce sont des méthodes auxiliaires. Elles prennent les données existantes de la structure et produisent une nouvelle valeur. Remarquez qu’elles utilisent des pointeurs const, puisqu’elles ne font que lire, sans jamais écrire. Le résultat calculé est renvoyé plutôt qu’enregistré dans la structure.

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

Ce modèle permet de garder vos structures légères : stockez uniquement les données essentielles et calculez tout le reste lorsque nécessaire. Il garantit également que les valeurs dérivées restent toujours cohérentes avec l’état actuel.

challenge icon

Défi

Facile

Construisons un module Circle qui calcule des valeurs dérivées à partir de données stockées. Tu vas t'entraîner à écrire des méthodes auxiliaires : des fonctions qui calculent des résultats à partir des membres d'une structure sans les modifier.

Tu vas créer trois fichiers :

  • circle.h : déclarer une structure Circle avec un seul membre double radius. Déclarer également deux méthodes auxiliaires :
    • circle_area : prend un pointeur const vers Circle et renvoie l'aire
    • circle_circumference : prend un pointeur const vers Circle et renvoie la circonférence
    Utiliser des gardes d'inclusion avec le symbole CIRCLE_H.
  • circle.c : implémenter les deux méthodes auxiliaires. Pour les calculs, utiliser 3.14159 comme valeur de pi. La formule de l'aire est pi * radius * radius, et la formule de la circonférence est 2 * pi * radius. Les deux fonctions doivent uniquement lire le rayon : ne jamais le modifier.
  • main.c : créer un Circle et utiliser les méthodes auxiliaires pour calculer et afficher ses propriétés.

Tu recevras une entrée : le rayon du cercle (sous forme de double).

Dans ton fichier principal, initialise un Circle avec le rayon donné, puis utilise tes méthodes auxiliaires pour calculer et afficher l'aire et la circonférence.

Affiche les résultats au format suivant :

Area: {area}
Circumference: {circumference}

Utilise %.2f pour les deux valeurs afin d'afficher deux décimales.

Par exemple, avec un rayon de 5.0, la sortie serait :

Area: 78.54
Circumference: 31.42

Essayez vous-même

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Créer une struct Circle avec le rayon donné
    
    // TODO: Use circle_area and circle_circumference helper methods
    // pour calculer et afficher les résultats
    
    // Format d'affichage :
    // printf("Area: %.2f\n", ...);
    // printf("Circumference: %.2f\n", ...);
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C en ligne