Menu
Coddy logo textTech

מימוש מעגל

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

challenge icon

אתגר

קל

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

בהתבסס על התשתית מהשיעור הקודם, נרחיב את הפרויקט בעזרת הקבצים הבאים:

  • shape.h: השאירו את הממשק הבסיסי Shape מהשיעור הקודם, עם טיפוסי מצביעי הפונקציות DrawFunc ו-AreaFunc.
  • circle.h: הגדירו כאן את המבנה Circle. מעגל מכיל את Shape בתור האיבר הראשון שלו (וכך מאפשר את כלל האיבר הראשון להמרה כלפי מעלה) ומוסיף שדה radius מסוג double. הצהירו על פונקציית בנאי בשם create_circle שמקבלת רדיוס ומחזירה ערך מסוג Circle.
  • circle.c: ממשו כאן את ההתנהגות הייחודית למעגל:
    • draw_circle: מדפיסה Drawing Circle with radius: X.XX (הרדיוס מוצג עם 2 ספרות אחרי הנקודה העשרונית)
    • area_circle: מחזירה π × רדיוס² (השתמשו ב-3.14159 עבור π)
    • create_circle: מאתחלת Circle, מחברת את מצביעי הפונקציות של Shape המוטמע כך שיצביעו על draw_circle ועל area_circle, מגדירה את הרדיוס ומחזירה את המעגל
  • main.c: חברו את כל החלקים. קראו ערך רדיוס כקלט, צרו מעגל באמצעות הבנאי שלכם, ואז קראו גם ל-draw וגם ל-area דרך מצביעי הפונקציות של Shape המוטמע. הדפיסו את השטח עם 2 ספרות אחרי הנקודה העשרונית.

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

פלט לדוגמה כאשר הקלט הוא 5.0:

Drawing Circle with radius: 5.00
Area: 78.54

פלט לדוגמה כאשר הקלט הוא 3.5:

Drawing Circle with radius: 3.50
Area: 38.48

התובנה המרכזית היא ש-Circle מכיל Shape בתור האיבר הראשון שלו, ולכן אפשר לגשת למצביעי הפונקציות דרך circle.base.draw ו-circle.base.area (או דרך כל שם שתבחרו לאיבר המוטמע). בעת קריאה לפונקציות האלה, העבירו מצביע לאיבר Shape. זכרו להשתמש בשומרי הכללה בכל קובצי הכותרת.

נסו בעצמכם

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: צרו Circle באמצעות create_circle
    
    // TODO: קראו ל־draw דרך מצביע הפונקציה של Shape המוטמע
    
    // TODO: קראו ל־area דרך מצביע הפונקציה של Shape המוטמע
    // והדפיסו עם 2 ספרות אחרי הנקודה העשרונית: "Area: %.2f\n"
    
    return 0;
}

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

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