лабы / отчет черкасова лаба 1
.docx
ФЕДЕРАЛЬНОЕ
АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА
(РОСАВИАЦИЯ)
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)
Кафедра вычислительных машин, комплексов, сетей и систем.
Лабораторная работа защищена с оценкой ____________________
____________________
(подпись преподавателя, дата)
ЛАБОРАТОРНАЯ РАБОТА №1
по дисциплине «Моделирование вычислительных систем и сетей».
Тема: «Исследование программных генераторов случайных чисел».
Выполнила студентка группы ИС221
Магальник Екатерина Борисовна
Руководитель: Черкасова Наталия Ивановна
МОСКВА – 2025
Задание на выполнение (вариант 17):
Построить среднеквадратичный датчик случайных чисел с Х0 = 1491230
Построить конгруэнтный мультипликативный датчик с
Х0 = 5734,
а = 4375,
m = 67.
Листинг:
import math # Среднеквадратичный датчик def quadratic_generator(X0_sq, n): seen = {} sequence = [] X = X0_sq index = 0 while X not in seen: seen[X] = index sequence.append(X) index += 1 X = str(X ** 2).zfill(8) middle = len(X) // 2 X = int(X[middle - 2:middle + 2]) period_start_index = seen[X] period_length1 = index - period_start_index pre_period_length1 = period_start_index return period_length1, pre_period_length1, sequence # Конгруэнтный мультипликативный датчик def calculate_period_and_segments(X0_mul, a, m): seen = {} sequence = [] X = X0_mul index = 0 while X not in seen: seen[X] = index sequence.append(X) index += 1 X = (a * X) % m period_start_index = seen[X] period_length = index - period_start_index pre_period_length = period_start_index return period_length, pre_period_length, sequence X0_sq = 1491230 X0_mul = 5734 a = 4375 m = 67 period_length1, pre_period_length1, sequence_q = quadratic_generator(X0_sq, 50) period_length, pre_period_length, sequence = calculate_period_and_segments(X0_mul, a, m) print("Период среднеквадратичного датчика:", period_length1) print("Отрезок апериодичности:", pre_period_length) print("Последовательность среднеквадратичного датчика:", sequence_q) print("Период:", period_length) print("Отрезок апериодичности:", pre_period_length) print("Последовательность:", sequence)
Результат работы программы:
Период среднеквадратичного датчика: 4
Отрезок апериодичности: 1
Последовательность среднеквадратичного датчика: [1491230, 7669, 8135, 1782, 1755, 800, 6400, 9600, 1600, 5600, 3600]
Период: 66
Отрезок апериодичности: 1
Последовательность: [5734, 43, 56, 48, 22, 38, 23, 58, 21, 18, 25, 31, 17, 5, 33, 57, 1, 20, 65, 27, 4, 13, 59, 41, 16, 52, 35, 30, 64, 7, 6, 53, 55, 28, 24, 11, 19, 45, 29, 44, 9, 46, 49, 42, 36, 50, 62, 34, 10, 66, 47, 2, 40, 63, 54, 8, 26, 51, 15, 32, 37, 3, 60, 61, 14, 12, 39]
Вывод:
В данной лабораторной работе были реализованы два генератора случайных чисел: среднеквадратичный и конгруэнтный мультипликативный.
1. Среднеквадратичный датчик с начальным значением X0 = 12912378 создает последовательность случайных чисел, основанную на квадрате предыдущего значения. Определяя длину периода и отрезок апериодичности, что позволяет анализировать его циклические свойства. Результаты показывают, что период составляет 4, а отрезок апериодичности — 1, что указывает на повторяемость генерируемых значений.
2. Конгруэнтный мультипликативный датчик с X0 = 5734, a = 4375 и m = 67 генерирует последовательность, определяя длину периода и отрезок апериодичности, что позволяет анализировать его циклические свойства. Результаты показывают, что период составляет 66, а отрезок апериодичности — 1, что указывает на отсутствие повторяемости генерируемых значений.
Такое моделирование позволяет глубже понять механизмы генерации псевдослучайных чисел и их статистические свойства.
