AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Mathematischen Ausruck als Binärbaum darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Mathematischen Ausruck als Binärbaum darstellen

Ein Thema von MrMooed · begonnen am 2. Apr 2013 · letzter Beitrag vom 3. Apr 2013
 
Benutzerbild von MrMooed
MrMooed

Registriert seit: 18. Feb 2012
101 Beiträge
 
Delphi 7 Enterprise
 
#1

Mathematischen Ausruck als Binärbaum darstellen

  Alt 2. Apr 2013, 15:22
Hallo DP,

Ich beschäftige mich zur Zeit mit einem Funktionsplotter. (bzw. erstmal mit dessen Rechenwerk )
Dazu habe ich mir überlegt, dass ich den Term zunächst als Binärbaum einlese, diesen mittels Postorder umstelle und dann ausrechne.
Alles bis auf das einlesen funktioniert soweit richtig
beim "postorder'n" kommt es immer zu einem Stack-Overflow, weshalb es wohl am einlesen liegen muss.
Delphi-Quellcode:
var Baum, tmp: TTree;
procedure TForm1.TermToTree(pTerm: String);
begin
  Baum := TTree.create;
  repeat
    case pTerm[1] of
      '+','-','*','/': begin
                         tmp := TTree.create;
                         tmp := Baum;
                         Baum.setLeftTree(tmp);
                         Baum.setContent(TObject(Char(pTerm[1])));
                         Baum.setRightTree(TTree.create);
                         Baum := Baum.getRightTree;
                       end;
      '0'..'9': begin
                  Baum.setContent(TObject(String(Baum.getContent) + Char(pTerm[1])));
                end;
    end;
    delete(pTerm,1,1);
  until pTerm = '';
end;
Ich vermute, dass es an tmp := Baum liegt. Erstellt er damit keine neue Struktur, sondern setzt nur den zeiger von 'tmp' auf die Stelle wo 'Baum' liegt
Wenn dem so ist, kann man das umgehen ?

//Edit: meine Klasse TTree sieht folgendermaßen aus:
Delphi-Quellcode:
TTree = class
    private
      content: TObject;
      Open: Boolean;
      root: TTree;
      leftTree: TTree;
      rightTree: TTree;
    public
      constructor create();
      procedure setContent(pContent: TObject);
      procedure setOpen(pOpen: Boolean);
      procedure setRoot(pRoot: TTree);
      procedure setLeftTree(pTree: TTree);
      procedure setRightTree(pTree: TTree);
      function getContent: TObject;
      function getRoot: TTree;
      function getLeftTree: TTree;
      function getRightTree: TTree;
      function haveChilds: Boolean;
      function isOpen: Boolean;
  end;

Geändert von MrMooed ( 2. Apr 2013 um 15:24 Uhr)
  Mit Zitat antworten Zitat
 


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 07:48 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