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