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

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

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

type
  MyArr = array[1..7] of integer;

function FillArray(other_arr: MyArr): MyArr;
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 UniqNumb(s: string; copy_arr: MyArr): string;
var i, j: integer;
begin
  for i := 1 to length(copy_arr) do
  begin
    for j := 1 to length(copy_arr) do
    begin
      if(i = j) then
        continue;
      if(copy_arr[i] = copy_arr[j]) then
    begin
      s := 'In your array not unique numbers.';
      break;
    end else
      s := 'All your numbers in array unique';
    end;
  end;
  result := s;
end;

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

var a: integer;
  arr: MyArr;
  message: string;
begin
  arr := FillArray(arr);
  ShowArray(arr);
  writeln();
  message := UniqNumb(message, arr);
  writeln(message);

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

UniqNumb() должна возвращать boolean

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

Firons's picture

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 UniqNumb(copy_arr: IntArr): boolean;
var i, j, k: integer;
  uniqArr: boolean;
begin
  uniqArr := true;
  k := 2;
  for i := 1 to length(copy_arr) do
  begin
    for j := k to length(copy_arr) do
    begin
      if(copy_arr[i] = copy_arr[j]) then
      begin
        uniqArr := false;
        break;
      end;
    end;
    if(uniqArr = false) then
      break;
    k += 1;
  end;
  result := uniqArr;
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 arr: IntArr;
begin
  arr := FillArray(arr);
  ShowArray(arr);
  writeln();
 if(UniqNumb(arr) = true) then
   writeln('All your numbers in array unique')
 else
   writeln('In your array not unique numbers.');

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

решение засчитано

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

vedro-compota's picture

if(UniqNumb(arr) = true)

-- сравнение с true ненужно

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

Firons's picture

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 UniqNumb(copy_arr: IntArr): boolean;
var i, j, k, len_arr: integer;
  uniqArr: boolean;
begin
  len_arr := length(copy_arr);
  uniqArr := true;
  k := 2;
  for i := 1 to len_arr do
  begin
    for j := k to len_arr do
    begin
      if(copy_arr[i] = copy_arr[j]) then
      begin
        uniqArr := false;
        break;
      end;
    end;
    if(uniqArr = false) then
      break;
    k += 1;
  end;
  result := uniqArr;
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 arr: IntArr;
begin
  arr := FillArray(arr);
  ShowArray(arr);
  writeln();
 if(UniqNumb(arr)) then
   writeln('All your numbers in array unique')
 else
   writeln('In your array not unique numbers.');

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