program GenericSwapExample;
type
TPoint = record
x, y: Integer;
end;
TIntArray = array[0..4] of Integer;
{ Swap integers }
procedure SwapInt(var a, b: Integer);
var
temp: Integer;
begin
temp := a;
a := b;
b := temp;
end;
{ Swap doubles (Turbo Pascal uses Real) }
procedure SwapReal(var a, b: Real);
var
temp: Real;
begin
temp := a;
a := b;
b := temp;
end;
{ Swap records }
procedure SwapPoint(var a, b: TPoint);
var
temp: TPoint;
begin
temp := a;
a := b;
b := temp;
end;
{ Swap strings }
procedure SwapString(var a, b: string);
var
temp: string;
begin
temp := a;
a := b;
b := temp;
end;
{ Print integer array }
procedure PrintIntArray(var arr: TIntArray);
var
i: Integer;
begin
for i := 0 to 4 do
Write(arr[i], ' ');
Writeln;
end;
var
x, y: Integer;
a, b: Real;
p1, p2: TPoint;
arr: TIntArray;
str1, str2: string;
begin
Writeln('=== TEST 1: Swap integers ===');
x := 10;
y := 20;
Writeln('Before: x=', x, ', y=', y);
SwapInt(x, y);
Writeln('After: x=', x, ', y=', y);
Writeln;
Writeln('=== TEST 2: Swap doubles ===');
a := 3.14;
b := 2.71;
Writeln('Before: a=', a:0:2, ', b=', b:0:2);
SwapReal(a, b);
Writeln('After: a=', a:0:2, ', b=', b:0:2);
Writeln;
Writeln('=== TEST 3: Swap records ===');
p1.x := 1; p1.y := 2;
p2.x := 9; p2.y := 8;
Writeln('Before: p1=(', p1.x, ',', p1.y, '), p2=(', p2.x, ',', p2.y, ')');
SwapPoint(p1, p2);
Writeln('After: p1=(', p1.x, ',', p1.y, '), p2=(', p2.x, ',', p2.y, ')');
Writeln;
Writeln('=== TEST 4: Swap array elements ===');
arr[0] := 1; arr[1] := 2; arr[2] := 3; arr[3] := 4; arr[4] := 5;
Write('Before: ');
PrintIntArray(arr);
SwapInt(arr[1], arr[3]);
Write('After: ');
PrintIntArray(arr);
Writeln;
Writeln('=== TEST 5: Swap strings ===');
str1 := 'Hello';
str2 := 'World';
Writeln('Before: str1="', str1, '", str2="', str2, '"');
SwapString(str1, str2);
Writeln('After: str1="', str1, '", str2="', str2, '"');
Writeln;
end.
(*
run:
=== TEST 1: Swap integers ===
Before: x=10, y=20
After: x=20, y=10
=== TEST 2: Swap doubles ===
Before: a=3.14, b=2.71
After: a=2.71, b=3.14
=== TEST 3: Swap records ===
Before: p1=(1,2), p2=(9,8)
After: p1=(9,8), p2=(1,2)
=== TEST 4: Swap array elements ===
Before: 1 2 3 4 5
After: 1 4 3 2 5
=== TEST 5: Swap strings ===
Before: str1="Hello", str2="World"
After: str1="World", str2="Hello"
*)