
- •1.Язык Object Pascal. Алфавит языка. Операторы. Выражения. Структура программы.
- •2. Простые типы данных. Преобразование типов. Приведение типов. Составной оператор.
- •3. Управляющие конструкции языка.
- •3.1 Безусловные конструкции
- •3.2 Условные конструкции.
- •3.3 Циклические конструкции.
- •4. Комментарии в крограммах. Директивы.
- •5. Структурные типы данных.
- •5.3 Записи.
- •6. Подрограммы.
- •6.1 Процедуры и функции. Состав. Синтаксис.
- •6.2 Список формальных параметров.
- •6.3 Параметры-значения. Параметры-переменные. Параметры-константы. Нетипизированные параметры.
- •6.4 Передача массивов в подпрограммы. Параметры типа открытый массив.
- •6.5 Локальные переменные. Область видимости. Время жизни.
- •6.6 Рекурсия. Виды рекурсии. Опережающее описание подпрограмм.
- •6.7 Процедурные типы
- •7. Модули
- •7.1 Назначение. Синтаксис.
- •8. Файлы
- •8.1 Общий алгоритм работы с файлом.
- •8.2 Подпрограммы для открытия файла.
- •8.3 Типизированные файлы. Режимы доступа к файлу. Переменная Filemode.
- •8.4 Обработка ошибок ввода-вывода.
- •8.5 Нетипизированные файлы.
- •8.6 Текстовые файлы
- •9. Динамическая память и указатели.
- •9.1 Указатель. Синтаксис. Допустимые операции.
- •9.2 Типизированные и нетипизированные указатели.
- •9.3 Операция резадресации (разыменования) указателя. Операции взятия адреса. Пустой указатель.
- •10. Типы с управляемым временем жизни.
- •10.1 Длинные строки. Механизм подсчета ссылок.
- •12.2 Динамические массивы.
- •11. Динамические структуры данных. Связные списки. Вставка и удаление узлов.
- •11.1 Односвязные списки. Структура. Особенности обработки.
- •11.2 Двусвязные списки
- •11.3 Кольцевые списки.
- •12. Отладка программ.
- •12.1 Виды программных ошибок.
- •12.2 Отладка программ.
- •12.3 Принципы контрактного программирования.
- •12.4 Принципы модульного тестирования.
- •12.5 Трассировка. Точки контрольного останова
- •12.6 Ведение протокола программы.
- •12.8 Основные принципы оформления исходного кода программы.
- •13. Алгоритмы
- •13.1 Алгоритм последовательного поиска.
- •13.2 Алгоритм бинарного поиска.
- •13.3 Алгоритм интерполирующего поиска.
- •13.4 Алгоритм вставки элемента в отсортированный массив.
- •13.5 Алгоритм поиска минимального (максимального) элемента массива.
- •13.6 Алгоритм пузырьковой сортировки.
- •13.7 Алгоритм сортировки перемешиванием.
- •13.8 Алгоритм сортировки прочесыванием.
- •13.9 Алгоритм сортировки методом выбора.
- •13.10 Алгоритм сортировки методом вставок.
- •13.11 Алгоритм сортировки методом Шелла.
- •13.12 Алгоритм сортировки слиянием.
- •13.13 Алгорим быстрой сортировки (сортировка Хоара).
13.4 Алгоритм вставки элемента в отсортированный массив.
Если есть необходимость создать и поддерживать в отсортированном виде массив, то существует два варианта решения этой задачи:
•вставлять элементы массив, а затем сортировать его,
•вставлять элемент в массив так, что бы он оставался отсортированным.
Рассмотрим второй вариант. Задача сводится к вычислению положения нового элемента в отсортированном массиве. После определения позиции элемент просто вставляется. Для вычисления позиции для вставки можно использовать один из рассмотренных выше алгоритмов поиска. Учитывая то, что массив отсортирован разумно использовать быстрый бинарный (или интерполяционный) поиск для поиска места вставки.
13.5 Алгоритм поиска минимального (максимального) элемента массива.
Сортировка это упорядочение данных в соответствии с заданными критериями. С данными удобнее работать если они отсортированы. Например алгоритм бинарного поиска работает гораздо быстрее алгоритма последовательного поиска. Существуют десятки различных видов сортировки. Каждый со своими достоинствами и недостатками. Рассмотрим некоторые простейшие алгоритмы сортировки.
13.6 Алгоритм пузырьковой сортировки.
Работает алгоритм следующим образом, проверяем два соседних элемента если первый элемент больше второго, то переставляем их местами. Продолжаем выполнять выше описанные действия до тех пор пока не будет отсортирован весь массив. В наихудшем случае минимальный элемент будет находится в конце массива. Так как, за одну итерацию элемент перемещается только на одну позицию, то потребуется n-1 итерация для сортировки всего массива в наихудшем случае.
13.7 Алгоритм сортировки перемешиванием.
Сортировка перемешиванием (Шейкерная сортировка) – разновидность пузырьковой сортировки. Анализируя метод пузырьковой сортировки можно отметить два обстоятельства.
Во-первых, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, ее можно исключить из рассмотрения.
Во-вторых, при движении от конца массива к началу минимальный элемент “всплывает” на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо.
Эти две идеи приводят к следующим модификациям в методе пузырьковой сортировки. Границы рабочей части массива (т.е. части массива, где происходит движение) устанавливаются в месте последнего обмена на каждой итерации. Массив просматривается поочередно справа налево и слева направо.
Лучший случай для этой сортировки – отсортированный массив О(n), худший – отсортированный в обратном порядке O(n²).
Наименьшее число сравнений в алгоритме Шейкер-сортировки C=N-1. Это соответствует единственному проходу по упорядоченному массиву (лучший случай).
13.8 Алгоритм сортировки прочесыванием.
Рассмотрим еще один алгоритм улучшающий пузырьковую сортировку – сортировку методом прочесывания. Улучшение алгоритма заключается в том, что меняются местами не два соседних элемента, а два элемента отстоящих друг от друга на некоторое расстояние. При каждом проходе расстояние между элементами уменьшается до тех пор пока не достигнет единицы в этом случае имеет место пузырьковая сортировка. Процесс останавливается после выполнения двух условий: расстояние между элементами стало равным единице и за проход не было выполнено ни одной перестановки элементов. Экспериментально получены следующие оптимальные параметры алгоритма: на каждом проходе необходимо уменьшать расстояние между элементами в 1.3 раза, расстояния 9 и 10 являются не оптимальными.