- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
Использование отладчикадля трассировки процедур
В качестве альтернативы отображению начальных значений входных (и входа-выхода) параметров процедуры с использованием специальных отладочным операторов, для получения соответствующей информации можно воспользоваться отладчиком Turbo Pascal и его возможностью трассировки Trace into (<F7>). Если оператор, который должен быть выполнен следующим, представляет собой оператор вызова процедуры, нажатие клавиши <F7> обеспечит вход в эту процедуру. В результате в окне редактора появится тело этой процедуры с указателем выполнения на слове begin. Если вы укажете параметры процедуры как переменные для наблюдения, исходные значения этих параметров появятся в окне Watch. Затем, с выполнением каждого оператора процедуры (для этого каждый раз требуется . нажимать клавишу <F7>), любое новое значение, присвоенное выходному параметру или параметру входа-выхода, будет отображено в окне Watch.
После того как процедура возвратит управление основной программе, вы можете воспользоваться отладчиком чтобы выяснить, какие значения были возвращены в программу. На этот раз в качестве переменных для наблюдения следует указать все фактические параметры, которые соответствуют выходным параметрам или параметрам входа-выхода. В результате значения, возвращенные процедурой, окажутся отображены в окне Watch.
Область действия идентификаторов и переменные в окне Watch
Значения, отображаемые в окне Watch, определяются с использованием обычных правил области действия имен для Pascal-идентификаторов. Соответственно, явные переменные и формальные параметры процедуры будут помечены как Unknown identifier (Неизвестный идентификатор), пока не начнется выполнение данной процедуры. А по выходе из процедуры, ее локальные переменные и формальные параметры снова станут "неизвестными идентификаторами".
Запуск внешних программ
Обычно форма запуска внешних программ через командную строку имеет вид:
И


мя.ехе
параметр1 параметр 2 ... параметр N

Выполняемая программа Параметры
передаваемые через командную строку
Каждой написанной на Паскале программе можно передавать параметры через командную строку. Параметры при запуске внешней программы записываются в командной строке справа от имени программы через пробел.
Параметры можно передавать не только через командную строку, но и при запуске программы из интегрированной среды, для чего в меню OPTIONS надо указать соответствующее значение (в виде строки) для пункта PARAMETERS.
Чтобы параметры, передаваемые при запуске, воспринимались в вызванной программе, надо предусмотреть в этой программе ответы на следующие вопросы:
1. Сколько параметров передано?
2. Какие параметры переданы?
Ответ на первый вопрос: paramсount - возвращает количество переданных через командную строку параметров. Если справа после имени программы ничего ни указано, то paramсount - вернет значение 0. Когда указано N параметров, то paramcount вернет значение N.
Чтобы узнать, какие конкретно параметры переданы есть другая функция : Paramstr(N). Для каждого (по номеру) значения аргумента, функция возвращает значение параметра в виде строки. Если указать Paramstr(0), то функция в ответ вернет полный путь к программе, записанный по правилам МС ДОС. Paramstr(N) - значение последнего параметра.
Для запуска внешних программ из своей программы надо использовать процедуру ехес:
Ехес (имя программы, параметры);
Модули
Наличие модулей в Turbo Pascal позволяет программировать и отлаживать программу по частям, создавать библиотеки подпрограмм и данных, воспользоваться возможностями стандартных модулей, практически неограниченно увеличивать кодовую (содержащую коды команд) часть программы. Модуль состоит из следующих частей:
заголовок модуля;
интерфейс модуля;
исполнительная часть модуля;
секция инициализации.
Все разделы модуля, за исключением секции инициализации, являются обязательными. Обязательна также указанная последовательность разделов.
Синтаксическая диаграмма:

Заголовок модуля
Заголовок модуля состоит из зарезервированного слова unit и идентификатора. Идентификатор модуля должен быть уникальным. Пример заголовка:
unit MyModule;
Модуль должен быть помещен в файл, имя которого совпадает с именем модуля, а его расширение должно быть .PAS.
Интерфейс модуля
Через интерфейс осуществляется взаимодействие основной программы с модулем (модуля с модулем). В интерфейсе указываются константы, типы, переменные, процедуры и функции, которые могут быть использованы основной программой (модулем) при вызове этого модуля.
Интерфейс начинается словом interface. Далее после слова uses указываются имена модулей, которые используются данным модулем (необязательная часть). После этого могут быть: раздел объявления констант, раздел объявления типов, раздел объявления переменных, раздел объявления процедур и функций. В разделе объявления процедур и функций указываются лишь заголовки подпрограмм. Сами подпрограммы приводятся в исполнительной части.
В интерфейсах различных модулей недопустимо циклическое обращение друг к другу, т. к. компилятор в этом случае не может установить связей.
Синтаксическая диаграмма:

Исполнительная часть модуля
Исполнительная часть включает все подпрограммы модуля. Она может также включать локальные метки, константы, типы и переменные.
Исполнительная часть начинается словом implementation. Затем после слова uses указываются имена модулей, которые используются подпрограммами данной исполнительной части (этот раздел необязателен). Если какой-то модуль уже указан в интерфейсе модуля, то в исполнительной части его повторять не следует. Далее могут быть: раздел объявления меток, раздел объявления локальных констант, раздел объявления локальных типов, раздел объявления локальных переменных. Затем идут описания подпрограмм модуля. При описании подпрограмм допустимо использовать сокращенные заголовки.
В отличие от интерфейсов модулей в исполнительных частях модулей допустимо циклическое обращение друг к другу, т. к. все равно взаимодействие осуществляется через интерфейсы, и здесь не возникает проблемы с установлением необходимых связей.
Синтаксическая диаграмма:

Секция инициализации
В некоторых случаях перед обращением к модулю следует провести его инициализацию (например, установить связь с теми или иными файлами с помощью процедуры Assign, инициализировать какие-то переменные и т. д.). Необходимые действия можно выполнить в секции инициализации модуля. Эта секция начинается словом begin, после которого идут исполняемые операторы, а затем помещается слово end. (с точкой).
Синтаксическая диаграмма:

Пример:
begin
Assign(F1, 'FILE1.DAT')
end.
Следует иметь в виду, что операторы секции инициализации выполняются единственный раз в момент запуска программы.
Если инициализация модуля не нужна, то в секции помещается лишь слово end. (с точкой).
