CONST
  ArraySize = 7;

type
  ref = ^real;
  vec = array [1..ArraySize] of ref;

{------------------------------------}
function MaxX(var X:vec):real;
var
 cm:real;
 i:1..ArraySize;
begin
 cm :=-MaxInt;
 for i:=1 to ArraySize do
   if X[i]^ > cm then cm := X[i]^;
 MaxX := cm;
end; {MaxX}
{--------------------------------}
Function SameX(var X:vec):boolean;
var
  ret:boolean;
  i,j:1..ArraySize;
begin
  ret:=false;
  for i:=1 to ArraySize do
    for j:=1 to ArraySize do
      if (j <> i) and (X[i]=X[j]) then ret:=true;
  SameX:=ret;
end;{SameX}
{--------------------------------}
Procedure UniqueX(var X:vec);
var
  i,j:1..ArraySize;
begin
  for i:=1 to ArraySize do
   for j:=1 to ArraySize do
     if (I<>J) and (X[j]^=X[i]^) and (X[j]<>X[i]) then X[j]:=X[i];
end;{UniqueX}
{--------------------------------}
Procedure ReadArray(var X:vec);
var
  i : 1..ArraySize;
begin
  for i := 1 to ArraySize do
   begin
     if X[i] = nil then New(X[I]);
     Read(X[i]^);
   end;
end;{ReadArray}
{--------------------------------}
Procedure WriteArray(var X:vec);
var
  i : 1..ArraySize;
begin
  for i := 1 to ArraySize do
     WriteLn(LongInt(X[i]),' --> ',X[i]^:4:3);
end;{WriteArray}
{---------------------------------}

Var
  X : vec;
BEGIN
  WriteLn('Введите ',ArraySize, ' чисел:');
  ReadArray(X);
  WriteLn('Максимальное: ',MaxX(X):0:4);
  WriteLn('Массив, до выполнения процедуры Unique');
  WriteArray(X);
  UniqueX(X);
  WriteLn('Массив, после выполнения процедуры Unique');
  WriteArray(X);
  if SameX(X) then
   WriteLn('Есть элементы с одинаковыми ссылками')
  else
   WriteLn('Нет элементов с одинаковыми ссылками');
END.