Autor Beitrag
SiH
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 02.03.08 15:24 
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

ausblenden volle Höhe 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:
unit UBaum;

interface
uses UDaten;

//------------------Typendeklaration--------------------------------------------

Type TBaum = ^TKnoten;
   Tknoten = record
             Inhalt:TInhalt;
            peng,pd:TBaum;
       end;

//------------------Auflistung der Prozeduren-----------------------------------

procedure init(var a:TBaum);
procedure anfuegen(zahl:TInhalt; var lauf:TBaum);

implementation

//-----------------------Initialisierung----------------------------------------

procedure init(var a:TBaum);
begin
a:=nil;
end;

//---------------Knoten anfügen/Binärbaum erstellen-----------------------------

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

ausblenden volle Höhe 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:
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
    { Private-Deklarationen}
  public
    { Public-Deklarationen}
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

var Baum:TBaum; //Deklaration des Baumes

procedure TForm1.FormCreate(Sender: TObject);
begin
init(Baum); //neuen Baum erstellen
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);
//anfuegen(b,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 user profile iconNarses: Code- durch Delphi-Tags ersetzt