Заполнить массив случайными числами без повторений - PascalABC.NET
Формулировка задачи:
Написал процедуру для заполнения массива случайными числами без повторений. Алгоритм, вероятно, далеко не самый оптимальный, но тем не менее, рабочий. В теле программы работает, а, вот, в процедуре, ниочинь: "PABCSystem.pas(1961) : Ошибка времени выполнения: Значение было недопустимо малым или недопустимо большим для Int32."
Решение задачи: «Заполнить массив случайными числами без повторений»
textual
Листинг программы
Procedure FillByRandomNumbersWithoutRepeats(Var a: Array of Int64; b, c: Int64); Var i, j: Int64; nums := [b..c]; Begin (* SetLength(a, Abs(c - b) + 1); For i := Low(a) to High(a) do Begin While not (j in nums) do j := Random(b, c); a[i] := j; Exclude(nums, j); End;*) End;
Объяснение кода листинга программы
- В этой процедуре заполняется массив случайными числами без повторений.
- Передаются три аргумента:
—
a— массив, который необходимо заполнить; —b— минимальное значение для генерации случайных чисел; —c— максимальное значение для генерации случайных чисел. - Создается три переменные:
—
i— индекс элемента массива; —j— временная переменная для хранения сгенерированного числа; —nums— список чисел, которые уже были сгенерированы. - Устанавливается длина массива
aравной разностиcиb+ 1. - В цикле по всем индексам массива
aвыполняются следующие действия: — В цикле до тех пор, пока не будет найдено случайное число, которое еще не было добавлено в массивa. — Сгенерированное случайное число добавляется в массивa. — Из спискаnumsисключается сгенерированное число. - В конце процедуры массив
aбудет заполнен случайными числами без повторений.