Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;; Die ersten drei Zeilen dieser Datei wurden von DrRacket eingefügt. Sie enthalten Metadaten
- ;; über die Sprachebene dieser Datei in einer Form, die DrRacket verarbeiten kann.
- #reader(lib "DMdA-advanced-reader.ss" "deinprogramm")((modname Info2_03_AbstraktionenUndKonstruktionenDurchProzeduren_03defs) (read-case-sensitive #f) (teachpacks ((lib "image2.rkt" "teachpack" "deinprogramm"))) (deinprogramm-settings #(#f write repeating-decimal #t #t none datum #f ((lib "image2.rkt" "teachpack" "deinprogramm")))))
- (define pi 3.141592653)
- ; circle-area berechnet Kreisfläche gegeben radius r
- (: circle-area (number -> number))
- (check-within (circle-area 1) pi .001)
- (define circle-area
- (lambda (r)
- (* pi (square-it r))))
- ; square-it berechnet das quadrat eines wertes x
- (: square-it (number -> number))
- (check-within (square-it 1) 1 .00001)
- (check-within (square-it -10) 100 .0001)
- (check-within (square-it 3) 9 .0001)
- (define square-it
- (lambda (x) (* x x)))
- ; Uhr Beispiel
- ; Grad, die Minutenzeiger pro Minute zurücklegt
- (define degrees-per-minute 360/60) ; = 6˚
- ; Grad, die Stundenzeiger pro Stunde zurücklegt
- (define degrees-per-hour 360/12) ; = 30˚
- ; Zeichne Ziffernblatt zur Stunde h und Minute m
- (: draw-clock (natural natural -> image))
- ; (Testfall:)
- (check-expect (draw-clock 4 15) (draw-clock 16 15))
- ; Prozedur Implementierung (mit drei noch nicht implementierten Sub-Prozeduren):
- (define draw-clock
- (lambda (h m)
- (clock-face (degrees-hour-hand h m) (degrees-minute-hand m))))
- ; degrees-minute-hand berechnet grad des Minutenzeigers gegeben minuten m
- (: degrees-minute-hand (natural -> number))
- (check-expect (degrees-minute-hand 30) 180)
- (define degrees-minute-hand
- (lambda (m)
- (* degrees-per-minute m)))
- ; degrees-hour-hand berechnet grad des Stundenzeigers gegeben Stunde h und Minute m
- (: degrees-hour-hand (natural natural -> number))
- (check-expect (degrees-hour-hand 6 0) 180)
- (check-expect (degrees-hour-hand 6 30) 195)
- (define degrees-hour-hand
- (lambda (h m)
- (* degrees-per-hour (+ h (/ m 60)))))
- ; Notiz: Benötigte Funktionen aus image2, um die Uhr zu zeichnen:
- ; (: circle (real string string -> image))
- ; (: line (real real string -> image))
- ; (: rotate (real image -> image)
- ; (: put-pinhole (integer integer image -> image)) ; Positioniert Bild
- ; (: overlay/pinhole (image ... image -> image))
- ; (: clear-pinhole (image -> image))
- ; Zeichne Ziffernblatt:
- ; Stundenzeiger um dh und Minutenzeiger um dm Grad gedreht
- (: clock-face (real natural -> image))
- (define clock-face
- (lambda (dh dm)
- (clear-pinhole
- (overlay/pinhole
- (circle 50 "outline" "black")
- (rotate (* -1 dh) (put-pinhole 0 35 (line 0 35 "red")))
- (rotate (* -1 dm) (put-pinhole 0 45 (line 0 45 "blue")))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement