AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fragen zu binären Bäumen in Delphi

Offene Frage von "lennart9319"
Ein Thema von lennart9319 · begonnen am 12. Mai 2012 · letzter Beitrag vom 14. Mai 2012
Antwort Antwort
lennart9319

Registriert seit: 12. Mai 2012
2 Beiträge
 
#1

Fragen zu binären Bäumen in Delphi

  Alt 12. Mai 2012, 17:13
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 nichtthen anz:=anz-1
end;
Angehängte Dateien
Dateityp: txt Baum Code.txt (6,0 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Fragen zu binären Bäumen in Delphi

  Alt 14. Mai 2012, 10:34
Wo liegt denn Dein Problem?
Wenn ich das richtig verstanden habe, wird da eine Datei eingelesen, deren erster Eintrag die anzahl der Elemente vorgibt, was auch gleichzeitig die Verteilung innerhalb des Baumes steuert.

(dieses obskure f für die Eingabedatei ist ein schönes Beispiel für den überflüssigen Einsatz von globalen Variablen)

Gruß
k-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
lennart9319

Registriert seit: 12. Mai 2012
2 Beiträge
 
#3

AW: Fragen zu binären Bäumen in Delphi

  Alt 14. Mai 2012, 17:17
Danke für de Antwort, aber habe den Code mittlerweile verstanden. Es ging mir nur darum für die mündliche Prüfung genau beschreiben zu können, was der COde tut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 +1. Es ist jetzt 22:18 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