Задача 10 Урок 15

Напишите функцию, которая определяет являются ли значения переданного массива целых чисел уникальными относительно друг друга.
Протестируйте работу функции на массиве из 7 случайных элементов из диапазона от 1 до 15-ти.

Например для массива:

|1|5|4|5|6|7|8|
-- функция должна "сообщить", что он неуникальный

а для:

|1|15|4|5|6|7|8|
-- что уникальный.
var
  a:array [1..7] of integer;
  l:integer;

function uniq(b:array of integer):string;
var i,k,j,flag:integer;
  s:string;
  begin
    s:='unikalen';
    i:=1;
    flag:=1;
    repeat
      k:=b[i];
      for j:=1 to 7 do
        if(b[j]=k) then
          begin
            s:='ne unikalen';
            break;
          end;
      i:=i+1;
      if ((s='ne unikalen')or(i=8)) then
        flag:=0;
    until (flag=0);
    result:=s;
  end;

begin
  randomize();
  for l:=1 to 7 do
    begin
      a[l]:=random(15);
      write(a[l],' ');
    end;
  writeln();
  writeln('massiv ', uniq(a));
end.  

Консоль:

11 0 1 9 7 10 14 
massiv ne unikalen
vedro-compota's picture

1)

s:='ne unikalen';

-- лучше использовать boolean для результата

2) лучше переписать перебор на два цикла for с дополнительным break в родительском цикле, в в случае если уже выявлен неуникальный элемент.

_____________
матфак вгу и остальная классика =)

var
  a:array [1..7] of integer;
  l:integer;

function uniq(b:array of integer):boolean;
var i,k,j,flag:integer;
  s:boolean;
  begin
    s:=true;
    flag:=1;
   for i:=1 to 7 do
     for j:=1 to 7 do
       if((b[j]=b[i])and(i<>j)) then
         begin
           s:=false;
           break;
         end;
    result:=s;
  end;

begin
  randomize();
  for l:=1 to 7 do
    begin
      a[l]:=random(15);
      write(a[l],' ');
    end;
  writeln();
  if (uniq(a)) then
    writeln('massiv unicalen')
  else
    writeln('massiv ne unicalen');
end.