Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.22 KB | None | 0 0
  1. #lang racket
  2. ;Aufgabe 2.1
  3. ;<kompletternotruf> =:: <ueberschrift> <position> <Notfallzeit> <weitereAngaben> <Peilzeichenx2> <Unterschrift> "OVER"
  4. ;<ueberschrift> =:: <Notzeichenx3> "HIER IST " <EOL> <Schiffsnamex3> <Rufzeichen> <Notzeichen> <Schiffsname> "ICH BUCHSTABIERE" <name-buchstabiert> "Rufzeichen" <Rufzeichen-buchstabiert>
  5. ;<Notzeichenx3> =:: "MAYDAY" , "MAYDAY" , "MAYDAY" <EOL>
  6. ;<Schiffsnamex3> =:: <Schiffsname> <Schiffsname> <Schiffsname>
  7. ;<Rufzeichen-buchstabiert> =:: <buchstabiertes Rufzeichen> <EOL>
  8. ;<Schiffsname> =:: <Schiffsname>
  9. ;<name-buchstabiert> =:: <Schiffsname-buchstabiert> <EOL>
  10. ;<Rufzeichen> =:: "RUFZEICHEN"
  11. ;<Notzeichen> =:: "MAYDAY"
  12. ;<position> =:: "NOTFALLPOSITION" <Standortserklaerung> <EOL>
  13. ;<Standortserklaerung> =:: <Standort>
  14. ;<Notfallzeit> =:: "NOTFALLZEIT" <Zeit> <EOL>
  15. ;<weitereAngaben> =:: <weiteres> <EOL>
  16. ;<Peilzeichenx2> =:: <Peilzeichen> <Peilzeichen> <EOL>
  17. ;<Unterschrift> =:: <Schifsname> <Rufzeichen-buchstabiert> <EOL>
  18.  
  19. ;Aufgabe 2.2
  20. ;Buchstabiertafel als Hilfsfunktion
  21. (define Buchstabiertafel ; Wir benutzen eine assoziative Liste, um jedem Buchstaben seinen Buchstabierschlüssel zuzuordnen.
  22. '( (\. Stop) ; Ein Punkt hat in einem Construct syntaktische Bedeutung, muss hier als escaped werden.
  23. (A Alfa) ; Die Schluessel sind dem jeweiligen Buchstaben fest zugeordnet.
  24. (B Bravo) ; Um die Buchstabiertafel zu nutzen muss man (assoc <Buchstabe> Buchstabiertafel) anwenden.
  25. (C Charlie) ; Es wird das komplette Paar angezeigt, um den Buchstaben und Schluessel zu verbinden.
  26. (D Delta) ; Mit (last (assoc <Buchstabe> Buchstabiertafel)) wird nur der Schluessel zum jeweiligen Buchstaben angezeigt.
  27. (E Echo)
  28. (F Foxtrott)
  29. (G Golf)
  30. (H Hotel)
  31. (I India)
  32. (J Juliett)
  33. (K Kilo)
  34. (L Lima)
  35. (M Mike)
  36. (N November)
  37. (O Oscar)
  38. (P Papa)
  39. (Q Quebec)
  40. (R Romeo)
  41. (S Sierra)
  42. (T Tango)
  43. (U Uniform)
  44. (V Viktor)
  45. (W Whiskey)
  46. (X X-ray)
  47. (Y Yankee)
  48. (Z Zulu)
  49. (\0 Nadazero) ; Auch Zahlen müssen escaped werden.
  50. (\1 Unaone)
  51. (\2 Bissotwo)
  52. (\3 Terrathree)
  53. (\4 Kartefour)
  54. (\5 Pantafive)
  55. (\6 Soxisix)
  56. (\7 Setteseven)
  57. (\8 Oktoeight)
  58. (\9 Novenine)
  59. (\, Decimal) ))
  60.  
  61. ; Aufgabe 1.2
  62. (define (Charsuche char) ; Mithilfe der Hilfsfunktion wird der char in ein Symbol umgewandelt und mit diesem wie in 1.1 beschrieben nach dem Schlüssel gesucht.
  63. (assoc (char->symbol (char-upcase char)) Buchstabiertafel))
  64. (define (char->symbol char) ; Hilfsfunktion, die einen Character in ein Symbol umwandelt.
  65. (string->symbol (string char)))
  66. "-- Bsp. Charsuche --"
  67. (last (Charsuche #\A))
  68. (last (Charsuche #\a))
  69. (last (Charsuche #\0))
  70. (last (Charsuche #\.))
  71.  
  72. ; Aufgabe 1.3
  73. (define (my-upcase char) ; Für eine Uppercase-Funktion muss man lediglich den Ascii-Code mit 32 subtrahieren, wenn er zwischen 97 und 122 liegt.
  74. (integer->char ; Ascii-Code wieder zum Char umwandeln.
  75. (let ((charcode (char->integer char))) ; Wir merken uns den Charcode ...
  76. (if (and (>= charcode 97) (<= charcode 122)) (- charcode 32) charcode)))) ; ... um ihn zu checken und ggf. zu subtrahieren. Ansonsten unverändert lassen.
  77. "-- Bsp. my-upcase --"
  78. (my-upcase #\a)
  79. (my-upcase #\z)
  80. (my-upcase #\A)
  81. (my-upcase #\.)
  82.  
  83. ; Aufgabe 1.4
  84. (define (Buchstabieren str) ; Diese Funktion wandelt den String in eine Char-Liste und startet die rekursive Funktion Buchstabe.
  85. (Buchstabe (string->list str)))
  86. (define (Buchstabe Liste) ; Die rekursive Funktion mit dem Argument Liste, deren erste Stelle wird Betrachtet und für die nächste Rekursion verworfen.
  87. (cond ((empty? Liste) '()) ; Ist die Liste leer brechen wir mit der Leeren Liste ab.
  88. ((Charsuche (first Liste)) ; Existiert für den Char an der ersten Stelle der Liste ein Schlüssel, ...
  89. (cons (last (Charsuche (first Liste))) (Buchstabe (rest Liste)))) ; dann ersetzen wir ihn und führen die Suche fort.
  90. ; Mithilfe von cons werden die Schlüssel zu einer neuen Liste zusammengesetzt.
  91. (else (Buchstabe (rest Liste))))) ; Ansonsten löschen wir ihn führen die Suche mit dem Rest der Liste fort.
  92. "-- Bsp. Buchstabieren --"
  93. (Buchstabieren "ABC")
  94. (Buchstabieren "abc.")
  95. (Buchstabieren "öäüÖÄÜ$/*A")
  96.  
  97. (define (slist->string slst)
  98. (string-join (map symbol->string slst) " "))
  99.  
  100. (define (NOTMELDUNG Schiffsname Rufzeichen Position Zeit weiteres)
  101. (string-append "MAYDAY " "MAYDAY " "MAYDAY " " \n "
  102. "HIER IST " "\n"
  103. Schiffsname " " Schiffsname " " Schiffsname " " (slist->string (Buchstabieren Rufzeichen)) "\n"
  104. "MAYDAY " Schiffsname "ICH BUCHSTABIERE " (slist->string (Buchstabieren Schiffsname)) "\n"
  105. "RUFZEICHEN " (slist->string (Buchstabieren Rufzeichen)) "\n"
  106. "NOTFALLPOSITION " Position "\n"
  107. "NOTFALLZEIT " Zeit "\n"
  108. weiteres "\n"
  109. "ICH SENDE DEN TRAEGER --" "\n"
  110. Schiffsname " " (slist->string (Buchstabieren Rufzeichen)) "\n"
  111. "OVER"))
  112. ;Aufgabe 2.3
  113. (NOTMELDUNG "BABETTE" "DEJY" "UNGEFÄHR 10 SM NORDÖSTLICH LEUCHTTURM KIEL" "1000 UTC" "SCHWERER WASSEREINBRUCH WIR SINKEN KEINE VERLETZTEN VIER MANN GEHEN IN DIE RETTUNGSINSEL SCHNELLE HILFE ERFORDERLICH")
  114. ;"MAYDAY MAYDAY MAYDAY \n HIER IST \nBABETTE BABETTE BABETTE Delta Echo Juliett Yankee\nMAYDAY BABETTEICH BUCHSTABIERE Bravo Alfa Bravo Echo Tango Tango Echo\nRUFZEICHEN Delta Echo Juliett Yankee\n
  115. ;NOTFALLPOSITION UNGEFÄHR 10 SM NORDÖSTLICH LEUCHTTURM KIEL\nNOTFALLZEIT 1000 UTC\nSCHWERER WASSEREINBRUCH WIR SINKEN KEINE VERLETZTEN VIER MANN GEHEN IN DIE RETTUNGSINSEL SCHNELLE HILFE ERFORDERLICH\n
  116. ;ICH SENDE DEN TRAEGER -- \n BABETTE Delta Echo Juliett Yankee\nOVER"
  117. (NOTMELDUNG "AMIRA" "AMRY" "53°56’N, 006°31’E" "1640 UTC" "KENTERUNG IN SCHWERER SEE SINKT, 15 MANN AN BORD, DAS SCHIFF IST 15M LANG, ROTER RUMPF")
  118. ;"MAYDAY MAYDAY MAYDAY \n HIER IST \nAMIRA AMIRA AMIRA Alfa Mike Romeo Yankee\nMAYDAY AMIRAICH BUCHSTABIERE Alfa Mike India Romeo Alfa\nRUFZEICHEN Alfa Mike Romeo
  119. ;Yankee\nNOTFALLPOSITION 53°56’N, 006°31’E\nNOTFALLZEIT 1640 UTC\nKENTERUNG IN SCHWERER SEE SINKT, 15 MANN AN BORD, DAS SCHIFF IST 15M LANG, ROTER RUMPF\nICH SENDE DEN TRAEGER
  120. ;--\nAMIRA Alfa Mike Romeo Yankee\nOVER"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement