Menu
CoddyTech

Rangkuman: Kalkulator Bentuk

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 36 dari 57.

challenge icon

Tantangan

Sulit

Buat kalkulator bentuk yang menggabungkan polimorfisme dan generik. Protokol Shape mewajibkan name, area() dan perimeter() (keduanya bertipe Double). Implementasikan Rect, Circle (π sebagai 3.14) dan Triangle (tiga sisi, luas dihitung dengan rumus Heron menggunakan sqrt dari Foundation). Tulis fungsi generik largest<T>(_ items: [T], by key: (T) -> Double) -> T?. Lengkapi report(_:), yang mengembalikan satu baris untuk setiap bentuk dengan dua angka desimal (rect: area 12.00, perimeter 14.00), lalu largest area: circle dan largest perimeter: rect, keduanya dicari menggunakan largest.

Kode yang disediakan membaca baris rect,3,4, circle,2 atau tri,3,4,5, membuat [any Shape] dan mencetak setiap baris yang dikembalikan.

Tulis kodemu di Shape.swift, Rect.swift, Circle.swift, Triangle.swift dan Functions.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

import Foundation

// Kode input/output yang disediakan: biarkan apa adanya
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) }

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Swift