- •Синтаксис для выражений (логического | целого | …) типа данных.
- •Отличия операторов case и if
- •Рекурсия
- •Область видимости идентификаторов
- •Реализация абстрактных данных с помощью модуля счетчика
- •Рекурсивное уравнение
- •11 Лекция
- •Алиасинг
- •Спецификация программы
- •Корректность программы
- •Основной вопрос программирования
Рекурсия
Рекурсия – подход к решению задач, когда задача сводится к аналогичной, но более простой. Полное решение задачи принимает форму рекурсивной процедуры, которая выполняет необходимые упрощения задачи, далее вызывает себя для решения более простой задачи.
Когда объявление процедуры включает процедурный оператор с собственным именем этой процедуры – рекурсивный вызов - ничего особенного не происходит. Вновь объявленные переменные и параметры скрывают одноименные объявленные ранее. Ничего особенного также не происходит при завершении выполнения процедуры. Экземпляры переменных и параметров, созданные при последнем запуске процедуры исчезают, становятся доступны одноименные копии из предыдущего запуска и выполняются операторы, следующие за процедурным оператором.
Рекурсия — способ общего определения множества объектов или функций через себя, с использованием ранее заданных частных определений. Рекурсия используется, когда можно выделить самоподобие задачи
Область видимости идентификаторов
Объявление внутри процедуры других процедур, которые в свою очередь могут содержат объявления, поднимает мудреные вопросы о том, какой из идентификаторов может быть использован в каждой точке программы.
Область видимости (scope) идентификатора – множество операторов, в которых этот идентификатор может быть использован.
В Паскале идентификатор может быть использован в пределах <блока>, в котором он был объявлен. Максимальная область видимости идентификатора – это оператор BEGIN, размещенный внутри PROCEDURE или PROGRAM, содержащих объявление идентификатора. Например, для переменных объявленных в разделе объявлений программы это ее главный оператор BEGIN и операторы BEGIN всех процедур программы.
Однако область видимости может быть меньше, если существует вложенный блок, внутри которого объявлен идентификатор с тем же именем.
Поскольку правила области видимости Паскаля зависят от структуры текста программы, а не от ее поведения в процессе выполнения, они называются статическими правилами области видимости.
Область видимости идентификатора раз и навсегда определяется синтаксисом программы, в которой он объявлен, и все вопросы о его области видимости могут быть разрешены исходя из текста программы.
Ну, или вот так :
1. Глобальные переменные они везде глобальные, только если не перекрыты локальными в процедуре
2. Локальные переменные, создаваемые в процедурах и функциях видны только изнутри, после выхода из функции/процедуры они уничтожаются
3. Если в процедуре процедура, то переменные, созданные во внутренней не доступны внешней, а созданные во внешней доступны внутренней
Лексикографический порядок строк
Лексикографический порядок строк – это их порядок появления как слов в словаре – алфавитный порядок, где алфавит – набор символов Паскаль-машины. Из двух строк различной длины, имеющих одинаковые последовательности символов, короткая предшествует. Например, †ABC† предшествует †ABCDEF†, но †XYZ† предшествует †YZ†.
Определять лексикографический порядок строк простое дело: сравнивать их символы попарно, пока не встретятся неравные символы или одна из строк не закончится.
Включающий комментарий для процедуры
Когда процедуры из библиотеки будут использоваться в проекте, будет удобно включать их имена и комментарий. Комментарий к процедуре в библиотеке должен в основном отражать информацию о том, как используется процедура, т.е. что она делает не как, хотя можно упомянуть и о некоторых моментах реализации важных с точки зрения использования. Например, о том, что вызов процедуры потребует больших затрат процессорного времени. Комментарий должен быть достаточен для корректного использования каждой процедуры. Такой комментарий обычно называют комментарием включения (include comment). Например, если мы включаем в проект Lexico, комментарий может быть следующим:
{Включить PROCEDURE Lexico(VAR F1, F2: TEXT; VAR Result: CHAR);
Result 0, 1, 2 если лексикографический порядок F1 =, <, > чем F2 соответственно. Фактические параметры, соответствующие F1 и F2, должны быть различными}
Таким образом, каждая процедура в библиотеке должна начинаться с информации, необходимой для включающего комментария. Заголовок процедуры предоставляет имя и подробную информацию о ее параметрах. Оставшаяся часть включающего комментария должна позволять использовать процедуру без изучения ее текста. Необходимо тщательно описывать ограничения и специальные случаи.
------------------------------------------------------------