Ich habe am kommenden Dienstag meine mündliche Prüfung im Fach Informatik und die beiden Hauptthemen sind Binäre Bäume in Delphi und Automaten und Akzeptoren.
Um mich darauf vorzubereiten habe ich mir ein einfaches Delphiprogramm angeguckt, was wie ein Telefonbuch funktionieren soll (Ist von einem ehemaligen Schüler programmiert worden). Das meiste versteh ich auch, nur an 2 Stellen im Code, weiß ich nicht so ganz sicher, was er genau tut, viellleicht kann mir da einer helfen.
Es geht um die procedure max_in_links und die function baumbau. Was der Code im ganzen bewirkt, ist mir klar, nur eben nicht im einzelnen!
Und dann hab ich noch eine zweite Frage: Wie schreibt man die function inorder zur function postorder um?
(Zur Verständniss ist im Anhang der gesamte Code des Programms)
lennart9319
Delphi-Quellcode:
procedure TForm1.Button_ladenClick(Sender: TObject);
function baumbau(n: integer): pointer;
var hilf1: pointer;
begin if n=0 then baumbau:=nil
else begin new(hilf1);
hilf1^.l:=baumbau(n div 2);
read(f,x); hilf1^.inside:=x;
hilf1^.r:=baumbau(n-1- n div 2);
baumbau:=hilf1
end
end;
begin if OpenDialog1.Execute then System.Assign(f,OpenDialog1.FileName);
if OpenDialog1.FileName<>''
then begin reset(f);
read(f,x);
anz:=strtoint(x.nr);
root:=baumbau(anz);
end
end;
procedure TForm1.Button_speichernClick(Sender: TObject);
procedure inorder(p: pointer);
begin if p<> nil then begin inorder(p^.l);
x:=p^.inside;
write(f,x);
inorder(p^.r)
end
Delphi-Quellcode:
procedure TForm1.Button_entfernenClick(Sender: TObject);
procedure max_in_links(var p,q: pointer);
begin if p^.r<>nil
then max_in_links(p^.r,q)
else begin q^.inside:=p^.inside;
p:=p^.l;
end
end;
procedure entfernen(var hilf1: pointer; suchname: string);
begin if hilf1=nil
then Edit2.Text:='existiert nicht'
else if suchname<hilf1^.inside.name
then entfernen(hilf1^.l, suchname)
else if suchname>hilf1^.inside.name
then entfernen(hilf1^.r, suchname)
else if hilf1^.l=nil
then hilf1:=hilf1^.r
else if hilf1^.r=nil
then hilf1:=hilf1^.l
else max_in_links(hilf1^.l,hilf1)
end;
begin
entfernen(root, Edit1.text);
if Edit2.Text<>'existiert nicht' then anz:=anz-1
end;