Menu
Coddy logo textTech

Metody pomocnicze

Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 10 z 61.

Do tej pory poznaliśmy funkcje, które modyfikują dane struktury (takie jak player_take_damage) oraz funkcje, które po prostu je wyświetlają. Istnieje jednak jeszcze jedna ważna kategoria: funkcje, które obliczają wartości pochodne na podstawie składowych struktury, niczego nie zmieniając.

Rozważ strukturę Rectangle, która przechowuje szerokość i wysokość. Pole powierzchni nie jest przechowywane — oblicza się je na żądanie:

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

To są metody pomocnicze. Pobierają istniejące dane struktury i zwracają nową wartość. Zwróć uwagę, że używają wskaźników const, ponieważ tylko odczytują dane, a nigdy ich nie zapisują. Obliczony wynik jest zwracany, zamiast być przechowywany w strukturze.

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

Ten wzorzec pozwala zachować zwięzłość struktur: przechowuj tylko niezbędne dane, a wszystko inne obliczaj w razie potrzeby. Dzięki temu wartości pochodne są zawsze zgodne z bieżącym stanem.

challenge icon

Wyzwanie

Łatwy

Zbudujmy moduł Circle, który oblicza wartości pochodne na podstawie przechowywanych danych. Poćwiczysz pisanie metod pomocniczych: funkcji, które obliczają wyniki na podstawie składowych struktury, nie modyfikując ich.

Utworzysz trzy pliki:

  • circle.h: Zadeklaruj strukturę Circle z jedną składową double radius. Zadeklaruj także dwie metody pomocnicze:
    • circle_area: przyjmuje wskaźnik const do Circle i zwraca pole
    • circle_circumference: przyjmuje wskaźnik const do Circle i zwraca obwód
    Użyj strażników dołączania z symbolem CIRCLE_H.
  • circle.c: Zaimplementuj obie metody pomocnicze. Do obliczeń użyj 3.14159 jako wartości pi. Wzór na pole to pi * radius * radius, a wzór na obwód to 2 * pi * radius. Obie funkcje powinny tylko odczytywać promień: nigdy go nie modyfikuj.
  • main.c: Utwórz obiekt Circle i użyj metod pomocniczych, aby obliczyć i wyświetlić jego właściwości.

Otrzymasz jedno wejście: promień koła (jako double).

W pliku głównym zainicjalizuj Circle podanym promieniem, a następnie użyj metod pomocniczych, aby obliczyć i wyświetlić pole oraz obwód.

Wyświetl wyniki w następującym formacie:

Area: {area}
Circumference: {circumference}

Użyj %.2f dla obu wartości, aby wyświetlić je z dokładnością do dwóch miejsc po przecinku.

Na przykład dla promienia 5.0 wynik byłby następujący:

Area: 78.54
Circumference: 31.42

Spróbuj swoich sił

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Utwórz strukturę Circle o podanym promieniu
    
    // TODO: Użyj funkcji pomocniczych circle_area i circle_circumference
    // aby obliczyć i wyświetlić wyniki
    
    // Format wyświetlania:
    // printf("Area: %.2f\n", ...);
    // printf("Circumference: %.2f\n", ...);
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C online