- •1. Структура (состав) языка
- •2. Алфавит
- •3. Лексическая структура языка
- •4. Структура программной единицы
- •5. Стиль записи программ на языке Паскаль
- •6. Типы данных в Паскале
- •6.3 Классификация типов данных в Турбо Паскале
- •6.4 Порядковые типы
- •6.4.2 Булевский (логический) тип
- •Repeat тело_цикла until (логическое_выражение);
- •6.4.3 Целые типы Выделяют целые типы ------------- со знаком – shortint, integer, longint)
- •1 Группа функций:
- •2 Группа функций:
- •3 Группа функций:
- •6.4.4 Перечисляемый тип.
- •6.4.6 Символьный тип
- •6.5 Вещественные типы.
- •7. Выражения в языке Паскаль.
- •10. Вычисление по формулам.
- •10.1 Оператор присваивания .
- •10.2 Характер использования переменных в математике и в программах.
- •10.3 Бесконечности
- •10.4 Нестандартные операции
- •6.6 Строки
- •1) Операции присваивания и сравнения.
- •3) Заполнение строки одним символом
- •4) Стандартные функции и процедуры для работы со строками:
- •5) Подпрограммы преобразования из строкового представления в числовое и наоборот:
- •8. Совместимость и преобразование типов.
- •Совместимость типов
- •8.2 Тип результата арифметических выражений.
- •8.3 Преобразование (приведение) типов и значений.
- •8.3.1 Явное преобразование (приведение) типов.
- •8.3.2 Неявное преобразование или приведение типов.
- •9. Простейший ввод-вывод на Паскале
- •Стандартные файлы Input и Output
- •9.2 Процедуры ввода информации (с клавиатуры.
- •9.3 Процедуры вывода в тр.
- •10. Вычисление по формулам (продолжение)
- •10.6. Уточнение многоместных (n - арных) операций
- •11. Средства языка Паскаль для циклов с известным числом повторений.
- •12. Табулирование функций
- •13. Разветвляющиеся алгоритмы
- •13.1 Таблица ситуаций и команда выбора.
- •13.2 Средства языка Паскаль для программирования разветствляющихся алгоритмов
- •13.4 Описание ситуаций
- •13.5 Запись команды выбора (case) (уточнение таблицы ситуаций) с помощью набора команд ветвления
- •13.6 Запись последовательных команд ветвления в случае, когда соседние зависимые ситуации имеют общие признаки.
- •13.6.1 Восходящий подход
- •13.6.2 Нисходящий подход
- •14. Циклы с неизвестным числом повторений
- •15. Структурированные типы данных. Массивы
- •15.1 Классификация (особенности) структурированных типов данных
- •15. 2. Определение массива
- •15.3 Объявление массива на Турбо Паскале
- •15.4 Хранение элементов массива. Доступ к элементам и частям массива
- •15.5 Уточнение команд обработки массива
- •16. Правила разработки цикла
- •15. 6 Действия над массивами
- •17. Множества.
- •17.1 Множества в Паскале и в математике. Сходства и различия между ними.
- •17.2 Объявление множества на Паскале
- •17.3 Присваивание значений множествам. Конструктор множества
- •17.4 Операции над множествами.
- •17.5 Сравнение множеств.
- •17.6 Применение множеств.
- •18. Вспомогательные алгоритмы (подпрограммы).
- •18.1 Три способа записи повторяющихся команд
- •18.2 Понятие блока
- •18.3 Объекты подпрограммы (то, над чем выполняются действия).
- •18.4 Свойства локальных и глобальных объектов
- •Свойства глобальных объектов:
- •18.5 Выделение памяти под локальные и глобальные переменные
- •18.6 Передача параметров в подпрограммы.
- •Фактические параметры
- •18.7 Подпрограммы, возвращающие значение (функции)
- •18.8 Особенности использования процедур и функций в Турбо Паскале
- •18.9. Побочный эффект (side effect)
- •18.10 Опережающее определение процедур и функций.
- •18.11 Рекурсия и итерация.
- •18.12 Процедуры и функции как параметры.
- •18.13 Директивы подпрограмм
- •Директива forward
- •Директивы far и near
- •Директива external
- •Директива assembler
- •Директива inline
- •Директива interrupt
- •Отладка и тестирование программ, содержащих подпрограммы
- •18.14.1 Нисходящее тестирование и подпрограммы-заглушки
- •18.14.2 Восходящее тестирование и программы-тестеры
- •18.14.3 Рекомендации по отладке программ, содержащих подпрограммы
- •18.14.4 Использование отладчика для трассировки процедур
- •18.14.5 Область действия идентификаторов и переменные в окне Watch
- •18.15. Получение доступа а параметрам командной строки, запуск внешних программ.
- •19. Записи.
- •19.1 Понятие записи. Объявление записи в программе.
- •19.2 Доступ к полям записи.
- •19.3 Оператор with
- •19.4 Действия над записями
- •19.5 Записи с вариантами
- •Замечание1:Порядок частей – именно такой, как показано: фиксированная часть всегда первая (или единственная)
- •19.6 Типизированные константы - записи
- •20. Модули (Unit)
- •20.1 Что такое модуль?
- •20.2 Зачем нужны модули и какие есть средства, аналогтчные (в какой-то мере) модулям
- •Интерфейсная секция
- •Секция реализации
- •Секция инициализации
- •Подключение других модулей к данному (модулю)
- •20.4 Ссылки на описания модуля
- •Пример создания модуля
- •Использование модулей. Режимы Compile, Build и Make при компиляции модулей
- •Косвенные и перекрестные ссылки на модули
- •Пример модуля (стек)
- •Модули и большие программы
18.14.4 Использование отладчика для трассировки процедур
В качестве альтернативы отображению начальных значений входных (и входа-выхода) параметров процедуры с использованием специальных отладочным операторов, для получения соответствующей информации можно воспользоваться отладчиком Turbo Pascal и его возможностью трассировки Trace into (<F7>). Если оператор, который должен быть выполнен следующим, представляет собой оператор вызова процедуры, нажатие клавиши <F7> обеспечит вход в эту процедуру. В результате в окне редактора появится тело этой процедуры с указателем выполнения на слове begin. Если вы укажете параметры процедуры как переменные для наблюдения, исходные значения этих параметров появятся в окне Watch. Затем, с выполнением каждого оператора процедуры (для этого каждый раз требуется . нажимать клавишу <F7>), любое новое значение, присвоенное выходному параметру или параметру входа-выхода, будет отображено в окне Watch.
После того как процедура возвратит управление основной программе, вы можете воспользоваться отладчиком чтобы выяснить, какие значения были возвращены в программу. На этот раз в качестве переменных для наблюдения следует указать все фактические параметры, которые соответствуют выходным параметрам или параметрам входа-выхода. В результате значения, возвращенные процедурой, окажутся отображены в окне Watch.
18.14.5 Область действия идентификаторов и переменные в окне Watch
Значения, отображаемые в окне Watch, определяются с использованием обычных правил области действия имен для Pascal-идентификаторов. Соответственно, локальные переменные и формальные параметры процедуры будут помечены как Unknown identifier (Неизвестный идентификатор), пока не начнется выполнение данной процедуры. А по выходе из процедуры, ее локальные переменные и формальные параметры снова станут "неизвестными идентификаторами".
18.15. Получение доступа а параметрам командной строки, запуск внешних программ.
Обычно форма запуска внешних программ через командную строку имеет вид:
Имя.ехе
параметр1 параметр 2 ... параметр N
Параметры передаваемые через командную строку
Выполняемая
программа
Каждой написанной на Паскале программе можно передавать параметры через командную строку. Параметры при запуске внешней программы записываются в командной строке справа от имени программы через пробел.
Параметры можно передавать не только через командную строку, но и при запуске программы из интегрированной среды, для чего в меню OPTIONS надо указать соответствующее значение (в виде строки) для пункта PARAMETERS.
Чтобы параметры, передаваемые при запуске, воспринимались в вызванной программе, надо предусмотреть в этой программе ответы на следующие вопросы:
1.
Сколько параметров передано? функция
без параметров
2. Какие параметры переданы?
Ответ на первый вопрос: paramсount - возвращает количество переданных через командную строку параметров. Если справа после имени программы ничего ни указано, то paramсount - вернет значение 0. Когда указано N параметров, то ParamCount вернет значение N.
Для ответа на второй вопрос чтобы узнать, какие конкретно параметры переданы, есть другая функция: Paramstr(<номер>). Для каждого (по номеру) значения аргумента, функция возвращает значение параметра в виде строки. Если указать Paramstr(0), то функция в ответ вернет полный путь к программе. Paramstr(ParamCount) – вернет значение последнего параметра.
writeln(‘При запуске программы,’, paramstr(0), указано paramcount, следующих параметров: ‘);
for i:=1 to paramcount do
begin
writeln(i:2, -й параметр: ,paramstr(i));
end;
Для запуска внешних программ из своей программы надо использовать процедуру ехес:
строки
Ехес (имя программы, параметры);
Таким же образом можно вызвать не только внешние программы, но и команды ДОС.
Ехес
(getenv ('comspec'), '/c+
команда ');
Command. com
Данная строчка означает, что в интерпретатору ДОС (comand.com) передается например, dir команда (например, dir) для выполнения.
Здесь getenv - функция, которая возвращает значение, соответствующее определенной переменной среды окружения ДОС. В данном случае comspec, в котором хранится имя интерпретатора команд ДОС.
При вызове процедуры ехес нужно соблюдать следующие меры предосторожности:
Вызывающая программа не должна занимать всю свободную память. Это выполняется с использованием директивы компилятора {$M} - memory, которая в общем случае имеет следующий вид:
{$M
размер стека , min
heap size,
max heap
size }
все значения в байтах.
Всего в стеке может быть 64Кб (по умолчанию 16 кбайт). Если локальных объектов в подпрограммах нет, то размер стека может быть установлен в 0.
Min heap size - минимальный размер кучи (динамической области), которая будет оставлена программе.
Max heap size - максимальный размер памяти кучи, которую предполагается оставить.
ПРИМЕР.
{$M 2048,0,0} - это означает, что не используется дополнительная свободная память. Размер стек 2Кбайт.
Необходимо обеспечивать сохранение векторов прерываний перед вызовом внешней программы из пользовательской и после вызова внешней программы.
Вектор прерываний - это адрес подпрограмма реального режима обработчика прерывания, которое может наступить в системе. Необходимость сохранения векторов связана с тем, что в программах на Турбо Паскале часто подменяются системные вектора прерываний и для корректной работы необходимо перед выполнением вызова программы надо сохранить текущие вектора прерываний, а потом их восстановить. Для этого используется процедура swapvectors;
Swapvectors;
exec(...);
Swapvectors;
необходимо обрамлять вызов ехес, вызовом Swapvectors сверху и снизу.
