AGB  ·  Datenschutz  ·  Impressum  







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

Mathematischen Ausruck als Binärbaum darstellen

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

Registriert seit: 14. Apr 2009
673 Beiträge
 
#1

AW: Mathematischen Ausruck als Binärbaum darstellen

  Alt 2. Apr 2013, 17:35
Allerdings wollte ich das gerne auch mit einem Baum realisieren, da mir das einfacher zu interpretieren scheint (vor allem, wenn später noch Exp.-Funktionen und der gleichen hinzukommen sollen)
Glaube ich nicht. Du kannst Dir ja mal diesen fertigen Code angucken.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Mathematischen Ausruck als Binärbaum darstellen

  Alt 2. Apr 2013, 23:05
Allerdings wollte ich das gerne auch mit einem Baum realisieren...
Glaube ich nicht...
Glaube ich schon, denn der Baum entspricht der syntaktischen Transformation in einem Parser (=> kontextfreie Grammatik). Das man das auch einfacher hinbekommen kann, steht außer Frage.
  Mit Zitat antworten Zitat
Benutzerbild von MrMooed
MrMooed

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

AW: Mathematischen Ausruck als Binärbaum darstellen

  Alt 3. Apr 2013, 14:26
da bin ich wieder

Habe sogar von Bäumen heute Nacht geträumt jedenfalls fiel mir die Lösung Heute Morgen dann plötlich ein Nach einigen Fehlschlägen und schusseligkeiten habe ich den Code etwas gekürzt und verschönert - aber das wichtigste er funktioniert (zur Zeit nur +,-,*,/ aber immerhin )

Falls ich Zeit habe und es irgendwen interessiert, kann ich das fertige Programm kommentieren/ erklären und hier im Software Bereich hochladen.

Die fertige TermToTree funktion sieht nun so aus:
Delphi-Quellcode:
function TMath.TermToTree(pTerm: String): TTree;
var
  Baum, tmp: TTree;
begin
  Baum := TTree.create;
  tmp := TTree.create;
  repeat
    case pTerm[1] of
      '0'..'9': Baum.setContent(Baum.getContent + pTerm[1]);
      else begin
             case pTerm[1] of
               '+','-' : begin
                           while not (Baum.getRoot = nil) do
                             Baum := Baum.getRoot;
                           tmp := TTree.create;
                         end;
               '*','/' : begin
                          if not (Baum.getRoot = nil)
                            then
                              begin
                                tmp := Baum.getRoot;
                                tmp.setRightTree(TTree.create);
                                tmp := tmp.getRightTree;
                            end;
                         end
               else showmessage('Ungültige Eingabe!');
             end;
             tmp.setContent(pTerm[1]);
             tmp.setLeftTree(Baum);
             tmp.setRightTree(TTree.create);
             Baum := tmp.getRightTree;
           end;
    end;
    delete(pTerm,1,1);
  until pTerm = '';

  //hocharbeiten bis zur wurzel und zurückgeben
  while not (Baum.getRoot = nil) do
    Baum := Baum.getRoot;
  result := Baum;
end;
Wenn jemand meine Gedanken nachvollziehen kann und optimierungsvorschläge hat - immer her damit

Geändert von MrMooed ( 3. Apr 2013 um 14:27 Uhr) Grund: falscher Code ^^
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Mathematischen Ausruck als Binärbaum darstellen

  Alt 3. Apr 2013, 14:36
da bin ich wieder

Wenn jemand meine Gedanken nachvollziehen kann und optimierungsvorschläge hat - immer her damit
Schau Dir mal den Link von Jens01 an... UPN ftw...

Mavarik
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#5

AW: Mathematischen Ausruck als Binärbaum darstellen

  Alt 3. Apr 2013, 14:51
Was bei Mathparsern immer vergessen wird, ist das Testen. Informier Dich doch mal über Unittesting z.B. mit DUnit. Damit kannst Du auch noch den Lehrer beeindrucken!
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Mathematischen Ausruck als Binärbaum darstellen

  Alt 3. Apr 2013, 16:22
da bin ich wieder aber das wichtigste er funktioniert (zur Zeit nur +,-,*,/ aber immerhin )
Sehr schön. Kompliment. Vielleicht noch kurz zur Reihenfolge der Auswertung:

Klammern,
Functions (sin / cos ect.),
Power,
Mult / Div,
Plus / Minus.

Um zwei leidige Themen wirst du dich im weiteren Verlauf auch noch kümmern müssen,
Exponentialdarstellung (z.B. 2.1E-8)
und unäres Minus z.B. -3^-2.

Ist aber alles kein Hexenwerk. Du schaffst das!

Gruß
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz