Урок 15. Задача №9. Решение.

Урок 15. Задача №9.

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

|1|-3|5|-3|9|5|8|

получим:

|1|9|8|0|0|0|0|
type
  IntArr = array[1..7] of integer;

function FillArray(other_arr: IntArr): IntArr;
var i, min, max: integer;
begin
  randomize();
  min := 1;
  max := 15;
  for i := 1 to length(other_arr) do
    other_arr[i] := min + random(max);
  result := other_arr;
end;

function RebuildArr(new_arr: IntArr; a, b: integer): IntArr;
var i, j: integer;
  otherArr: IntArr;
begin
  i := 1;
  j := 1;
  while(i <= length(new_arr)) do
  begin
    if(i = a) then
      i += 1;
    if(i = b) then
      i += 1;
    otherArr[j] := new_arr[i];
    j += 1;
    i += 1;
  end;
  result := otherArr;
end;

function UniqNumb(copy_arr: IntArr): IntArr;
var i, j, k, len_arr, max_len: integer;
begin
  i := 1;
  len_arr := length(copy_arr);
  while(i <= len_arr) do
  begin
    max_len := high(copy_arr);
    for j := 1 to len_arr do
    begin
      if(i = j) then
        continue;
      if(copy_arr[i] = copy_arr[j]) then
      begin
        copy_arr := RebuildArr(copy_arr, i, j);
        copy_arr[max_len] := 0;
        max_len -= 1;
        copy_arr[max_len] := 0;
        max_len -= 1;
        len_arr -= 2;
        i := 0;
        break;
      end;
    end;
    i += 1;
  end;
  result := copy_arr;
end;

procedure ShowArray(arr_first: IntArr);
var i: integer;
begin
  writeln('arr = ');
  for i := 1 to length(arr_first) do
    write('|', arr_first[i], '|', ' ');
  writeln();
end;

var a: integer;
  arr: IntArr;
begin
  arr := FillArray(arr);
  write('Original ');
  ShowArray(arr);
  writeln();
  arr := UniqNumb(arr);
  write('Correct original ');
  ShowArray(arr);

  readln(); // Удержание консоль
end.// Завершение программы