תרגול מדעי המחשב

עצם מורכב — חניון

מאתגר C#

המשימה

המחלקה Hour נתונה לך **מוכנה** — אל תשנה אותה. יש לה שעה, דקות,
ופעולה toMinutes שמחזירה כמה דקות עברו מתחילת היממה.

בנה מחלקה בשם Parking שמייצגת חנייה אחת:
• תכונה פרטית id (מחרוזת — מספר הרכב).
• שתי תכונות פרטיות מטיפוס **Hour**: שעת כניסה ושעת יציאה.
• בנאי שמקבל id ושתי שעות.
• פעולות מאחזרות ל-id ולשעת הכניסה.
• פעולה totalMinutes שמחזירה כמה דקות ארכה החנייה.

ובנוסף, **פעולה חיצונית** (סטטית) שמקבלת מערך חניות ומחזירה את
החנייה הארוכה ביותר.

דוגמה: כניסה 08:30, יציאה 10:00  →  90 דקות.

הנחיות:
• תכונה יכולה להיות עצם, לא רק מספר או מחרוזת. זו הנקודה של התרגיל.
• אל תשכפל את החישוב של Hour בתוך Parking — קרא ל-toMinutes.
  אורך החנייה הוא הפרש שתי התוצאות.
• הנח שהיציאה מאוחרת מהכניסה, באותה יממה.
• הפעולה החיצונית מחזירה את **העצם** Parking, לא את מספר הדקות.

```ds:table
{"title":"החניות שבדוגמה","rows":[["רכב","כניסה","יציאה","דקות"],["11-111-11","08:30","10:00","90"],["22-222-22","09:00","09:45","45"],["33-333-33","06:00","12:00","360"]]}
```

קוד הפתיחה

using System;

// ── נתון, אל תשנה ─────────────────────────────────────────────
class Hour {
    private int hour;
    private int minutes;

    public Hour(int hour, int minutes) {
        this.hour = hour;
        this.minutes = minutes;
    }

    public int GetHour()    { return this.hour; }
    public int GetMinutes() { return this.minutes; }

    /** כמה דקות עברו מתחילת היממה. */
    public int ToMinutes()  { return this.hour * 60 + this.minutes; }
}
// ──────────────────────────────────────────────────────────────

class Parking {
    // הגדר כאן את התכונות — id, ושתי שעות

    public Parking(string id, Hour inHour, Hour outHour) {
        // אתחל את התכונות
    }

    public string GetId() {
        return "";
    }

    public Hour GetIn() {
        return null;
    }

    /** כמה דקות ארכה החנייה. */
    public int TotalMinutes() {
        // כתוב את הפתרון כאן — היעזר ב-ToMinutes
        return 0;
    }
}

class Program {

    /** מחזירה את החנייה הארוכה ביותר במערך. */
    static Parking Longest(Parking[] arr) {
        // כתוב את הפתרון כאן
        return arr[0];   // מציב זמני
    }

    static void Main() {
        Parking[] lot = {
            new Parking("11-111-11", new Hour(8, 30),  new Hour(10, 0)),
            new Parking("22-222-22", new Hour(9, 0),   new Hour(9, 45)),
            new Parking("33-333-33", new Hour(6, 0),   new Hour(12, 0))
        };

        Console.WriteLine(lot[0].TotalMinutes());   // 90
        Console.WriteLine(lot[1].TotalMinutes());   // 45
        Console.WriteLine(Longest(lot).GetId());    // 33-333-33
        Hour inHour = Longest(lot).GetIn();
        Console.WriteLine(inHour == null ? "null" : "" + inHour.GetHour());   // 6

        Parking zero = new Parking("00-000-00", new Hour(7, 0), new Hour(7, 0));
        Console.WriteLine(zero.TotalMinutes());     // 0
    }
}

כדי לכתוב, להריץ ולקבל משוב — התחבר עם חשבון Google. לוקח שנייה.

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