Guest User

Рандом без повтора

a guest
Aug 10th, 2013
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. const
  2. n = 100; // размер массива
  3.  
  4. var
  5. m, base: array [0..n] of integer;
  6. i, t, k, nom: Byte; // переменные не будут принимать больши значения, поэтому хватит и Byte
  7. {
  8. m - массив, в который будут заноситься значения
  9. base - массив значений, из которого будут братся значения для массива m
  10.  
  11. i - счётчик для цикла
  12. t - переменная для обмена значениями двух переменных
  13. k - кол-во нераспределенных элементов базы (массив base)
  14. nom - номер элемента массива, назначающийся случайно
  15. }
  16.  
  17. begin
  18. randomize; // отключаем одинаковый рандом
  19. k := n; // кол-во оставшихся элементов в базе изначально равно размеру массива m
  20.  
  21. for i := 0 to n do // цикл от первого элемента массива до последнего
  22. base[i] := i; // инициализируем базу
  23.  
  24. for i := 0 to n do // цикл от первого элемента массива до последнего
  25. begin // начало цикла
  26. nom := random(k); // генерируем номер элемента, который будем брать с базы
  27. m[i] := base[nom]; // записываем значение выбранного элемента в наш массив
  28.  
  29. t := base[nom]; // записываем значение выбранного элемента во временную переменную
  30. base[nom] := base[k]; // заменяем значение выбранного элемента на значение последнего неиспользованного элемента в базе
  31. base[k] := t; // из временной переменной записываем значение в последний элемент базы
  32.  
  33. dec(k); // уменьшаем кол-во неиспользованных элементов базы на 1
  34. end; // конец цикла
  35.  
  36. // Вывод на экран полученного массива
  37. for i := 0 to n do
  38. writeln(m[i]); // вывод элемента массива
  39. readln; // ждём нажатия любой клавиши для закрытия программы, чтобы успеть посмотреть на результат программы
  40. end.
Advertisement
Add Comment
Please, Sign In to add comment