- •Уровни языков программирования
- •Язык c#
- •Переменные и константы
- •Числа без знака
- •Числа со знаком
- •Числа с плавающей точкой
- •Текстовые символы
- •Логический тип данных
- •Выражения и операторы с#
- •Составные операторы
- •Поразрядные операторы
- •Логические операторы
- •Операторы отношения
- •Приоритеты операторов
- •Работа с консолью
- •Преобразование типов
- •Оператор явного преобразования типов
- •Преобразование типов констант
- •Алгоритмизация и решение задач Понятие алгоритма
- •Словесное описание
- •Блок-схема
- •Описание Блоков
- •Псевдокод
- •Реализация алгоритмических конструкций в с# Следование
- •Ветвление
- •Ветвление и условный оператор
- •Вложенные условия
- •Применение логических операций
- •Цикл Пока
- •Цикл Делать-Пока
- •Цикл с параметром
- •Прерывание и возобновление цикла
- •Оператор goto
- •Особые виды циклов
- •Сложные типы данных – массивы чисел и символов Одномерные массивы
- •Использование оператора foreach
- •Типы задач обработки одномерных числовых массивов
- •Многомерные массивы
- •Типы задач обработки двумерных числовых массивов
- •Невыровненные (ступенчатые) массивы
- •Обработка массива символов
- •Работа с текстовыми строками
- •Базовые операции со строками
- •Методы типа string
- •Форматирование текстовых строк
- •Функции
- •Описание и использование функций
- •Возвращаемые значения
- •Передача параметров
- •Массивы параметров
- •Передача параметров по ссылке и по значению
- •Выходные параметры
- •Область действия переменных
- •Глобальные переменные
- •Область действия переменных и управляющие конструкции
- •Рекурсия
- •Структуры
- •Работа с текстовыми файлами
- •Работа с двоичными файлами
Многомерные массивы
Многомерный массив — это объект, в котором для осуществления доступа к его элементам используется несколько индексов.
Двумерный массив объявляется следующим образом:
<базовыйТип>[,] <имя>;
Описания массивов с большим числом размерностей требуют больше запятых.
Для многомерных массивов используется аналогичный одномерным синтаксис, в котором размерности отделяются одна от другой запятыми.
double[,] hillHeight = new double [3,4];
Console.WriteLine(hillHeight[0,0]);
Многомерные массивы также можно инициализировать константами. Для этого необходимо использовать вложенные блоки, взятыми в фигурные скобки и разделенными запятыми. Например:
double[,] hillHeight = new {{1, 2, 3, 4 }, {2, 3, 4, 5 }, {3, 4, 5, 6}};
Для обработки элементов многомерного массива необходимо изменять каждый из индексов. Поэтому при работе с многомерными массивами постоянно приходится использовать вложенные циклы.
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 10; j++)
{
a[i,j]=j;
}
}
Типы задач обработки двумерных числовых массивов
Обработка двумерных массивов по строкам
Обработка двумерных массивов по столбцам
Удаление строк или столбцов двумерного массива
Вставка строк или столбцов в двумерный массив
Квадратные матрицы и их обработка
Невыровненные (ступенчатые) массивы
Многомерные массивы, обсуждавшиеся в предшествующем разделе, обычно называются прямоугольными, поскольку у них каждая "строка" имеет один и тот же размер.
Однако существует возможность использовать ступенчатые (невыровненные) массивы, у которых "строки" могут быть неодинакового размера. Для этого требуется массив, каждым элементом которого также является массив. При желании можно использовать массивы массивов массивов и даже более сложные конструкции. Однако это оказывается возможным только в том случае, если все массивы имеют один и тот же базовый тип.
Синтаксис, применяемый для объявления массивов массивов, подразумевает использование в объявлении массива нескольких пар квадратных скобок, например:
int[][] sArray;
К сожалению, инициализация подобных массивов оказывается не таким простым делом, как инициализация многомерных массивов.
Можно сначала инициализировать массив, содержащий другие массивы (чтобы избежать путаницы, мы будем называть вложенные массивы подмассивами), а затем, в свою очередь, инициализировать эти подмассивы:
sArray - new int[2][];
sArray [0] = new int[3];
sArray [1] = new int[4];
Для таких неоднородных массивов можно использовать циклы foreach, однако чаще всего вложенные циклы применяются для того, чтобы получить доступ к реальным данным. Например, допустим, что имеется следующий неоднородный массив, который включает в себя десять других массивов, каждый из которых содержит целые значения, являющиеся делителями целых чисел из диапазона от 1 до 10:
int[][] divisorslTol0 = {new int[] {1},
new int[] {1, 2},
new int[] {1, 3},
new int[] {1, 2, 4},
new int[] {1, 5},
new int[] {1, 2, 3, 6},
new int[] {1, 7},
new int[] {1, 2, 4, 8},
new int[] {1, 3, 9},
new int[] {1, 2, 5, 10}};
Поэтому нам придется проходить не только по самому массиву, но и непосредственно по каждому подмассиву:
foreach (int[] divisors in divisorslTol0)
foreach (int divisor in divisors)
{
Console.WriteLine(divisor);
}
