Вывод двумерного массива си
Массив у вас располагается одним куском, так что обращение к array[i][j] осуществляется просто как к j -му элементу после i строк, т.е. к элементу номер i*(число столбцов)+j , т.е. в вашем варианте — array[i*n+j], где n` — число элементов в строке.
Заметим, что у вас строк — m , так что вы фактически заполняете массив по столбцам, и точно так же пытаетесь его выводить.
Вот так будет лучше:
Обратите внимание, что имена переменных — rows и cols (columns) не дают возможности спутать, что есть число строк (кстати, строка в таблице по-английски — row, но не string. ), что — столбцов. Я бы даже i и j поменял на r и c . Выбор имен переменных — куда важнее, чем кажется начинающим.
Более привычно, когда обращение к элементам массива в циклах осуществляется по строкам, а не по столбцам, как у вас. То есть вместо
Будет лучше написать
так как m — это число строк, а n — это число столбцов.
А иначе эта подсказка
И для ввода нужно использовать указатель на соответствующий элемент
То есть в вашей программе двумерный массив имитируется с помощью одномерного массива.
Если имеется двумерный массив и его элемент индексами i и j , как, например,
то порядковый номер элемента этого массива будет равен i * n + j . Это и будет индекс одномерного массива.
Для простоты представьте, что у вас имеется двумерный массив с 10 эоементами в строке. Тогда порядковый номер элемента, например, array2[2][5] будет равен 25. А число 25 вы можете представить как 2 * 10 + 5 , то есть 2 * n + 5 , где n — число элементов в строке. Имейте в виду, что индексы начинаются с 0. А это значит, что перед любым элементом, который расположен в строке с индексом 2, имеется 2 строки элементов.
MorningAndrey / МЕТОД СОЗДАНИЯ МАССИВА с проверкой на ошибки ввода.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| int[,] positionSmallElement = new int[1, 2]; |
| positionSmallElement = FindPositionSmallElement(array, positionSmallElement); |
| Console.Write($"Позиция элемента: \n"); |
| WriteArray(positionSmallElement); |
| int[,] FindPositionSmallElement(int[,] array, int[,] position) |
| < |
| int temp = array[0, 0]; |
| for (int i = 0; i < array.GetLength(0); i++) |
| < |
| for (int j = 0; j < array.GetLength(1); j++) |
| < |
| if (array[i, j] <= temp) |
| < |
| position[0, 0] = i; |
| position[0, 1] = j; |
| temp = array[i, j]; |
| > |
| > |
| > |
| Console.WriteLine($"\nMинимальный элемент: |
| return position; |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| / метод возврата значения запрошенного пользователем элемента |
| void Check(int number, int[,] arr, int rows, int columns) |
| < |
| if ((number / 10) > rows || (number % 10) > columns) |
| Console.WriteLine($" |
| else if ((number % 10) == 0) |
| Console.WriteLine($" |
| else Console.WriteLine($" |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| void GetPrint (int [,] array) |
| < |
| for (int i = 0; i < array.GetLength(0); i++) |
| < |
| for (int j = 0; j < array.GetLength(1); j++) |
| < |
| Console.Write(array[i,j] + "\t"); |
| > |
| Console.WriteLine(); |
| > |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| // Метод вывода минимальной суммы в строках с выводом результатов пользователю |
| void GetResult(int[] sums) |
| < |
| int position = 0; |
| int min = sums[0]; |
| for (int i = 1; i < sums.Length; i++) |
| < |
| if (sums[i] < min) |
| < |
| min = sums[i]; |
| position = i; |
| > |
| > |
| if(position == 1) Console.WriteLine($"\nНаименьшая сумма элементов, равная |
| else Console.WriteLine($"\nНаименьшая сумма элементов, равная |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| void ChangeArray(int[,] array) |
| < |
| for (int i = 0; i < array.GetLength(0); i++) |
| < |
| for (int j = 0; j < array.GetLength(1); j++) |
| < |
| if (i > 0 && i < array.GetLength(1)) |
| < |
| int temporary = array[i, j]; |
| array[i, j] = array[i, j]; |
| array[i, j] = temporary; |
| > |
| else |
| < |
| int temporary = array[i, j]; |
| array[i, j] = array[(array.GetLength(1) — 1), j]; |
| array[(array.GetLength(1) — 1), j] = temporary; |
| > |
| > |
| > |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| int[,] ChangeArray(int[,] array) |
| < |
| if (array.GetLength(0) != array.GetLength(1)) |
| < |
| Console.WriteLine("Ошибка: невозможно заменить строки на столбцы. Введите одинаковое число строк и столбцов"); |
| return array; |
| > |
| else |
| < |
| int[,] newArray = new int[array.GetLength(0), array.GetLength(1)]; |
| for (int i = 0; i < array.GetLength(0); i++) |
| < |
| for (int j = 0; j < array.GetLength(1); j++) |
| < |
| newArray[i, j] = array[j, i]; |
| > |
| > |
| return newArray; |
| > |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| int [,]GetResult(int[,] Array) |
| < |
| for (int i = 0; i < Array.GetLength(0); i++) |
| < |
| for (int j = 0; j < Array.GetLength(1); j++) |
| < |
| if ((i % 2) == 0 && (j % 2) == 0) |
| < |
| Array[i, j] = (int)Math.Pow(Array[i, j], 2); |
| > |
| > |
| > |
| return Array; |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| int[] inArr = new int[array.GetLength(0)]; |
| int[] arrayOfSums = GetSumOfEachLine(array, inArr); |
| Console.WriteLine(String.Join(" ", arrayOfSums)); |
| // Метод определения суммы элементов построчно |
| int[] GetSumOfEachLine(int[,] arr, int[] sums) |
| < |
| int sum = 0; |
| for (int i = 0; i < arr.GetLength(0); i++) |
| < |
| for (int j = 0; j < arr.GetLength(1); j++) |
| < |
| sum += arr[i, j]; |
| > |
| foreach(int q in sums) |
| < |
| if(sum > q) sums[i] = sum; |
| > |
| sum = 0; |
| > |
| return sums; |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| int minSumLine = 0; |
| int sumLine = SumLineElements(array, 0); // сумма элементов в 0й строке |
| int SumLineElements(int[,] array, int i) |
| < |
| int sumLine = array[i, 0]; |
| for (int j = 1; j < array.GetLength(1); j++) |
| < |
| sumLine += array[i, j]; |
| > |
| return sumLine; |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| int GetResult(int[,] Array) |
| < |
| int sum = 0; |
| int diagonal = Math.Min(Array.GetLength(0), Array.GetLength(1)); |
| for (int i = 0; i < diagonal; i++) sum +=Array[i,i]; |
| return sum; |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| // метод определения среднего арифметического каждого элемента столбца |
| void GetAverage(int[,] Array, int Rows) |
| < |
| double sum = 0; |
| double result = 0; |
| Console.Write("Среднее арифметическое каждого столбца: "); |
| for (int i = 0; i < Array.GetLength(1); i++) |
| < |
| sum = 0; |
| for (int j = 0; j < Array.GetLength(0); j++) |
| < |
| sum = sum + Array[j, i]; |
| > |
| result =Math.Round((sum / Rows), 2); |
| if (i == Rows) Console.Write($" |
| else Console.Write($" |
| > |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| // Метод определения суммы элементов построчно |
| int[] GetSumOfEachLine(int[,] arr, int[] sums) |
| < |
| int sum = 0; |
| for (int i = 0; i < arr.GetLength(0); i++) |
| < |
| for (int j = 0; j < arr.GetLength(1); j++) |
| < |
| sum += arr[i, j]; |
| > |
| foreach(int q in sums) |
| < |
| if(sum > q) sums[i] = sum; |
| > |
| sum = 0; |
| > |
| return sums; |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| //————————————————— |
| //————————————————— |
| int n = InputNumbers("Введите количество строк: "); |
| double[,] pascalTriangle = new double[n + 1, 2 * n + 1]; |
| FillPascalTriangle(pascalTriangle); |
| //————————————————— |
| //————————————————— |
| void FillPascalTriangle(double[,] pascalTriangle) |
| < |
| for (int k = 0; k < pascalTriangle.GetLength(0); k++) |
| < |
| pascalTriangle[k, 0] = 1; |
| > |
| for (int i = 1; i < pascalTriangle.GetLength(0); i++) |
| < |
| for (int j = 1; j < i + 1; j++) |
| < |
| pascalTriangle[i, j] = pascalTriangle[i — 1, j] + pascalTriangle[i — 1, j — 1]; |
| > |
| > |
| > |
| //————————————————— |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| //————————— Начало программы ———————————- |
| Console.Clear(); |
| Console.WriteLine("Задача : "); |
| Console.WriteLine($"\nВведите размер массива m x n и диапазон случайных значений:"); |
| int rows =GetNumberFromUser("Введите количество строк массива: ", "Ошибка ввода!"); |
| int columns =GetNumberFromUser("Введите количество столбцов массива: ", "Ошибка ввода!"); |
| int range = GetNumberFromUser("Введите диапазон значений элементов: от 1 до ", "Ошибка ввода!"); |
| int[,] array = new int[rows, columns]; |
| GetArray(array); |
| PrintArray(array); |
| // ————————— Конец программы ———————————- |
| // ————————-Определение методов ——————————— |
| // —————————————————————————— |
| // Метод запроса числа у пользователя сс проверкой на ошибки ввода |
| int GetNumberFromUser(string message, string errorMessage) |
| < |
| while (true) |
| < |
| Console.Write(message); |
| bool isCorrect = int.TryParse(Console.ReadLine(), out int userNumber); |
| if (isCorrect) |
| return userNumber; |
| Console.WriteLine(errorMessage); |
| > |
| > |
| // метод определения двумерного массива целых чисел |
| void GetArray(int[,] result) |
| < |
| for (int i = 0; i < result.GetLength(0); i++) |
| < |
| for (int j = 0; j < result.GetLength(1); j++) |
| < |
| result[i, j] = new Random().Next(range); |
| > |
| > |
| > |
| // метод вывода массива в консоль |
| void PrintArray(int[,] inArray) |
| < |
| for (int i = 0; i < inArray.GetLength(0); i++) |
| < |
| for (int j = 0; j < inArray.GetLength(1); j++) |
| < |
| Console.Write(inArray[i, j] + "\t"); |
| > |
| Console.WriteLine(); |
| > |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| //—————————————————————— |
| //—————————————————————— |
| int[,] positionSmallElement = new int[1, 2]; |
| positionSmallElement = FindPositionSmallElement(array, positionSmallElement); |
| int[,] arrayWithoutLines = new int[array.GetLength(0) — 1, array.GetLength(1) — 1]; |
| DeleteLines(array, positionSmallElement, arrayWithoutLines); |
| Console.WriteLine($"\nПолучившийся массив:"); |
| WriteArray(arrayWithoutLines); |
| //—————————————————————— |
| //—————————————————————— |
| int[,] FindPositionSmallElement(int[,] array, int[,] position) |
| < |
| int temp = array[0, 0]; |
| for (int i = 0; i < array.GetLength(0); i++) |
| < |
| for (int j = 0; j < array.GetLength(1); j++) |
| < |
| if (array[i, j] <= temp) |
| < |
| position[0, 0] = i; |
| position[0, 1] = j; |
| temp = array[i, j]; |
| > |
| > |
| > |
| Console.WriteLine($"\nMинимальный элемент: |
| return position; |
| > |
| //———————————————————- |
| void DeleteLines(int[,] array, int[,] positionSmallElement, int[,] arrayWithoutLines) |
| < |
| int k = 0, l = 0; |
| for (int i = 0; i < array.GetLength(0); i++) |
| < |
| for (int j = 0; j < array.GetLength(1); j++) |
| < |
| if (positionSmallElement[0, 0] != i && positionSmallElement[0, 1] != j) |
| < |
| arrayWithoutLines[k, l] = array[i, j]; |
| l++; |
| > |
| > |
| l = 0; |
| if (positionSmallElement[0, 0] != i) |
| < |
| k++; |
| > |
| > |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| /// Задача 58: Задайте две матрицы. Напишите программу, которая будет находить произведение двух матриц. |
| Console.Clear(); |
| Console.WriteLine($"Задача 58: Задайте две матрицы. Напишите программу, которая будет находить произведение двух матриц."); |
| int a = GetNumberFromUser("Введите число строк 1-й матрицы: ", "Ошибка ввода!"); |
| int b = GetNumberFromUser("Введите число столбцов 1-й матрицы (и строк 2-й): ", "Ошибка ввода!"); |
| int c = GetNumberFromUser("Введите число столбцов 2-й матрицы: ", "Ошибка ввода!"); |
| int range = GetNumberFromUser("Введите диапазон случайных чисел: от 1 до ", "Ошибка ввода!"); |
| int[,] Matrix1 = new int[a, b]; |
| CreateArray(Matrix1); |
| Console.WriteLine($"\nПервая матрица:"); |
| WriteArray(Matrix1); |
| int[,] Matrix2 = new int[b, c]; |
| CreateArray(Matrix2); |
| Console.WriteLine($"\nВторая матрица:"); |
| WriteArray(Matrix2); |
| int[,] resultMatrix = new int[a, c]; // число строк первой матрицы должно быть равно числу столбцов 2й матрицы |
| MatrixMultiplication(Matrix1, Matrix2, resultMatrix); |
| Console.WriteLine($"\nПроизведение первой и второй матриц:"); |
| WriteArray(resultMatrix); |
| int GetNumberFromUser(string message, string errorMessage) |
| < |
| while (true) |
| < |
| Console.Write(message); |
| bool isCorrect = int.TryParse(Console.ReadLine(), out int userNumber); |
| if (isCorrect) |
| return Math.Abs(userNumber); |
| Console.WriteLine(errorMessage); |
| > |
| > |
| void CreateArray(int[,] array) |
| < |
| for (int i = 0; i < array.GetLength(0); i++) |
| < |
| for (int j = 0; j < array.GetLength(1); j++) |
| < |
| array[i, j] = new Random().Next(range); |
| > |
| > |
| > |
| void WriteArray(int[,] array) |
| < |
| for (int i = 0; i < array.GetLength(0); i++) |
| < |
| for (int j = 0; j < array.GetLength(1); j++) |
| < |
| Console.Write(array[i, j] + "\t"); |
| > |
| Console.WriteLine(); |
| > |
| > |
| void MatrixMultiplication(int[,] Matrix1, int[,] Matrix2, int[,] resultMatrix) |
| < |
| for (int i = 0; i < resultMatrix.GetLength(0); i++) |
| < |
| for (int j = 0; j < resultMatrix.GetLength(1); j++) |
| < |
| int sum = 0; |
| for (int k = 0; k < Matrix1.GetLength(1); k++) |
| < |
| sum += Matrix1[i, k] * Matrix2[k, j]; |
| > |
| resultMatrix[i, j] = sum; |
| > |
| > |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| int[,] resultMatrix = new int[a, c]; // число строк первой матрицы должно быть равно числу столбцов 2й матрицы |
| MatrixMultiplication(Matrix1, Matrix2, resultMatrix); |
| Console.WriteLine($"\nПроизведение первой и второй матриц:"); |
| WriteArray(resultMatrix); |
| void MatrixMultiplication(int[,] Matrix1, int[,] Matrix2, int[,] resultMatrix) |
| < |
| for (int i = 0; i < resultMatrix.GetLength(0); i++) |
| < |
| for (int j = 0; j < resultMatrix.GetLength(1); j++) |
| < |
| int sum = 0; |
| for (int k = 0; k < Matrix1.GetLength(1); k++) |
| < |
| sum += Matrix1[i, k] * Matrix2[k, j]; |
| > |
| resultMatrix[i, j] = sum; |
| > |
| > |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| // Задача 47: |
| // Задайте двумерный массив размером m x n, |
| // заполненный случайными вещественными числами. |
| // m = 3, n = 4. |
| // 0,5 7 -2 0,2 |
| // 1 -3,3 8 9,9 |
| // 8 7,8 -7,1 9 |
| Console.Clear(); |
| Console.Write("Введите количество строк массива: "); |
| int rows = int.Parse(Console.ReadLine() ?? ""); |
| Console.Write("Введите количество столбцов массива: "); |
| int columns = int.Parse(Console.ReadLine() ?? ""); |
| double[,] array = GetArray(rows, columns); |
| Console.WriteLine($"m = |
| PrintArray(array); |
| double[,] GetArray(int m, int n) |
| < |
| double[,] result = new double[m, n]; |
| for (int i = 0; i < m; i++) |
| < |
| for (int j = 0; j < n; j++) |
| < |
| result[i, j] = Convert.ToDouble(new Random().Next(-100, 100)) / 10; |
| > |
| > |
| return result; |
| > |
| void PrintArray(double[,] inArray) |
| < |
| for (int i = 0; i < inArray.GetLength(0); i++) |
| < |
| for (int j = 0; j < inArray.GetLength(1); j++) |
| < |
| Console.Write(inArray[i, j] + "\t"); // применение символа управляющей последовательности \t для вставки горизонтальной табуляции |
| > |
| Console.WriteLine(); |
| > |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| //Задайте двумерный массив размером m×n, |
| //заполненный случайными целыми числами |
| Console.Clear(); |
| Console.Write("Введите количество строк массива: "); |
| int rows = int.Parse(Console.ReadLine() ?? ""); |
| Console.Write("Введите количество столбцов массива: "); |
| int columns = int.Parse(Console.ReadLine() ?? ""); |
| int[,] array = GetArray(rows, columns, 0, 10); |
| PrintArray(array); |
| int[,] GetArray(int m, int n, int minValue, int maxValue) |
| < |
| int[,] result = new int[m, n]; |
| for (int i = 0; i < m; i++) |
| < |
| for (int j = 0; j < n; j++) |
| < |
| result[i, j] = new Random().Next(minValue, maxValue + 1); |
| > |
| > |
| return result; |
| > |
| void PrintArray(int[,] inArray) |
| < |
| for (int i = 0; i < inArray.GetLength(0); i++) |
| < |
| for (int j = 0; j < inArray.GetLength(1); j++) |
| < |
| Console.Write(inArray[i, j] + "\t"); // применение символа управляющей последовательности \t для вставки горизонтальной табуляции |
| > |
| Console.WriteLine(); |
| > |
| > |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Массивы в C (часть 2): многомерные массивы
До этого момента, мы рассматривали только одномерные массивы, то есть, к элементу массива мы обращались через один индекс. Однако, массивы могут быть и двумерными и трехмерными и, даже, n-мерными. Многомерные массивы — это массивы, у которых есть более одного индекса. Вместо одной строки элементов, многомерные массивы можно рассматривать как совокупность элементов, которые распределены по двум или более измерениям. Вот так, например, можно визуализировать двумерный массив:
В этом примере изображен двумерный массив размером 3*5, 3 — строки и 5 столбцов. Объявление двумерного массива почти ничем не отличается от объявления одномерного, за исключением того, что при объявлении двумерного массива, нужно указывать размер каждого измерения в квадратных скобочках. Например, давайте объявим двумерный массив размером 8*8, это размер поля для стандартных шашек — 8 строк и 8 столбцов:
То есть, двумерный массив хорошо подходит для хранения информации на шашечном поле. Также двумерный массив можно легко использовать для хранения информации о любой другой игре — шахматы, крестики нолики, сапер и т. д. Чтобы получить доступ к любому элементу такого массива, нужно воспользоваться двумя значениями — индексами, первый индекс — это номер строки, а второй — номер столбца. Все выше сказанное относится и к n-мерным массивам. Хотя, уже 4-х мерные массивы сложновато визуализировать. Присваивать значения элементам массива очень просто, вот пример:
Пример присваивания значения элемента двумерного массива:
В этом примере мы присвоили значение 10 элементу двумерного массива myArray , который находится во второй строке и в 4-м столбце. Визуально это выглядит так:
Как видите, все просто, главное помните, что нумерация строк и столбцов всегда начинается с 0. То есть, я еще раз хочу вам напомнить, что вы никогда не должны пытаться записать данные после последнего элемента массива, например, когда у вас есть массив размером — 10 элементов и вы пытаетесь присвоить значение элементу с индексом [10]. Память для массива была выделена только для десяти элементов, (индексы от 0 до 9), поэтому элемента с индексом 10 просто не существует. В таком случае, запись в оперативной памяти может привести к непредсказуемым последствиям — например, вы можете в конечном итоге испортить работу параллельно запущенной программы. Однако, как правило, операционная система не позволит такого рода безрассудное поведение и приведет к краху программы, если та попытается получить доступ к нераспределенной памяти.
Давайте рассмотрим практический пример использования массивов в программах:
Сразу смотрим результат работы программы:
В этом примере, мы сначала заполняем двумерный массив произведением его индексов, строки 8 — 11. А потом выводим на экран его содержимое, строки 13 — 20.
Если вы хотите объявить указатель на массив, то вы не должны использовать операцию взятия адреса — & , вот пример:
В то время как с обычными переменными, этого сделать нельзя, пример:
На первый взгляд, тот факт, что массивы работают как указатели, может запутать вас, но это специфика языка программирования, это нужно просто запомнить.
11. Двумерныемассивы в c#. Виды двумерных массивов и способы их определения. Способы создания двумерных массивов. Вывод матриц на экран по строкам.
Двумерные массивы. Двумерный массив — это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор однотипных данных, имеющий общее имя, доступ к элементам которого осуществляется по двум индексам. Наглядно двумерный массив удобно представлять в виде таблицы, в которой n строк и m столбцов, а под ячейкой таблицы, стоящей в i-й строке и j-м столбце понимают некоторый элемент массива a[i,j].
Рассмотрим простейший многомерный массив – двумерный или прямоугольный. При его объявлении в [ ] через запятую указывается размер массива для каждого измерения. Объявим, например, матрицу 1020 целых чисел:
int [,] Matrix = new int[10,20]; // Создаётся ссылочная переменная двумерного массива
Виды двумерных массивов: прямоугольные и квадратные.
Двумерный квадратный массив — это массив в каждой строке которых одинаковое число столбцов. Он инициализируется так: string [,] (двумерный массив строк). Второй вид — прямоугольные массивы. Каждый ряд этого массива может содержать различное число столбцов. При создании нервных массивов на самом деле формируется массив массивов
Способы создания элементов двумерного массива:
Способ №1. Инициализация элементов массива константами в момент его создания. Список инициализаторов каждой строки нужно заключать в свои фигурные скобки:
Способ №2. Ввод элементов массива с клавиатуры. (Привести пример самостоятельно.)
Способ №3. Генерация элементов массива случайным образом. (Привести пример самостоятельно.)
Способ №4. Алгоритмическое задание элементов.
Пример: заполним матрицу 34 числами от 1 до 12
public static void Main()
int [,] Matr1 = new int [3,4];
for (i = 0; i < 3; i + +)
for (j = 0; j < 4; j + 4)
Matr1 [i,j] = (i*4) + j + 1;
Console. Write(Matr1 [i,j] + “”);
Вывод матриц на экран по строкам. Реализовать построчный вывод на экран можно с помощью такого вида программного кода:
for (kk = 0; kk < n; kk++)
12. Структуры в c#. Создание структур. Массивы структур.
Структуры, как и классы, используются как контейнерные типы данных, т.е. содержат данные разных типов. В отличии от Pascal в структурах есть не только поля(переменные разного типа), а и конструктуры, константы, свойства, методы… т. е. структуры поддерживают основные возможности классов. Структуры во многом схожи с классами.
Но классы — ссылочные типы данных и поэтому только ссылаются на данные, которые в них хранятся.
Структуры хранят действительные значения, поэтому не рекамендуется создавать объемные структуры, с множеством полей. В таком случаи нужно разрабатывать классы.
Объявление структуры: с помощью слова struct Имя < //тело структуры >
Рассмотрим пример использования структуры для хранения информации о книге.
// До Main()
public string author;
public string title;
public int pages;
public string izdat;
// Создание структуры:
book3. author= «Э. Троелсен»;
book3. title= «Язык программирования С# 2005 и платформа .NET»;
book3. izdat=»Санкт-Питербург — Москва – Киев изд. дом «Вильямс»»;
// Метод, который выводит содержимое структуры на экран:
public void Show()
Console.WriteLine(“Автор ” + author + “, заголовок “ + title + “, издательство “ + izdat + “, количество страниц ” + pages);
//Создание массив структур:
Console. WriteLine(“Введите количество книг”) ;
n = Int32. Parse(Console.ReadLine());
Book [ ] mas = new Book [n];
for (i = 0; i < mas. Length; i + +)
Console. WriteLine(“Введи информацию об ” + i + “ книге!”);
mas [i]. author = Console.ReadLine();
mas [i]. title = Console.ReadLine();
mas [i]. izdat = Console.ReadLine();
mas [i] . pages = Console.ReadLine();
//Содержимое массив структур:
Console. WriteLine(“Содержимое массива:”);
for (i = 0; i < n; i + +)
Одну структуру можно присваивать другой: book2= book3; При этом создается копия объекта-структуры.
Структуры не могут наследовать другие структуры или классы. Структуры не могут использоваться в качестве базовых для других структур или классов. Однако, подобно другим С#-типам, структуры наследуют класс Оbject . Структура может реализовать один или несколько интерфейсов.