Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- ;Aufgabe 2.1
- ;<kompletternotruf> =:: <ueberschrift> <position> <Notfallzeit> <weitereAngaben> <Peilzeichenx2> <Unterschrift> "OVER"
- ;<ueberschrift> =:: <Notzeichenx3> "HIER IST " <EOL> <Schiffsnamex3> <Rufzeichen> <Notzeichen> <Schiffsname> "ICH BUCHSTABIERE" <name-buchstabiert> "Rufzeichen" <Rufzeichen-buchstabiert>
- ;<Notzeichenx3> =:: "MAYDAY" , "MAYDAY" , "MAYDAY" <EOL>
- ;<Schiffsnamex3> =:: <Schiffsname> <Schiffsname> <Schiffsname>
- ;<Rufzeichen-buchstabiert> =:: <buchstabiertes Rufzeichen> <EOL>
- ;<Schiffsname> =:: <Schiffsname>
- ;<name-buchstabiert> =:: <Schiffsname-buchstabiert> <EOL>
- ;<Rufzeichen> =:: "RUFZEICHEN"
- ;<Notzeichen> =:: "MAYDAY"
- ;<position> =:: "NOTFALLPOSITION" <Standortserklaerung> <EOL>
- ;<Standortserklaerung> =:: <Standort>
- ;<Notfallzeit> =:: "NOTFALLZEIT" <Zeit> <EOL>
- ;<weitereAngaben> =:: <weiteres> <EOL>
- ;<Peilzeichenx2> =:: <Peilzeichen> <Peilzeichen> <EOL>
- ;<Unterschrift> =:: <Schifsname> <Rufzeichen-buchstabiert> <EOL>
- ;Aufgabe 2.2
- ;Buchstabiertafel als Hilfsfunktion
- (define Buchstabiertafel ; Wir benutzen eine assoziative Liste, um jedem Buchstaben seinen Buchstabierschlüssel zuzuordnen.
- '( (\. Stop) ; Ein Punkt hat in einem Construct syntaktische Bedeutung, muss hier als escaped werden.
- (A Alfa) ; Die Schluessel sind dem jeweiligen Buchstaben fest zugeordnet.
- (B Bravo) ; Um die Buchstabiertafel zu nutzen muss man (assoc <Buchstabe> Buchstabiertafel) anwenden.
- (C Charlie) ; Es wird das komplette Paar angezeigt, um den Buchstaben und Schluessel zu verbinden.
- (D Delta) ; Mit (last (assoc <Buchstabe> Buchstabiertafel)) wird nur der Schluessel zum jeweiligen Buchstaben angezeigt.
- (E Echo)
- (F Foxtrott)
- (G Golf)
- (H Hotel)
- (I India)
- (J Juliett)
- (K Kilo)
- (L Lima)
- (M Mike)
- (N November)
- (O Oscar)
- (P Papa)
- (Q Quebec)
- (R Romeo)
- (S Sierra)
- (T Tango)
- (U Uniform)
- (V Viktor)
- (W Whiskey)
- (X X-ray)
- (Y Yankee)
- (Z Zulu)
- (\0 Nadazero) ; Auch Zahlen müssen escaped werden.
- (\1 Unaone)
- (\2 Bissotwo)
- (\3 Terrathree)
- (\4 Kartefour)
- (\5 Pantafive)
- (\6 Soxisix)
- (\7 Setteseven)
- (\8 Oktoeight)
- (\9 Novenine)
- (\, Decimal) ))
- ; Aufgabe 1.2
- (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.
- (assoc (char->symbol (char-upcase char)) Buchstabiertafel))
- (define (char->symbol char) ; Hilfsfunktion, die einen Character in ein Symbol umwandelt.
- (string->symbol (string char)))
- "-- Bsp. Charsuche --"
- (last (Charsuche #\A))
- (last (Charsuche #\a))
- (last (Charsuche #\0))
- (last (Charsuche #\.))
- ; Aufgabe 1.3
- (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.
- (integer->char ; Ascii-Code wieder zum Char umwandeln.
- (let ((charcode (char->integer char))) ; Wir merken uns den Charcode ...
- (if (and (>= charcode 97) (<= charcode 122)) (- charcode 32) charcode)))) ; ... um ihn zu checken und ggf. zu subtrahieren. Ansonsten unverändert lassen.
- "-- Bsp. my-upcase --"
- (my-upcase #\a)
- (my-upcase #\z)
- (my-upcase #\A)
- (my-upcase #\.)
- ; Aufgabe 1.4
- (define (Buchstabieren str) ; Diese Funktion wandelt den String in eine Char-Liste und startet die rekursive Funktion Buchstabe.
- (Buchstabe (string->list str)))
- (define (Buchstabe Liste) ; Die rekursive Funktion mit dem Argument Liste, deren erste Stelle wird Betrachtet und für die nächste Rekursion verworfen.
- (cond ((empty? Liste) '()) ; Ist die Liste leer brechen wir mit der Leeren Liste ab.
- ((Charsuche (first Liste)) ; Existiert für den Char an der ersten Stelle der Liste ein Schlüssel, ...
- (cons (last (Charsuche (first Liste))) (Buchstabe (rest Liste)))) ; dann ersetzen wir ihn und führen die Suche fort.
- ; Mithilfe von cons werden die Schlüssel zu einer neuen Liste zusammengesetzt.
- (else (Buchstabe (rest Liste))))) ; Ansonsten löschen wir ihn führen die Suche mit dem Rest der Liste fort.
- "-- Bsp. Buchstabieren --"
- (Buchstabieren "ABC")
- (Buchstabieren "abc.")
- (Buchstabieren "öäüÖÄÜ$/*A")
- (define (slist->string slst)
- (string-join (map symbol->string slst) " "))
- (define (NOTMELDUNG Schiffsname Rufzeichen Position Zeit weiteres)
- (string-append "MAYDAY " "MAYDAY " "MAYDAY " " \n "
- "HIER IST " "\n"
- Schiffsname " " Schiffsname " " Schiffsname " " (slist->string (Buchstabieren Rufzeichen)) "\n"
- "MAYDAY " Schiffsname "ICH BUCHSTABIERE " (slist->string (Buchstabieren Schiffsname)) "\n"
- "RUFZEICHEN " (slist->string (Buchstabieren Rufzeichen)) "\n"
- "NOTFALLPOSITION " Position "\n"
- "NOTFALLZEIT " Zeit "\n"
- weiteres "\n"
- "ICH SENDE DEN TRAEGER --" "\n"
- Schiffsname " " (slist->string (Buchstabieren Rufzeichen)) "\n"
- "OVER"))
- ;Aufgabe 2.3
- (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")
- ;"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
- ;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
- ;ICH SENDE DEN TRAEGER -- \n BABETTE Delta Echo Juliett Yankee\nOVER"
- (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")
- ;"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
- ;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
- ;--\nAMIRA Alfa Mike Romeo Yankee\nOVER"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement