
- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
Директивы подпрограмм
Директивы дают дополнительную информацию транслятору о размещении подпрограмм.
Директива FORWARD
Директивы FAR и NEAR
Как правило, компилятор Turbo Pascal автоматически выбирает адресацию к подпрограмме. Например, если подпрограмма находится в одном файле с основной программой, то она компилируется с "ближним" (near) адресом входа и возврата, состоящим только из смещения в текущем сегменте, а если она находится в модуле, то формируется "дальний" (far) адрес, состоящий из адреса сегмента и смещения.
Так, например, если подпрограмма используется для переменных процедурного типа, она независимо от своего расположения должна компилироваться с получением "дальнего" адреса.
Реже используется директива near, которая сообщает компилятору, что подпрограмму следует компилировать с получением именно такого адреса. Эта директива эквивалентна ключу компилятора {$F-}, который выбирается по умолчанию. Действие директивы распространяется только на одну подпрограмму.
Директива EXTERNAL
Директива external позволяет использовать в программе подпрограммы, написанные на языке ассемблера и скомпилированные отдельно. Эти подпрограммы должны быть скомпонованы с основной программой, используя ключ {$L <имя файла>}. Здесь имя файла - имя того файла (с расширением .OBJ), в котором находятся скомпилированные объектные модули подпрограмм, написанных на языке ассемблера.
Директива ASSEMBLER
Директива assembler позволяет написать подпрограмму полностью на языке ассемблера. При этом во время компиляции подпрограмма будет автоматически скомпилирована встроенным ассемблером пакета Turbo Pascal. При отладке такой подпрограммы можно использовать встроенный отладчик пакета.
Директива INLINE
Директива позволяет включить в текст программы команды, записанные непосредственно в машинных кодах. В отличие от других подпрограмм подпрограмма с директивой inline непосредственно добавляется всюду, где есть ее вызов (фактически она является макроопределением). Такие подпрограммы могут иметь параметры, которые можно использовать в тексте подпрограммы, получая их из стека.
Машинные коды в процедуре записываются в круглых скобках побайтно через прямой слэш (/).
Директива INTERRUPT
Директива interrupt предназначена для процедур, обрабатывающих прерывания. Такие процедуры имеют стандартный заголовок:
procedure IntHandler(Flags, CS, IP, AX,
BX, CX, DX, SI, DI, DS, ES, BP: Word); interrupt;
begin
…
end;
В заголовке отдельные параметры можно опускать (но только с начала списка), промежуточные параметры удалять нельзя, например:
procedure IntHandler(DI, ES, BP: Word); interrupt;
{неправильный заголовок}
procedure IntHandler(DI, DS, ES, BP: Word); interrupt;
{правильный заголовок}
Нельзя в заголовке процедуры обработки прерываний записывать и какие-либо другие параметры.
Отладка и тестирование программ, содержащих подпрограммы
Практикуются два вида тестирования: нисходящее тестирование и восходящее тестирование. При тестировании программы и ее подпрграмм обычно не обойтись без комбинации этих методов.
Нисходящее тестирование и подпрограммы-заглушки
Независимо от того, как создается программная система (основная программа, в которой имеются подпрограммы), программистом-одиночкой или коллективом программистов, не все подпрограммы обычно бывают готовы одновременно. Тем не менее и при этих условиях возможно выполнить тестирование обмена управляющими сигналами между основной программой и ее подпрограммами первого уровня, а также тестирование и отладку уже готовых программ. Процесс тестирования обмена управляющими сигналами между основной программой и ее подпрограммами называется нисходящим тестированием.
Поскольку для выполнения тестирования основная программа нуждается во всех подпрограммах первого уровня, отсутствующие пока подпрограммы необходимо заменить т.н. подпрограммами-заглушками (stub). Заглушка состоит; головка процедуры или функции, за которым следует тело, содержащее минимум операторов. Эти операторы должны выводить сообщение о выполнении по программы, а также присваивать простые значения любым выходным данным.