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

מערך צורות

מאתגר Java

המשימה

נתונה המחלקה **המופשטת** Shape עם פעולה מופשטת area ופעולה מופשטת
name. מחלקה מופשטת אינה ניתנת ליצירה — היא רק מגדירה מה כל צורה
חייבת לדעת לעשות.

בנה שתי מחלקות שיורשות ממנה:
• Circle — תכונה radius. השטח: π·r². השם: circle.
• Rect — תכונות width ו-height. השטח: מכפלה. השם: rect.

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

הנחיות:
• השתמש ב-Math.PI ולא ב-3.14.
• הפעולה החיצונית אינה יודעת ואינה צריכה לדעת באיזו צורה מדובר —
  היא קוראת ל-area, והשפה בוחרת בזמן ריצה את המימוש הנכון.
  זו כל מהות הפולימורפיזם, ולכן אין בפעולה הזו שום בדיקת טיפוס.
• אתחל את המקסימום לאיבר הראשון.

```ds:table
{"title":"הצורות שבדוגמה","rows":[["צורה","נתונים","שטח"],["circle","r=2","12.566..."],["rect","4×5","20.0"],["circle","r=1","3.141..."],["rect","2×3","6.0"]]}
```

קוד הפתיחה

abstract class Shape {
    public abstract double area();
    public abstract String name();
}

class Circle extends Shape {
    // תכונה: radius

    public Circle(double radius) {
        // אתחל
    }

    @Override
    public double area() {
        // כתוב את הפתרון כאן — Math.PI
        return 0;
    }

    @Override
    public String name() {
        return "";   // circle
    }
}

class Rect extends Shape {
    // תכונות: width, height

    public Rect(double width, double height) {
        // אתחל
    }

    @Override
    public double area() {
        return 0;
    }

    @Override
    public String name() {
        return "";   // rect
    }
}

public class Main {

    /** מחזירה את הצורה בעלת השטח הגדול ביותר — בלי לבדוק טיפוסים. */
    public static Shape largest(Shape[] arr) {
        // כתוב את הפתרון כאן
        return arr[0];   // מציב זמני
    }

    public static void main(String[] args) {
        Shape[] shapes = {
            new Circle(2),
            new Rect(4, 5),
            new Circle(1),
            new Rect(2, 3)
        };

        for (int i = 0; i < shapes.length; i++) {
            System.out.println(shapes[i].name() + " " + shapes[i].area());
        }

        System.out.println(largest(shapes).name());   // rect
        System.out.println(largest(shapes).area());   // 20.0
    }
}

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

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