Tekrar - Şekil Hesaplayıcı
Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 36 / 57.
Görev
ZorPolimorfizm 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
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaMetotlar ve selfBaşlatıcılarSınıflar ReferanstırTekrar - Kütüphane Kartı4Kapsülleme
Erişim DenetimiDışarıdan Salt OkunurDurumu KorumaBaşarısız Olabilen BaşlatıcılarTekrar - Banka Hesabı7Polimorfizm ve Generic'ler
PolimorfizmTür DönüşümüGeneric FonksiyonlarGeneric TürlerTekrar - Şekil Hesaplayıcı2Struct Yapıları ve Değer Türleri
Struct YapılarıDeğer SemantiğiDeğiştirici MetotlarStruct mı Class mıTekrar - Envanter Öğesi5Kalıtım
Alt sınıflarMetotları Geçersiz KılmaBaşlatıcılar ve superfinal ve HiyerarşilerTekrar - Çalışan Hiyerarşisi11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Swift playground