Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Объектно-ориентированное программирование. Учебник для СПО
.pdf
4. Создать консольную программу, порождающую псевдослучайную
неповторяющуюся последовательность целых чисел с равномерным распределением на интервале [a;b) = [–5;121).
5. Создать консольную программу, порождающую псевдослучайную
повторяющуюся последовательность целых чисел с равномерным распределением на интервале [a;b). Значения границ интервала и количество случайных чисел вводятся с клавиатуры. Вещественные результаты
выводятся с тремя десятичными разрядами после запятой.
6. Центр окружности располагается в точке (N/2; N). Создать консольное приложение для вычисления площади круга и длины окружности,
если случайным образом сгенерированная точка (x;y) с каждой координатой в диапазоне вещественных чисел от –30,00 до +35,00 лежит на этой
окружности. Результат вывести на консоль с четырьмя десятичными разрядами после запятой.
7. Последовательно случайным образом генерируются точки (x;y) на
плоскости. Каждая координата точки расположена на интервале от –100
до +100 и принимает целые значения. Количество точек равно N + 10. Най-
ти длину ломаной линии между точками для координат точек. Выполнить
три прогона программы.
8. Найти среднее расстояние от точки на плоскости с координатами
(N;2N) до 25 точек, выбранных случайным образом, у которых каждая ко-
ордината находится в интервале вещественных чисел от 1,000 до 35,000.
Результат вывести на консоль с четырьмя десятичными разрядами после
запятой.
9. Последовательно случайным образом генерируются точки (x;y)
на плоскости. Каждая координата точки расположена на интервале
от –10,0000 до +10,0000 и принимает вещественные значения. Количество
точек равно 10N. Найти точку, наиболее удаленную от начала координат,
не используя массивы координат для точек. Обеспечить повторяющуюся
последовательность. Вывести результат на консоль с пятью десятичными
разрядами после запятой.
10. Генерируется одновременно массив из 10N + 5 точек (x;y) на
плоскости. Каждая координата точки расположена на интервале от 0
до 255 и принимает только целые значения. Найти координаты точек, наиболее и наименее удаленных от начала координат.
11. Найти площади 50 колец, сгенерированных случайным образом.
Внешний и внутренний диаметры различаются и принимают целые значения от N до N + 100. Определить кольца с наименьшей и наибольшей
площадями.
-231-

√
x
3
x
i
12. Сформировать случайным образом 20 уравнений ax2 + bx + c = 0,
имеющих только действительные корни (b2 ≥ 4ac), и найти их корни.
Значения a, b и c являются вещественными числами в диапазоне от –N
до N. Вывести формулы для каждого уравнения и его корней с точностью
до трех десятичных разрядов после запятой.
13. Сформировать случайным образом арифметическую прогрессию
по первому члену a1 и разности d, лежащими в интервале от 1,00 до 35,00.
Прогрессию с N + 3 членами и параметрами вывести на консоль с точностью до трех десятичных разрядов после запятой.
14. Сформировать случайным образом геометрическую прогрессию
по первому члену a1 и знаменателю q, принимающим значения в интервале от 0,5000 до 5,0000. Прогрессию с пятью членами и ее параметрами вывести на консоль с точностью до пяти десятичных разрядов после
запятой.
8.3.МЕТОДОБРАТНЫХ
ПРЕОБРАЗОВАНИЙ
Метод Random позволяет получить равномерно распределенные случайные числа. На практике часто необходимо получить случайные числа,
подчиняющиеся другим законам распределения (например, экспоненциальному, Коши и др.) Основу методов преобразования равномерного распределения в другое распределение составляет метод обратных преобразований (обратных функций).
Обратная функция — это функция, с помощью которой определяется аргумент исходной функции, если в нее передать значение исходной функции. Для обратной функции F−1(x) выполняется: F[F−1(x)] = x. На-
пример, для функции x
ex — функция ln x.
Метод обратных преобразований состоит в следующем. Задана некоторая функция распределения F(x) случайной величины. Для этого распределения находится обратная функция. В качестве ее аргумента используется равномерно распределенная на отрезке [0; 1] случайная величина.
Результатом является величина с требуемым распределением.
Требуемое распределение получается как решение интегрального
3
обратной функцией является
, а для функции
�
f(x
)
dx =
xi уравнения
y
относительно xi, где f(x) — плотность вероят-
i
ности, yi — i-е значение случайной равномерно распределенной величины. Процесс поиска пояснен на рисунке. Напомним, что плотность
-232-

F(x)
1
0
x
i
ln(1 – x)
λ
1
λ
вероятности f(x) и функция распределения F(x) случайной величины
связаны соотношением F '(x) = f(x).
X
Рассмотрим способ получение экспоненциального распределения
из равномерного распределения.
Плотность вероятности экспоненциального распределения равна
f(x) = λe
−λx
, где параметр λ > 0 называется интенсивностью или обратным
коэффициентом масштаба.
Функция экспоненциального распределения имеет вид: F(x) = 1 – e
– λ∙x
при х ≥ 0 и F(х) = 0 при х < 0. Обратная функция экспоненциального рас-
пределения равна F
(x) = –
.
–1
Пусть случайная величина U распределена равномерно в диапазоне
[0;1]. Тогда случайная величина X = –
lnU распределена по экспонен-
циальному закону.
-233-

1
(x – x
0
)
+
1
2
Рассмотрим распределение Коши. Плотность вероятности распреде-
ления Коши равна f(x) =
, где параметр х0 — коэффициент
2
2
сдвига, а параметр γ — коэффициент масштаба. Функция плотности симметрична относительно вертикальной прямой х0.
Распределение Коши похоже на нормальное распределение, но имеет более «толстые хвосты». Случайная величина, распределенная по закону Коши, не имеет математического ожидания и дисперсии. При x0 = 0
и γ = 1,0 имеем так называемое стандартное распределение Коши.
Если случайная величина U распределена по равномерному закону
на интервале [0;1], то случанйая величина x0 + γ ∙ tg[π ∙ (U –
)] распределе-
на по закону Коши с параметрами х0 и y.
Вопросы
?
1. Какой метод из библиотеки классов позволяет получить равномер-
ное распределение случайных чисел?
2. Какой математический метод используется для перехода от равномерного распределения к другому закону распределения случайной
величины?
3. Как получить случайные числа, подчиняющиеся экспоненциальному закону распределения?
4. Как получить случайные числа, подчиняющиеся закону Коши на
основе равномерного распределения?
-234-

σ√2 ∙ π
2
�
–2 ∙ lna
�
–2 ∙ lna
8.4.МЕТОДЫГЕНЕРАЦИИ
БОКСА—МЮЛЛЕРА
Часто необходимо генерировать случайные числа, распределенные
по нормальному закону. Плотность вероятности нормального закона
(x – α)
–
задается выражением f(x) =
1
ское ожидание, а σ — среднеквадратичное отклонение случайной величины от ее среднего значения.
Диапазон нормального распределения является бесконечным с обеих сторон. Плотность вероятности является симметричной относительно
математического ожидания и имеет «колоколообразный» вид. Графики
плотности вероятности трех нормальных распределений представлены
на рисунке для различных значений параметров.
2
2σ
, где параметр α — математиче-
Наиболее часто преобразование равномерно распределенной случайной величины в нормально распределенную случайную величину
производится методом Бокса — Мюллера. Он требует наличия двух равномерно распределенных и независимых случайных чисел.
Существует два варианта метода Бокса — Мюллера. Рассмотрим первый вариант. Пусть есть две независимые случайные величины а и b, которые распределены равномерно на интервале [0;1]. Тогда случайные ве-
личины z
= cos(2 π ∙ b)
0
и z1 = sin(2 π ∙ b)
-235-
являются также

�
n / 12
независимыми и распределены нормально с математичсеким ожиданием, равным 0, и дисперсией, равной 1 (т.е. подчиняются так называемому
стандартному нормальному распределению).
Рассмотрим второй вариант метода. В отличие от первого варианта
здесь используются две случайные независимые величины х и y, распределенные равномерно на интревале [–1;1]. Пусть s = x2 + y2.
Если для пары случайныз чисел (х, y) выполняются условия s < 1 и s ≠ 0,
тогда величины z
= x ∙
0
2 ∙ lns
�
–
s
и z1 = y ∙
2 ∙ lns
�
–
являются независимы-
s
ми и подчиняются нормальному распределению с математическим ожиданием, равным 0, и дисперсией, равной 1. Если же указанные условия
не выполняются, то следует выбрать другую пару случайных чисел.
Кроме методов Бокса — Мюллера для генерации нормально распределенных чисел можно использовать метод, основанный на центральной
предельной теореме Ляпунова. Она утверждает, что при увеличении количества независимых случайных величин с одним и тем же законом распределения закон распределения их суммы приближается к нормальному распределению.
Пусть имеем n равномерно распределенных на интервале [0;1] независимых случайных величин. Суммарное распределение будет иметь параемтры нормального распределения, стремящиеся к величинам ∞ = n / 2;
σ =
.
По одному из вариантов метода на основе центральной предельной
теоремы необходимо иметь 12 независимых значений, удовлетворяющих равномерному распределению на отрезке [0;1]. Сумма этих значений
за вычетом числа 6 — это значение случайной величины, которая имеет
стандартное нормальное распределение.
Метод на основе центральной предельной теоремы требует большого времени реализации, так как для получения одного случайного числа
по нормальному закону необходимо несколько генераций чисел по равномерному распределению. Кроме того, периоды времени между последовательными генерациями должны быть достаточными для обеспечения качественного равномерного распределения.
При необходимости генерировать нормальное распределение с здаанным математическим ожиданием m ≠ 0 и среднеквадратичным отклонением σ ≠ 1, необходимо воспользоваться преобразованием ξ = m + σ ∙ z,
где z — выборка из стандартного нормального распределения (т.е. с нулевым математическим ожиданием и единичной дисперсией).
-236-

x
σ
(–
x
2
2 ∙ σ
2
)
x
2
2 ∙ σ
)
�
�
–2 ∙ lna
С помощью нормально распределенных чисел можно генерировать
числа, распределенные по закону Рэлея.
exp
Распределение Рэлея имеет плотность вероятности f(x) =
–
2
2
где параметр σ > 0. Случайная величина имеет значение на интервале
x ∈ [0;∞).
,
Если z0 и z1 — это независимые нормально распредлеенные случайные величины с нулевыми математическими ожиданиями и одинаковы-
2
ми дисперсиями σ
2
, то случайная величина R =
2
имеет распреде-
+ Z
Z
0
1
ление Рэлея. Подставляя в эту формулу значения, полученные по первому
методу Бокса — Мюллера, получим последовательность чисел r =
которая имеет распределение Рэлея с параметром σ = 1, где а — равномерно распределенные числа на интервале [0;1].
Вопросыизадания
?
1. Для каких целей используются методы Бокса — Мюллера?
2. Какие исходные данные необходимы для генерации последовательности чисел для первого и для второго варианта метода Бокса —
Мюллера?
3. Какое условие должно выполняться для того, чтобы можно было
генерировать случайное число по второму варианту метода Бокса — Мюллера?
-237-
,

4. Как генерировать нормально распределенные числа на основе центральной предельной теоремы? В чем состоит недостаток этого метода?
5. Как получить случайную величину, подчиняющуюся нормальному
закону с заданным математическим ожиданием и стандартным отклонением, если задана случайная величина, подчиняющаяся стандартному
нормальному закону?
6. Как генерировать случайные числа, подчиняющиеся закону распределения Рэлея?
Упражнения
1. Создать программу генерации последовательности случайных чисел, подчиняющихся стандартному нормальному распределению, используя первый вариант метода Бокса — Мюллера. Получить последовательность из 100 + N случайных чисел.
2. Получить последовательность из 100 + N случайных чисел, удовлетворяющих нормальному распределению с математическим ожиданием m = N/3 и стандартным отклонением N/4 по второму варианту метода
Бокса — Мюллера.
Создать программу генерации последовательности случайных чисел, подчиняющихся стандартному нормальному распределению, используя центральную предельную теорему. Получить последовательность
из 30 + N случайных чисел.
-238-

9.КОНТЕЙНЕРЫ
9.1.ПОНЯТИЕКОНТЕЙНЕРА
Контейнер, набор данных, или коллекция — это класс для упорядоченного хранения данных различных типов. Контейнер позволяет объединять в себе разные объекты одного или нескольких классов объектов,
в том числе и другие контейнеры.
Контейнеры могут быть однородными и разнородными. Однород-
ный контейнер может включать произвольное число объектов одного класса (или классов, производных от данного класса). Объекты имеют
единый интерфейс. Такие контейнеры являются динамическими. Во время работы программа может изменять содержимое контейнера, добавляя
новые или исключая старые объекты, при этом конструкторы объектов
не используются.
Контейнер разнородных элементов может состоять из объектов
разных классов. Такие контейнеры являются статичными.
В библиотеке Microsoft .NET Framework в пространстве имен System.
Collections
различных типов:
- обычный массив Array;
- массив ArrayList для объектов произвольного вида;
- словарь Hashtable, хранящий пары ключ/значение с возможно-
стью доступа по ключу;
- сортированный список SortedList;
- стек Stack, т.е. список по принципу LIFO (последним пришел —
первым ушел);
- очередь (список) Queue по принципу FIFO (первым пришел — пер-
вым ушел);
- массив BitArray из битовых значений (true или false).
К общим методам коллекции, в частности, относятся:
public virtual int Capacity (get) — хранит емкость коллекции
для чтения;
public virtual void Clean() — удаляет элементы коллекции;
содержится несколько классов для создания контейнеров
-239-

public virtual Object this [int Indx] {set; get;} — позволяет
обратиться к элементам по индексу Indx;
public virtual void SetRange (int Indx, ICollection col) —
вставляет коллекцию col, начиная с индекса Indx.
Вопросыизадания
?
1. Что называется контейнером?
2. В чем состоят отличия однородных и разнородных контейнеров?
3. Какие объекты относятся к контейнерам?
4. Какие классы содержатся в библиотеке Microsoft .NET Framework
для работы с контейнерами?
9.2.МАССИВЫ
Работа с массивами предусмотрена практически в любом языке программирования. Массивы — это такой способ организации данных, когда его элементы упорядочиваются с помощью значений индексов. Массив объектов является простейшим способом реализации контейнера
объектов. Массивы относятся к ссылочным объектам, память им отводится динамически в куче. Каждый массив — это экземпляр соответствующего класса. Индекс определяет положение (номер) отдельного элемента
в массиве. Нумерация индекса в C# начинается с нуля.
Каждый элемент массива может иметь один или несколько индексов.
Число индексов характеризует мерность (порядок, ранг) массива. Ранг
равен 1 для одномерного массива, 2 для двумерного и т.д. В C# различают
массивы одномерные, многомерные выровненные и ломаные (неровные,
ступенчатые, jagged). Векторы описываются одномерными массивами,
матрицы — двумерными массивами, упорядоченные данные n-мерного
множества — n-мерными массивами. Ломаные массивы в отличие от многомерных массивов имеют размеры, которые различаются хотя бы в одном измерении.
Далее рассмотрим массивы как объекты — производные от класса
System.Array. Все экземпляры класса наследуют от него. Массив класса
Array может содержать элементы любого из типов. Недостатком масси-
вов этого класса является невозможность изменить их размер (количество элементов) после установки в процессе работы программы, так как они
используются для статического хранения данных.
-240-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
