Рандомайзер не повторяющихся значений - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Значения этого рандоамайзера не должны быть одинаковыми. p.s. проблема в том, что программа виснет и не выдаёт значения

Решение задачи: «Рандомайзер не повторяющихся значений»

textual
Листинг программы
var
  i, randomm, randomm1, u, u1, u2, u3, u4, u5, u6, u7, u8, u9, u10, u11, u12, u13, u14, u15: integer;
  start := system.DateTime.Now;
 
var
   x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16: integer;
 
function rnd(): boolean ;
begin
  rnd :=  not (randomm1 = (x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 + x14 + x15 + x16) / 16);      
end;
 
begin
  repeat
    randomm := PABCSystem.random(16) + 1;
    randomm1 := PABCSystem.random(16) + 1;
    if not (u = 16) and  rnd then    
    begin
      x16 := randomm1;
      inc(i);
      u := 16;
    end;
    if not (u1 = 15) and  rnd then
    begin
      x15 := randomm1;
      inc(i);
      u1 := 15;
    end;
    if not (u2 = 14) and  rnd then
    begin
      x14 := randomm1;
      inc(i);
      u2 := 14;
    end;
    if not (u3 = 13) and  rnd then
    begin
      x13 := randomm1;
      inc(i);
      u3 := 13;
    end;
    if not (u4 = 12) and  rnd then
    begin
      x12 := randomm1;
      inc(i);
      u4 := 12;
    end;
    if not (u5 = 11)and  rnd then    
    begin
      x11 := randomm1;
      inc(i);
      u5 := 11;
    end;
    if not (u6 = 10)and  rnd then  
    begin
      inc(i);
      x10 := randomm1;
      u6 := 10;
    end;
    if not (u7 = 9) and  rnd then    
    begin
      x9 := randomm1;
      inc(i);
      u7 := 9
    end;
    if not (u8 = 8) and  rnd then    
    begin
      x8 := randomm1;
      inc(i);
      u8 := 8;
    end;    
    if not (u9 = 7) and  rnd then    
    begin
      x7 := randomm1;
      inc(i);
      u9 := 7;
    end;   
    if not (u10 = 6)and  rnd then    
    begin
      x6 := randomm1;
      inc(i);
      u10 := 6;
    end;
    if not (u11 = 5)and  rnd then    
    begin
      x5 := randomm1;
      inc(i);
      u11 := 5;
    end;
    if not (u12 = 4) and  rnd then    
    begin
      x4 := randomm1;
      inc(i);
      u12 := 4;
    end;
    if not (u13 = 3) and  rnd then    
    begin
      x3 := randomm1;
      inc(i);
      u13 := 3;
    end;
    if not (u14 = 2) and rnd then    
    begin
      x2 := randomm1;
      inc(i);
      u14 := 2;
    end;
    if not (u15 = 1) and  rnd then    
    begin
      x1 := randomm1;
      inc(i);
      u15 := 1;
    end;  
  until i = 16;
end.

Объяснение кода листинга программы

В коде реализована функция генерации 16 случайных чисел без повторений в диапазоне от 1 до 16. Список переменных и их назначение:

  1. i - счётчик количества сгенерированных чисел
  2. randomm, randomm1 - генераторы случайных чисел
  3. u, u1, u2, u3, u4, u5, u6, u7, u8, u9, u10, u11, u12, u13, u14, u15 - счётчики для отслеживания использованных чисел
  4. x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16 - массив для хранения сгенерированных чисел Для каждого числа в массиве проверяется условие, что оно ещё не было использовано (счётчик u равен 16), после чего число присваивается соответствующему элементу массива и увеличивается счётчик i. Если же число уже было использовано (счётчик u меньше 16), то происходит аналогичная проверка для следующего числа. Цикл повторяется до тех пор, пока не будет сгенерировано 16 чисел.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы