How to write a generic swap multiple function in Pascal

1 Answer

0 votes
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"

*)

 



answered 6 hours ago by avibootz
...