unit Test_Pseudo_Parse_Add_or_Sub;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 =
class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TOperation = (opUnknown, opAdd, opSub);
TMyRec =
record
Zahl: Integer;
//Zahlenwert
Calc_Operation: TOperation;
// undefiniert, Addition oder Subtraktion
end;
function doCalc(
const Arr:
array of TMyRec;
var Ergebnis: Integer): Boolean;
var
i: Integer;
begin
Result := false;
Ergebnis := 0;
if Length(Arr) < 1
then
Exit;
//Operator des 1. Elements wird ignoriert
Ergebnis := Arr[Low(Arr)].Zahl;
//die folgenden Elemente werden je nach Wert von Calc_Operation addiert oder subtrahiert
for i := Succ(Low(Arr))
to High(Arr)
do
begin
if Arr[i].Calc_Operation = opAdd
then
Inc(Ergebnis, Arr[i].Zahl)
else if Arr[i].Calc_Operation = opSub
then
Dec(Ergebnis, Arr[i].Zahl)
end;
Result := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
MyArray:
array[0..4]
of TMyRec;
Erg: Integer;
begin
FillChar(MyArray, SizeOf(MyArray), 0);
MyArray[0].Zahl := 15;
MyArray[1].Zahl := 10;
MyArray[2].Zahl := 24;
MyArray[3].Zahl := 51;
MyArray[4].Zahl := 20;
MyArray[1].Calc_Operation := opAdd;
MyArray[2].Calc_Operation := opSub;
MyArray[3].Calc_Operation := opAdd;
MyArray[4].Calc_Operation := opAdd;
doCalc(MyArray, Erg);
ShowMessage(IntToStr(Erg));
// Ergebnis ist in diesem Beispiel 21 (15+10-24+"nichts"+20)
end;
end.