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

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

جزء من قسم البرمجة كائنية التوجه في رحلة Swift على Coddy. الدرس 36 من 57.

challenge icon

التحدي

صعب

أنشئ حاسبة للأشكال تجمع بين تعدد الأشكال والأنواع العامة. يتطلب البروتوكول Shape كلًا من name وarea() وperimeter() (وكلاهما من النوع Double). نفّذ Rect وCircle (استخدم π بقيمة 3.14) وTriangle (ثلاثة أضلاع، والمساحة باستخدام صيغة هيرون مع sqrt من Foundation). اكتب دالة عامة largest<T>(_ items: [T], by key: (T) -> Double) -> T?. أكمل report(_:)، التي تُرجع سطرًا واحدًا لكل شكل مع منزلتين عشريتين (rect: area 12.00, perimeter 14.00)، ثم largest area: circle وlargest perimeter: rect، وكلاهما يُعثر عليه باستخدام largest.

يقرأ الكود المزوَّد الأسطر rect,3,4 أو circle,2 أو tri,3,4,5، وينشئ [any Shape] ويطبع كل سطر مُعاد.

ضع كودك في Shape.swift وRect.swift وCircle.swift وTriangle.swift وFunctions.swift. يحتوي main.swift على كود الإدخال/الإخراج المزوَّد ولا يمكن تعديله.

جرّب بنفسك

import Foundation

// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
var input: [String] = []
while let line = readLine() { input.append(line) }
var shapes: [any Shape] = []
for line in input {
    let p = line.split(separator: ",").map(String.init)
    let v = p.dropFirst().map { Double($0)! }
    switch p[0] {
    case "rect": shapes.append(Rect(w: v[0], h: v[1]))
    case "circle": shapes.append(Circle(r: v[0]))
    default: shapes.append(Triangle(a: v[0], b: v[1], c: v[2]))
    }
}
for line in report(shapes) { print(line) }

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Swift