русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Клас Random


Дата додавання: 2015-01-08; переглядів: 975.


 

При відлагодженні програм, що використовують масиви, зручно мати можливість генерувати початкові дані, задані випадковим чином. У бібліотеці С# на цей випадок є клас Random, визначений в просторі імен System.

Для отримання псевдовипадкової послідовності чисел необхідно спочатку створити екземпляр класу за допомогою конструктора, наприклад:

 

Random а = new Random( ); // 1

Random b = new Random (1); // 2

 

Є два види конструктора: конструктор без параметрів (оператор 1) використовує початкове значення генератора, обчислене на основі поточного часу. В цьому випадку кожного разу створюється унікальна послідовність. Конструктор з параметром типу int (оператор 2) задає початкове значення генератора, що забезпечує можливість отримання однакових послідовностей чисел.

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

 

Таблиця 6.2

Основні методи класу System.Random

 

Назва Опис
Next ( ) Повертає ціле додатне число у всьому додатному діапазоні типу int
Next (макс) Повертає ціле додатне число в діапазоні [0, макс]
Next (мин, макс) Повертає ціле додатне число в діапазоні [мін, макс]
NextBytes (массив) Повертає масив чисел в діапазоні [0, 255]
NextDouble ( ) Повертає дійсне додатне число в діапазоні [0,1]

 

Приклад застосування методів приведений в лістингу 6.5.

Лістинг 6.5. Робота з генератором псевдовипадкових чисел

using System;

namespace ConsoleApplication1

{

class Classl

{

static void Main()

{

Random a = new Random();

Random b = new Random(1);

const int n = 10;

Console.WriteLine("\n Діапазон [0,1] : ");

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

Console.Write(" {0,6:0.##} ", a.NextDouble());

Console.WriteLine();

Console.WriteLine("Діапазон [0,1000]: \n");

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

Console.Write(" " + b.Next(1000));

Console.WriteLine("\n Діапазон [-10, 10 ]:");

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

Console.Write(" " + a.Next(-10, 10));

Console.WriteLine("\n Масив [0, 255]:");

byte[] mas = new byte[n];

a.NextBytes(mas);

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

Console.Write(" " + mas[i]);

Console.WriteLine();

Console.ReadLine();

}

}

}

 

Результат роботи програми:

Діапазон [0, 1]:

0,02 0,40 0,24 0,55 0,92 0,84 0,90 0,78 0,78 0,74

Діапазон [0, 1000]:

248 110 467 771 657 432 354 943 101 642

Діапазон [-10, 10]:

-8 9 -6 -10 7 4 9 -5 -2 -1

Масив [0, 255]:

181 105 60 50 70 77 9 28 133 150

 

Більш ускладнений приклад роботи з масивом приведений в лістингу 6.6 та 6.7.

Лістинг 6.6. Сортування масиву

 

using System;

 

namespace examp8

{

class Program

{

static void Main(string[] args)

{

// Кількість елементів

uint n = 0;

Console.Write("Введіть кількість елементів масиву: ");

try

{

// Вводимо кількість елементів з клавіатури

n = Convert.ToUInt32(Console.ReadLine());

}

catch (OverflowException ex)

{

// У разі помилкового введення (переповнювання)

Console.WriteLine(ex.Message + " Use default size (=10)");

}

catch (FormatException ex)

{

// У разі помилкового введення

Console.WriteLine(ex.Message+"Use default size (=10)");

}

// Якщо все погано, то створимо масив з 10 елементів

if (n == 0)

n = 10;

// Створення масиву

int[] ar = new int[n];

// Ініціалізація генератора випадкових чисел

Random rand = new Random();

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

{

// Заповнюємо масив випадковими числами

// от -500 до 500

ar[i] = rand.Next(-500, 500);

Console.WriteLine("ar[{0}] = {1,8}", i, ar[i]);

}

Console.WriteLine();

for (int i = 0; i < n - 1; i++)

for (int j = i + 1; j < n; j++)

{

if (ar[i] > ar[j])

{

int t = ar[i];

ar[i] = ar[j];

ar[j] = t;

}

}

Console.WriteLine("Масив після сортування:");

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

Console.WriteLine("ar[{0}] = {1,8}", i, ar[i]);

Console.WriteLine();

Console.Read();

}

}

}

 

Лістинг 6.7. Сортування матриці по стовпцях в двовимірному масиві

using System;

 

namespace examp9

{

class Program

{

// Сортування матриці по стовпцях

static int[,] Sort_Column(int[,] mtr)

{

// число строк

int M = mtr.GetLength(0);

// число стовпців

int N = mtr.GetLength(1);

 

// Створення масиву

int[,] t_ar = new int[M, N];

int[,] s_ar = new int[N, 2];

 

Console.WriteLine("Сума елементів по стовпцях:");

//Находим сумму

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

{

s_ar[i, 0] = 0;

s_ar[i, 1] = i;

for (int j = 0; j < M; j++)

{

s_ar[i, 0] += mtr[j, i];

}

Console.Write("{0,8}", s_ar[i, 0]);

}

Console.WriteLine();

 

for (int i = 0; i < N - 1; i++)

for (int j = i + 1; j < N; j++)

if (s_ar[i, 0] > s_ar[j, 0])

{

int t = s_ar[i, 0];

s_ar[i, 0] = s_ar[j, 0];

s_ar[j, 0] = t;

t = s_ar[i, 1];

s_ar[i, 1] = s_ar[j, 1];

s_ar[j, 1] = t;

}

 

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

for (int j = 0; j < N; j++)

t_ar[i, j] = mtr[i, s_ar[j, 1]];

return t_ar;

}

 

// Виведення матриці

static void Print(int[,] mtr)

{

// число строк

int M = mtr.GetLength(0);

// число стовпців

int N = mtr.GetLength(1);

 

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

{

for (int j = 0; j < N; j++)

{

Console.Write("{0,8}", mtr[i, j]);

}

Console.WriteLine();

}

Console.WriteLine();

}

 

// Ініціалізація матриці випадковими значеннями

static void Init(int[,] mtr)

{

// Ініціалізація генератора випадкових чисел

Random rand = new Random();

 

// Визначення розмірності матриці

int M = mtr.GetLength(0);

int N = mtr.GetLength(1);

 

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

{

for (int j = 0; j < N; j++)

{

// Забиваємо масив випадковими числами

// от -500 до 500

mtr[i, j] = rand.Next(-500, 500);

}

}

}

 

static void Main(string[] args)

{

// Розмірності матриці

uint M = 0, N = 0;

 

Console.WriteLine("Введіть розмірності матриці: ");

try

{

// Вводимо розмірності матриці з клавіатури

Console.Write("Строк: ");

M = Convert.ToUInt32(Console.ReadLine());

Console.Write("Столбцов: ");

N = Convert.ToUInt32(Console.ReadLine());

}

catch (OverflowException ex)

{

// У разі помилкового введення (переповнювання)

Console.WriteLine(ex.Message + " Use default size (=10x10)");

}

catch (FormatException ex)

{

// У разі помилкового введення

Console.WriteLine(ex.Message + " Use default size (=10x10)");

}

 

// Якщо все погано, то створимо масив з 10х10 елементів

if (M == 0 || N == 0)

M = N = 10;

 

// Створення масиву

int[,] ar = new int[M, N];

 

Console.WriteLine("Матрица:");

// Ініціалізація

Init(ar);

// Виведення

Print(ar);

 

// Сортування

int[,] t_ar = Sort_Column(ar);

 

Console.WriteLine();

Console.WriteLine("Відсортована матриця:");

// Виведення матриці

Print(t_ar);

 

}

}

}


<== попередня лекція | наступна лекція ==>
Клас System.Array | Оператор foreach


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн