AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Binärer Baum mit Klasse

Ein Thema von ford42 · begonnen am 8. Dez 2015 · letzter Beitrag vom 17. Dez 2015
Antwort Antwort
Seite 1 von 2  1 2   
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Binärer Baum mit Klasse

  Alt 8. Dez 2015, 15:07
Delphi-Version: 5
Hey,

ich soll einen binären Baum mithilfe einer Klasse erstellen. Jedoch sind meine Methoden (vor allem (bzw glaube nur) beim löschen) verbuggt. Wenn ich schnell irgendwas eingebe, dies dann lösche kommt manchmal eine Fehlermeldung (z.B. Ungültige Zeigeroperation), jedoch kann ich dies nicht hilfreich nachstellen, sodass ich sehe an welcher Stelle genau was falsch ist (wenn ich es langsam und überlegt löscht, kommt kein Fehler). Oo

Kann mir bitte jemand helfen oder einen Tipp geben?

Vielen Dank
LG ford42
Angehängte Dateien
Dateityp: zip BaumKlasse.zip (81,2 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
ub60

Registriert seit: 14. Nov 2004
17 Beiträge
 
#2

AW: Binärer Baum mit Klasse

  Alt 8. Dez 2015, 21:56
Jedoch sind meine Methoden (vor allem (bzw glaube nur) beim löschen) verbuggt.
Das Problem ist eher, Du hast gar keine Methoden (außer Create und Destroy). Zumindest nicht in Deiner Klasse. Damit wird das Ganze sehr unübersichtlich. Du solltest Dir zuerst einmal überlegen, was Deine Baum-Klasse können soll und dann Methoden dafür (innerhalb der Klasse) entwerfen, nicht innerhalb des Formulars.
Ein weiterer Design-Fehler ist das Ansprechen des aktuellen Formulars innerhalb Deiner Klasse, z.B. hier:
Code:
constructor TNodeTest.Create;
begin
  inherited; //hierdurch wird der ursprüngliche Konstruktor aufgerufen
  Form4.RE_Status.SelAttributes.Color := clGreen;
  Form4.RE_Status.Lines.Add('$' + IntToStr(Integer(self)) +  ' wurde erstellt');
  Form4.RE_Status.SelAttributes.Color := clBlack;
  Inc(Form4.NodeI);
end;
Die Ausgabe der Daten über das Formular hat in der Klasse nichts zu suchen. Eventuell könnte man an die Klasse ein Element des Formulars als Parameter übergeben; so wie Du es gemacht hast, ist es leider sehr unübersichtlich, fehleranfällig und nicht leicht auf andere Probleme (oder Formulare) anpassbar.
Überlege Dir einfach einmal, was Du alles ändern müsstest, wenn der Baum auf einem anderen Formular laufen soll...

ub60
  Mit Zitat antworten Zitat
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Binärer Baum mit Klasse

  Alt 9. Dez 2015, 08:13
Ja, da hast du Recht.
Das ist (vor allem) so unübersichtlich geworden, da ich es davor mit records und Pointer gemacht habe und es dann zu ner Klasse umwandeln sollte....

Aber dann bau ich es mal um (da deine Argumente, vor allem dein letztes (anderes Formular) natürlich Sinn ergeben!
  Mit Zitat antworten Zitat
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Binärer Baum mit Klasse

  Alt 10. Dez 2015, 13:06
Ich scheiter gerade an den Klassenmethoden.

Also ich muss ja z.B. class procedure Einfuegen(eingabe: String) als Klassenmethode defenieren (da es ja nur einmal vorkommen darf) oder?

Und wie kann ich die dann in der Unit für die Gui aufrufen?


Dankeschön
LG ford42
Angehängte Dateien
Dateityp: zip BaumKlasseGetrennt.zip (81,5 KB, 3x aufgerufen)

Geändert von ford42 (10. Dez 2015 um 13:11 Uhr)
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#5

AW: Binärer Baum mit Klasse

  Alt 10. Dez 2015, 14:13
Ich scheiter gerade an den Klassenmethoden.

Also ich muss ja z.B. class procedure Einfuegen(eingabe: String) als Klassenmethode defenieren (da es ja nur einmal vorkommen darf) oder?
Ist dir der Unterschied zwischen Klasse und Objekt klar? Klassen sind quasi die Baupläne, Objekte die Realisierung (Instanzen der Klasse).
Klassenmethoden operieren auf der Klasse und haben daher nur Zugriff auf allgemeine Dinge und andere Klassenmethoden und Klassenvariablen. Aber nicht auf normale Felder einer Objektinstanz, auf denen normale Methoden operieren.
Eine Methode wie "Einfügen" ist mit ziemlicher Sicherheit keine Klassenmethode, sondern eine normale, da du dir sonst die Möglichkeit versperrst, mehrere Objekte (Instanzen) dieser Klasse zu haben, die unterschiedliche Werte eingefügt bekommen können.

Deine aktuelle Deklaration von TNodeTest scheint mir also ziemlich falsch. Mach mal überall das "class" Präfix weg.
Übrigens:

Delphi-Quellcode:
// statt:
      class var NodeI: Integer;
      class var wAendern: Integer;
      class var PWurzelNode: TNodeTest;
      class var PStandNode: TNodeTest;
      class var PParentNode: TNodeTest;
// geht auch einfach:
      class var
        NodeI: Integer;
        wAendern: Integer;
        PWurzelNode: TNodeTest;
        PStandNode: TNodeTest;
        PParentNode: TNodeTest;

// und statt
if PWurzelNode <> nil then
// kann man auch schreiben
if Assigned(PWurzelNode) then

// ist absolut gleichwertig, Assigned() testet auf <> nil, nur damit du es mal gesehen hast
  Mit Zitat antworten Zitat
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Binärer Baum mit Klasse

  Alt 10. Dez 2015, 15:00
Danke, das war mir so nicht klar. Ich habe es davor anders verstanden.

Der Tipp mit Assigned ist auch sehr hilfreich, da es Tipparbeit erspart.

Würdet ihr jetzt noch was ändern, oder passt es soweit?
Angehängte Dateien
Dateityp: zip BaumKlasseGetrennt.zip (81,5 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.020 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Binärer Baum mit Klasse

  Alt 10. Dez 2015, 16:17
Würdet ihr jetzt noch was ändern, oder passt es soweit?
Abgesehen von der Formatierung?

Hast Du noch Form4 in der Klasse.
Char 'r' und 'l' ???
Warum Class var... Sollte man - bis auf wenige stellen - drauf verzichten.

" if Form4.Loeschen('alles') then "


Sorry aber den Code kann man kaum lesen!

Geändert von Mavarik (10. Dez 2015 um 16:20 Uhr)
  Mit Zitat antworten Zitat
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Binärer Baum mit Klasse

  Alt 11. Dez 2015, 08:59
Erstmal dankeschön.

Abgesehen von der Formatierung?
Was findest du an der Formatierung nicht schön?

Hast Du noch Form4 in der Klasse.
Hast Recht, hab ich nun geändert.

Char 'r' und 'l' ???
da steht r für rechts und l für links. Da habe ich Char genommen, da Char weniger verbraucht als ein String. War das ein falscher Gedanke?

Warum Class var... Sollte man - bis auf wenige stellen - drauf verzichten.
Weil es davor nicht funktioniert hat und ich dachte, dass es sonst pro Objekt eine sperate Variable/Variablenwert gibt und das will ich ja nicht oder liege ich da falsch?

" if Form4.Loeschen('alles') then "
Ich weiß, dass ist unschön gelöst, aber ich weiß nicht wie ich es an der Stelle besser lösen kann.
Kann mir da bitte jemand weiterhelfen/einen Tipp geben?

Sorry aber den Code kann man kaum lesen!
Brauchst dich nicht entschuldigen, nur aus Kritik kann ich lernen, deshalb habe ich ja hier nachgefragt!

Dankeschön

EDIT: Die LoescheUndFuegeEin-Methode war bei der vorherigen verbuggt
Angehängte Dateien
Dateityp: zip BaumKlasseGetrennt.zip (81,5 KB, 2x aufgerufen)

Geändert von ford42 (11. Dez 2015 um 11:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.020 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Binärer Baum mit Klasse

  Alt 11. Dez 2015, 11:58
Erstmal dankeschön.

Abgesehen von der Formatierung?
Was findest du an der Formatierung nicht schön?
Entspricht nicht so dem "Üblichen"... Ok Ich formatieren meinen Source auch anders als die Norm...

Um sowas wie "Rechts" und "Links" zu speichern nimm einen eigenen Typen...

Delphi-Quellcode:
Type
  TLaufrichtung = (lrKeine,lrRechts,lrLinks);
Es ist im Zip Nie die Datei BaumklasseUnit.dfm dabei... Daher kann man es nicht testen - jedenfalls nicht so einfach
Angehängte Dateien
Dateityp: pas BinaererBaum.pas (23,5 KB, 7x aufgerufen)

Geändert von Mavarik (11. Dez 2015 um 12:05 Uhr)
  Mit Zitat antworten Zitat
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Binärer Baum mit Klasse

  Alt 11. Dez 2015, 12:50
Ok dankeschön.
Habs nun mit dem Typen gemacht.

Und nun ists auch mit der BaumklasseUnit.dfm verpackt.

LG ford42
Angehängte Dateien
Dateityp: zip BaumKlasseGetrennt.zip (82,4 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf