Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - حاسبة الأشكال

جزء من قسم Object Oriented Programming في رحلة GO على Coddy — الدرس 33 من 107.

challenge icon

التحدي

سهل

لنقم ببناء حاسبة أشكال تجمع بين جميع مفاهيم الواجهات (interfaces) من هذا الفصل. ستقوم بإنشاء نظام حيث يمكن معالجة أشكال هندسية مختلفة بشكل موحد من خلال واجهة مشتركة، مما يوضح قوة تعدد الأشكال (polymorphism) في Go.

ستقوم بتنظيم الكود الخاص بك عبر ثلاثة ملفات:

  • shape.go: قم بتعريف واجهة Shape بطريقتين (methods): Area() float64 و Perimeter() float64. قم أيضاً بإنشاء دالة تسمى DescribeShape تقبل أي Shape وتعيد سلسلة نصية منسقة تعرض كلاً من مساحته ومحيطه.
  • shapes.go: قم بإنشاء هيكلين (structs) ينفذان واجهة Shape:
    • Rectangle مع حقول Width و Height
    • Circle مع حقل Radius
    يجب أن ينفذ كل هيكل طريقتي Area() و Perimeter()، بالإضافة إلى طريقة String() (التي تنفذ fmt.Stringer) والتي تعيد وصفاً مقروءاً للشكل.
  • main.go: قم بقراءة بيانات الشكل من المدخلات، وإنشاء الأشكال المناسبة، واستخدام دالة DescribeShape لعرض معلومات حول كل منها. قم أيضاً بطباعة كل شكل مباشرة لتوضيح واجهة Stringer.

سيتم توفير المدخلات التالية:

  • السطر 1: عرض المستطيل (float)
  • السطر 2: ارتفاع المستطيل (float)
  • السطر 3: نصف قطر الدائرة (float)

للحسابات، استخدم 3.14159 كقيمة لـ pi. محيط الدائرة هو 2 * pi * radius.

يجب أن تعيد طرق String() الخاصة بك:

  • المستطيل: Rectangle(Width x Height)
  • الدائرة: Circle(Radius: R)

يجب أن تعيد دالة DescribeShape الخاصة بك:

Area: [area], Perimeter: [perimeter]

قم بتنسيق جميع قيم float بمنزلتين عشريتين باستخدام %.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: إنشاء مستطيل بالعرض والارتفاع المعطيين

	// TODO: إنشاء دائرة بنصف القطر المعطى

	// TODO: طباعة المستطيل (يستخدم طريقة String())
	// TODO: طباعة وصف المستطيل باستخدام DescribeShape()

	// TODO: طباعة الدائرة (يستخدم طريقة String())
	// TODO: طباعة وصف الدائرة باستخدام DescribeShape()
}

جميع دروس Object Oriented Programming