Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Morsealphabet als Binärbaum programmieren? What? (https://www.delphipraxis.net/198235-morsealphabet-als-binaerbaum-programmieren-what.html)

Clashhelfer 16. Okt 2018 14:49

Morsealphabet als Binärbaum programmieren? What?
 
Hey,
habe zu morgen eine Aufgabenstellung bekommen, die lautet:
Morsealphabet als Binärbaum programmieren. (Bzw. erstmal implementieren/ aber schriftlich?!)

Habe die ganze Aufgabe mal mit den anderen Dateien hochgeladen.

Hier: https://drive.google.com/open?id=1CU...3ym0hbmSQYGMdo

Verstehe leider nur Bahnhof, wir sollen Aufgabe a) und b) erledigen.Nur wie?! Und schriftlich???

Danke im Voraus (Hoffe ich bin hier richtig!)

Daniel 16. Okt 2018 14:52

AW: Morsealphabet als Binärbaum programmieren? What?
 
Moin,

wie weit bist Du denn bisher gekommen? Zunächst einmal wäre ja grundsätzlich zu überlegen, wie ein Binärbaum und das Morsealphabet im Sinne der Aufgabenstellung zusammenhängen sollen. Danach wird dann bestimmt deutlich, wie man anfangen könnte.
Grundsätzlich machen wir hier aber keine Auftragsarbeiten …

//edit: Witzig, der Zusammenhang war mir bisher nicht bekannt.
http://www.mathe.tu-freiberg.de/~heb...morsecode.html
Zu meiner Entschuldigung kann ich vorbringen, eher selten zu morsen.

Clashhelfer 16. Okt 2018 15:06

AW: Morsealphabet als Binärbaum programmieren? What?
 
Ich weiß, dass Ihr keine Aufgaben erledigt.. allerdings bin ich total hilflos und weiß nicht mal wo ich anfangen muss.
Ich habe es so verstanden, dass ich das Klassendiagramm erklären soll. In diesem Fall also TMorsecode?!

Code, Decode, blabla. Das sagt mir alles nichts. Soll ich mir nun was ausdenken? Mir fehlt total der Ansatz.
Ich kann mir etwas unter einem Baum in der Informatik vorstellen, aber das war's auch schon wieder.

Wie würdest du denn ansetzen?

Uwe Raabe 16. Okt 2018 15:21

AW: Morsealphabet als Binärbaum programmieren? What?
 
Zitat:

Zitat von Daniel (Beitrag 1415889)
Zu meiner Entschuldigung kann ich vorbringen, eher selten zu morsen.

<Trivia>Bei älteren Handys wurde eine eingehende "SMS" mit der Sequenz "... -- ..." signalisiert, was dem Morsecode dieser drei Buchstaben entspricht.</Trivia>

DeddyH 16. Okt 2018 15:26

AW: Morsealphabet als Binärbaum programmieren? What?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1415895)
Zitat:

Zitat von Daniel (Beitrag 1415889)
Zu meiner Entschuldigung kann ich vorbringen, eher selten zu morsen.

<Trivia>Bei älteren Handys wurde eine eingehende "SMS" mit der Sequenz "... -- ..." signalisiert, was dem Morsecode dieser drei Buchstaben entspricht.</Trivia>

[OT]
Code:
.- -.-. .... .-- .- ...
(Ich habe früher viel gemorst, aber auf dem Schiff und nicht auf dem Baum)
[/OT]

freimatz 16. Okt 2018 15:47

AW: Morsealphabet als Binärbaum programmieren? What?
 
Was ist denn die Datei morsebaumanwendung.urd?
Vermutlich soll man die Datei uBinTree.pas verwenden. Dessen Code habe ich mal überflogen :shock:

Clashhelfer 16. Okt 2018 15:50

AW: Morsealphabet als Binärbaum programmieren? What?
 
Zitat:

Zitat von freimatz (Beitrag 1415900)
Was ist denn die Datei morsebaumanwendung.urd?
Vermutlich soll man die Datei uBinTree.pas verwenden. Dessen Code habe ich mal überflogen :shock:

Was bedeutet das nun konkret? Was die Datei morsebaumanwendung.urd ist, weiß ich nicht. Kann sie auch nicht öffnen.
Hast du einen groben Plan, was man bei a) und b) tun soll?
Danke für deine Antwort

KodeZwerg 16. Okt 2018 16:08

AW: Morsealphabet als Binärbaum programmieren? What?
 
Liste der Anhänge anzeigen (Anzahl: 1)
hab probleme dein google auf zu machen. Anhang 50100

Clashhelfer 16. Okt 2018 16:30

AW: Morsealphabet als Binärbaum programmieren? What?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1415903)
hab probleme dein google auf zu machen. Anhang 50100

https://drive.google.com/open?id=1CU...3ym0hbmSQYGMdo
Müsste damit wieder gehen,
LG

KodeZwerg 16. Okt 2018 16:39

AW: Morsealphabet als Binärbaum programmieren? What?
 
Liste der Anhänge anzeigen (Anzahl: 1)
sorry, ich gebe es auf. Anhang 50101 bzw probiere es später von zu hause nochmal :)

Clashhelfer 16. Okt 2018 17:29

AW: Morsealphabet als Binärbaum programmieren? What?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1415910)
sorry, ich gebe es auf. Anhang 50101 bzw probiere es später von zu hause nochmal :)

Gerne, Edit: Das Ganze soll doch implementiert werden[in Delphi]

Die Unit dafür habe ich schon geschrieben.. Inhalt brauch ich nurnoch und da fehlt mir das nötige Wissen.. Bzw. ich verstehe es nicht.

Delphi-Quellcode:
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.

hoika 16. Okt 2018 19:54

AW: Morsealphabet als Binärbaum programmieren? What?
 
Hallo,
hast du dir uBinTree.pas und dessen Klasse/Methoden schon angesehen?

Bsp:
Delphi-Quellcode:
function TBinTree.insertleft(c: char): boolean;
  // Es wird an der Cursorposition ein neues Blatt an den Baum gehängt, wenn
  // der Cursorknoten links einen leeren Teilbaum besitzt. Bei einem leeren Baum
  // wird der Wurzelknoten erzeugt. War das Einfügen erfolgreich, wird das
  // Zeichen "c" als Knoteninhalt gespeichert "true" zurückgegeben - sonst "false".

Ich fange ich mit einem leeren Binärbaum an:

var
  BinTree: TBinTree;
begin
  BinTree:= TBinTree.Create;
  BinTree.Empty; // eigentlich nicht notwendig, weil der Baum ja eh leer ist

  BinTree.insertleft('E');
  // Der "Cursor", also der aktuelle Knoten ist jetzt
  BinTree.insertleft('I');

  so dann erst mal alle ganz linken rein ('S', 'H','5').
  Danach mit Reset wieder auf Root.
  BinTree.Reset;
  auf 'E' springen
  BinTree.Left;
  BinTree.InsertRight('A');
So kannst Du dir schrittweise deinen Baum aufbauen.

Klaus01 17. Okt 2018 07:37

AW: Morsealphabet als Binärbaum programmieren? What?
 
.. ist es in dem Beispielbaum (in dem .odt) nicht so , das man vom root node wenn ein "-" kommt nach rechts im Baum abzweigt, und wenn ein "." nach links.

T(-) steht dann rechts vom root-node
M(--) steht rechts vom T node
N(-.) steht dann links vom T node.

E(.) steht dann entsprechend links vom root-node.


Grüße
Klaus

Sherlock 17. Okt 2018 12:09

AW: Morsealphabet als Binärbaum programmieren? What?
 
OK, die Aufgabe erfordert etwas Textverständnis und ein paar Stunden Beschäftigung mit ObjectPascal. Ich bin heute aber in Erklärbär Laune.

Zusammenfassung:
Was der Morsecode ist, wird in dem .odt erklärt. Warum er so ist leider nicht, aber dazu hat Daniel ja einen Link präsentiert. Kurz geht es darum über ein Kabel (oder Lichtsignale oder später auch per Funk) Mitteilungen zu übertragen. Diese Mitteilungen sollen zum einen beliebige Texte beinhalten und zum anderen möglichst zeitsparend übertragen werden können. Weil es zum Zeitpunkt der Erfindung nicht möglich war gesprochene Sprache zu übertragen, sondern nur zwischen "Strom fließt" (dabei kann man auch auf die Dauer dieses Zustands achten, Kernpunkt des Morse-Codes) und "Strom fließt nicht" unterscheiden konnte, kam man auf den Code. Er nutzte den "Strom fließt" Zustand samt der Möglichkeit unterschiedlicher Dauer für die Übertragung zweier verschiedener Zeichen:
* ein kurzes "Strom fließt" symbolisiert als .
* und ein langes "Strom fließt" symbolisiert durch ein -
Zusammen mit einem etwas längeren "Strom fließt nicht" als Trenner kompletter Buchstaben, konnte er fortan seinen Code sinnvoll nutzen.

Codieren (besser: Encodieren) bedeutet dabei, den Text, den man durch die Leitung schicken will, in die entsprechende Form zu bringen. Dies geschah in der Vergangenheit von Hand, jetzt soll dieses Programm das automatisieren. Aus zB DELPHI muss dann -... . .-.. .--. .... .. werden.

Decodieren beschreibt die Umkehrung des obigen Prozesses, also die Empfängerseite. Man hat eine Menge von durch Pausen getrennte . und - die man eben in Buchstaben und hoffentlich sinnvolle Wörter decodieren muss. Also ist aus -... . .-.. .--. .... .. wieder DELPHI herzustellen. Damit ist codieren/decodieren nichts anderes als eine Übersetzung wie zB von Deutsch nach Englisch und Umgekehrt.

Zwischenstand:
Jetzt sollte man begriffen haben, worum es beim Morsen geht (die Sache geht eigentlich noch tiefer und begründet fast schon einen wichtigen Teilbereich der Informatik, genannt Informationstheorie, weil man sich ein paar wichtige Gedanken bei der Code Erstellung gemacht hat: Stichworte Entropiekodierung, Präfixfreiheit).

Interessanterweise schreibst Du, daß Du weißt, was es mit einem Baum in der Informatik auf sich hat. Ich hab daran seinerzeit etwas länger knabbern müssen, und (wissentlich) nie eingesetzt. Kurz das wichtigste zu einem Baum: Einen bestimmten Wert in einem Baum zu suchen, ist aufgrund der Regeln, die zu seinem Aufbau führen, im Schnitt schneller, als eine simple Liste von vorne nach hinten abzusuchen. Es gibt freilich Suchstrategien für Listen, die schneller sind als die lineare Suche, aber ein Baum wird in der Regel dennoch vorgezogen.

Was haben wir jetzt also:
Wir wissen was Morsen ist, können mit Stift und Papier (zu Deutsch: schriftlich!) codieren und decodieren und haben sowohl eine Tabelle des Morsecodes als auch ein Bild der Repräsentation als Baum (gepunktete Linien für . und gestrichelte Linien für -). Bleibt noch zu klären, was es mit dem Klassendiagramm (das offenbar in der für so ziemlich alle unlesbaren .urd Datei liegt, glücklicherweise aber auch in der Aufgabenstellung angegeben wurde) und dem Quellcode auf sich hat.

Schauen wir uns die Klassen mal an:
(Vorbemerkung: Nach meinem Kenntnisstand sind ! und ? nicht Bestandteil von UML, werden aber immer wieder mal genommen, um Prozeduren von Funktionen zu unterscheiden, was durch den Rückgabewert bei Funktionen eigentlich unnötig ist)

TBinTree und sein Anhängsel TNode sind des Pudels Kern, TMorsecode ist die Aufgabe und TForm1 ist schließlich schlicht ein Muß um das ganze visuell hinzubekommen. Alle Klassen sollten wissen, was beim Erzeugen und Freigeben gegebenenfalls zu beachten ist (create und destroy).
Bereits implementiert sind TBinTree und TNode.
TBinTree: Es werden uns drei Prozeduren geboten, die selbsterklärende Namen haben: eine zeichnet, eine entfernt den Baum und eine setzt etwas im Baum zurück (was klärt sich gleich). Dann haben wir einige Funktionen mit ebenso selbsterklärenden Namen, die gleichzeitig Schlüsse auf die allgemeine Implementierung der Klasse zulassen: Die Klasse erlaubt es abhängig von der aktuellen Position im Baum zu navigieren, nennen wir diese Position einfach mal Cursor, so wie der Cursor hier im Editor. Alle Funktionen beziehen sich immer auf die Position des Cursors:
  • GetChar holt das Zeichen an der aktuellen Cursorposition
  • left und right bewegen zum linken oder rechten Unterknoten falls möglich und melden den Erfolg
  • die beiden inserts hängen vom aktuellen Cursor ausgehend, Knoten an die gegebene Position und füllen sie mit dem übergebenen Zeichen, wenn dort nicht bereits etwas steht. Die Erfolgsmeldung ist der Rückgabewert.
  • Empty ist eine Abfrage ob der Baum leer ist
    Damit ist auch klar, daß die Postion des Cursors mit Reset auf die Wurzel zurückgesetzt wird.
TNode: Die Klasse repräsentiert einen Knoten im Baum, sie umfaßt den Knoteninhalt und die Speicherstellen für ihre Unterknoten. Jedes Mal wenn TBinTree einen Knoten erzeugen möchte oder abfragt, landen wir in einer Instanz hiervon.

Nun die nicht implementierte Klasse TMorseCode:
Wir haben zwei Funktionen code und decode die offensichtlich mit einen kompletten Text bzw. eine Folge von Morsecodes arbeiten sollen. Und zwei Funktionen die dem Namen nach das gleiche für jeweils ein einfaches Zeichen tun sollen.

Jetzt kommt die Preisfrage:
Mit dem bis hierhin erlangten Wissen: Was bedeutet es, den Binärbaum zum Morsecode aufzubauen? Welche Methoden von TMorseCode wären dazu nötig, und warum und eventuell schon wie? Dann, welche Methoden von TBinTree wären nötig, wieder warum?

Sherlock

DieDolly 17. Okt 2018 14:59

AW: Morsealphabet als Binärbaum programmieren? What?
 
Zitat:

Die Unit dafür habe ich schon geschrieben.. Inhalt brauch ich nurnoch und da fehlt mir das nötige Wissen.. Bzw. ich verstehe es nicht.
Ich kann mir nur bedingt vorstellen, dass ein Lehrer Schülern eine Aufgabe gibt, die aufgrund von Unwissen unmöglich zu erledigen ist.
Das Grundwissen wurde sicher schon vermittelt. Der Rest liegt an dir.

QuickAndDirty 17. Okt 2018 15:29

AW: Morsealphabet als Binärbaum programmieren? What?
 
Also ohne mir die Aufgabenstellung angesehen zu haben, denke ich mal er soll 'nen Morsecode-Parser bauen und exemplarisch einen Suchbaum der ein schnelles parsen ermöglicht aufbauen?
Das kann ja nun wirklich nicht schwer sein wenn man die Klassen schon vor die Füße geschmissen bekommt.

Du musst es auch nicht selbst programmieren. Gut gegooglet ist auch eine legitime Lösung.

BST
Binary search tree
Morse code
Pascal
Delphi
parse

auf den ersten Blick , viele Lösungen in Java und c# ....

Daniel 17. Okt 2018 15:34

AW: Morsealphabet als Binärbaum programmieren? What?
 
hm - jetzt von oben herab zu sagen, es läge an ihm oder auch ohne die Aufgabenstellung gelesen zu haben, zu mutmaßen hilft niemandem.
In dem Fall ist "nichts beitragen" die beste Option.

Sherlock 17. Okt 2018 15:40

AW: Morsealphabet als Binärbaum programmieren? What?
 
Ich vermute das Schlimmste, denn die Aufgabe wurde gestern für heute gestellt...der Käse ist gegessen.

Was schade ist, denn interessant ist es allemal, aber ich hab jetzt keinen Antrieb, das zu programmieren...so ganz ohne Nutzen für Dritte :wink:

Interessant sind Übrigens die Möglichkeiten das Encodieren zu realisieren, also von Klartext zu Morse. Der Baum gibt das ja eigentlich nur umständlich her...eigentlich.

Hier (https://www.pocketmagic.net/morse-encoder/) hab ich eine elegante Methode gesehen, wie das Encoden ohne eine Tabelle sondern mit dem Baum ginge. Gut, der Baum wird nur einmal dabei genutzt, dann nie wieder, aber immerhin.

Sherlock

DieDolly 17. Okt 2018 16:48

AW: Morsealphabet als Binärbaum programmieren? What?
 
Es gibt zwei Möglichkeiten

der Lehrer hat keine Ahnung, dass das zu kompliziert für das erste Ausbildungsjahr ist
oder der Lehrer will die Spreu vom Weizen trennen und austesten, wer welche Kenntnisse hat.

hoika 17. Okt 2018 21:07

AW: Morsealphabet als Binärbaum programmieren? What?
 
Hallo,
wenn man sich die Aufgabenstellung liest,
soll doch kein Binärbaum selbst programmiert werden,
sondern die existierende Unit benutzt werden.

Ob das jetzt zu kompliziert ist, weiß ich nicht.

Mein Beispiel weiter oben hatte ich in 10 min zusammen.

OliviaH 17. Okt 2018 22:50

AW: Morsealphabet als Binärbaum programmieren? What?
 
Hallo,
diese Hausaufgabe hatten wir auch.
Hilfe findest du im Beispiel 20 auf https://mathematikalpha.de/informatik-klasse11

Olivia

DieDolly 17. Okt 2018 23:20

AW: Morsealphabet als Binärbaum programmieren? What?
 
Fertigen Code herunterladen und als Hausaufgabe abgeben, ist keine Leistung auf die man stolz sein sollte.
Vermutlich besteht die ganze Kölner Uni aus solchen Leuten :roll:

Luckie 18. Okt 2018 02:26

AW: Morsealphabet als Binärbaum programmieren? What?
 
Bitte beim Thema bleiben. Auf die Hausaufgaben-Thematik hat schon Daniel hingewiesen.

Sherlock 18. Okt 2018 08:17

AW: Morsealphabet als Binärbaum programmieren? What?
 
Nur ganz kurz zu der geposteten Lösung: Das ist von der Aufgabenstellung hier im Thread so weit entfernt, man könnte dafür glatt eine 6 (Thema verfehlt) bekommen. Gefordert ist "Die Umsetzung erfolgt mit einem objektorientierten Fachkonzept und konsequenter Beachtung des MVC-Konzepts". Die vorgeschlagene Lösung entspricht eher dem, was ich vor 30 Jahren in TurboPascal gemacht hätte. Es löst vielleicht das Problem, macht es aber nicht objektorientiert, nicht mal im Ansatz. Das wäre was für das Fach "Software-Archäologie" oder "wie hat der Opa das damals gemacht?".

Sherlock

Schokohase 18. Okt 2018 08:24

AW: Morsealphabet als Binärbaum programmieren? What?
 
Zitat:

Zitat von Sherlock (Beitrag 1416027)
Nur ganz kurz zu der geposteten Lösung: Das ist von der Aufgabenstellung hier im Thread so weit entfernt, man könnte dafür glatt eine 6 (Thema verfehlt) bekommen.

Darum wurde das ja auch nicht als Lösung sondern als Hilfe propagiert:
Zitat:

Zitat von OliviaH (Beitrag 1416008)
Hilfe findest du im Beispiel 20 auf https://mathematikalpha.de/informatik-klasse11

Denn der TE ist
Zitat:

Zitat von Clashhelfer (Beitrag 1415892)
[...] allerdings bin ich total hilflos und weiß nicht mal wo ich anfangen muss.
[...]
Code, Decode, blabla. Das sagt mir alles nichts. Soll ich mir nun was ausdenken? Mir fehlt total der Ansatz.
Ich kann mir etwas unter einem Baum in der Informatik vorstellen, aber das war's auch schon wieder.

Wie würdest du denn ansetzen?


Sherlock 18. Okt 2018 08:34

AW: Morsealphabet als Binärbaum programmieren? What?
 
Es ist aber für einen Anfänger keine Hilfe, ein anderes Programmierparadigma anzubieten. Das ist fast schon so, als würde man jemandem, der Spanisch lernen möchte, Italienisch als Referenz anbieten. Die Nähe ist da, aber es ist eben nicht Spanisch. Das meinte ich.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz