Advertisement
Coincidence1988

Aufgabe 26

Nov 17th, 2017
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 3.80 KB | None | 0 0
  1. ;; Signatur: convert-monetary-unit : symbol ... -> ... [noch auszugestalten]
  2.  
  3. ;; Zweck: Umrechnung eines in Euro, Dollar oder Yen gegebenen
  4. ;; Geldbetrags in einen Geldbetrag, der als '->E (nach Euro),
  5. ;; '->D (nach Dollar) oder '->Y (nach Yen) gegeben ist.
  6.  
  7. ;; Beispieldaten [muessen noch konkret spezifiziert werden]:
  8. ;; eur0 sei ein Betrag von 0 Euro
  9. ;; eur10 sei ein Betrag von 10 Euro
  10. ;; usd10 sei ein Betrag von 10 Dollar
  11. ;; usd17.42 sei ein Betrag von 17 Dollar und 42 Cent
  12. ;; jpy10 sei ein Betrag von 10 Yen
  13. ;; jpy1742 sei ein Betrag von 1742 Yen
  14.  
  15. ;; **************************************************************************
  16. ;; **  Umrechnungsfaktor EUR nach JPY
  17. ;; **************************************************************************
  18. (define jpy-per-eur 132.245)
  19.  
  20. ;; **************************************************************************
  21. ;; **  Umrechnungsfaktor EUR nach USD
  22. ;; **************************************************************************
  23. (define usd-per-eur   1.167)
  24.  
  25. ;; **************************************************************************
  26. ;; **  Weitere Faktoren sollen nicht explizit definiert werden.
  27. ;; **  Aus finanzmathematischer Sicht ist dies nicht korrekt,
  28. ;; **  aus didaktischen Gruenden der Informatik hier(!) schon.
  29. ;; **************************************************************************
  30.  
  31. ;; Beispiele [unvollstaendig spezifiziert, muss noch ausgestaltet werden:
  32. ;; (convert-monetary-unit '->E eur0)     sollte [0 Euro]    ergeben.
  33. ;; (convert-monetary-unit '->E usd10)    sollte [8,56 Euro] ergeben.
  34. ;; (convert-monetary-unit '->E jpy10)    sollte [0,07 Euro] ergeben.
  35. ;;
  36. ;; (convert-monetary-unit '->D eur10)    sollte [11,67 US$] ergeben.
  37. ;; (convert-monetary-unit '->D usd10)    sollte [10 US$]    ergeben.
  38. ;; (convert-monetary-unit '->D jpy1742)  sollte [13,93 US$] ergeben.
  39. ;;
  40. ;; (convert-monetary-unit '->Y eur10)    sollte [1322 Yen]  ergeben.
  41. ;; (convert-monetary-unit '->Y usd17.42) sollte [1971 Yen]  ergeben.
  42. ;; (convert-monetary-unit '->Y jpy1742)  sollte [1742 Yen]  ergeben.
  43.  
  44. (define eur 'eur)
  45. (define usd 'usd)
  46. (define jpy 'jpy)
  47.  
  48. (define-struct money (currency amount))
  49.  
  50. (define (convert-monetary-unit conversion amount)
  51.   (cond
  52.     [(symbol=? conversion '->E)
  53.      (cond
  54.        [(equal? (money-currency amount) 'eur) (* (money-amount amount) 1)]
  55.        [(equal? (money-currency amount) 'usd) (/ (floor (* 100 (/ (money-amount amount) usd-per-eur))) 100)]
  56.        [(equal? (money-currency amount) 'jpy) (/ (floor (* 100 (/ (money-amount amount) jpy-per-eur))) 100)]
  57.        )
  58.      ]
  59.  
  60.     [(symbol=? conversion '->D)
  61.      (cond
  62.        [(equal? (money-currency amount) 'eur) (* (money-amount amount) usd-per-eur)]
  63.        [(equal? (money-currency amount) 'usd) (* (money-amount amount) 1)]
  64.        [(equal? (money-currency amount) 'jpy) (* (/ (money-amount amount) jpy-per-eur) usd-per-eur)]
  65.        )
  66.      ]
  67.    
  68.     [(symbol=? conversion '->Y)
  69.      (cond
  70.        [(equal? (money-currency amount) 'eur) (floor (* (money-amount amount) jpy-per-eur))]
  71.        [(equal? (money-currency amount) 'usd) 0]
  72.        [(equal? (money-currency amount) 'jpy) (* (money-amount amount) 1)]
  73.        )
  74.      ]
  75.  
  76.  
  77.  
  78.  
  79.        ))
  80.  
  81. (check-expect (convert-monetary-unit '->E (make-money eur 0)) 0)
  82. (check-expect (convert-monetary-unit '->E (make-money usd 10)) 8.56)
  83. (check-expect (convert-monetary-unit '->E (make-money jpy 10)) 0.07)
  84.  
  85. (check-expect (convert-monetary-unit '->D (make-money eur 10)) 11.67)
  86. (check-expect (convert-monetary-unit '->D (make-money usd 10)) 10)
  87. ;(check-expect (convert-monetary-unit '->D (make-money jpy 1742)) 13.93)
  88.  
  89. (check-expect (convert-monetary-unit '->Y (make-money eur 10)) 1322)
  90. ;(check-expect (convert-monetary-unit '->Y (make-money usd 17.42)) 1971)
  91. (check-expect (convert-monetary-unit '->Y (make-money jpy 1742)) 1742)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement