Menu
Coddy logo textTech

מתודות עזר

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 10 מתוך 61.

עד כה ראינו פונקציות שמשנות נתוני struct (כמו player_take_damage) ופונקציות שפשוט מציגות אותם. אבל יש קטגוריה חשובה נוספת: פונקציות שמחשבות ערכים נגזרים מתוך איברי struct בלי לשנות דבר.

נבחן מבנה Rectangle שמאחסן רוחב וגובה. השטח אינו מאוחסן: הוא מחושב לפי הצורך:

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

אלה מתודות עזר. הן מקבלות את הנתונים הקיימים של המבנה ומפיקות ערך חדש. שימו לב שהן משתמשות במצביעי const, מכיוון שהן רק קוראות ולא כותבות. התוצאה המחושבת מוחזרת במקום להישמר במבנה.

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

התבנית הזו שומרת על המבנים שלך רזים: אחסן רק את הנתונים החיוניים, וחשב את כל השאר כשצריך. היא גם מבטיחה שהערכים הנגזרים יהיו תמיד עקביים עם המצב הנוכחי.

challenge icon

אתגר

קל

בוא נבנה מודול Circle שמחשב ערכים נגזרים מנתונים שמורים. תתרגל כתיבת שיטות עזר: פונקציות שמחשבות תוצאות מתוך איברי struct בלי לשנות אותם.

תיצור שלושה קבצים:

  • circle.h: הכרז על struct בשם Circle עם איבר יחיד מסוג double radius. הכרז גם על שתי שיטות עזר:
    • circle_area: מקבלת מצביע const ל-Circle ומחזירה את השטח
    • circle_circumference: מקבלת מצביע const ל-Circle ומחזירה את ההיקף
    השתמש בשומרי הכללה עם הסמל CIRCLE_H.
  • circle.c: ממש את שתי שיטות העזר. לצורך החישובים, השתמש ב-3.14159 כערך של pi. נוסחת השטח היא pi * radius * radius, ונוסחת ההיקף היא 2 * pi * radius. שתי הפונקציות צריכות לקרוא את radius בלבד: לעולם אל תשנה אותו.
  • main.c: צור Circle והשתמש בשיטות העזר כדי לחשב ולהציג את המאפיינים שלו.

תקבל קלט אחד: radius של המעגל (מסוג double).

בקובץ הראשי שלך, אתחל Circle עם הערך הנתון של radius, ואז השתמש בשיטות העזר שלך כדי לחשב ולהדפיס את השטח ואת ההיקף.

הדפס את התוצאות בפורמט הבא:

Area: {area}
Circumference: {circumference}

השתמש ב-%.2f עבור שני הערכים כדי להציג שתי ספרות אחרי הנקודה העשרונית.

לדוגמה, עבור radius של 5.0, הפלט יהיה:

Area: 78.54
Circumference: 31.42

נסו בעצמכם

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: צרו מבנה Circle עם הרדיוס הנתון
    
    // TODO: השתמשו בפונקציות העזר circle_area ו-circle_circumference
    // כדי לחשב ולהדפיס את התוצאות
    
    // פורמט ההדפסה:
    // printf("Area: %.2f\n", ...);
    // printf("Circumference: %.2f\n", ...);
    
    return 0;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C אונליין