Hallo Propeller,
ein einziger Zwischenspeicher wird dir nicht genügen:
Code:
( 5 * ( 10 + 3 / 5 ) - 4 ) / 7 =
Was du bei deiner Vorgehensweise brauchst ist ein Stack (mein Sohn hat mir erzählt, dass der in der Schule Kellerspeicher genannt wird). Da du gerade nach eigener Aussage erst anfängst zu programmieren, kannst du deinen Stack etwa so implementieren:
Delphi-Quellcode:
type
// Platz für 100 Zwischenergebnisse
TStack =
array [1..100]
of Double;
var
Stack: TStack;
iStack: Integer;
// Mit 0 initialisieren
procedure Push(d: Double)
begin
Inc(iStack);
Stack[iStack] := d;
end;
function Pop: Double;
begin
Result := Stack[iStack];
Dec(iStack);
end;
Mit der infix-Notation hast du dir aber auch gleich die schwierigere ausgesucht. Üblicherweise wird ein infix-Ausdruck so analysiert, dass zum Schluss ein gültiger expression tree existiert, der dann nur noch aufgelöst wird:
Code:
Ebene
0: /
1: - 7
2: * 4
3: 5 +
4: 10 /
5: 3 5
Die beiden Knoten einer Ebene in meinem Beispiel sind immer die Kinder des Knotens der in der Mitte obendrüber steht. An den inneren Knoten des Baumes finden sich die Operatoren, an den Blättern die Operanden. Durch eine in-order Traversierung des Baumes rechnest du die Ausdrücke dann aus. Die Anzahl der Ebenen ist übrigens die Anzahl der benötigten Zwischenspeicher bei deiner Vorgehensweise.
Grüße vom marabu