Morsealphabet als Binärbaum programmieren? What?

2 Antworten

Okay, und wo ist nun genau Dein Problem bei der Aufgabe? Du kennst einen Binärbaum? Üblicherweise bedeutet absteigen in eine Richtugn kleienr, in die andere größer, jetzt wird statt dessen * für die eine Richtung, - für die andere verwendet.

Im Endeffekt trägst Du also für jeden Morsecode den Buchstaben im Baum ein, auch das sollte gehen.

Beginne bei Wurzel des Baumes:

Wenn nächstes Morsesymbol * und kein linkes kind existiert, erzeuge linkes kind und steige ab, sonst steige nur ab. Wenn Morsecode erschöpft, setze knotenname auf Buchstabe.

(bei - gehst Du einfach nach rechts und gut ist)

Es ist dabei auch egal, ob Du das lieber rekursiv oder iterativ machst, das kommt letztlich auf den Gesamtentwurf an.

b) Läuft im Endeffekt genauso ab, hier ist es jedoch deutlich einfacher, wenn Du die Traversierung rekursiv erledigst, Du mußt Dich nur entscheiden, ob die Ausgabe pre- post- oder inorder sein soll.


abcdefghilef 
Beitragsersteller
 16.10.2018, 17:29

Danke für deine Antwort. Das hat mir schon etwas weitergeholfen.. allerdings:

Was genau bedeutet dein *(Knoten??) und - soll die Verbindung nach unten darstellen?

Was bedeutet diese Zeile: "Wenn Morsecode erschöpft, setze knotenname auf Buchstabe."?

Da die Aufgabe schriftlich zu erledigen ist, wäre das doch schon beinahe die Lösung für a) oder?

"Wenn nächstes Morsesymbol * und kein linkes kind existiert, erzeuge linkes kind und steige ab, sonst steige nur ab. Wenn Morsecode erschöpft, setze knotenname auf Buchstabe."

Bei b) weiß ich auch nicht so recht. Prepost -oder inorder?
Leider noch nie gehört.

0
KarlRanseierIII  16.10.2018, 17:48
@abcdefghilef

Ich weiß nicht, ob die Aufgabe als realer Code oder Pseudocode erfolgen soll. Wenn es realer Code werden soll, dann mußt Du das natürlich exakter aufschreiben (was ich vermute), Du kannst das ja auch in einem Editor schreiben, bis Du denkst das es passt und dann ordentlich auf Papier bringen.

So wie ich das sehe gibt es doch eine Klasse TNode und eine TBinBaum() - Diese nehmen Dir eigentlich schon fast alles ab. Ich weiß auch nicht, wie der Morsecode übergeben wird, aber ich mache das jetzt nicht in Pascal/Delphi.

Ich sehe nur gerade, daß ich den Namen eines Knotes nicht nachträglich setzen kann, das ist ziemlich deppert. Entweder das Alpahbet liegt geeignet geordnet vor, oder Du mußt TBinTree erweitern (falls das erlaubt ist).

0
regex9  16.10.2018, 17:53
@abcdefghilef
Was genau bedeutet dein *(Knoten??) und - soll die Verbindung nach unten darstellen?

Hast du dir schon einmal das Morsealphabet angeschaut?

Prepost -oder inorder? Leider noch nie gehört.

Dann recherchiere doch einmal. Es gibt genügend Artikel zu dem Thema.

0
abcdefghilef 
Beitragsersteller
 16.10.2018, 18:03
@KarlRanseierIII

Das Alphabet darf man nicht erweitern. Die Implementation soll leider doch als Code und direkt in Delphi erfolgen. Implementiert werden soll TMorsecode. Ich habe nur bekommen, was im Ordner ist. Darauf basierend soll ich das Programm schreiben, bzw. in a und b TMorsecode implementieren. (die Funktionen code, decode, charcode, chardecode und den constructor create)

Kannst du mir dabei irgendwie helfen.. ? Den Kopf für die Implementation habe ich schon.. mir fehlt der Inhalt

Danke

0
KarlRanseierIII  16.10.2018, 18:10
@abcdefghilef

Nein, die Frage ist, wie das Alphabet vorliegt, ob es ein Array von Strings ist, ob es passend vorsortiert ist usw. usf. .

Die vorgegebene Implementierung des Baumes ist gelinde gesagt zum kübeln, nicht Fisch, nicht Fleisch - Wenn ich die so verwenden muß, dann stellt das ein ziemliches Problem dar.

0
abcdefghilef 
Beitragsersteller
 16.10.2018, 18:16
@KarlRanseierIII

Wir haben das so ohne weitere Anweisungen bekommen.
Das verwirrt mich ja auch. Wir sollen uns das so legen, dass es funktioniert.

Für TMorsecode habe ich also erstmal geschrieben;

unit uTMorsecode;

interface

uses
  uBinTree, graphics;

implementation


type
 TMorsecode = class(TBinTree)

  public
     constructor Create (canvas: TCanvas);
     function code (text: String): String;
     function decode(Text: String): String;
  private
     function charcode (c: char; node: TNode; code: string): string;
     function chardecode (c: char; node: TNode; code: string): string;
 end;

implementation
 
.
.
.

end.
0

Dein Link funktioniert leider nicht ("..." im Link).

Ich vermute mal, damit ist sowas gemeint:

http://www.mathe.tu-freiberg.de/~hebisch/cafe/kryptographie/morsebaum.jpg


abcdefghilef 
Beitragsersteller
 16.10.2018, 16:41

Habe den Link bereits korrigiert. Warte auf Bestätigung von einem Admin. Und ja, sowas ähnliches ist gemeint. Edit: [Link geht wieder]

0