Du solltest dir erst einmal um das Prinzip gedanken machen, wie man eine solche Aufgabe löst.
Danach kommt die Umsetzung in eine Programmiersprache.
Du hast ja bereits als ersten Schritt den Term in zwei Teile zerlegt.
Allerdings muss dabei mit dem Operator der geringsten Priorität begonnen werden.
1 + 2 * 3 => (1) + (2 * 3)
Wie berechnet man nun aber jeden dieser Teilterme?
Solange ein Term einen Operator enthält, kann man diesen erneut in Teilterme zerlegen.
2 * 3 => (2) * (3)
Enthält ein Term aber nur noch eine Zahlenfolge, kann dieser direkt in eine Zahl umgewandelt werden.
Das lässt sich sehr schön mit einer rekursiven Funktion darstellen:
Delphi-Quellcode:
function BerechneTerm(ATerm: string): Double;
var
Op: string;
iPos: Integer;
Value1, Value2: Double;
begin
for i := 0 to 3 do
begin
case i of
0: Op := '+';
1: Op := '-';
2: Op := '*';
3: Op := '/';
end;
iPos := Pos(Op, ATerm);
if iPos > 0 then
begin
Value1 := BerechneTerm(Copy(ATerm, 1, iPos - 1));
Value2 := BerechneTerm(Copy(ATerm, iPos + 1, Length(ATerm)));
case i of
0: Result := Value1 + Value2;
1: Result := Value1 - Value2;
2: Result := Value1 * Value2;
3: Result := Value1 / Value2;
end;
Exit;
end;
end;
Result := StrToFloat(ATerm);
end;
Diese Funktion berücksichtigt noch nicht, dass Operatoren gleicher Priorität von links nach rechts ausgewertet werden.