Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Объектно-ориентированное программирование. Учебник для СПО

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать

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
(xx
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-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]