Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
63
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

Глава 34 Структура программы

В этой главе мы рассмотрим структуру программы, и завершим тем самым боевое построение нашего войска, начатое в 32-й главе.

Управляющие структуры

Управляющие структуры составляют основу языков программирования. Ключевых структур всего три:

линейная последовательность – это естественный порядок выполнения операторов друг за другом, то есть слева направо и сверху вниз;

альтернатива – выбор одного из двух или нескольких направлений исполнения операторов;

цикл – повторное исполнение операторов до соблюдения некоторого условия.

Альтернатива и цикл представлены в Паскале несколькими операторами, из которых программист выбирает тот, что лучше подходит к решаемой задаче

(рис. 77).

Управляющие структуры

Линейная последоваАльтернатива Цикл тельность

IF-THEN

IF-THEN-ELSE

CASE-OF-ELSE-END

REPEAT-UNTIL

WHILE-DO

FOR-TO-DO FOR-DOWNTO-DO

Рис. 77 – Управляющие структуры языка Паскаль

Итак, для организации альтернативы может быть использован один из трех операторов:

241

Глава 34

Структура программы

неполный условный оператор IF-THEN;

полный условный оператор IF-THEN-ELSE;

оператор выбора CASE-OF-ELSE-END.

Для организации циклов программист также применяет три оператора:

цикл с проверкой условия в конце REPEAT-UNTIL;

цикл с проверкой условия в начале WHILE-DO;

цикл со счетчиком FOR-TO-DO и FOR-DOWNTO-DO.

Обратите внимание на условия продолжения циклов WHILE-DO и REPEATUNTIL, — они взаимно противоположны! Первый из них выполняется, пока условие истинно, а второй — пока оно ложно.

Странно, что из этих немногих структур лепятся столь сложные программы!

Структура программы

Программа на Паскале состоит из ряда секций (Section — «часть», «раздел»). Под структурой программы будем понимать взаимное положение этих секций. На рис. 78 показана упрощенная структура программы.

Объявления констант

 

Const …

Объявления типов

Секции

 

Type …

 

описаний

Объявления переменных

 

Var …

 

 

 

 

Объявления процедур

 

Function …

и функций

 

 

Исполняемые

Procedure …

 

 

Главная программа

секции

 

Begin

end.

Рис. 78 – Структура программы на языке Паскаль

242

Глава 34

Структура программы

Каждую секцию открывает своё ключевое слово. Три секции: Const, Type и Var — образуют описательную часть программы. Здесь компилятор черпает информацию о размещении данных в памяти. Секции с описаниями процедур и функций и главная программа формируют исполнительную часть, — здесь содержатся исполняемые операторы (секция кода). Все секции, кроме главной программы, необязательны. Но, при необходимости, секции могут повторяться и чередоваться в любом порядке, соблюдая два простых правила:

любой объект программы – будь то константа, тип, переменная или процедура – объявляется до своего применения;

главная программа располагается в тексте последней (хотя исполнение начинается именно с нее!).

Два слова о точке с запятой (;). В описательной и в исполнительной частях программы её назначение слегка различается. Если в объявлениях точка с запятой завершает оператор и обязательна, то в секции кода она разделяет операторы и не нужна за последним оператором блока.

Структура процедур и функций

Процедуры и функции — основные строительные блоки программ, в крупных проектах их сотни. Главная программа обычно содержит несколько операторов, а основная работа отдается процедурам и функциям. Такой подход не только упрощает разработку, отладку и понимание программ, но и существенно уменьшает их размер (объем занимаемой памяти). Всё, что требует алгоритм, достигается вызовом одних процедур и функций из тела других, — то есть применением вложенных вызовов. Глубина вложения таких «матрешек» практически не ограничена. Опытный программист обычно разбивает большую программу на ряд мелких и простых процедур и функций.

Внутренняя структура процедур и функций схожа со структурой программы. Это своего рода программы в программе, потому их и называют подпрограммами. На рис. 79 показана упрощенная структура процедуры с условным именем ABC.

243

 

 

 

Глава 34

 

 

 

Структура программы

 

 

 

 

 

 

Заголовок процедуры

 

Procedure ABC (параметры)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Const ...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Type ...

 

 

Локальные объявления

 

 

 

 

 

(внутренние секции)

Var ...

Тело процедуры

Begin

. . .

end;

Рис. 79 – Структура процедуры

Такой же структурой обладают и функции, которые, в отличие от процедур, возвращают значение некоторого типа. Правила чередования секций внутри подпрограмм — локальных секций — точно такие же, как и для секций программы

вцелом, а именно:

любой объект объявляется до своего применения;

тело процедуры или функции обязательно и размещается последним.

Объявленные внутри подпрограммы константы, типы и переменные — локальные объекты — видны лишь внутри этой подпрограммы. При совпадении их имен с глобальными объектами, локальные имеют преимущество, то есть закрывают собою внешние объекты.

Обмен данными с подпрограммами

Вызов процедур и функций обычно сопровождается передачей данных между вызываемой подпрограммой с одной стороны и вызывающим её фрагментом с другой. Иначе говоря, данные либо передают внутрь подпрограммы, либо получают от нее. Иногда делают и то, и другое. Существует три способа такого обмена:

через глобальные переменные;

через параметры процедур и функций;

возвратом результата через имя функции.

244

Глава 34

Структура программы

Передача данных через глобальные переменные кажется самой простой, — ведь эти переменные видны из многих частей программы. Но этот способ оправдан лишь в небольших проектах. С ростом размера и сложности программы всё труднее отслеживать взаимные влияния её частей через глобальные переменные. Это запутывает программу и снижает её надежность.

Для обмена данными разумнее использовать параметры процедур и функций, а также имена функций. В табл. 4 показаны три способа передачи данных через параметры.

Табл. 4 – Три способа передачи данных через параметры

Способ передачи

Пример заголовка процедуры

Пример

данных

вызова

 

 

 

 

По значению:

 

ABC(10);

в процедуру

Procedure ABC (arg:integer);

передается значение

ABC(X+3);

параметра.

 

 

По ссылке CONST:

 

 

В процедуру

Procedure ABC (const

ABC(10);

передается ссылка на

константу или

arg:integer);

ABC(X);

переменную,

 

 

содержащую данные.

 

 

 

 

 

По ссылке VAR:

 

 

В процедуру

Procedure ABC (var

ABC(X)

передается ссылка на

arg:integer);

переменную,

 

содержащую данные.

 

 

 

 

 

Опытного программиста отличает умение эффективно передавать данные; табл. 5 поможет вам выбрать наиболее удачный способ такой передачи.

Табл. 5 – Рекомендуемые способы передачи данных

Куда передавать данные

 

Рекомендуемый способ

 

 

 

Только в процедуру или функцию

1)

По значению (простые типы)

2)

По ссылке CONST (сложные типы)

 

Только из процедуры и функции

1)

Через имя функции (одно значение)

2)

По ссылке VAR (несколько значений)

 

В обоих направлениях

По ссылке VAR (любые данные)

 

 

 

245

Соседние файлы в папке delphi