Einzelnen Beitrag anzeigen

marabu

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

Re: Rechenvorschriften beachten.

  Alt 28. Apr 2006, 10:07
Herzlich willkommen in der Delphi-PRAXiS, Flo85.

Ich würde es ohne Rekursion versuchen, solange die Ausdrücke noch so einfach sind:

Ein Summand ist entweder eine (vorzeichenbehaftete) Zahl oder ein Ausdruck.
Ein Ausdruck verwendet nur die Operatoren "*" und "/".


Delphi-Quellcode:
// Summanden werden eingekellert, wobei
// Ausdrücke sofort reduziert werden.

function Eval(var s: String; stack: TStack): Boolean;
var
  cOperator: Char;
  bInvert: Boolean;
begin
  Result := GetOperand(s, stack);
  while Result do
    if s = 'then
    begin
      while stack.Size > 1 do
        stack.Push(stack.Pop + stack.Pop);
      Exit;
    end else
    begin
      Result := GetOperator(s, cOperator);
      if Result then
      begin
        bInvert := cOperator = '-';
        Result := GetOperand(s, stack);
        if Result then
        begin
          if bInvert then
            stack.Push(- stack.Pop);
          case cOperator of
            '*': stack.Push(stack.Pop * stack.Pop);
            '/': stack.Push(1 / stack.Pop * stack.Pop);
          end;
        end
      end;
    end;
end;
Freundliche Grüße vom marabu
Angehängte Dateien
Dateityp: zip eval_112.zip (2,6 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat