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

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

Напишите программу, которая будет заполнять массив из 10 элементов случайными числами из диапазона от 0 до 20, при этом в полученном массиве не должно быть одинаковых значений.

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

function check(f_array : arr; value_counter, value_ch: integer): integer;
var x : integer;
begin
  for x := low(f_array) to value_counter-1 do
    if f_array[x] = value_ch then
      begin
        result := value_counter;
        exit;
      end
    else
      if x = (value_counter-1) then
        result := value_counter+1;
end;

begin
  min := 0;
  max := 20;
  value_check := 0;
  i := 1;
  randomize;
  repeat
    first_array[i] := min + random(max - min + 1);
    value_check := first_array[i];
    if i > 1 then
      i := check(first_array,i,value_check);
    if i = 1 then
      i += 1;
  until i > high(first_array);
  for i := low(first_array) to high(first_array) do
    write('|', first_array[i], '|');
  readln();
end.
vedro-compota's picture

  • check по-идее должна иметь имя вроде getNextIndex()
  • Можно избавить от блока
    if i = 1 then
          i += 1;
    

    в каждом витке (это должно быть вне цикла)

  • Обернуть код, который формирует уникальный массив в функцию.

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

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

function init_array(f_array: arr; mn,mx: integer): arr;
var i: integer;
begin
  randomize;
  for i := low(f_array) to high(f_array) do
    f_array[i] := mn + random(mx - mn + 1);
  result := f_array;
end;

procedure print(f_array: arr);
var z : integer;
begin
  for z := low(f_array) to high(f_array) do
    write('|', f_array[z], '|');
end;

function uniqueness(f_array: arr; mi,ma : integer): arr;
var g,k: integer;
begin
  k := low(f_array);
  for g := low(f_array) to high(f_array) do
    begin
      repeat
        if g = k then// исключает сравнение значения с самим собой
          k += 1;
        if f_array[g] = f_array[k] then
          begin
            f_array[g] := mi + random(ma - mi + 1);
            k := low(f_array);
          end
        else
          begin
            k += 1;
          end;
      until k > high(f_array);
      k := low(f_array);
    end;
  result := f_array;
end;

begin
  min := 0;
  max := 20;
  first_array := init_array(first_array,min,max);
  print(first_array);
  writeln(' // исходный массив');
  first_array := uniqueness(first_array,min,max);
  print(first_array);
  writeln(' // конечный массив');
  readln();
end.

консоль

|14||12||8||5||19||13||15||20||19||9| // исходный массив
|14||12||8||5||0||13||15||20||19||9| // конечный массив
|12||6||10||19||9||6||16||8||7||10| // исходный массив
|12||15||0||19||9||6||16||8||7||10| // конечный массив
|6||11||19||7||3||0||5||8||19||15| // исходный массив
|6||11||18||7||3||0||5||8||19||15| // конечный массив
vedro-compota's picture

проверить решение, на типе данных, где в массиве только 1 элемент.

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