Menu
Coddy logo textTech

סיכום – מחשבון צורות

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GO של Coddy. שיעור 33 מתוך 107.

challenge icon

אתגר

קל

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

תארגנו את הקוד בשלושה קבצים:

  • shape.go: הגדירו ממשק Shape עם שתי מתודות: Area() float64 ו-Perimeter() float64. צרו גם פונקציה בשם DescribeShape שמקבלת כל Shape ומחזירה מחרוזת מעוצבת שמציגה גם את השטח וגם את ההיקף שלו.
  • shapes.go: צרו שתי רשומות שמממשות את הממשק Shape:
    • Rectangle עם השדות Width ו-Height
    • Circle עם השדה Radius
    כל רשומה צריכה לממש גם את המתודות Area() ו-Perimeter(), וגם מתודת String() (שמממשת את fmt.Stringer) ומחזירה תיאור קריא של הצורה.
  • main.go: קראו נתונים של צורות מהקלט, צרו את הצורות המתאימות והשתמשו בפונקציה DescribeShape שלכם כדי להציג מידע על כל אחת מהן. הדפיסו גם כל צורה ישירות כדי להדגים את הממשק Stringer.

הקלטים הבאים יסופקו:

  • שורה 1: רוחב המלבן (מספר ממשי)
  • שורה 2: גובה המלבן (מספר ממשי)
  • שורה 3: רדיוס המעגל (מספר ממשי)

בחישובים, השתמשו ב-3.14159 בתור הערך של pi. היקף המעגל הוא 2 * pi * radius.

המתודות String() שלכם צריכות להחזיר:

  • מלבן: Rectangle(Width x Height)
  • מעגל: Circle(Radius: R)

הפונקציה DescribeShape שלכם צריכה להחזיר:

Area: [area], Perimeter: [perimeter]

עצבו את כל הערכים מסוג מספר ממשי עם שתי ספרות אחרי הנקודה העשרונית באמצעות %.2f.

לדוגמה, עבור 4, 3 ו-5, הפלט שלכם צריך להיות:

Rectangle(4.00 x 3.00)
Area: 12.00, Perimeter: 14.00
Circle(Radius: 5.00)
Area: 78.54, Perimeter: 31.42

הדפיסו תחילה כל צורה (באמצעות המתודה String() שלה), ואז את התיאור שלה שמוחזר מ-DescribeShape. עבדו תחילה על המלבן, ואז על המעגל.

נסו בעצמכם

package main

import (
	"fmt"
)

func main() {
	// קרא את ערכי הקלט
	var width, height, radius float64
	fmt.Scanln(&width)
	fmt.Scanln(&height)
	fmt.Scanln(&radius)

	// TODO: צור Rectangle עם הרוחב והגובה הנתונים

	// TODO: צור Circle עם הרדיוס הנתון

	// TODO: הדפס את המלבן (באמצעות המתודה String())
	// TODO: הדפס את תיאור המלבן באמצעות DescribeShape()

	// TODO: הדפס את העיגול (באמצעות המתודה String())
	// TODO: הדפס את תיאור העיגול באמצעות DescribeShape()
}

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

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