Hallo alle miteinander!
Uns wurde im Infounterricht die Aufgabe gestellt, einen Vokabeltrainer mit Binärbäumen zu programmieren. Da ich leider nicht sehr gut in Info bin - jedoch immer versuche, mein Bestes zu geben - stehe ich nun vor einer aus meiner Sicht schier unlösbaren Hürde.
Mit Arrays beispielsweise würde ich mit Würgen und Hängen vielleicht noch einen solchen Trainer zusammengeschustert bekommen, aber Binärbäume find ich so dermaßen kompliziert und verwirrend, dass ich schon an den für die anderen Leute aus meinem Kurs eifachen Dinge scheitere.
Der Trainer soll folgendes können und soll ohne Ausnahme mit Binärbäumen programmiert werden:
- Vokabeleingabe entweder deutsch od. enlisch
- Suche ("Ist Vokabl 'xy' vorhanden?")
- Vokabel löschen
- Binärbaum bzw. dessen Datensätze laden/speichern
- Vokabeltraining deutsch - englisch / englisch - deutsch
- Ausgabe aller Vokabeln
Da ja immer zwei Dinge eingelesen werden müssen (deutsche Vokabel, englische Vokabel) stellt sich mir die Frage: geht das mit einem Baum oder mit zwei!?
Hier mal meine Unit Baum
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:
| unit UBaum;
interface uses UDaten;
Type TBaum = ^TKnoten; Tknoten = record Inhalt:TInhalt; peng,pd:TBaum; end;
procedure init(var a:TBaum); procedure anfuegen(zahl:TInhalt; var lauf:TBaum);
implementation
procedure init(var a:TBaum); begin a:=nil; end;
procedure anfuegen(zahl:TInhalt; var lauf:TBaum); begin if lauf = nil then begin new(lauf); lauf^.Inhalt:=zahl; lauf^.peng:=nil; lauf^.pd:=nil; end else if zahl > lauf^.Inhalt then anfuegen(zahl,lauf^.peng) else anfuegen(zahl,lauf^.pd); end;
end. |
Ich weiß, "zahl" ist eine irreführende Bezeichnung, aber nur Gott weiß, warum das Programm nicht mehr kompiliert, wenn ich diese Parameter umbenenne. Der Quelltext stammt aus einem anderen älteren Programm.
Und die Main Unit
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:
| unit Main;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, UBaum, UDaten;
type TForm1 = class(TForm) Label1: TLabel; ed_e_eng: TEdit; ed_e_deu: TEdit; Label2: TLabel; Label3: TLabel; bt1_einlesen: TButton; lb1: TListBox; bt2_ausgabe: TButton; procedure FormCreate(Sender: TObject); procedure bt1_einlesenClick(Sender: TObject); procedure bt2_ausgabeClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.DFM}
var Baum:TBaum; procedure TForm1.FormCreate(Sender: TObject); begin init(Baum); end;
procedure TForm1.bt1_einlesenClick(Sender: TObject); var a,b:TInhalt; begin a:=ed_e_eng.text; b:=ed_e_deu.text; anfuegen(a,Baum); end;
procedure TForm1.bt2_ausgabeClick(Sender: TObject); begin lb1.items.add(Baum^.Inhalt); end;
end. |
Wie man sieht, bin ich noch nicht sehr weit gekommen!
Danke für die Hilfe,
SiH
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt