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

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

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

type ar = array[1..7] of integer;
var i : integer;
    Arr : ar;
    fl : boolean;
function unique(var fl : boolean; Arr_2 : ar) : boolean;
var i, j, a, b : integer;

begin
  a := 1;
  b := 1;
  for i := a to 6 do
  begin
    a += 1; //
    b += 1; //
    for j := b to 7 do
      if Arr_2[i] = Arr_2[j] then //
        fl := false;
  end;
  unique := fl;
end;

begin
  fl := true;
  randomize;
  for i := 1 to 7 do // инициализация
  begin
    Arr[i] := random(15) + 1;
  end;

  fl := unique(fl, Arr);
  for i := low(Arr) to high(Arr) do  // вывод массива
    write(Arr[i], ' ');

  if fl then
    write('This array is unique')
  else
    write('This array is not unique');
  readln();
end.
vedro-compota's picture

 for i := a to 6 do
  begin
    a += 1; //
    b += 1; //
    for j := b to 7 do
      if Arr_2[i] = Arr_2[j] then //
        fl := false;
  end;

-- если что-то оказалось неуникальным, дальше проверять нет смысла - завершаем циклы

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

type ar = array[1..7] of integer;
var i : integer;
    Arr : ar;
    fl : boolean;
function unique(Arr_2 : ar) : boolean;
var i, j : integer;
    fl : boolean;
begin
  fl := true;
  for i := 1 to 6 do
    for j := 2 to 7 do
      if (Arr_2[i] = Arr_2[j]) and (i <> j) then //
      begin
        fl := false;
        break;
      end;
  unique := fl;
end;

begin
  randomize;
  for i := 1 to 7 do // инициализация
    Arr[i] := random(15) + 1;

  for i := low(Arr) to high(Arr) do  // вывод массива
    write(Arr[i], ' ');

  fl := unique(Arr);
  if fl then // важное сообщение
    write(' This array is unique')
  else
    write(' This array is not unique');
  readln();
end.
vedro-compota's picture

 for i := 1 to 6 do
    for j := 2 to 7 do
      if (Arr_2[i] = Arr_2[j]) and (i <> j) then //
      begin
        fl := false;
        break;
      end;
  unique := fl;

-- убедиться, что выход происходит сразу из обоих циклов

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

type ar = array[1..7] of integer;
var i : integer;
    Arr : ar;
    fl : boolean;
function unique(Arr_2 : ar) : boolean;
var i, j : integer;
    fl : boolean;
    label ex;
begin
  fl := true;
  for i := 1 to 6 do
    for j := 2 to 7 do
      if (Arr_2[i] = Arr_2[j]) and (i <> j) then //
      begin
        fl := false;
        goto ex; // выход из двух циклов
      end;
  ex:
  unique := fl;
end;

begin
  randomize;
  for i := 1 to 7 do // инициализация
    Arr[i] := random(15) + 1;

  for i := low(Arr) to high(Arr) do  // вывод массива
    write(Arr[i], ' ');

  fl := unique(Arr);
  if fl then // важное сообщение
    write(' This array is unique')
  else
    write(' This array is not unique');
  readln();
end.  
vedro-compota's picture

засчитано

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