- •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 Алгорим быстрой сортировки (сортировка Хоара).
6.2 Список формальных параметров.
В общем виде список формальных параметров имеет следующий вид:
<элемент>; <элемент>; ...
где каждый элемент описывается следующим образом
<тип параметра> <id>, <id>, ... :<тип>
где <тип параметра> – способ передачи параметра в подпрограмму (var, const или out);
<id> – идентификатор формального параметра;
<тип> – тип параметра, любой тип Object Pascal.
Любой из формальных параметров может быть либо параметром-значением, либо параметром-переменной, либо параметром-константой.
При вызове подпрограммы список формальных параметров заменяется списком фактических параметров. Список фактических параметров может содержать идентификаторы не совпадающие с идентификаторами списка формальных параметров. Существенны только два ограничения наложенных на список фактических параметров, а именно:
• порядок следования типов списка формальных и списка фактических параметров должны совпадать;
• число формальных и фактических параметров должно совпадать.
6.3 Параметры-значения. Параметры-переменные. Параметры-константы. Нетипизированные параметры.
Если тип формального параметра не указан, то параметр считается параметром-значением. Особенностью параметров-значений является то, что в подпрограмму передается не сам параметр, а его копия. Параметры-значения нечувствительны к изменению их внутри подпрограммы, т.е. если параметр будет изменен внутри подпрограммы, то он останется неизменным вне подпрограммы.
Для определения параметра как параметра-переменной необходимо использовать зарезервированное слово var, например:
procedure TestProc(var a, b, c:integer);
В отличие от параметров-значений параметры-переменные передаются внутрь подпрограммы. Таким образом при изменении такого параметра в теле подпрограммы он изменяется и вне подпрограммы. Отсюда следует область применения таких параметров – их применяют в случае когда необходимо получить результат работы подпрограммы. Кроме того следует иметь ввиду, что в качестве фактических параметров-переменных подпрограммы можно использовать только переменные.
Для увеличения надежности подпрограмм были введены параметры-константы. Механизм передачи таких параметров такой же как и параметров-переменных, т. е. передается адрес переменной, но компилятор строго следит за тем чтобы внутри подпрограммы данный параметр не изменялся. Для определения параметра-константы необходимо использовать зарезервированное слово const, например
procedure TestProc(const a:integer; b, c:integer);
Параметр считается нетипизированным, если его тип не указан в заголовке подпрограммы. Нетипизированными могут быть только параметры переменные. Например:
procedure SendBuffer(var Buf);
Нетипизированные параметры используются в случае, если тип данных передаваемых в подпрограмму не существенен.
6.4 Передача массивов в подпрограммы. Параметры типа открытый массив.
При передаче в качестве формальных параметров массивов существуют определенные ограничения. Для передачи массива в качестве формального параметра сначала необходимо объявить соответствующий тип, а затем указать в списке формальных параметров параметр созданного типа, например
type TVector=array [1..3] of real;
function DotProduct(a, b:TVector):real;
Кроме того, Object Pascal поддерживает так называемые открытые массивы, которые служат для разрешения проблемы передачи одномерных массивов.
Открытый массив представляет собой формальный параметр подпрограммы и имеет следующий синтаксис
<id>, <id>: array of <тип>
Внутри подпрограммы такой массив трактуется как одномерный массив с нулевой нижней границей. Верхняя граница может быть определена с помощью функции High. Например выше описанную функцию можно определить как:
function DotProduct(a, b: array of real):real;
