Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 5. Масиви і стандартні класи С.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
134 Кб
Скачать
☆

5.2. Клас Random і його методи

Клас Random призначений для генерації випадкових чисел. Це нестатичний клас. Він має конструктор класу: для того, щоб викликати методи класу, потрібно спочатку створити екземпляр класу.

Конструктор класу перевизначений і має дві реалізації. Одна з них дозволяє генерувати унікальні серії випадкових чисел. Початковий елемент такої серії будується на основі поточної дати і часу, що гарантує унікальність серії.

Цей конструктор викликається без параметрів. Він описаний як

public Random();

Інший конструктор з параметром –

public Random (int);

забезпечує можливість генерації серії випадкових чисел, що повторюється. Параметр конструктора використовується для побудови початкового елемента серії, тому при завданні одного і того ж значення параметра серія буде повторюватися.

Перегружений метод public int Next(); при кожному виклику повертає позитивне ціле число, рівномірно розподілене в деякому діапазоні. Діапазон задається параметрами методу. Три реалізації методу відрізняються набором параметрів:

  • public int Next () - метод без параметрів видає цілі позитивні числа у всьому позитивному діапазоні типу int;

  • public int Next (int max) - видає цілі позитивні числа в діапазоні [0,max];

  • public int Next (int min, int max) - видає цілі позитивні числа в діапазоні [min,max].

Метод public double NextDouble () має одну реалізацію. При кожному виклику цього методу видається нове випадкове число, рівномірно розподілене в інтервалі [0,1).

Для отримання серії випадкових чисел призначений метод NextBytes, описаний як:

public void NextBytes (byte[] buffer);

Метод має 1 параметр – масив, який заповняється випадковими числами в діапазоні [0, 255]..

Приклад 5.7

public void Rand()

{

const int initRnd = 77;

Random realRnd = new Random();

Random repeatRnd = new Random(initRnd);

// випадкові числа в діапазоні [0,1)

Console.WriteLine("випадкові числа в діапазоні[0,1)");

for(int i =1; i <= 5; i++)

{

Console.WriteLine("Число " + i + "= "

+ realRnd.NextDouble() );

}

// випадкові числа в діапазоні[min,max]

int min = -100, max=-10;

Console.WriteLine("випадкові числа в діапазоні [" +

min +"," + max + "]");

for(int i =1; i <= 5; i++)

{

Console.WriteLine("Число " + i + "= "

+ realRnd.Next(min,max) );

}

// випадковий масив байтів

byte[] bar = new byte[10];

repeatRnd.NextBytes(bar);

Console.WriteLine("Масив випадкових чисел в діапазоні [0, 255]");

for(int i =0; i < 10; i++)

{

Console.WriteLine("Число " + i + "= " +bar[i]);

}

}//Rand

В цьому прикладі спочатку створюються два об'єкти класу Random. В цих об'єктів різні конструктори. Об'єкт з ім'ям realRnd дозволяє генерувати серії випадкових чисел, що не повторюються. Об'єкт repeatRnd дає можливість повторити при необхідності серію. Метод NextDouble створює серію випадкових чисел в діапазоні [0, 1). Метод Next, що викликається в циклі з двома параметрами створює серію випадкових негативних цілих, рівномірно розподілених в діапазоні [-100, -10]. Метод NextBytes об'єкту repeatRnd дозволяє отримати при одному виклику масив випадкових чисел з діапазону [0, 255].

Приклад: створення екземпляру класу і генерація числа

Random aRand = new Random(); //створення об’єкту класу

arr[i] = aRand.Next(min_Number1, max_Number1); //генерація випадкового числа у заданому діапазоні.

Приклад 5.8 Генерація масиву чисел і його сортування

class Program

{ // генератор даних

static void ValsGenerator(int[] Vals)

{

// Random - клас для генерації випадкових чисел

Random aRand = new Random();

// заповнення масиву

for (int i = 0; i < Vals.Length; i++)

Vals[i] = aRand.Next(100);

}

static void Main(string[] args)

{

const int N = 10;

int[] Data = new int[N];

ValsGenerator(Data);

Array.Sort(Data);

Console.WriteLine("Друк відсортованих даних");

for (int i = 0; i < Data.Length; i++)

Console.WriteLine("Data[" + i + "] = " + Data[i]);

Console.ReadLine();

}

}