Menu
Coddy logo textTech

Tekrar - Şekil Hesaplayıcı

Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 36 / 57.

challenge icon

Görev

Zor

Polimorfizm ve generic'leri birleştiren bir şekil hesaplayıcı oluşturun. Shape protokolü name, area() ve perimeter() (her ikisi de Double) gerektirir. Rect, Circle (π için 3.14) ve Triangle'ı (üç kenar, Foundation'dan sqrt kullanarak Heron formülüyle alan) uygulayın. Generic bir largest<T>(_ items: [T], by key: (T) -> Double) -> T? fonksiyonu yazın. Her şekil için iki ondalık basamaklı bir satır döndüren report(_:) fonksiyonunu tamamlayın (rect: area 12.00, perimeter 14.00); ardından her ikisi de largest ile bulunan largest area: circle ve largest perimeter: rect satırlarını ekleyin.

Sağlanan kod rect,3,4, circle,2 veya tri,3,4,5 satırlarını okur, [any Shape] oluşturur ve döndürülen her satırı yazdırır.

Kodunuz Shape.swift, Rect.swift, Circle.swift, Triangle.swift ve Functions.swift dosyalarına yazılmalıdır. main.swift sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

import Foundation

// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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) }

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Swift playground