Задание 10 Урок 15

Задание 10 Урок 15

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

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

а для:

|1|15|4|5|6|7|8|
-- что уникальный.

procedure init_array();
type arr = array[0..6] of integer;
var i,min,max : integer;
  f_array: arr;
function uniqueness(): string;
var first_value,second_value,g,i,counter_shift : integer;
begin
  counter_shift := 1;
  for i:= low(f_array) to high(f_array) do{сравнение двух чисел.цикл первого
  числа}
    begin
      first_value := f_array[i];
    for g := (low(f_array)+counter_shift) to (high(f_array)-1) do{сравнение
    двух чисел.цикл втрого числа}
      begin
        second_value := f_array[g];
        if g = (high(f_array)-1) then{счетчик для смещения второго числа}
          counter_shift += 1;
        if first_value = second_value then
          begin{результат сравнения}
            result := 'Массив неуникален!';
            exit;
          end;
      end;
    end;
  result := 'Массив уникален!';{результат сравнения}
end;

begin
  min := 1;
  max := 15;
  randomize;
  for i:= low(f_array) to high(f_array) do{иниц массив рандомом 1..15}
    f_array[i] := min + random(max - min + 1);
  for i:= low(f_array) to high(f_array) do{вывод массива}
    write('|', f_array[i], '|');
  writeln();
  write(uniqueness);
end;

begin
  init_array();
  readln();
end.
vedro-compota's picture

function uniqueness()

-- передавайте этой функции массив на вход (не используйте глобальное значение)

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

function uniqueness() получает uniqueness(f_array: arr)

type arr = array[1..7] of integer;
var  i,min,max : integer;
  first_array : arr;

function uniqueness(f_array: arr): string;
var g,k,t: integer;
begin
  t := (low(f_array)+1);
  for g := low(f_array) to (high(f_array)-1) do
    begin
      for k := t to high(f_array) do
        if f_array[g] = f_array[k] then
          begin
            result := 'Массив не уникален!';
            exit;
          end;
      t += 1;
    end;
  result := 'Массив уникален!'
end;

begin
  min:= -5;
  max:= 12;
  randomize;
  for i := low(first_array) to high(first_array) do
    begin
      first_array[i] := min + random(max - min + 1);
      write('|', first_array[i], '|');
    end;
  writeln(' // ', uniqueness(first_array));
  readln();
end.

консоль

|-3||5||-2||3||2||7||3| // Массив не уникален!
|3||4||1||0||-4||7||12| // Массив уникален!
vedro-compota's picture

  • переделать функцию на возврат boolean
  • и определять сообщения для пользователя снаружи на основании значения, которое вернет функция

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

  • функция возвращает boolean
  • сообщения для пользователя в основном теле

type arr = array[1..7] of integer;
var  i,min,max : integer;
  z : boolean;
  first_array : arr;

function uniqueness(f_array: arr): boolean;
var g,k,t: integer;
begin
  t := (low(f_array)+1);
  for g := low(f_array) to (high(f_array)-1) do
    begin
      for k := t to high(f_array) do
        if f_array[g] = f_array[k] then
          begin
            result := false;
            exit;
          end;
      t += 1;
    end;
  result := true;
end;

begin
  min:= -5;
  max:= 12;
  randomize;
  for i := low(first_array) to high(first_array) do
    begin
      first_array[i] := min + random(max - min + 1);
      write('|', first_array[i], '|');
    end;
  write(' // ');
  z := uniqueness(first_array);
  if z = true then
    write('Массив уникален!')
  else
    write('Массив не уникален!');
  readln();
end.

консоль

|-1||6||1||4||-1||2||5| // Массив не уникален!
|-2||1||6||7||12||11||-3| // Массив уникален!
vedro-compota's picture

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

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