Решение №8 из главы 15.Напишите функцию, которая определяет являются ли значения переданного массива целых чисел уникальными от

Задача №8 из главы 15

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

|1|5|4|5|6|7|8|

-- функция должна "сообщить", что он неуникальный
а для:

|1|15|4|5|6|7|8|
program pascal_unique_array3_15_7;
type b = array[1..10] of integer; // секция обьявления типов

function filling_array( in_arr : b ) : b; // заполнение массива
  var j, min, max : integer;
begin
  randomize;
  min := 5;
  max := 50;
  for j := low( in_arr ) to high( in_arr ) do
  begin
    in_arr[j] := min + random( max - 1 );
    write( in_arr[j], ' ' );
  end;
filling_array := in_arr; // возвращаем значение функции
end;
{ функция определения является ли массив уникальным. возвращает
 boolean значение }  
function array_value( new_arr : b ) : boolean;  
  var count, j, i, n : integer;
      uniq_or_not_uniq : boolean;
begin
  count := 0;
  i := 0;
  j := 0;
  while( j <= length( new_arr ) - 1 ) and ( count <> 2 ) do // выполняем пока оба условия верны
  begin
    n := new_arr[j]; // присваиваем  n  значение первого элемента массива
    count := 0; // счетчик вхождений элемента  n  в массив
    for i := 1 to length( new_arr ) do // обходим массив 
    begin
      if( n = new_arr[i] ) then // если верно
      begin
        count += 1; // увеличиваем счетчик
        if( count = 2 ) then // если верно то массив не уникален
        begin
          uniq_or_not_uniq := false; 
          writeln();
          //writeln('not a unique array');
          break; // выходим из цикла
        end;
      end;
    end;
  j += 1; // увеличиваем значение  
  end;
  if( count <> 2 ) then // если не равно 2 то уникален
  begin
    uniq_or_not_uniq := true;  
    writeln();
  end;
array_value := uniq_or_not_uniq; // возвращаем значение функции
end;
{ процедура вывода значения }
procedure conclusion_value( arr_value : boolean ); 
begin
if ( arr_value ) then
    writeln( 'array is unique' )
 else
   writeln( 'array is not unique' );
end;

var int_array : b;
    value_arr : boolean;
begin // основная программа
 int_array := filling_array( int_array ); // вызов функции
 value_arr := array_value( int_array ); // вызов функции
 conclusion_value( value_arr ); // вызов процедуры
readln;
end. // завершение основной программы
vedro-compota's picture

  • Можно избежать сравнения элемента "с самим собой", попробуйте переделать работу с индексами, чтобы оптимизировать алгоритм.

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