Menu
Coddy logo textTech

Zusammenfassung – Shape-Rechner

Teil des Abschnitts Objektorientierte Programmierung der Swift-Journey von Coddy. Lektion 36 von 57.

challenge icon

Aufgabe

Schwer

Erstelle einen Formrechner, der Polymorphismus und Generika kombiniert. Das Protokoll Shape erfordert name, area() und perimeter() (beide Double). Implementiere Rect, Circle (π als 3.14) und Triangle (drei Seiten, die Fläche nach Herons Formel mit sqrt aus Foundation). Schreibe eine generische Funktion largest<T>(_ items: [T], by key: (T) -> Double) -> T?. Vervollständige report(_:), die für jede Form eine Zeile mit zwei Dezimalstellen zurückgibt (rect: area 12.00, perimeter 14.00), gefolgt von largest area: circle und largest perimeter: rect, die beide mit largest ermittelt werden.

Der bereitgestellte Code liest Zeilen rect,3,4, circle,2 oder tri,3,4,5, erstellt [any Shape] und gibt jede zurückgegebene Zeile aus.

Dein Code gehört in Shape.swift, Rect.swift, Circle.swift, Triangle.swift und Functions.swift. main.swift enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

import Foundation

// Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
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) }

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Swift-Playground