Entwickler-Ecke
Sonstiges (Delphi) - Morsetext
Karl Lynen - Do 20.08.09 17:52
Titel: Morsetext
Guten Tag,
Ich hoffe ihr könnt mir bei meiner Frage behilflich sein.
Ich soll ein Programm schreiben, dass einen "Normaltext" in "Morsetext" verwandelt.
zB. I N F O >>> .. -. ..-. ---
Wir sollen einen Encodierer und einen Decodierer entwickeln.
Leider habe ich keine genaue Ahnung wie ich das anstellen soll.
Könntet ihr mir bitte weiterhelfen?
Vielen Dank :)
Gausi - Do 20.08.09 18:08
Ich schmeiß einfach mal StringReplace in den Raum. So ganz grob: Ein Record-Typ definieren, der Buchstaben und zugehöriges Morsezeichen (plus ein Leerzeichen) enthält, dann davon ein Array der Länge 26 bauen, und dann den Code
Delphi-Quelltext
1: 2:
| for i := 0 to 25 do aText := StringReplace(aText, MorseArray[i].Char, MorseArray[i].Morsecode, rfReplaceAll); |
Die andere Richtung genauso. Geschwindigkeitsrekorde wirst du damit nicht aufstellen, aber das sollte für kleine Texte klappen - da kann man ja auch mal was gröber arbeiten. :angel:
Marc. - Do 20.08.09 19:55
Eine alternative und einfach zu bewerkstelligen Lösung stellt folgende dar:
Du definierst in einem Array alle 26 verschiedene Morse-Zeichen, wodurch du jedem Zeichen einen eindeutigen Index (wie im Alphabet) zuordnest.
Nun musst Du nur noch mit der Funktion Ord() (Gegenteil ist Chr()) den ASCII-Zeichencode des entsprechenden Chars bestimmen, um mittels diesem an dessen Index im Alphabet zu kommen.
Ich hoffe das ist verständlich und Du kommst damit weiter. :)
Grüße,
Marc
Bergmann89 - Do 20.08.09 22:25
Hey,
Gausi hat folgendes geschrieben : |
| (plus ein Leerzeichen) |
kommt drauf an wie da er das haben will, weil beim gemorsten Code gibts ja auch keine Leerzeichen. Das Leerzeichen macht die Sache dann bloß beim decodieren einfacher.
€: vergesst was ich gesagt hab, hab das grad mit nem anderen Code verwechselt, beim Morsecode gehts ja gar nich anders...
MfG Bergmann
Narses - Do 20.08.09 22:26
Moin!
Bergmann89 hat folgendes geschrieben : |
Gausi hat folgendes geschrieben : | | (plus ein Leerzeichen) | kommt drauf an wie da er das haben will, weil beim gemorsten Code gibts ja auch keine Leerzeichen. Das Leerzeichen macht die Sache dann bloß beim decodieren einfacher. |
Aber sicher gibt´s beim Morsen "Leerzeichen" (=entsprechende Pause). Wie willst du denn sonst jemals den Text wieder entziffern. :lol:
cu
Narses
Tilman - Do 20.08.09 22:27
Naja Pausen muss es zumindest geben, den wie wollte man sonst I (..) von EE (..) unterscheiden?
Bergmann89 - Do 20.08.09 22:36
Ja, hab ich ja auch grad festgestellt. ich hab nur grad an nen Code gedacht, bei dem nur die Blätter des binären Baums belegt sind, und nich zusätzlich noch die Äste (wie es ja beim Morsecode ist). Wäre nur die Blätter des Baumes belegt könnte man das Signal auch ohne Pausen entschlüseln...
MfG Bergmann
thepaine91 - Fr 21.08.09 09:08
Auf wikipedia stehn die Pausen soweit ich weis war es ein Leer für Buchstabenanbstand und 2 Leer für Wörter. ^^
turboPASCAL - Fr 21.08.09 12:26
All zu einfach ist es nicht. ;)
Das sollte etwas Arbeit ersparen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| function so(Text: string): string; var outText: string; i: integer; begin outText := ''; for i := 1 to length(Text) do case UpCase(Text[i]) of 'A': outText := outText + '|' + '.-'; 'B': outText := outText + '|' + '-...'; 'C': outText := outText + '|' + '-.-.'; 'D': outText := outText + '|' + '—..'; 'E': outText := outText + '|' + '.'; 'F': outText := outText + '|' + '..-.'; 'G': outText := outText + '|' + '--.'; 'H': outText := outText + '|' + '....'; 'I': outText := outText + '|' + '..'; 'J': outText := outText + '|' + '.---'; 'K': outText := outText + '|' + '-.-'; 'L': outText := outText + '|' + '.-..'; 'M': outText := outText + '|' + '--'; 'N': outText := outText + '|' + '-.'; 'O': outText := outText + '|' + '---'; 'P': outText := outText + '|' + '.--.'; 'Q': outText := outText + '|' + '--.-'; 'R': outText := outText + '|' + '.-.'; 'S': outText := outText + '|' + '...'; 'T': outText := outText + '|' + '-'; 'U': outText := outText + '|' + '..-'; 'V': outText := outText + '|' + '...-'; 'W': outText := outText + '|' + '.--'; 'X': outText := outText + '|' + '-..-'; 'Y': outText := outText + '|' + '-.--'; 'Z': outText := outText + '|' + '--..'; '0': outText := outText + '|' + '-----'; '1': outText := outText + '|' + '.----'; '2': outText := outText + '|' + '..---'; '3': outText := outText + '|' + '...--'; '4': outText := outText + '|' + '....-'; '5': outText := outText + '|' + '.....'; '6': outText := outText + '|' + '----.'; '7': outText := outText + '|' + '---..'; '8': outText := outText + '|' + '--...'; '9': outText := outText + '|' + '-....'; '.': outText := outText + '|' + '.-.-.-'; '?': outText := outText + '|' + '..--..'; '+': outText := outText + '|' + '.-.-.'; '-': outText := outText + '|' + '-....-'; '=': outText := outText + '|' + '-...-'; #32: outText := outText + #32;
"|" fungiert hierbei als Wortpause
else outText := outText + ''; end; Delete(outText, 1, 1); Result := outText; end; |
thepaine91 - Fr 21.08.09 16:17
Schreib ihm doch nicht den ganzen Fertigen Quellcode :nut:
Jakob_Ullmann - Fr 21.08.09 16:29
turboPASCAL hat folgendes geschrieben : |
| All zu einfach ist es nicht. ;) |
Genau. Und beim Vorlegen des gesamten Quellcodes ist der Lerneffekt IMHO sehr klein. :wink:
Ich würde ja den String beim Morse->Latein von vorne nach hinten durchgehen. Ich weiß nicht, in wie weit es beim Morsen Kollisionen gibt, aber ich denke, dass das nicht ausbleiben wird. Latein->Morse lässt sich ja am Einfachsen wirklich mit StringReplace() umwandeln umwandeln.
Gausi - Fr 21.08.09 16:30
Naja, der komplizierte Teil (das Dekodieren) fehlt ja komplett. Deswegen hab ich das ja auch mit StringReplace machen wollen - da geht das in beiden Richtungen gleich. :D
Hidden - Fr 21.08.09 16:36
Hi :)
In Schulen wird zum Entschlüsseln von Morsecode meißt ein Binärbaum verwendet. Ohne weitere Information, welches Verfahren denn hier gewünscht ist, können wir aber wohl kaum richtig helfen.
mfG,
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!