Добавил:
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[ ][ ] tre = new int[size][];

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

)

{

tre[j] = new int[j + 1];

tre[j][j] = j + 1;

}

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

for (int j = 0; j < tre[i].Length; j++)

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

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

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

}

}

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

size = 4<ENTER>

1

0 2

0 0 3

0 0 0 4

tre.Length = 4

tre.Rank = 1

В программе объявлена ссылка tre на массив массивов. Операцией new

определён массив из size элементов – ссылок на массивы. Каждый элемент tre[j] –

ссылка на ещё не существующий одномерный массив с элементами типа int. Эти

массивы – реальные строки треугольной матрицы – формируются в цикле. Длина j–

го массива равна j+1.

В цикле печати массива для определения числа элементов используется

свойство Length. Выражение tre.Length возвращает число строк матрицы. Обратите

внимание, что в отличие от многомерного массива свойство Length равно числу

элементов только "верхнего" уровня массива массивов. tri[j].Length позволяет

определить длину j-й строки. Свойство Rank, относящееся к объекту типа int[ ][ ],

равно 1, т.к. это одномерный массив ссылок на массивы "массив:массив ссылок на

массивы" . Остальное очевидно из результатов выполнения программы.

Вводя ссылку на массив и объявляя конкретный объект – экземпляр массива,

программист каждый раз определяет некоторый тип именно таких массивов,

которые ему нужны. Синтаксис объявления этих типов мы уже разобрали и

объяснили с помощью примеров. Следует обратить внимание, что имена этих типов

массивов и синтаксис определения типов массивов не похожи на те конструкции,

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

(вводимых с помощью служебного слова class). Однако, каждый декларируемый в

программе тип массивов является настоящим классом и создаётся как производный

(как наследник) системного класса

Array. Будучи наследником, каждый тип

массивов получает или по-своему реализует методы и свойства класса Array.

Следующая программа иллюстрирует возможности некоторых методов, о которых

мы ещё не говорили.

// 07_07.cs – методы и свойства класса Array

using System;

class Program

{

static void Main()

{

double[,] ar = {

{ 10, -7, 0, 7},

{ -3, 2.099, 6, 3.901},

{ 5, -1, 5, 6},

};

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

Console.WriteLine("ar. = " + ar.GetUpperBound(1);

Console.WriteLine("ar.GetLength(1) = " + ar.GetLength(1));

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

for (int j = 0; j <= ar.GetUpperBound(1); j++)

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

}

}

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

ar.Rank = 2

ar.GetUpperBound(1) = 3

ar.GetLength(1) = 4

10 -7 0 7

3 2,099 6 3,901

5 -1 5 6

В программе определён и инициализирован двумерный массив с элементами

типа double. Результаты выполнения программы поясняют особенности свойств

и

методов типа массивов, производного от класса Array. Обратите внимание, что

GetUpperBound(1) – верхняя граница второго индекса, а не количество значений

этого индекса.

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