Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

Int size;

do Console.Write("size = ");

while (!int.TryParse(Console.ReadLine(), out size) || size < 1);

int[,] one = new int[size, size];

for (int i = 0; i < size; i++, Console.WriteLine())

for (int j = 0; j < size; j++)

{

if (i == j) one[i, j] = 1;

Console.Write(one[i, j] + "\t");

}

foreach (int mem in one)

Console.Write(mem+" ");

Console.WriteLine();

Console.WriteLine("one.Length = " + one.Length);

Console.WriteLine("one.Rank = " + one.Rank);

}

}

Результат выполнения программы:

size = 4<ENTER>

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1

one.Length = 16

one.Rank = 2

В программе формируется двумерный массив (экземпляр массивов типа int[,]),

размеры которого определены переменной size. Значение size вводит пользователь.

По умолчанию все элементы массива получают нулевое значение. Во вложенных

циклах диагональным элементам присвоены единичные значения, и выводятся

значения всех элементов. Обратите внимание, как в заголовке внешнего цикла for

используется обращение к методу Console.WriteLine( ) для перехода на новую

строку при выводе. Далее иллюстрируется применение цикла foreach к

многомерному массиву. Перебор значений массива, представляющего матрицу,

выполняется по строкам. (Быстрее изменяется правый индекс.)

В конце программы выведено значение свойства one.Length – это общее

количество элементов в массиве и значение ранга массива "массив:ранг массива" –

ранг равен двум.

7.4. Массивы массивов и непрямоугольные массивы

Как следует из синтаксического определения, при объявлении типа массива

можно задавать несколько спецификаторов размерностей. В стандарте приведён

пример такого типа массивов (с тремя спецификаторами размерностей):

int [ ] [,,][,] – одномерный массив, элементы которого - трёхмерные массивы,

каждый с элементами типа "двумерный массив с элементами типа int". Такой

массив можно рассматривать как массив массивов.

Так как размеры массивов, входящих как элементы в другой массив, могут

быть разными, то массив массивов "массив:массив массивов" в общем случае не

является

"

прямоугольным

"

.

Такие

непрямоугольные

массивы

"массив:непрямоугольные массивы"

в стандарте C# названы jagged array

(зубчатые массивы). Пример из стандарта:

int[ ][ ] j2 = new int[3][ ];

j2[0] = new int[ ] { 1, 2, 3 };

j2[1] = new int[ ] { 1, 2, 3, 4, 5, 6 };

j2[2] = new int[ ] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

Обратите внимание, что с помощью одной операции new невозможно создать

массив массивов. В примере j2 – ссылка на объект типа массив массивов с

элементами типа int. Выражение new int[3][ ] создаёт объект-массив с тремя

элементами типа "ссылка на одномерный массив с элементами типа int". Каждая из

этих ссылок доступна с помощью соответствующего выражения j2[0], j2[1], j2[2].

Однако, вначале значения этих ссылок не определены. Только присвоив каждой из

них результат выражения new int[ ] инициализатор, мы связываем ссылки с

конкретными одномерными массивами, память для которых за счёт выполнения

операции new будет выделена в куче.

Приведённые четыре объявления можно заменить одним, используя правил

а

инициализации (количество операций new при этом не изменится):

int[ ][ ] j3 = new int[3][ ] {

new int[ ] { 1, 2, 3 },

new int[ ] { 1, 2, 3, 4, 5, 6 },

new int[ ] { 1, 2, 3, 4, 5, 6, 7, 8, 9}

};

При объявлении массива массивов как и для других видов массивов можно не

применять инициализаторы, но тогда придётся явно указать размеры массивов, и их

элементы получат умалчиваемые значения.

Применяя

инициализатор,

разрешено

опускать

для

массива

массивов

выражение с операцией new, например, таким образом:

int[ ][ ] j4 = {

new int[3],

new int[6],

new int[9]

};

В этом объявлении размер массива верхнего уровня задан списком

инициализаторов. Размеры массивов нижнего уровня с элементами типа int здесь

заданы явно, и значения элементов определяются по умолчанию как нулевые.

В качестве примера с непрямоугольным (зубчатым) массивом рассмотрим

следующую программу, формирующую нижнюю нулевую треугольную матрицу.

Элементам её диагонали присвоим номера строк (нумерацию будем выполнять,

начиная от 1). Как в примере с единичной матрицей размер матрицы (число её

строк) будет вводить пользователь, как значение переменной int size. Текст

программы:

// 07_06.cs - нижняя треугольная матрица

using System;

class Program

{

static void Main()

{

Соседние файлы в папке CSBasicCourse2ndedPodbelsky