ГПОУ «Ленинск-Кузнецкий политехнический техникум»
Основы алгоритмизации
и программирования
Многомерные массивы
Преподаватель Щеглова Алена Александровна
Теоретическое занятие
для студентов II курса
Ленинск-Кузнецкий, 2023
Многомерный массив
Массивы характеризуются таким понятием, как ранг или количество измерений
Одномерные массивы имеют одно измерение (ранг = 1) – это массивы в виде ряда (строки или столбца)
У многомерных массивов количество измерений (ранг) больше 1.
44
22
10
11
14
30
19
Многомерный массив
Трёхмерный массив (куб)
Двумерный массив
Массивы которые имеют два измерения (ранг равен 2) называют двухмерными.
Двумерный массив – это таблица
Столбец
14
30
19
Строка
44
22
10
Элементы двумерного массива
Двумерный массив
Столбец
0
1
2
Строка
x[0,0]
x[0,1]
x[0,2]
0
x[1,2]
x[1,1]
x[1,0]
1
Объявление двумерного массива
Объявление двумерного массива:
тип[,] имя_массива = new тип[количество_строк, количество_столбцов];
Например:
int[,] а = new int[4, 5];
5 столбцов
4 строки
Обращение к элементам
int[,] а = new int[4, 5];
Индексы
0
0
3
1
1
2
10
5
2
12
1
3
7
3
8
2
5
4
7
4
3
0
8
5
95
2
4
4
2
Индексы
а [1, 2]=8
а [3, 4]=2
Инициализация
1)
тип[,] имя_массива = new тип[размер_строк, размер_столбцов]{{значения_строки0},{значения_строки1}…};
Например:
int[,] myArr = new int[4, 5] { {1,5,2,5,7},{1,8,4,9,7 }, {6,5,4,8,7 },{9,5,7,3,1 } };
Инициализация
2)
тип[,] имя_массива = new тип[,]{{значения_строки0},
{значения_строки1}…};
Например:
int[,] myArr = new int[,] { {1,5,2,5,7},{1,8,4,9,7 }, {6,5,4,8,7 },{9,5,7,3,1 } };
Инициализация
3)
тип[,] имя_массива = new [,]{{значения_строки0},
{значения_строки1}…};
Например:
int[,] myArr = new [,] { {1,5,2,5,7},{1,8,4,9,7 }, {6,5,4,8,7 },{9,5,7,3,1 } };
Ввод элементов массива с клавиатуры
for (int i = 0; i
{
for (int j = 0; j
{
Имя_массива[i,j]= int.Parse(Console.ReadLine());
}
}
Ввод и вывод случайных чисел
int[,] m = new int [Количество_строк, Количество_столбцов];
Random ran = new Random();
for (int i = 0; i
{
for (int j = 0; j
{
m[i, j] = ran.Next(1, 15);// случайные числа от 1 до 15
Console.Write("{0}\t", m[i, j]);
}
Console.WriteLine();
}
Вывод элементов массива
for (int i = 0; i
{
for (int j = 0; j
{
Console.Write("{0}\t", a[i, j]);
}
Console.WriteLine();
}
Доступ к элементам массива
for (int i = 0; i
{
for (int j = 0; j
{
a[i, j] + =1; // увеличение элементов массива на 1
}
Console.WriteLine();
}
', '+' }, { '~', 'U', '&', '\\', '@' } }; for (int i = 0; i { for (int j = 0; j { Console.Write("{0}\t", а[i, j]); } Console.WriteLine(); } " width="640"
Ввод и вывод символьного массива
char[,] а = new char[3, 5] { { 'A', 'B', 'C', 'D', 'E' },
{ '8', '-', '=', '', '+' },
{ '~', 'U', '&', '\\', '@' } };
for (int i = 0; i
{
for (int j = 0; j
{
Console.Write("{0}\t", а[i, j]);
}
Console.WriteLine();
}
Основные понятия
Ранг - количество измерений массива
Длина измерения - длина отдельного измерения массива
Длина массива - количество всех элементов массива
Например:
int[,] n = new int[3, 4];
Массив n двухмерный - имеет два измерения [3, 4], поэтому его ранг равен 2.
Длина первого измерения – 3
Длина второго измерения - 4.
Длина массива - общее количество элементов - 12.
Объявление многомерных массивов
Объявление трехмерного массива:
int[,,] a = new int[2, 2, 2];
for (int i = 0; i
for (int j = 0; j
for (int k = 0; k
a[i, j, k] = int.Parse(Console.ReadLine()); } } }
Объявление четырехмерного массива:
int[,,] a = new int[2, 2, 2,2];
for (int i = 0; i
for (int j = 0; j
for (int k = 0; k
for (int l = 0; l
a[i, j, k, l] = int.Parse(Console.ReadLine()); } } }
На практике используются одномерные и двухмерные массивы.
Инициализация многомерных массивов
Пример инициализации трехмерного массива целых чисел размером 2×3×4
// инициализация трехмерного массива целых чисел
int[, ,] B = {
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
},
{
{ 13, 14, 15, 16 },
{ 17, 18, 19, 20 },
{ 21, 22, 23, 24 }
}
};
Перебор многомерных массивов
При переборе элементов массива надо учитывать, что длина такого массива - это совокупное количество элементов
Например:
int[,] n = { { 1, 2, 3 }, { 4, 5, 6 }};
foreach (int i in n)
Console.Write($"{i} "); Длина массива n равна 6.
Цикл foreach выводит все элементы массива в строку
1 2 3 4 5 6
Длина массива
имя_массива.Length - количество элементов
Например:
int[,] M =new int[3,4] { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 } };
int t = M.Length;
Console.Write("Количество элементов:{0}\t", t);
Результат: 12
Количество строк в массиве
Имя_массива.GetUpperBound(0) + 1; - количество строк в массиве
Например:
int[,] M =new int[,] { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 } };
int t = M.GetUpperBound(0) + 1;
Console.Write("Количество элементов:{0}\t", t);
Результат: 3
имя_массива.GetLength(0);
Количество столбцов в массиве
Имя_массива.Length / Количество_строк; - количество столбцов
Например:
int[,] M =new int[,] { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 } };
int t = M.GetUpperBound(0) + 1;
int c = M.Length / t;
Console.Write("Количество элементов:{0}\t", c);
Результат: 4
имя_столбца.GetLength(1);
Массив массивов (зубчатый массив)
Массив массивов (зубчатый массив)
В ступенчатом массиве количество элементов каждой строки может отличаться
Массив массивов (зубчатый массив)
Общая форма объявления ступенчатого массива:
тип [][] имя_массива = new тип[размер][];
Инициализация подмассивов
имя_массива[Номер_строки] = new int[] { значения};
где
- тип – тип элементов массива;
- размер – количество строк в массиве
Например:
int[][] n = new int[3][];
n[0] = new int[] { 1, 2 };
n[1] = new int[] { 1, 2, 3 };
n[2] = new int[] { 1, 2, 3, 4, 5 };
Массив массивов (зубчатый массив)
int[][] A = new int[4][]; // выделение памяти для каждой строки
A[0] = new int[5]; // в строке с индексом 0 есть 5 элементов
A[1] = new int[3]; // в строке с индексом 1 есть 3 элемента
A[2] = new int[6];
A[3] = new int[4];
Сравнение объявления массивов
Способ 1. Объявление прямоугольного массива с именем M.
int[,] M = new int[5,100]; // выделяется 500 ячеек типа int
Способ 2. Объявление ступенчатого массива.
int[][] M = new int[5][]; // выделяется 50+100+30+60+40 = 280 ячеек типа int
M[0] = new int[50];
M[1] = new int[100];
M[2] = new int[30];
M[3] = new int[60];
M[4] = new int[40];