Прежде, чем говорить о заполнении массива случайными числами, стоит вспомнить о том, что такое массив вообще. Это структура данных, представляющая собой упорядоченную коллекцию элементов одного типа, доступных по индексам. В языке Pascal массивы объявляются с использованием ключевого слова array. Например:
var
A: array[1..10] of integer;
Здесь A — массив из 10 целых чисел с индексами от 1 до 10. Массивы бывают одномерными (линейными) и многомерными (например, двумерные таблицы).
Об этом мы говорили уже неоднократно, но в случае с информатикой повторение – мать учения.
Работа с массивами включает:
Объявление: указание имени, диапазона индексов и типа элементов.
Заполнение: присваивание значений элементам массива.
Обработка: выполнение операций над элементами массива.
Вывод: отображение результатов на экране.
В заданиях ЕГЭ за 2025 год нередко встречаются такие задания, где необходимо не просто перебрать элементы, но и провести анализ, а также преобразовать массив поэлементно.
Также встречаются вариации заданий, где массив заполняется случайными числами. Для этого имеется несколько типовых алгоритмов, которые и станут целью сегодняшнего обучения.
Моделирование часто требует высокой скорости при проведении экспериментов. Оттого заполнять массивы вручную неудобно. Поэтому генераторы случайных чисел чаще всего находят применение именно в данной области.
Но надо понимать, что есть случайность истинная, но в программных модулях чаще всего используется псевдослучайность.
Действительную случайность дают процессы, более известные физикам, чем кому-либо еще. Шумы или распад радиоактивных элементов (количество или факт вылета электрона за единицу времени) дают истинную случайность.
Имеются также генераторы случайных чисел, они же ГСЧ, которые относятся к системам с непредсказуемым результатом. Хорошим примером можно назвать извлечение шара из лототрона или бочонка с номером из мешка не глядя.
Псевдослучайные числа генерируются алгоритмически и определяются начальным значением, называемым семенем (seed). Хотя они кажутся случайными, при одинаковом семени последовательность чисел будет идентичной. Это свойство полезно для тестирования и отладки программ.
Примеры алгоритмов генерации псевдослучайных чисел:
Линейный конгруэнтный генератор (LCG): использует формулу X_{n+1} = (a * X_n + В) mod m, где a, c и m — параметры генератора.
Генератор Лемера: частный случай LCG с c = 0, где X_{n+1} = (a * X_n) mod m.
RANDU: исторически использовавшийся генератор, известный своими недостатками, среди которых можно назвать наиболее известными короткий период и корреляция между числами.
Важно выбирать качественные генераторы, особенно при выполнении заданий ЕГЭ, чтобы избежать предсказуемости и ошибок в моделировании на больших массивах.
В языке Pascal для генерации псевдослучайных чисел используется процедура randomize для инициализации генератора и функция random для получения чисел.
Пример заполнения массива случайными числами от 1 до 100:
program RandomArray;
const
N = 10;
var
A: array[1..N] of integer;
i: integer;
begin
randomize;
for i := 1 to N do
A[i] := random(100) + 1;
end.
Здесь random(100) генерирует числа от 0 до 99, поэтому прибавляется 1 для получения диапазона от 1 до 100.
Такой подход часто используется в заданиях ЕГЭ, где требуется создать массив с определёнными характеристиками.
Для создания случайной перестановки элементов массива используется алгоритм Фишера — Йетса. Он обеспечивает наиболее равновероятное распределение всех возможных перестановок, поэтому как при редком, так и при частом использовании не возникает «перекоса» в ту или иную сторону.
Псевдокод алгоритма:
for i := N downto 2 do
begin
j := random(i) + 1;
swap(A[i], A[j]);
end;
Здесь swap — процедура обмена значениями элементов массива. Алгоритм эффективен и широко применяется при подготовке к ЕГЭ для задач, связанных с перестановками.
Понимание массивов и методов их заполнения случайными числами важно для успешного выполнения заданий ЕГЭ. Примеры таких заданий:
Анализ массива: нахождение количества элементов, удовлетворяющих определённому условию.
Поиск максимума/минимума: определение наибольшего или наименьшего значения в массиве.
Сортировка: упорядочивание элементов массива по возрастанию или убыванию.
Перестановки: создание случайных перестановок элементов массива.
Регулярная практика и понимание этих концепций помогут уверенно справляться с заданиями, в том числе с теоретическими.
Вопрос 1.
Что такое массив в языке программирования?
А) Последовательность различных типов данных
Б) Упорядоченная коллекция однотипных элементов, доступных по индексу
В) Совокупность случайных чисел
Г) Набор команд в программе
Вопрос 2.
Какая функция используется в Pascal для генерации случайного целого числа?
А) randint
Б) randomize
В) random
Г) shuffle
Вопрос 3.
Что делает команда randomize в Pascal?
А) Инициализирует генератор случайных чисел новым значением
Б) Заполняет массив случайными числами
В) Перемешивает массив
Г) Сортирует массив случайным образом
Вопрос 4.
Какой диапазон чисел получится при вызове random(10)?
А) От 1 до 10
Б) От 1 до 9
В) От 0 до 10
Г) От 0 до 9
Вопрос 5.
Как называется алгоритм равномерного случайного перемешивания элементов массива?
А) Алгоритм Бойера-Мура
Б) Алгоритм Фишера — Йетса
В) Метод пузырьковой сортировки
Г) Метод Гаусса
Вопрос 6.
Что произойдёт, если вызвать random(100) без randomize?
А) Возникнет ошибка компиляции
Б) Числа будут генерироваться с равной вероятностью
В) Последовательность чисел будет одинаковой при каждом запуске программы
Г) Программа не будет компилироваться
Вопрос 7.
Какой тип генерации случайных чисел используется в программировании чаще всего?
А) Аппаратный
Б) Квантовый
В) Истинный
Г) Псевдослучайный