Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program GenericMath;
- {$APPTYPE CONSOLE}
- uses
- SysUtils;
- procedure AddInt32(const arr: TArray<Integer>; index: Integer; var result: UInt64);
- begin
- Inc(result, arr[index]);
- end;
- procedure AddUInt32(const arr: TArray<Cardinal>; index: Integer; var result: UInt64);
- begin
- Inc(result, arr[index]);
- end;
- procedure AddExtended(const arr: TArray<Extended>; index: Integer; var result: Extended);
- begin
- result := result + arr[index];
- end;
- procedure SumArray(const arr: Pointer; addProc: Pointer; var result); //inline;
- type
- TAddProc = procedure(const arr; index: Integer; var result);
- var
- i: Integer;
- begin
- for i := 0 to High(TArray<Byte>(arr)) do
- TAddProc(addProc)(arr^, i, result);
- end;
- function Sum(const arr: TArray<Integer>): UInt64; overload; inline;
- begin
- Result := 0;
- SumArray(arr, @AddInt32, Result);
- end;
- function Sum(const arr: TArray<Cardinal>): UInt64; overload;
- begin
- Result := 0;
- SumArray(arr, @AddUInt32, Result);
- end;
- function Sum(const arr: TArray<Extended>): Extended; overload;
- begin
- Result := 0;
- SumArray(arr, @AddExtended, Result);
- end;
- var
- arr1: TArray<Integer>;
- arr2: TArray<Extended>;
- sum1: Integer;
- sum2: Extended;
- begin
- arr1 := TArray<Integer>.Create(1, 2, 3, 4, 5, 6, 7, 8, 9);
- arr2 := TArray<Extended>.Create(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9);
- sum1 := Sum(arr1);
- sum2 := Sum(arr2);
- Writeln(sum1);
- Writeln(sum2);
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement