Thema: Delphi Taschenrechner Ausgabe

Einzelnen Beitrag anzeigen

HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#42

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 13:53
Das lässt sich ja relativ einfach lösen indem du nur bei '+' und '-' breakst.
Schön ist das aber eigentlich nich wenn man nicht weiss worans liegt^^

Delphi-Quellcode:
case index of
  0: Result := Seg1 * Seg2;
  1: Result := Seg1 / Seg2;
  2: begin
       Result := Seg1 + Seg2;
       break;
  end;
  3: begin
       Result := Seg1 - Seg2;
       break;
  end;
end;

€dit
Es liegt daran dass der Operator der zuerst gefunden wird, nicht zuerst berechnet wird.
Wenn du 2*3+3 eingibst findet die funktion zuerst 2*3, gibt 3+3 recursiv weiter und rechnet das dann aus.
Dann steht in der ersten instanz 2*6 und das ergibt 12.
Wenn man die reihenfolge umdreht(also zuerst auf '+' und '-' prüft), findet die funktion zuerst 3+3 und gibt 2*3 weiter.
Das ergibt richtigerweise 3+6 = 9.

Weil die funktion ohne break einfach weiterläuft findet sie nachdem sie das '*' gefunden hat, das '+' neu und macht genau das selbe als würden die operatoren umgekehrt geprüft :=)

Delphi-Quellcode:
  OpFound := False;
  Result:= 0;
  for index := 0 to 3 do begin
    case index of
      0: Op := '+';
      1: Op := '-';
      2: Op := '*';
      3: Op := '/';
    end;
    if pos(Op,Formular) > 1 then begin
      OpFound := True;
      Seg1 := BerechneTerm(copy(Formular,1,pos(Op,Formular) - 1));
      Seg2 := BerechneTerm(copy(Formular,pos(Op,Formular) + 1,length(Formular)));
      case index of
        0: Result := Seg1 + Seg2;
        1: Result := Seg1 - Seg2;
        2: Result := Seg1 * Seg2;
        3: Result := Seg1 / Seg2;
      end;
      break;
    end;
  end;

  if Not OpFound then Result := StrToFloat(Formular);
narf - not a real function