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

מחלקה שמנהלת מערך עצמים

מאתגר C#

המשימה

נתונה המחלקה Competitor עם שם וזמן ריצה בשניות.

בנה מחלקה בשם Race שמנהלת את המתחרים במרוץ:
• תכונה פרטית: מערך של מתחרים בגודל קבוע (הגודל מתקבל בבנאי).
• תכונה פרטית: count — כמה מתחרים נרשמו בפועל.
• בנאי שמקבל את הגודל המרבי.
• פעולה add שמקבלת מתחרה ומוסיפה אותו. אם המערך מלא — אין להוסיף,
  והפעולה מחזירה false. אחרת מוסיפה ומחזירה true.
• פעולה fastest שמחזירה את המתחרה המהיר ביותר, או null אם אין
  מתחרים כלל.
• פעולה average שמחזירה את זמן הריצה הממוצע, או 0 אם אין מתחרים.

הנחיות:
• count אינו אורך המערך. הלולאות חייבות לרוץ עד count ולא עד
  arr.length — אחרת יגיעו לתאים ריקים. זו הנקודה המרכזית כאן.
• מהיר ביותר = הזמן הנמוך ביותר.
• אל תשכח לקדם את count אחרי כל הוספה מוצלחת.
• בדוק מקרה של מרוץ ריק לפני שאתה ניגש לאיבר הראשון.

```ds:table
{"title":"המתחרים שבדוגמה","rows":[["שם","זמן"],["Dan","52.4"],["Rita","48.9"],["Omer","61.0"]]}
```

קוד הפתיחה

using System;

class Competitor {
    private string name;
    private double time;

    public Competitor(string name, double time) {
        this.name = name;
        this.time = time;
    }

    public string GetName() { return this.name; }
    public double GetTime() { return this.time; }
}

class Race {
    // תכונות: מערך מתחרים, ומונה כמה נרשמו בפועל

    public Race(int maxSize) {
        // אתחל את המערך ואת המונה
    }

    /** מוסיפה מתחרה. false אם המרוץ מלא. */
    public bool Add(Competitor c) {
        // כתוב את הפתרון כאן
        return false;
    }

    /** המתחרה עם הזמן הנמוך ביותר, או null אם אין מתחרים. */
    public Competitor Fastest() {
        // כתוב את הפתרון כאן
        return null;
    }

    /** זמן ריצה ממוצע, או 0 אם אין מתחרים. */
    public double Average() {
        // כתוב את הפתרון כאן
        return 0;
    }
}

class Program {
    static void Main() {
        Race r = new Race(3);

        Console.WriteLine(r.Fastest() == null);                    // True
        Console.WriteLine(r.Average());                            // 0

        Console.WriteLine(r.Add(new Competitor("Dan",  52.4)));    // True
        Console.WriteLine(r.Add(new Competitor("Rita", 48.9)));    // True
        Console.WriteLine(r.Add(new Competitor("Omer", 61.0)));    // True
        Console.WriteLine(r.Add(new Competitor("Late", 40.0)));    // False — מלא

        Competitor f = r.Fastest();
        Console.WriteLine(f == null ? "null" : f.GetName());       // Rita
        Console.WriteLine(r.Average());                            // 54.1
    }
}

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

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