Bedingte Ausdrücke

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Bedingte Ausdrücke in Scheme

Bedingte Ausdrücke sind Programmstrukturen, mit denen der Wert eines Ausdrucks von bestimmten Bedingungen abhängig gemacht werden kann.

Grundform Alternative Fallauswahl

Beachte:

  • die angegebenen Bedingungen werden in der vorgegebenen Reihenfolge evaluiert,
  • sobald sich zum ersten Mal der Wahrheitswert #t ergibt, werden keine weiteren Bedingungen untersucht (selbst dann nicht, wenn ein fehlerhafter Ausdruck wie (/ 4 0) erscheint) – die Evaluation wird an dieser Stelle beendet,
  • else wird immer zu #t evaluiert, sodass bei seiner Evaluation immer der nachfolgende Ausdruck abgearbeitet wird.

Beachte:

  • der else–Teil ist i.A. obligatorisch,
  • wenn er entfallen kann, sollten unbestimmte Rückgabewerte, wie sie bei
    (define my-sqrt
      (lambda (x)
        (if (>= x 0) (sqrt x))))
    
    auftreten können, vermieden werden,
  • in den beiden Teilen if und else darf nur ein Ausdruck stehen, anderenfalls muss mit (begin <Ausdruck> ... <Ausdruck>) ein zusammengesetzter Ausdruck gebildet werden.

Beachte:

  • zunächst wird der nach case folgende Ausdruck evaluiert,
  • in einer Suche von oben nach unten wird festgestellt, in welcher Auswahlmenge sein Wert vorkommt,
  • der zu dieser Menge gehörende Ausdruck wird evaluiert und als Wert des gesamten case–Ausdrucks zurückgegeben,
  • falls der Wert in keiner Menge enthalten ist, bildet der Wert nach else das Resultat.

Aufgaben

  1. Signumfunktion

    Schreiben Sie eine Prozedur für die einstellige Funktion signum, die als Funktionswerte -1, 1 oder 0 entsprechend des Vorzeichens der als Argument übergebenen Zahl zurückgibt.
    Beispiele:

    > (signum -337.8436) --> -1
    > (signum 0)         -->  0
    > (signum (/ 34 45)) -->  1
    

     

    Quelltext überprüfen:

  2. Palindromprüfer

    Entwickeln Sie das Prädikat palindrom?, das zu einer übergebenen Zeichenkette entscheidet, ob sie vor- und rückwärts gelesen gleich lautet.
    Beispiele:

    > (palindrom? "informatik") --> #f
    > (palindrom? "otto")       --> #t
    

    Hinweis: Sie können zur Lösung folgende Sprachelemente nutzen:

    > (equal? "otto" "otto") --> #t
    > (reverse '(a b c d e)) --> (e d c b a)
    

     

    Quelltext überprüfen:

  3. Klassenstärkenprüfer

    Lehrer und Schüler bewerten Klassenstärken etwa mit folgenden Einschätzungen:

    • 10 ... 15: geringe Klassenstärke,
    • 16 ... 20: ideale Klassenstärke,
    • 21 ... 25: normale Klassenstärke,
    • 26 ... 32: hohe Klassenstärke,

    Alle anderen Schülerzahlen sind unzulässig. Implementieren Sie einen "Klassenstärkenprüfer" als bedingten Ausdruck mit den Sprachelementen:

    • cond
    • if
    • case.

    Die Prozeduren sollen das Bewertungsergebnis als Zeichenkette zurückgeben.

     

    Quelltext überprüfen:

     

    Quelltext überprüfen:

     

    Quelltext überprüfen:

  4. Konstruierbarkeit von Dreiecken

    Zu drei beliebig gegebenen Seitenlängen kann nicht in jedem Fall ein Dreieck konstruiert werden (vgl. Abbildung).
    Vervollständigen Sie das Prädikat konstruierbar?, mit dem geprüft werden soll, ob ein Dreieck zu den gegebenen Seitenlängen a, b und c konstruierbar ist.
    Beachten Sie dabei, dass diese Seitenlängen in einer beliebigen Reihenfolge gegeben sein können.

    Beispiele:

    > (konstruierbar? 3 4 5) --> #t
    > (konstruierbar? 2 7 2) --> #f
    
    Zur Konstruierbarkeit von Dreiecken

    Hinweis: Sie können zur Lösung die variabelstellige Prozedur max nutzen:

    > (max 3 4 5 6 7 5 7 2) --> 7
    

     

    Quelltext überprüfen:

Persönliche Werkzeuge