Program ArrayDups;
Const Size = 100;
Type TArr = Array[1..Size] of Integer;
PArr = ^TArr;
Function MakeArray:PArr;
{ Generates a random array }
Var P:PArr;
I:Integer;
Begin
Randomize;
P:=New(PArr);
For I:=1 To Size Do P^[I]:=Random(30); { Filling array with random numbers }
MakeArray:=P;
End;
Procedure SortArray(P:PArr);
{ Sorts an array using bubble sort }
Var Sorted: Boolean;
T, I: Integer;
Begin
Sorted:=False;
While Not Sorted Do
Begin
Sorted:=True;
For I:=1 To Size - 1 Do
Begin
If P^[I] > P^[I+1] Then
Begin
T:=P^[I];
P^[I]:=P^[I+1];
P^[I+1]:=T;
Sorted:=False; { Trigger Sorted flag if we meet at
least one disorder }
End;
End;
End;
End;
Function DupCount(P:PArr):Integer;
{ Counts duplicate elements in array }
Var I, DCount: Integer;
Begin
DCount:=0;
SortArray(P);
For I:=1 To Size - 1 Do
If P^[I] = P^[I + 1] Then DCount:=DCount + 1;
DupCount:=DCount;
End;
Procedure PrintArray(P:PArr);
{ Prints array }
Var I, Counter: Integer;
Begin
Counter:=0;
For I:=1 To Size Do
Begin
Write(P^[I]:5);
Counter:=Counter + 1;
If Counter >= 10 Then
Begin
WriteLn; { Adding one return after each 10 numbers }
Counter:=0;
End;
End;
End;
Var P:PArr;
Begin
Write('Generating array...');
P:=MakeArray;
WriteLn('OK');
PrintArray(P);
WriteLn('Array has ',DupCount(P),' duplicate elements');
End.