Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Taschenrechner Speicher Problem

  Alt 29. Jan 2006, 12:53
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
  Mit Zitat antworten Zitat