
- •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.5 Локальные переменные. Область видимости. Время жизни.
Локальные элементы являются необязательными при описании подпрограмм. Они располагаются между заголовком подпрограммы и телом подпрограммы. В качестве локальных элементов могут использоваться переменные, константы, типы, метки, а также другие подпрограммы.
Время существования локальных элементов подпрограммы ограничено временем выполнения тела подпрограммы. После выхода из подпрограммы все локальные элементы уничтожаются.
Область видимости локальных элементов ограничена подпрограммой, включая вложенные подпрограммы, т. е. обращение к любым локальным элементам подпрограмм разрешено в теле подпрограммы и во всех вложенных подпрограммах и запрещено вне данной подпрограммы.
6.6 Рекурсия. Виды рекурсии. Опережающее описание подпрограмм.
Рекурсивной подпрограммой называют подпрограмму которая в своем теле прямо или косвенно вызывает саму себя. Пример использования – вычисление факториала числа.
Прямая рекурсия. Подпрограмма вызывает саму себя в собственном теле. Косвенная рекурсия. Когда одна подпрограмма вызывает вторую, которая, в свою очередь, вызывает первую подпрограмму. Применяется опережающее описание подпрограмм. Для этого необходимо описать заголовок одной из подпрограмм с директивой forward.
6.7 Процедурные типы
Процедурные типы используются как средство передачи процедур и функций в качестве фактических параметров при обращении к другим подпрограммам. Для объявления процедурного типа необходимо описать заголовок подпрограммы процедуры или функции без указания ее имени, например
typeMyProc=procedure;
PrintProc=procedure (a, b:Integer);
Func=function(x:real):real;
varMyProc: procedure;
Как видно из приведенных примеров, существует два вида процедурных типа: тип-процедура
и тип функция.
7. Модули
7.1 Назначение. Синтаксис.
Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты интерфейсного раздела (типы, константы, переменные, подпрограммы) и, возможно, некоторые операторы инициирующего раздела. Объекты описанные в интерфейсной части доступны для других модулей и основной программы. Тела процедур и функций располагаются в разделе реализации модуля и скрыты от пользователя.
Модуль в Object Pascal имеет следующую структуру:
unit <имя_модуля>;
interface
<раздел интерфейса>
implementation
<раздел реализации>
initialization
<раздел инициализации>
finalization
<раздел деинициализации>
end.
<имя_модуля> |
– правильный идентификатор Object Pascal, заголовок модуля; |
interface |
– зарезервированное слово, начинает раздел интерфейса модуля; |
implementation |
– зарезервированное слово, начинает раздел реализации модуля; |
initialization |
– зарезервированное слово, начинает раздел инициализации модуля; |
finalization |
– зарезервированное слово, начинает раздел деинициализации модуля; |
end |
– зарезервированное слово, признак конца модуля. |
Заголовок модуля состоит из зарезервированного слова unit и следующего за ним имени модуля. Имя модуля – правильный идентификатор Object Pascal, совпадающий с именем файла модуля. Например если модуль имеет имя Unit1, то имя файла модуля Unit1.pas.
Для подключения модуля к основной программе или к другому модулю необходимо использовать следующую конструкцию
uses <имя_модуля>, < имя_модуля >, ...;
где uses – зарезервированное слово.
Для подключения модуля к программе необходимо разместить uses сразу после объявления program. Объявление uses может следовать за зарезервированными словами interface, implementation в модулях.
Возможен еще один вариант подключения, с явным указанием положения файла модуля.
uses <имя_модуля> in '<имя файла>', ...;
После in указывается полное или относительное имя файла, например
uses test in 'test.pas'; //в каталоге программы
uses test in 'units\test.pas'; //в подкаталоге units каталога программы
uses test in '..\units\test.pas';//в подкаталоге units, родительского каталога
uses test in 'c:\lib\test.pas';//абсолютный путь
В общем случае компилятор ищет файлы модулей по следующему алгоритму:
если явно указан путь до файла, то проверяется его наличие;
если путь явно не указан, то поиск происходит в следующем порядке:
◦ каталог программы;
◦ каталоги для поиска указанные в настройках среды
В разделе interface содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны стать доступными основной программе и/или другим модулям. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок.
Раздел реализации начинается зарезервированным словом implementation и обязательно содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты – вспомогательные типы, константы, переменные и подпрограммы, а также метки, если они используются в разделе инициализации.
Описанию подпрограммы, объявленной в интерфейсной части модуля, в исполняемой части должен предшествовать заголовок, в котором можно опускать список формальных параметров (и тип результата для функции), так как они уже описаны в интерфейсной части. Но если заголовок подпрограммы приводится в полном виде, т.е. со списком формальных параметров и объявлением результата, он должен совпадать с заголовком, объявленным в интерфейсной части.
В разделе инициализации размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее работы. Например, в них могут инициироваться переменные, открываться нужные файлы и т.д.
В разделе деинициализации размещаются исполняемые операторы, содержащие некоторый фрагмент программы который выполняется в момент окончания работы программы. Инициирующая и завершающая части модуля, если они есть, то при старте программы выполняются инициирующие части всех модулей в порядке их перечисления в заголовке программы (в предложении uses файла проекта). Завершающие части при окончании работы программы выполняются в обратном порядке.