Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Контролирующий код C#
Трехмерные массивы
Приведем пример, из которого все ясно
// Файл Program.cs using System; class MyClass { public MyClass() { // Настройка консоли Console.Title = "Трехмерный массив 5x4x3"; Console.ForegroundColor = ConsoleColor.White; Console.CursorVisible = false; // Работа с трехмерным массивом const int ROWS = 5, COLUMNS = 4, DEPTH = 3;// Границы int[, ,] array = new int[ROWS, COLUMNS, DEPTH];// Создание // Наполнение int count = 1; for (int i = 0; i < ROWS; i++) for (int j = 0; j < COLUMNS; j++) for (int k = 0; k < DEPTH; k++) array[i, j, k] = count++; // Печать for (int i = 0; i < ROWS; i++) { string strTab = "";// Сбрасываем сдвиг для новой строки for (int k = 0; k < DEPTH; k++)// Выборка глубины { string str = ""; for (int j = 0; j < COLUMNS; j++) { str += String.Format("a[{0},{1},{2}]={3, -6}", i, j, k, array[i, j, k]); } Console.WriteLine(strTab + str);// Строка в глубину strTab += " ";// Сдвиг 3 пробела } Console.WriteLine(); } } } class Program { static void Main() { new MyClass();// Чтобы сработал конструктор // Для задержки консольного окна Console.ReadLine(); } }
Зубчатый двумерный массив
Предыдущие двумерные массивы можно сравнить с прямоугольной матрицей, все строки которой имеют одинаковое число элементов, трехмерный с кубом и т.д. Такие массивы можно назвать прямоугольными. Свойство Length определяет общее количество элементов, которое может хранить прямоугольный массив.
Но язык C# поддерживает также двумерные массивы, в которых строки могут содержать разное количество элементов. Такие массивы называются зубчатыми (или ломаный, рваный ). Зубчатый ( jagged ) двумерный массив представляет собой матрицу со строками разной длины. Зубчатые массивы используются редко, но в некоторых случаях они могут дать красивый экономный код.
Зубчатые массивы создаются в два этапа:
- Сначала создается шаблон с фиксированным количеством строк по следующему синтаксису тип[][] имя = new тип[размер][];
- Затем для каждой строки создается одномерный массив того же типа с заданным количеством элементов
В зубчатом двумерном массиве имеется два свойства Length. Если это свойство применить к самому массиву, то оно означает количество строк. Если его применить к отдельной строке, то оно будет означать длину этой строки.
// Файл Program.cs using System; class MyClass { public MyClass() { // Настройка консоли Console.Title = "Зубчатый массив"; Console.ForegroundColor = ConsoleColor.White; Console.CursorVisible = false; // Работа с зубчатым массивом const int ROWS = 4; // Количество строк int[][] jagged = new int[ROWS][]; // Создание шаблона // Создание элементов строк как одномерных массивов jagged[0] = new int[3]; jagged[1] = new int[1]; jagged[2] = new int[4]; jagged[3] = new int[2]; // Наполнение значениями int count = 1; for (int row = 0; row < jagged.Length; row++) for (int col = 0; col < jagged[row].Length; col++) jagged[row][col] = count++; // Печать Console.WriteLine("Первый зубчатый массив"); print(jagged);// Вызов вспомогательной функции Console.WriteLine();// Новая пустая строка // К прежней ссылке цепляем новый зубчатый массив // Старый массив остается неадресуемым // и становится добычей сборщика мусора GC jagged = new int[][] // Шаблон и инициализация { new int[]{1, 2, 3, 4, 5}, new int[]{6, 7, 8}, new int[]{9, 10, 11, 12}, new int[]{13}, new int[]{14, 15, 16, 17, 18, 19, 20} }; // Печать Console.WriteLine("Второй зубчатый массив"); print(jagged);// Вызов вспомогательной функции Console.WriteLine();// Новая пустая строка // Использование цикла foreach для перебора // всех элементов массива в порядке их следования Console.WriteLine("Перебор с помощью foreach"); for (int row = 0; row < jagged.Length; row++) { foreach (int elem in jagged[row]) Console.Write("{0, -4}", elem); Console.WriteLine(); } } // Закатали в метод, т.к. код повторяется private void print(int[][] jagged) { for (int row = 0; row < jagged.Length; row++) { string str = ""; for (int col = 0; col < jagged[row].Length; col++) str += String.Format("{0, -4}", jagged[row][col]); Console.WriteLine(str); } } } class Program { static void Main() { new MyClass();// Чтобы сработал конструктор // Для задержки консольного окна Console.ReadLine(); } }
Поскольку массивы - ссылочные типы, то присвоение одного массива другому ведет к созданию ссылок-псевдонимов на одну и ту же область памяти с содержимым самого массива. Чтобы действительно получить копию массива, можно воспользоваться статическим методом Array.Copy() или объектным методом array.CopyTo().