Теория
-
В примере ниже показан код для объявления двумерного массива из пяти строк и трех столбцов (5 х 3).
- Объявление массива:
- Инициализация массива значениями:
- Доступ к элементам массива:
- Получение значения определенного элемента массива и присвоение его переменной:
- Получение общего количества элементов (или размерности массива):
- Получение количества строк и столбцов:
int[,] arr = new int[5, 3]; |
// 1. Инициализация массива при объявлении: int[,] arr1 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // Тот же массив с заданными размерами: int[,] arr1 = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // 2. Инициализация массива без указания размерности: int[,] arr2 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // 3. Инициализация массива после его объявления: int[,] arr; arr = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // Присваивание значения конкретному элементу массива: arr[2, 1] = 25; |
int[,] arr1 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; System.Console.WriteLine(arr1[0, 0]); //1 System.Console.WriteLine(arr1[0, 1]); //2 System.Console.WriteLine(arr1[1, 0]); //3 System.Console.WriteLine(arr1[1, 1]); //4 System.Console.WriteLine(arr1[3, 0]); //7 |
int elementValue = arr1[2, 1]; |
int[,] arr = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; var arrayLength = arr.Length; var total = 1; for (int i = 0; i < arr.Rank; i++) { total *= arr.GetLength(i); } System.Console.WriteLine("{0} равно {1}", arrayLength, total); // 8 равно 8 |
int[,] matrix = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; int r=matrix.GetLength(0); // строки int c=matrix.GetLength(1); // столбцы |
Задания и лабораторные работы
Выполнить: Инициализируйте двумерный массив* с именем
arr2d
заданными целочисленными значениями: ((1, 2); (3, 4); (5, 6))
.1) Сначала выведите все элементы массива.
2) После этого выведите следующие элементы в консоль (элементы для вывода отмечены синим цветом):
(1, 2) (3, 4) (5, 6)
Пример выполнения:
Массив: 1 2 3 4 5 6 1-й элемент = 3, 2-й элемент = 5
[Название проекта: Lesson_10Lab1
, название файла L10Lab1.cs
]
✍ Алгоритм:
- Создайте новый проект с именем файла, как указано в задаче.
- Подключите следующую библиотеку, чтобы не печатать каждый раз название класса
console
:
using System.Console;
arr2d
, мы можем использовать оператор int[,] arr2;
. Сразу в этой же строке инициализируем массив значениями. Для этого добавьте следующий код в функцию Main
:1, 2}, {3, 4}, {5, 6} };[,] arr2d= { {
Теперь у нас есть двумерный массив со значениями.
for ( i = 0; i < arr2d.GetLength(0); i++) { for ( j = 0; j < arr2d.GetLength(1); j++) { Console.Write($"{arr2d[i, j]} "); } Console.WriteLine(); }
0
. Итак, к элементу со значением 3 можно получить доступ как arr2[1,0]
(где 1 — строка и 0 — столбец), а к элементу со значением 5 можно получить доступ так: arr2[2,0]
. Console.WriteLine($"1-й элемент = {arr2d[1,0]}, 2-й элемент = {arr2d[2, 0]}");
Приведены значения температуры воздуха за 4 дня; значения взяты с трех метеостанций, расположенных в разных регионах страны:
Station number | 1-й день | 2-й день | 3-й день | 4-й день |
---|---|---|---|---|
1 | -8 | -14 | -19 | -18 |
2 | 25 | 28 | 26 | 20 |
3 | 11 | 18 | 20 | 25 |
То есть в двумерном массиве это выглядело бы так:
t[0,0]=-8; | t[0,1]=-14; | t[0,2]=-19; | t[0,3]=-18; |
t[1,0]=25; | t[1,1]=28; | t[1,2]=26; | t[1,3]=20; |
t[2,0]=11; | t[2,1]=18; | t[2,2]=20; | t[2,3]=25; |
Указание: Инициализация массива:
int [,] t = { {-8,-14,-19,-18}, { 25,28, 26, 20}, { 11,18, 20, 25} }; |
Выполнить:
- Выведите значение температуры на 2-й метеостанции в течение 4-го дня и на 3-й метеостанции в течение 1-го дня (результат должен быть
20
и11
). - Выведите значения температуры всех метеостанций в течение 2-го дня (необходим
for
цикла). - Выведите значения температуры всех метеостанций в течение всех дней.
- Рассчитайте среднюю температуру на 3-й метеостанции (необходим
for
цикла). - Выведите дни и номера метеостанций, где температура была в диапазоне 24—26 градусов.
Пример вывода:
1-е задание: 20 and 11
2-е задание: 25 28 26 20
3-е задание:
-8 -14 -19 -18
25 28 26 20
11 18 20 25
4-е задание: 18
5-е задание:
станция 1 день 0
станция 1 день 2
станция 2 день 3
[Название проекта: Lesson_10Task1
, название файла L10Task1.cs
]
To do: Вводятся элементы двумерного массива 2 х 3 ([2,3]). Посчитайте сумму элементов.
Указание 1: Для объявления массива размерностью 2 х 3 используйте код:
new [2, 3];[,] arr=
Указание 2: Для ввода значений элементов массива и перебора элементов, воспользуйтесь вложенными циклами:
for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { ... } }
Пример вывода:
Введите 6 значений для матрицы 2 х 3 2 5 1 6 7 8 Матрица: 2 5 1 6 7 8 Сумма = 29
[Название проекта: Lesson_10Task2
, название файла L10Task2.cs
]
Выполнить: Вводятся элементы двумерного массива 4 х 3. Посчитайте количество положительных элементов.
Пример вывода:
Пожалуйста, введите значения матрицы 4 х 3 2 5 -1 6 7 8 1 8 6 -3 1 -6 Матрица: 2 5 -1 6 7 8 1 8 6 -3 1 -6 кол-во положительных = 9
[Название проекта: Lesson_10Task3
, название файла L10Task3.cs
]
Выполнить: Создайте метод FillMatrix
для заполнения двумерного массива случайными числами в диапазоне от -10 до 10.
Указание: Заголовок функции FillMatrix
должен быть таким:
FillMatrix(matrix, minValue, maxValue); |
Пример выполнения:
Введите кол-во строк: 3 Введите кол-во столбцов: 4 Массив: -10 -7 -3 -4 -6 1 4 0 -5 -8 -1 -5
[Название проекта: Lesson_10Lab2
, название файла L10Lab2.cs
]
✍ Алгоритм:
- Создайте новый проект с названием файла, которое указано в задании.
- Подключите следующую библиотеку чтобы не указывать название класса
console
:
using static System.Console;
Main
добавьте код для того, чтобы попросить пользователя ввести количество строк и количество столбцов матрицы. Присвойте введенные значения переменным:... Console.WriteLine("введите кол-во строк"); rows = int.Parse(ReadLine()); Console.WriteLine("введите кол-во столбцов"); columns = int.Parse(ReadLine());
[,] matrix = [rows,columns];
-10; maxValue=10;minValue=
Чтобы сделать программу более эффективной лучше использовать ReSharper (для инициализации метода):
FillMatrix
в коде функции Main
(несмотря на то, что мы еще ее не создали). В функцию Main()
введите следующий код:FillMatrix(matrix, minValue, maxValue);
Alt+Enter
). Следует выбрать пункт «Генерировать метод Program.FillMatrix».FillMatrix(-10, maxValue = 10);[,] matrix, minValue =
matrix
— a declared matrix without initialization;
minValue
-устанавливать нижнюю границу для функции Random, значение по умолчанию — -10
maxValue
— устанавливать верхнюю границу для функции Random, значение по умолчанию 10
Random rand = new Random();
minValue
до maxValue
):... for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { matrix[i, j] = rand.Next(minValue, maxValue); Write(matrix[i, j].ToString().PadLeft(4)); } WriteLine(); }
matrix.GetLength(0)
означает число столбцов, а matrix.GetLength(1)
означает число столбцов.i
и j
. Метод GetLength(0)
возвращает кол-во строк матрицы, метод GetLength(1)
возвращает кол-во столбцов.CTRL+a, CTRL+k, CTRL+F
для форматирования вашего кода.L10Lab2.cs
.Выполнить: Создайте метод FillMatrix
для заполнения двумерного массива случайными числами от -15 до 15. Создайте еще один метод для нахождения минимального и максимального элементов массива (FindMinMaxArr
).
Указание 1: Сигнатура (заголовок) метода FindMinMaxArr
должен быть таким:
private static FindMinMaxArr( [,] matrix, ref min, ref max)
Указание 2: Алгоритм поиска минимального и максимального элемента можно посмотреть в одном из прошлых уроков Урок 5 -> Лаб. раб. 4.
Пример вывода:
введите кол-во строк 4 введите кол-во столбцов 5 Массив: 10 2 9 3 4 -3 -10 -14 -4 2 2 -9 11 3 -10 -1 -13 -5 -2 3 min = -14, max = 11
[Название проекта: Lesson_10Task4
, название файла L10Task4.cs
]
Выполнить: Создайте метод ChangeColumns
для обмена определенных столбцов матрицы размера 3 х 4 (порядковые номера столбцов вводятся).
Указание: Помимо метода ChangeColumns
необходимо создать метод FillMatrix
для заполнения матрицы случайными числами, и метод PrintMatrix
для вывода элементов матрицы.
Пример вывода:
Матрица: -10 -7 -3 -4 -6 1 4 0 -5 -8 -1 -5 введите номера столбцов для обмена (первый столбец - 0-й): 1 2 Результирующая матрица: -10 -3 -7 -4 -6 4 1 0 -5 -1 -8 -5
[Название проекта: Lesson_10Lab3
, название файла L10Lab3.cs
]
✍ Fkujhbnv:
- Создайте новый проект и переименуйте главный файл согласно заданию.
- Необходимо создать матрицу с тремя строками и четырьмя столбцами. Объявите матрицу в функции
Main
:
int[,] matrix = int[3, 4];
FillMatrix
из Лабораторной работы 2 и вставьте его в текущий проект. Или создайте метод заново. После этого у Вас будет код:void FillMatrix(int[,] matrix, int minValue = -10, int maxValue = 10) { Random rand = new Random(); for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { matrix[i, j] = rand.Next(minValue, maxValue); } } }
PrintMatrix
для вывода элементов матрицы. Метод принимает один параметр — саму матрицу: void PrintMatrix(int[,] m) { for (int i = 0; i < m.GetLength(0); i++) { for (int j = 0; j < m.GetLength(1); j++) { Console.Write(m[i, j].ToString().PadLeft(4)); } Console.WriteLine(); } }
PadLeft
для формирования одинаковых отступов слева.Main
необходимо вызвать созданные методы: сначала — метод FillMatrix
и затем — метод PrintMatrix
.... FillMatrix(matrix); Console.WriteLine("Матрица 3 x 4: "); PrintMatrix(matrix);
... Console.WriteLine("введите номера столбцов для обмена (первый столбец - 0-й):"); int col1= int. (Console.ReadLine()); int col2 = int. (Console.ReadLine());
ChangeColumns
для обмена столбцов с указанными номерами:static ChangeColumns(int[,] matrix, int col1, int col2) { System.Diagnostics.Debug.Assert((col1 < matrix.GetLength(1)) && (col2 < matrix.GetLength(1)), "указанный номер столбца выходит за границы размерности массива!"); for (int i = 0; i < matrix.GetLength(0); i++) { int temp = matrix[i, col1]; matrix[i, col1] = matrix[i, col2]; matrix[i, col2] = temp; // если используется Visual studio 2019: // (matrix[i, col1], matrix[i, col2]) = (matrix[i, col2], matrix[i, col1]); } }
i
цикла проходится по строкам матрицы и в то же время каждый элемент col1
обменивается значениями с элементом col2
в каждой строке.System.Diagnostics.Debug.Assert
используется для того, чтобы вызвать исключение при вводе значения большего, чем кол-во столбцов матрицы.main
. Затем вызовите метод PrintMatrix
, чтобы увидеть результат:... ChangeColumns(matrix, col1, col2); Console.WriteLine("The resulting matrix:"); PrintMatrix(matrix);
CTRL+F5
.L10Lab3.cs
.To do: Создайте метод PlaceZero
, который замещает некоторые элементы матрицы (5 х 5) нулями (0
). Посмотрите на пример вывода, чтобы понять, какие элементы должны быть замещены нулями.
Указание 1: Создайте методы для заполнения и вывода матрицы.
Указание 2: Заголовок метода PlaceZero
должен быть следующим:
static void PlaceZero(int[,] matrix) |
Указание 3: Для замены элементов нулями используйте циклы.
Пример вывода:
Матрица: 10 2 9 3 6 3 10 14 4 8 2 9 11 3 2 1 13 5 2 7 12 3 11 4 5 Результирующая матрица: 0 0 0 0 0 0 10 14 4 0 0 9 11 3 0 0 13 5 2 0 0 0 0 0 0
[Название проекта: Lesson_10Task5
, название файла L10Task5.cs
]
To do: Создайте метод FindProductOfColumn
для нахождения произведения элементов матрицы M
-го столбца (матрица 3 х 4) (M вводится). M
— это параметр out
(вывода).
Note: Сигнатура метода FindProductOfColumn
должна быть следующей:
static void FindProductOfColumn(int[,] matrix, int M,out int product) |
Пример вывода:
Матрица: -10 -3 -7 -4 -6 4 1 0 -5 -1 -8 -5 Введите номер столбца (первый столбец - 0-й): 2 Произведение элементов 2-го столбца = -64
[Название проекта: Lesson_10Task6
, название файла L10Task6.cs
]
В алгебре главная диагональ матрицы
A
— это все элементы матрицы Ai,j
, для которых i=j
. Элементы вне главной диагонали обозначены нулями, а элементы главной диагонали обозначены красными единицами:Побочная диагональ матрицы
B
размерности N
— это элементы Bi,j
, для которых i+j=N+1
для всех 1<=i,j<=N
. Но если i
и j
начинаются с нуля, то формула будет i+j=N-1
:Выполнить: Создайте квадратную матрицу M-х-M (значение M
вводится). Посчитайте сумму элементов побочной диагонали матрицы.
Примерный вывод:
Введите размерность матрицы: 3 Матрица 3-х-3: 10 -7 -3 6 1 4 5 -8 -1 сумма элементов побочной диагонали = 3
[Название проекта: Lesson_10Lab4
, название файла L10Lab4.cs
]
✍ Алгоритм:
- Создайте новый проект и измените название главного файла согласно заданию.
- Попросите пользователя ввести размерность матрицы и присвойте введенное значение переменной
M
:
Console.WriteLine("Введите размерность матрицы:"); int M = int. (Console.ReadLine());
M
-х-M
. Объявите матрицу в коде функции Main
:int[,] matrix = int[M, M];
FillMatrix
с предыдущей лабораторной работы и вставьте его до или после функции Main
.PrintMatrix
и также вставьте его после метода FillMatrix
.AntidiagonalSum
, который будет суммировать элементы побочной диагонали матрицы.int AntidiagonalSum(int[,] matrix) { ... }
i+j=M-1
. Для прохода по элементам матрицы будем использовать вложенные циклы:... int sum = 0; for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { if ((i+j == M-1) { sum+ = matrix[i,j]; } } }
return
:
...
return sum;
Main
:int result = AntidiagonalSum(matrix); Console.WriteLine($"сумма элементов побочной диагонали = {result}");
CTRL+F5
) и проверьте результат.Выполнить: Create square matrix M-by-M (M
is inputted). Calculate a product of its elements within a main diagonal.
Указание: a main diagonal elements are such as i=j
.
Примерный вывод:
Введите размерность матрицы: 3 Матрица 3-х-3: 10 -7 -3 6 1 4 5 -8 -1 Произведение элементов главной диагонали = -10
[Название проекта: Lesson_10Task7
, название файла L10Task7.cs
]
Дополнительные задания
Выполнить: Запрашиваются натуральные M
и N
. Создайте метод FillMatrix
для заполнения матрицы размерностью M
-х-N
; все элементы J
-го столбца вычисляются по формуле X
*J
(J - номер столбца, J
= 1, ..., N
), а X
- число - аргумент метода.
Указание: заголовок метода должен быть следующим:
static int[,] FillMatrix(int M, int N, int X) |
Примерный вывод:
введите кол-во строк: 3 введите кол-во столбцов: 4 Введите значение множителя (аргумента): 3 Матрица 3-х-3: 3 6 9 12 3 6 9 12 3 6 9 12
[Название проекта: Lesson_10ExTask1
, название файла L10ExTask1.cs
]
Выполнить: Даны две матрицы одинаковой размерности (необходимо создать метод для заполнения матриц случайными числами). Посчитайте сумму элементов матрицы, используйте для этого еще одну матрицу.
Указание: Заголовок метода:
static int[,] SumMat(int[,] a, int[,] b) |
Примерный вывод:
Matrix 1: -3 8 3 -9 -6 4 6 4 -2 Matrix 2: 4 -4 1 -5 1 -1 4 8 -10 Result matrix: 1 4 4 -14 -5 3 10 12 -12
[Название проекта: Lesson_10ExTask2
, название файла L10ExTask2.cs
]