- •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.2 Понятие блока
Закрытая подпрограмма (пока будем говорить о процедуре) состоит из заголовка и блока.
Заголовок содержит в себе описание имени процедуры и формальных параметров (аргументы – те, что заданы - и результаты – те, что требуется получить и передать в точку вызова).
Блок процедуры содержит в себе описание так называемых локальных переменных и действия подпрограммы (ее тело).
Определение: Блок - фрагмент подпрограммы или программы, содержащий в себе действия над некоторыми определенными объектами и описания этих объектов. Действия в блоке заключаются между словами begin и end (Паскаль).
В языке Си конструкция {блок} может использоваться самостоятельно практически везде, где может встречаться обычный оператор:
{ ≡ begin
........
int i;
i=1;
........
}≡ end
В Паскале в отличие от Си блоки самостоятельно не используются, а только в составе подпрограмм и программ (к блоку добавляется заголовок и описания локальных для блока переменных).
Примечание. С блоком не надо путать составной оператор. Составной оператор включает только действия, а блок представляет собой законченную конструкцию, где имеются и описания и действия.
Блоки бывают внешние (охватывающие) и внутренние (подобное разделение является относительным).
a, b, c L:real
1 Program
p1; блок 1
глобальная
var
a, b, c, L : real; x, y, z
procedure p2; блок
2
var локальная
2
x, y, z : real; i, j, k L:integer
procedure p3; блок
3
var
i, j, k, L : integer;
begin
...
end;
begin
...
end;
begin
...
end.
где 1 – глобальные переменные программы области видимости
2 – локальные переменные процедур p2 и р3
В рассмотренном примере два внутренних блока и два внешних:
Блоки 2 и 3 являются внутренними для блока 1.
Блоки 1 и 2 являются внешними для блока 3.
Приведенная программа имеет, как говорят, блочную структуру.
Видно, что для описания подпрограмм в программе отведено строго определенное место (над основным разделом действий программы).
Видно, что подпрограммы м.б. вложены одна в другую (р3 вложена в р2).
18.3 Объекты подпрограммы (то, над чем выполняются действия).
Объекты подпрограммы делятся на параметры (делятся на аргументы и результаты) и переменные (делятся на локальные и глобальные).
Параметры - это объекты, указанные в заголовке подпрограммы. Они в свою очередь делятся на аргументы (входные параметры, т.е. то, что дано, или, другими словами, то, что при выполнении подпрограммы должно быть известно) и результаты (выходные параметры, т.е. то, что требуется получить).
Переменные - это объекты, которые перечисляются в секции описания переменных:
- или в секции описания переменных в данной подпрограмме (локальные переменные);
- или в секции описания переменных во внешнем блоке по отношению к данному (глобальные).
Объекты алгоритма делятся на глобальные и локальные.
Локальные объекты - это объекты, которые описаны в данном блоке. Это параметры из заголовка данного блока и переменные, описанные в данном блоке.
Глобальные объекты - это объекты, которые описаны во внешнем блоке ( в охватывающем).
На рисунке из п. 18.2 (см. выше) для блока 3 параметров нет вообще. Все перемененные, описанные в нем самом (в блоке 3), являются локальными для данного блока. Глобальными для него являются переменные, которые описаны в охватывающих блоках, т.е. в блоках 1 и 2.
Для блока 2 локальные объекты – x,y,z, описанные в нем самом, а глобальные - те переменные, которые описаны в блоке 1 – это a,b,c,L (real).
Для объектов подпрограммы различают область видимости и время жизни.
Время жизни - это интервал времени выполнения программы, в течение которого объект подпрограммы существует, т.е. сохраняет свое значение (место в памяти), даже, если он временно невидим (и к нему нельзя обратиться по имени).
Объект "начинает свою жизнь" обычно с начала выполнения соответствующего блока, т.е. того блока, где он описан (где под него выделена память), и, как правило, завершает свое существование по окончании этого же блока. В зависимости от величины времени жизни различают 3 вида объектов - статические (существуют все время, пока выполняется программа), автоматические (существуют, пока выполняется блок), динамические (существуют, пока под них программистом динамически выделена память).
Есть еще т.н. статические локальные переменные, у которых время жизни глобальное, а область видимости - локальная. На Паскале статические локальные переменные - это локальные типизированные константы:
procedure p(...);
Const
a:integer = 5; //статическая локальная переменная
begin ... end;
Инициализация таких переменных происходит только один раз (при первом вызове подпрограммы), а дальше они сохраняют свои значения от вызова к вызову. Этим можно пользоваться, например, для подсчета количества вызовов подпрограммы.
Область видимости (действия) - это часть текста программы, в которой объект, как говорят, "виден", т.е. для него известно имя и тип (в пределах области видимости возможен корректный доступ к памяти с использованием имени объекта). Видимыми в данном блоке считаются те объекты, которые описаны в данном блоке или в блоках, его охватывающих. То, что описано ниже данного блока (по уровню вложенности), считается невидимым в данном блоке.
локальная
В рассмотренном примере в блоке 3 видны: i, j, k, L, x, y, z, a, b, c.
В
блоке 2 видны: x,
y,
z
(в нем описанные), a,
b,
c,
L,
(описанные в охватывающем блоке).
глобальная
В блоке 2 будут не видны те переменные, которые описаны в блоке 3.
Примечание: В блоке 3 переменная L будет видна как целая, а в блоке 2 - как вещественная.
Область видимости и время жизни не совпадают для глобальных переменных: переменная может «жить», но стать временно невидима.
