|
Прошел курс. Получил код 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().

