Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Minimallogo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

s n h m r u
i

Lösung des Problems

Eine Lösung zum Problem "Preis der Poolfliesen" mit Hilfsfunktionen

Hier zur Kontrolle eine Zusammenstellung von Funktionen zur Lösung des Problems "Preis der Poolfliesen".

anzahlFliesenRechteck laengeRechteck breiteRechteck seiteFliese =
    (ceiling (laengeRechteck / seiteFliese)) * (ceiling (breiteRechteck / seiteFliese))

anzahlFliesenPool laenge breite hoehe seiteFliese =
    (1 * anzahlFliesenRechteck laenge breite seiteFliese) + 
    (2 * anzahlFliesenRechteck laenge hoehe seiteFliese) + 
    (2 * anzahlFliesenRechteck breite hoehe seiteFliese)

gesamtanzahlFliesen laenge breite hoehe seiteFliese =
    ceiling ((toFloat anzahlFliesenPool laenge breite hoehe seiteFliese) * 1.03)

preisPoolFliesen laenge breite hoehe seiteFliese preisFliese =
    (toFloat (gesamtanzahlFliesen laenge breite hoehe seiteFliese)) * preisFliese

Aufgabe 1

Die Lösung zum Problen "Preis der Poolfliesen" besteht hier aus vielen Funktionsdefinitionen. Erläutere wie sie voneinander abhängen.

Eine Lösung zum Problem "Preis der Poolfliesen" mit nur einer Funktion

Das Problem "Preis der Poolfliesen" hätte man auch mit einer einzigen Funktion lösen können.

preisPoolFliesen laenge breite hoehe seiteFliese preisFliese =
    (toFloat (ceiling ((toFloat 
        ((1 * (ceiling (laenge / seiteFliese)) * (ceiling (breite / seiteFliese))) + 
        (2 * (ceiling (laenge / seiteFliese)) * (ceiling (hoehe / seiteFliese))) + 
        (2 * (ceiling (breite / seiteFliese)) * (ceiling (hoehe / seiteFliese))))) * 1.03))) * preisFliese

Aufgabe 2

(a) Teste diese Funktionsdefinition mit Funktionsaufrufen in der REPL.

(b) Vergleiche diese Funktionsdefinition mit der oben gezeigten Variante, die mehrere Hilfsfunktionen benutzt. Erläutere die Vorteile von Hilfsfunktionen.

Eine Lösung zum Problem "Preis der Poolfliesen" mit lokalen Definitionen

Das Problem "Preis der Poolfliesen" hätte man auch so lösen können.

preisPoolFliesen laenge breite hoehe seiteFliese preisFliese =
    let
        anzahlFliesenBoden = (1 * (ceiling (laenge / seiteFliese)) * (ceiling (breite / seiteFliese)))
        anzahlFliesenSeiteHoehe = (2 * (ceiling (laenge / seiteFliese)) * (ceiling (hoehe / seiteFliese)))
        anzahlFliesenBreiteHoehe = (2 * (ceiling (breite / seiteFliese)) * (ceiling (hoehe / seiteFliese)))
        minimalAnzahlFliesen = anzahlFliesenBoden + anzahlFliesenSeiteHoehe + anzahlFliesenBreiteHoehe
        gesamtAnzahlFliesen = ceiling ((toFloat minimalAnzahlFliesen) * 1.03)
    in
    (toFloat gesamtAnzahlFliesen) * preisFliese

Aufgabe 3

(a) Teste auch diese Funktionsdefinition mit Funktionsaufrufen in der REPL.

(b) Welche Vorteile hat diese Variante?

(c) Begründe, warum es günstig ist, wenn man zumindest die Berechnung der Fliesenanzahl für Rechtecke als eigenständige Funktion auslagert?

Aufgabe 4

Man könnte die Funktion anzahlFliesenRechteck auch als lokale Funktion innerhalb von preisPoolFliesen definieren. Teste auch diese Version. Beurteile auch diese Variante.

preisPoolFliesen laenge breite hoehe seiteFliese preisFliese =
    let
        anzahlFliesenRechteck laengeRechteck breiteRechteck laengeFliese =
            (ceiling (laengeRechteck / laengeFliese)) * (ceiling (breiteRechteck / laengeFliese))
        anzahlFliesenBoden = anzahlFliesenRechteck laenge breite seiteFliese
        anzahlFliesenSeiteHoehe = 2 * (anzahlFliesenRechteck laenge hoehe seiteFliese)
        anzahlFliesenBreiteHoehe = 2 * (anzahlFliesenRechteck breite hoehe seiteFliese)
        minimalAnzahlFliesen = anzahlFliesenBoden + anzahlFliesenSeiteHoehe + anzahlFliesenBreiteHoehe
        gesamtAnzahlFliesen = ceiling ((toFloat minimalAnzahlFliesen) * 1.03)
    in
    (toFloat gesamtAnzahlFliesen) * preisFliese

Suche

v
8.2.2.4.1.1.6
inf-schule.de/deklarativ/fp_elm/elm_programme/hilfsfunktionen/pool/lernstrecke/loesung
inf-schule.de/8.2.2.4.1.1.6
inf-schule.de/@/page/5Jf0gnCoehwDvUXO

Rückmeldung geben