3. Багатовимірні масиви.
Жодної принципової різниці між одновимірними та багатовимірними масивами немає. Одновимірні масиви - це окремий випадок багатовимірних. Можна говорити і по-іншому: багатовимірні масиви є природним узагальненням одновимірних. Одновимірні масиви дозволяють задавати такі математичні структури як вектори, двовимірні, - матриці, тривимірні, - куби даних, масиви більшої розмірності - багатовимірні куби даних. Відмічу, що при роботі з базами даних багатовимірні куби, так звані куби OLAP, зустрічаються часто.
У чому особливість оголошення багатовимірного масиву? Як в вказати розмірність масиву? Це робиться досить просто, за рахунок використання ком. От як виглядає оголошення багатовимірного масиву в загальному випадку:
int[,] array;
Приклад ініціалізації:
int[,]matrix = {1,2},{3,4};
Давайте розглянемо класичне завдання додавання прямокутних матриць. Нам знадобиться три динамічні масиви для представлення матриць і три методи, один з яких заповнюватиме вхідні матриці випадковими числами, інший - виконувати додавання матриць, третій - друкувати самі матриці.
Ось тестовий приклад (програма містить трішки довгий код, але варто його переглянути):
Приклад 4. Додавання матриць.
1: class AddMatrixClass
2: {
3: static void Main(string[] args)
4: {
5: //Оголосимо розмірність наших матриць
6: int rows = 3, cols = 5;
7:
8: //Оголосимо матриці
9: int[,] a = new int[rows, cols];
10: int[,] b = new int[rows, cols];
11: int[,] result = new int[rows, cols];
12:
13: //Заповнимо матриці випадковими числами
14: a = FillArray(rows, cols, 5);
15: b = FillArray(rows, cols, 7);
16: //Виведемо на консоль матрицю А
17: Console.WriteLine("\nArray1: ");
18: PrintArray(a);
19: //Виведемо на консоль матрицю B
20: Console.WriteLine("\nArray2: ");
21: PrintArray(b);
22:
23: //Додамо і присвоїмо результат
24: result = AddMatrix(a, b);
25:
26: if (result != null)
27: {
28: Console.WriteLine("\nResultMatrix: ");
29: PrintArray(result);
30: }
31: }
32:
33: static int[,] AddMatrix(int[,] a, int[,] b)
34: {
35: //Оголосимо матрицю у яку будемо записувати результат.
36: int[,] res = new int[a.GetLength(0), a.GetLength(1)];
37:
38: //Перевіримо чи однаковий розмір матриць
39: if ((a.GetLength(0) != b.GetLength(0)) || (a.GetLength(1) != b.GetLength(1)))
40: Console.WriteLine("Мариці неоднакового розміру.");
41: else
42: {
43: for (int i = 0; i < a.GetLength(0); ++i)
44: {
45: //Виконуємо додавання елементів матриць
46: for (int j = 0; j < a.GetLength(1); ++j)
47: res[i, j] = a[i, j] + b[i, j];
48: }
49: return res;
50: }
51: return null;
52: }
53:
54: static int[,] FillArray(int rows, int cols, int randnum)
55: {
56: int[,] array = new int[rows, cols];
57: //Створює змінну класу рендом для генерування значень
58: Random rand = new Random(randnum);
59: for (int i = 0; i < rows; ++i)
60: {
61: for (int j = 0; j < cols; ++j)
62: {
63: array[i, j] = rand.Next(0,100);
64: }
65: }
66: return array;
67: }
68:
69: static void PrintArray(int[,] array)
70: {
71: for (int i = 0; i < array.GetLength(0); ++i)
72: {
73: for (int j = 0; j < array.GetLength(1); ++j)
74: {
75: //Виводимо значення на консоль
76: Console.Write(" {0}\t", array[i, j]);
77: }
78: Console.WriteLine();
79: }
80: }
81: }
Результат виконання (у вас він буде іншим):
Рис. 3. Результат виконання прикладу 4.