Menu
Coddy logo textTech

חזרה: מחשבון צורות

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

challenge icon

אתגר

קל

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

תארגן את הקוד שלך בארבעה קבצים:

  • IShape.cs: הגדר ממשק בשם IShape במרחב השמות Shapes. כל צורה צריכה להיות מסוגלת לחשב את השטח שלה ולתאר את עצמה. הצהר על שתי מתודות: CalculateArea() שמחזירה double, ו-GetDescription() שמחזירה string.
  • Circle.cs: צור מחלקה בשם Circle במרחב השמות Shapes, שמממשת את IShape. למעגל יש מאפיין Radius מסוג double, שנקבע באמצעות הבנאי שלו. נוסחת השטח היא Math.PI * Radius * Radius. התיאור צריך להחזיר את "Circle with radius {Radius}".
  • Rectangle.cs: צור מחלקה בשם Rectangle במרחב השמות Shapes, שמממשת את IShape. למלבן יש מאפייני Width ו-Height (שניהם מסוג double), שנקבעים באמצעות הבנאי שלו. השטח הוא פשוט רוחב כפול גובה. התיאור צריך להחזיר את "Rectangle {Width}x{Height}".
  • Program.cs: בקובץ הראשי שלך, צור מעגל ומלבן באמצעות ערכי קלט, ואז אחסן אותם במערך של הפניות מסוג IShape. עבור על המערך, ועבור כל צורה, הדפס את התיאור שלה ואחריו את השטח שלה מעוגל לשתי ספרות אחרי הנקודה העשרונית. כך תדגים איך אפשר לעבד צורות שונות לחלוטין באמצעות אותו ממשק!

תקבל שלושה ערכי קלט:

  • רדיוס המעגל (double)
  • רוחב המלבן (double)
  • גובה המלבן (double)

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

{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}

לדוגמה, אם ערכי הקלט הם 5, 4, ו-6, הפלט צריך להיות:

Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00

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

נסו בעצמכם

using System;
using Shapes;

class Program
{
    public static void Main(string[] args)
    {
        // קראו את ערכי הקלט
        double circleRadius = Convert.ToDouble(Console.ReadLine());
        double rectWidth = Convert.ToDouble(Console.ReadLine());
        double rectHeight = Convert.ToDouble(Console.ReadLine());
        
        // TODO: צרו אובייקט Circle עם הרדיוס הנתון
        
        // TODO: צרו אובייקט Rectangle עם הרוחב והגובה הנתונים
        
        // TODO: צרו מערך של IShape המכיל את שתי הצורות
        
        // TODO: עברו על המערך, ועבור כל צורה:
        // - הדפיסו את התיאור באמצעות GetDescription()
        // - הדפיסו "Area: " ואחריו את התוצאה של CalculateArea() מעוגלת ל-2 ספרות אחרי הנקודה העשרונית
    }
}

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

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