При відлагодженні програм, що використовують масиви, зручно мати можливість генерувати початкові дані, задані випадковим чином. У бібліотеці С# на цей випадок є клас 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);
}
}
}