Raku-Kurs / Anhang 🆕 / Ablauf und Funktionen / Kontrollfluss und Logik / Exercises / Art des Dreiecks

Lösung: Art des Dreiecks

Hier ist eine mögliche Lösung der Aufgabe.

Code

sub kind($a, $b, $c) {
    return 'invalid' unless $a + $b > $c && $a + $c > $b && $b + $c > $a;

    given ($a, $b, $c).Set.elems {
        when 1  { 'equilateral' }
        when 2  { 'isosceles' }
        default { 'scalene' }
    }
}

for (3, 3, 3), (3, 3, 5), (3, 4, 5), (1, 2, 10) -> ($a, $b, $c) {
    say "$a $b $c: { kind($a, $b, $c) }";
}

🦋 Du findest den Quellcode in der Datei triangle-kind.raku.

Ausgabe

3 3 3: equilateral
3 3 5: isosceles
3 4 5: scalene
1 2 10: invalid

Kommentare

  1. Der unless-Wächter weist Seitenlängen, welche die Dreiecksungleichung verletzen, zurück, bevor überhaupt eingeordnet wird.

  2. Die Anzahl der verschiedenen Seitenlängen verrät die Art: eine bedeutet, alle sind gleich (gleichseitig), zwei bedeutet, genau ein Paar ist gleich (gleichschenklig), drei bedeutet, alle sind verschieden (ungleichseitig).

  3. Das Zerlegen der Schleifenvariablen als -> ($a, $b, $c) packt jede innere Liste unmittelbar in drei benannte Seiten aus.

Kursnavigation

Art des Dreiecks   |   Schere, Stein, Papier