Menu
Coddy logo textTech

סיכום: הקופסה הסודית

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

challenge icon

אתגר

קל

בואו נבנה מודול Box שמדגים כימוס מלא. לתיבה שלך יהיו שלושה ממדים מוסתרים — רוחב, גובה ועומק — שאפשר לגשת אליהם רק דרך הפונקציות שתספק. כך פועל דפוס המצביע האטום המלא!

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

  • box.h: הממשק הציבורי שלך. הכרז על טיפוס אטום Box באמצעות הצהרה מקדימה בלבד: גוף המבנה נשאר מוסתר. הכרז על הפונקציות האלה:
    • create_box: מקבלת שלושה מספרים שלמים (רוחב, גובה ועומק) ומחזירה מצביע ל-Box
    • destroy_box: משחררת את הזיכרון שהוקצה
    • get_volume: מקבלת const Box * ומחזירה את הנפח (רוחב × גובה × עומק)
    • set_dimensions: מקבלת מצביע ל-Box ושלושה ערכי ממדים חדשים, ומחזירה int (1 במקרה של הצלחה, 0 אם אחד מהממדים שלילי או אפס)
    השתמש בשומרי הכללה עם הסמל BOX_H.
  • box.c: הגדר את struct Box בפועל עם שלושה איברים מוסתרים: int width, int height ו-int depth. ממש את כל ארבע הפונקציות. הבנאי שלך צריך להקצות ולאתחל את התיבה. הפונקציה set_dimensions חייבת לוודא שכל שלושת הערכים חיוביים (גדולים מאפס) לפני החלת השינויים. אם ערך כלשהו נכשל בבדיקה, דחה את העדכון כולו והחזר 0.
  • main.c: הדגם את התיבה המכומסת שלך על ידי יצירת אחת, בדיקת הנפח שלה, ניסיון לשנות את הממדים (גם לערכים תקינים וגם לערכים לא תקינים) וניקוי תקין של המשאבים.

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

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

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

Volume: {volume}
Set: {0 or 1}
Volume: {volume}
Destroyed

לדוגמה, עבור הקלטים 2, 3, 4, 5, 5, 5, הפלט יהיה:

Volume: 24
Set: 1
Volume: 125
Destroyed

עבור הקלטים 2, 3, 4, -1, 5, 5, הפלט יהיה:

Volume: 24
Set: 0
Volume: 24
Destroyed

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

נסו בעצמכם

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

int main() {
    // קרא את הממדים ההתחלתיים
    int width, height, depth;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &depth);
    
    // קרא את הממדים החדשים שיש לנסות להגדיר
    int new_w, new_h, new_d;
    scanf("%d", &new_w);
    scanf("%d", &new_h);
    scanf("%d", &new_d);
    
    // TODO: צור Box עם הממדים ההתחלתיים
    
    
    // TODO: הדפס את הנפח ההתחלתי בפורמט: "Volume: {volume}"
    
    
    // TODO: נסה להגדיר את הממדים החדשים ושמור את התוצאה
    
    
    // TODO: הדפס אם ההגדרה הצליחה בפורמט: "Set: {0 or 1}"
    
    
    // TODO: הדפס את הנפח שהתקבל בפורמט: "Volume: {volume}"
    
    
    // TODO: השמד את התיבה והדפס "Destroyed"
    
    
    return 0;
}

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

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