Menu
Coddy logo textTech

Récapitulatif - Calculateur de formes

Fait partie de la section Programmation orientée objet du Journey Swift de Coddy. Leçon 36 sur 57.

challenge icon

Défi

Difficile

Construisez un calculateur de formes qui combine polymorphisme et génériques. Le protocole Shape requiert name, area() et perimeter() (tous deux de type Double). Implémentez Rect, Circle (π avec 3.14) et Triangle (trois côtés, aire calculée selon la formule de Héron avec sqrt de Foundation). Écrivez une fonction générique largest<T>(_ items: [T], by key: (T) -> Double) -> T?. Complétez report(_:), qui renvoie une ligne par forme avec deux décimales (rect: area 12.00, perimeter 14.00), puis largest area: circle et largest perimeter: rect, tous deux trouvés avec largest.

Le code fourni lit des lignes rect,3,4, circle,2 ou tri,3,4,5, construit [any Shape] et affiche chaque ligne renvoyée.

Votre code doit être placé dans Shape.swift, Rect.swift, Circle.swift, Triangle.swift et Functions.swift. main.swift contient le code fourni d’entrée/sortie et ne peut pas être modifié.

Essayez vous-même

import Foundation

// Code d'entrée/sortie fourni : le garder tel quel
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) }

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Playground Swift