Задача 12 Урок 15

Задача 12 Урок 15

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

type inArr = array[1..10] of Integer;

var a: array [1..10] of integer;
     i, min, max: integer;
    res: boolean;

function SS(x: inArr): boolean;
var flag1, flag2: boolean;
    k: integer;
begin
  flag1 := false;
  flag2 := false;
  for k := 1 to 10 do
    begin
      for i := low(x) to high(x) do
        begin
          if((x[k] = x[i]) and (i<>k)) then
            flag1 := true
          else
            flag2 := false;
        end;
    end;
  if(flag1) then
    result := true
  else
    result := false;
end;

begin
  min := 1;
  max := 20;
  randomize();

  repeat  // повторять до тех пор пока массив не станет уникальным
    for i := 1 to 10 do
      a[i] := random(max - min + 1) + min;
      res := SS(a);
  until(res = false);
    for i := low(a) to high(a) do
      begin
        write(a[i], ' ');
      end;
  readln();
end.   
vedro-compota's picture

алгоритм такой:
1) Получаем случайное число
2) Проверяем встречается это число среди уже добавленных элементов массива, если нет - добавляем его, если да - получаем следующее случайное число

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

type xArr = array[1..10] of Integer;

var a: array [1..10] of integer;
     i,r,min, max: integer;

function massGenerator(r: integer ): xArr;
var flag: boolean;
    xArr: array [1..10] of integer;
    k: integer;
    min, max: integer;
begin
  min := 1;
  max := 20;
  xArr[1] := r;
  for k := 2 to 10 do
    begin
      flag := false;
      repeat // генерация + проверка на уникальность
        xArr[k] := random(max - min + 1) + min;
        for i := low(xArr) to (k-1) do
          begin
            if(xArr[k] = xArr[i]) then
              begin
                flag := false; //элемент найден, bad
                break;
              end
            else
              flag := true;
          end;
      until(flag) ;
    end;
  result := xArr;
end;

begin
  min := 1;
  max := 20;
  randomize();
  r := random(max - min + 1) + min;
  a := massGenerator(r);
  for i := low(a) to high(a) do
    begin
      write(a[i], ' ');
    end;
  readln();
end.  
vedro-compota's picture

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

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