Advertisement
Guest User

Untitled

a guest
Apr 17th, 2014
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.83 KB | None | 0 0
  1. ;; Die ersten drei Zeilen dieser Datei wurden von DrRacket eingefügt. Sie enthalten Metadaten
  2. ;; über die Sprachebene dieser Datei in einer Form, die DrRacket verarbeiten kann.
  3. #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")))))
  4. (define pi 3.141592653)
  5.  
  6. ; circle-area berechnet Kreisfläche gegeben radius r
  7. (: circle-area (number -> number))
  8. (check-within (circle-area 1) pi .001)
  9.  
  10. (define circle-area
  11.   (lambda (r)
  12.     (* pi (square-it r))))
  13.  
  14. ; square-it berechnet das quadrat eines wertes x
  15. (: square-it (number -> number))
  16. (check-within (square-it 1) 1 .00001)
  17. (check-within (square-it -10) 100 .0001)
  18. (check-within (square-it 3) 9 .0001)
  19. (define square-it
  20.   (lambda (x) (* x x)))
  21.  
  22.  
  23. ; Uhr Beispiel
  24.  
  25. ; Grad, die Minutenzeiger pro Minute zurücklegt
  26. (define degrees-per-minute 360/60)                    ; = 6˚
  27. ; Grad, die Stundenzeiger pro Stunde zurücklegt      
  28. (define degrees-per-hour   360/12)                    ; = 30˚
  29.  
  30.  
  31. ; Zeichne Ziffernblatt zur Stunde h und Minute m
  32. (: draw-clock (natural natural -> image))
  33. ; (Testfall:)
  34. (check-expect (draw-clock 4 15) (draw-clock 16 15))
  35. ; Prozedur Implementierung (mit drei noch nicht implementierten Sub-Prozeduren):
  36. (define draw-clock
  37.   (lambda (h m)
  38.     (clock-face (degrees-hour-hand h m) (degrees-minute-hand m))))
  39.  
  40. ; degrees-minute-hand berechnet grad des Minutenzeigers gegeben minuten m
  41. (: degrees-minute-hand (natural -> number))
  42. (check-expect (degrees-minute-hand 30) 180)
  43. (define degrees-minute-hand
  44.   (lambda (m)
  45.     (* degrees-per-minute m)))
  46.  
  47. ; degrees-hour-hand berechnet grad des Stundenzeigers gegeben Stunde h und Minute m
  48. (: degrees-hour-hand (natural natural -> number))
  49. (check-expect (degrees-hour-hand 6 0) 180)
  50. (check-expect (degrees-hour-hand 6 30) 195)
  51. (define degrees-hour-hand
  52.   (lambda (h m)
  53.     (* degrees-per-hour (+ h (/ m 60)))))
  54.  
  55. ; Notiz: Benötigte Funktionen aus image2, um die Uhr zu zeichnen:
  56. ; (: circle (real string string -> image))
  57. ; (: line (real real string -> image))
  58. ; (: rotate (real image -> image)
  59. ; (: put-pinhole (integer integer image -> image)) ; Positioniert Bild
  60. ; (: overlay/pinhole (image ... image -> image))
  61. ; (: clear-pinhole (image -> image))
  62.  
  63. ; Zeichne Ziffernblatt:
  64. ; Stundenzeiger um dh und Minutenzeiger um dm Grad gedreht
  65. (: clock-face (real natural -> image))
  66.  
  67. (define clock-face
  68.   (lambda (dh dm)
  69.     (clear-pinhole
  70.      (overlay/pinhole
  71.       (circle 50 "outline" "black")
  72.       (rotate (* -1 dh) (put-pinhole 0 35 (line 0 35 "red")))
  73.       (rotate (* -1 dm) (put-pinhole 0 45 (line 0 45 "blue")))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement