News
  Chat
  Forum
  Profile
  Links
  Stundenplan
  Speiseplan

  C++ Tutorials
  ASM Tutorials
  Scheme Tutorials
  HTML Tutorials

  Mathe Tips
  Physik Tips

  II02 Board
  II02 Members

  Member Projects
 Aufgaben 5-1128-10-02 


Konditionale, Listen, Prozeduren

Aufgabe 5: Lösung:
(define briefporto2 (lambda (g l b h) (cond ((or (<= g 0) (<= l 0) (<= b 0) (<= h 0)) "Fehler in Eingabe") ((and (<= g 20) (<= l 235) (<= b 125) (<= h 5)) '1.1) ((and (<= g 50) (<= l 235) (<= b 125) (<= h 10)) '2.2) ((and (<= g 500) (<= l 353) (<= b 250) (<= h 20)) '3) ((and (<= g 1000) (<= l 353) (<= b 250) (<= h 50)) '4.4) (else "Fehler in Eingabe")))) Kommentar: Wenn jemand noch einen einfacheren Vorschlag hat nur her damit. Diese Version benutzt logische Operatoren (and & or) um die Abfragen miteinander zu verknüpfen. Außerdem wurde eine Fehler- kontrolle für negative Werte eingefügt. (Zeile mit dem or) Aufgabe 6: Lösung: (define my-random (lambda (from to) (+ from (random (+ (- to from) 1))))) (define zbriefliste (lambda (p) (if (< p 1) (list ) (cons (list (my-random 1 1000) (my-random 1 353) (my-random 1 250) (my-random 1 50)) (zbriefliste (- p 1)))))) Kommentar: Die wohl schwierigste Aufgabe in diesem Teil ist nur mit hilfe einer Rekursion zu lösen. Verwendet haben wir dazu eine Liste (sowas soll ja dann raus kommen - eine Liste mit Listen drin) die mit cons immer ein Element angehängt bekommt. (cons 'Element (list 1 2 3)) = (Element 1 2 3) Da wir aber eine ganze Liste als Element anhängen wollen sieht es etwa so aus: (cons (list 1 2 3 4) (list (list 3 4 5 6) (list 5 6 7 8)))= ( (1 2 3 4) (3 4 5 6) (5 6 7 8) ) In dieser Aufgabe werden nun die Zahlen in einer solchen Liste über die function my-random generiert. Diese Teilliste wird dann immer an die eigentliche Ergebnisliste angehängt. Dazu der rekursive Aufrufe: (zbriefliste (- p 1)) Es muß nun noch kontroliert werden das bei p = 0 eine leere Liste zurückgegeben wird und somit die Rekursion beendet wird. Aufgabe 7: Lösung: (define abzug (lambda (p) (cond ((<= p 0) "Fehler in Eingabe") ((<= p 30) '8) ((<= p 50) '9) (else '10)))) Kommentar: Siehe Aufgabe 5 - ist praktisch das gleiche nur etwas einfacher. Aufgabe 9: Lösung: (define signum (lambda (p) (cond ((< p 0) '-1) ((> p 0) '1) (else '0 )))) Kommentar: Hier wird einfach nur unterschieden ob der Wert von p größer oder kleiner 0 ist und dann -1 bzw +1 ausgegeben. Wenn p = 0 dann wird 0 zurückgegeben. Aufgabe 10: Lösung: (define abs (lambda (p) (if (< p 0) (- p) p))) Kommentar: Noch einfacher als Aufgabe 9. Hier wird im Falle einer negativen Zahl die selbige noch mal negativiert (- p) und damit wieder positiv. Aufgabe 11: Lösung: (define my-odd? (lambda (p) (if (= (/ p 2) (round (/ p 2))) #f #t) )) (define my-even? (lambda (p) (not (my-odd? p)))) Kommentar: Es gibt mehrere Möglichkeiten herauszufinden ob p eine ungerade Zahl ist oder nicht. Man könnte das auch über die Modulation mit 2 herausfinden. Die andere function wird halt einfach nur als negativierte Version der anderen definiert (not (f p) )