Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C# Лекция_6 Массивы.docx
Скачиваний:
55
Добавлен:
18.12.2018
Размер:
813.6 Кб
Скачать

Основы программирования на С# 3.0: ядро языка

6. Лекция: Массивы

Многое о массивах – динамических и статических, одномерных и многомерных, массивах массивов – все это обсуждается в данной лекции. Большая часть лекции посвящена применению массивов при решении классических задач.

1.Общий взгляд 2

2.Объявление массивов 2

2.1.Объявление одномерных массивов 3

2.2.Динамические массивы 5

3.Многомерные массивы 6

4.Массивы массивов 8

5.Процедуры и массивы 11

6.Алгоритмы и задачи 11

6.1.Ввод-вывод массивов 12

6.1.1.Ввод-вывод массивов в Windows-приложениях 13

6.1.1.1.Организация ввода-вывода двумерных массивов 16

6.1.2.Элемент управления DataGridView и отображение массивов 17

6.1.3.Задачи (ввод, вывод и другие простые задачи с массивами) 23

6.2.Массивы и классические алгоритмы математики 25

6.2.1.Полиномы 25

6.2.1.1.Исследование интервала 26

6.2.1.2.Алгоритмы нахождения корня полинома 27

6.2.1.3.Схема дихотомии отрезка (деление пополам) 27

6.2.1.4.Метод простой итерации 27

6.2.1.5.Метод Ньютона 27

6.2.2.Понижение степени полинома 28

6.2.3.Нахождение коэффициентов полинома по его корням 28

6.2.4.Полином Лагранжа 30

6.2.5.Сложение и умножение полиномов 31

6.2.6.Итоги 33

6.2.7.Задачи 34

6.2.8.Проект 35

6.2.9.Алгоритмы линейной алгебры 35

6.2.9.1.Квадратные матрицы 37

6.2.9.2.Системы линейных уравнений 38

6.2.9.3.Алгоритм Гаусса 39

6.2.9.4.Интерполяционный полином, определитель Вандермонда и обусловленность матриц 42

6.2.10. Проект 43

  1. Общий взгляд

Массив задает способ организации данных. Массивом называют упорядоченную совокупность элементов одного типа. Каждый элемент массива имеет индексы, определяющие порядок элементов. Число индексов характеризует размерность массива. Каждый индекс изменяется в некотором диапазоне [a,b]. В языке C#, как и во многих других языках, индексы задаются целочисленным типом. В других языках, например, в языке Паскаль, индексы могут принадлежать счетному конечному множеству, на котором определены функции, задающие следующий и предыдущий элемент. Диапазон [a,b] называется граничной парой, a - нижней границей, b - верхней границей индекса. При объявлении массива границы задаются выражениями. Если все границы заданы константными выражениями, то число элементов массива известно в момент его объявления и ему может быть выделена память еще на этапе трансляции. Такие массивы называются статическими. Если же выражения, задающие границы, зависят от переменных, то такие массивы называются динамическими, поскольку память им может быть отведена только динамически в процессе выполнения программы, когда становятся известными значения соответствующих переменных. Массиву, как правило, выделяется непрерывная область памяти.

В языке C# снято существенное ограничение языка C++ на статичность массивов. Массивы в языке C# являются динамическими. Как следствие этого, напомню, массивы относятся к ссылочным типам, память им отводится динамически в "куче". К сожалению, не снято ограничение 0-базируемости, означающее, что нижняя граница массивов C# фиксирована и равна нулю. Было бы гораздо удобнее во многих задачах иметь возможность работать с массивами, у которых нижняя граница изменения индекса не равна нулю.

В языке C++ "классических" многомерных массивов нет. Здесь введены одномерные массивы и массивы массивов. Последние являются более общей структурой данных и позволяют задать не только многомерный куб, но и изрезанную, ступенчатую структуру. Однако использование массива массивов менее удобно, и, например, классик и автор языка C++ Бьерн Страуструп в своей книге "Основы языка C++" пишет: "Встроенные массивы являются главным источником ошибок - особенно когда они используются для построения многомерных массивов. Для новичков они также являются главным источником смущения и непонимания. По возможности пользуйтесь шаблонами vector, valarray и т. п.".

Шаблоны, определенные в стандартных библиотеках, конечно, стоит использовать, но все-таки странной является рекомендация не пользоваться структурами, встроенными непосредственно в язык. Замечу, что в других языках массивы являются одной из любимых структур данных, используемых программистами.

В языке C#, соблюдая преемственность, сохранены одномерные массивы и массивы массивов. В дополнение к ним в язык добавлены многомерные массивы. Динамические многомерные массивы языка C# являются весьма мощной, надежной, понятной и удобной структурой данных, которую смело можно рекомендовать к применению не только профессионалам, но и новичкам, программирующим на C#. После этого краткого обзора давайте перейдем к более систематическому изучению деталей работы с массивами в C#.