Registriert seit: 22. Mär 2009
87 Beiträge
|
Re: Taschenrechner Ausgabe
8. Jun 2009, 10:48
danke blup habe es gelesen.. eine letzte frage habe ich noch.. kann mir einer ausführlich erklären am besten kommentieren was hier gemacht wird...
Delphi-Quellcode:
{ermittelt aus einer Reihe von Operatoren den,
der am weitesten Rechts im Term auftaucht}
function FindOperator( const ATerm, AOperatoren: string;
out AOp: Char; out APos: Integer): Boolean;
var
i, iPos: Integer;
Op: Char;
begin
AOp := #0;
APos := 0;
Result := False;
for i := 1 to Length(AOperatoren) do
begin
Op := AOperatoren[i];
iPos := APos;
repeat
iPos := PosEx(Op, ATerm, iPos + 1);
if iPos > APos then
begin
AOp := Op;
APos := iPos;
Result := True;
end;
until (iPos = 0);
end;
end;
function BerechneTerm(ATerm: string): Double;
const
OperatorLevel: array[0..1] of string = (' +-', ' */');
var
Op: Char;
i, iPos: Integer;
Value1, Value2: Double;
begin
for i := Low(OperatorLevel) to High(OperatorLevel) do
begin
if FindOperator(ATerm, OperatorLevel[i], Op, iPos) then
begin
Value1 := BerechneTerm(Copy(ATerm, 1, iPos - 1));
Value2 := BerechneTerm(Copy(ATerm, iPos + 1, Length(ATerm)));
case Op of
' +': Result := Value1 + Value2;
' -': Result := Value1 - Value2;
' *': Result := Value1 * Value2;
' /': Result := Value1 / Value2;
else
raise Exception.Create(Format(' undefinierter Operator '' %s'' ', [Op]));
end;
Exit;
end;
end;
Result := StrToFloat(ATerm);
end;
|
|
|