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.