All pastes #913761 Raw Edit

leotr

public text v1 · immutable
·published 2008-02-22 09:38 UTC
rendered paste body
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.