Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Три способа записи повторяющихся команд



Можно выделить 3 способа записи повторяющихся в программе команд: циклы, макро (макросы)(макрокоманды)(открытые подпрограммы) и обычные подпрограммы (закрытые подпрограммы).

Если повторяющиеся команды располагаются в теле программы в одном месте, компактно (одна за другой), то можно (нужно) свернуть повторяющиеся действия в цикл (если для повторяющихся действий удалось найти обобщенную запись).

S: = x1 + x2 + x3 +...

s: =x1;

s: =s+x2;

s: =s+x3; for i: =1 to n do

........... s: =s+xi;

 

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

Подпрограмм бывают двух видов:

- закрытые (процедуры и функции);

- открытые (макро).

В случае открытой подпрограммы при ее вызове (макровызове) в точку вызова (вместо вызова) копируется текст макро (макроподстановка), причем это делается (т.н. препроцессором в Си) до начала работы компилятора.

Пусть, например, надо сложить в разных местах программы 3 раза по 3 числа. Можно для сложения каждой тройки чисел сделать простую макрокоманду типа (на препроцессоре Си):

имя макро формальные параметры вызова (то, что позволяет настроить макро на работу с

конкретными данными)

#define sum(x, y, z) ((x)+(y)+(z))

тело макро

(макроопределение)

       
   


что меняем на что меняем

с учетом параметров, указанных при вызове

(фактических параметров)

С использованием такого макро сложение в разных местах программы трех троек – (1, 2, 3), (4, 5, 6), (7, 8, 9) – можно было бы оформить следующим способом: x y z

...............

...sum(1, 2, 3)... --> в точку вызова будет подставлен исходный код, выполняющий 1+2+3

 
 


фактические параметры вызова (соответствующих формальным x, y, z)

...sum(4, 5, 6)... --> в точку вызова будет подставлен исходный код, выполняющий 4+5+6

..............

...sum(7, 8, 9)... --> в точку вызова будет подставлен исходный код, выполняющий 7+8+9

Достоинство использования макро – большая скорость работы (по сравнению с закрытыми)

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

В случае закрытой подпрограммы (процедуры или функции) как и в случае открытой надо один раз описать подпрограмму и потом несколько раз вызвать. Только в отличие от открытой подпрограммы при вызове закрытой подпрограммы не происходит копирования в точку вызова текста макро, а вместо этого из точки вызова передается управление в подпрограмму – подпрограмма выполняется, а после своего завершения возвращает управление в точку программы, следующую за точкой вызова.

Описание закрытой подпрограммы (функции) = заголовок +блок:

имя формальные параметры подпрограммы

тип возвращаемого значения

function sum(x, y, z: real): real;

Все действия в теле подпрограммы (в месте ее описания) выполняются над формальными параметрами.
begin тип подпрограммы

sum: =x+y+z;

end;

 

С использованием такой подпрограммы сложение в разных местах программы трех троек – (1, 2, 3), (4, 5, 6), (7, 8, 9) – можно было бы оформить следующим способом:

Var

s: real;

..............

Begin

...............

...s: =sum(1, 2, 3);. --> будет вызвана sum и в точку вызова будет подставлено значение суммы 1+2+3

 
 


фактические параметры вызова

...............

...s: =sum(4, 5, 6);. --> будет вызвана sum и в точку вызова будет подставлено значение суммы 4+5+6

..............

...s: =sum(7, 8, 9);. --> будет вызвана sum и в точку вызова будет подставлено значение суммы 7+8+9

..............

end.

Вот что происходит при описанных вызовах функции (закрытой подпрограммы) в памяти программы: передача управления (из программы в подпрограмму)

  Код функции SUM в памяти
...............

.....sum(1, 2, 3); вызов

............... возврат управления (и значения)

......sum(4, 5, 6); вызов

.............. возврат управления (и значения)

......sum(7, 8, 9); вызов

.............. возврат управления (и значения)

end.

Программа Подпрограмма sum

Недостаток использования закрытых подпрограмм – меньшая скорость работы (по сравнению с макро) – тратится время на передачи управления (сначала в подпрограмму, а потом назад), и на передачу параметров в/из подпрограмму.

Преимущества (достоинства) использования подпрограмм в программе:

- экономия места (в программе) - --- описываем лишь 1 раз в программе;

- экономия времени (программиста) --- 1 раз отлаживаем;

- программу легче отлаживать (легче искать, где ошибка) --- если она поделена на части;

- можно использовать для разработки программы нескольких программистов.

 

Понятие блока

Закрытая подпрограмма ( пока будем говорить о процедуре ) состоит из заголовка и блока.

Заголовок содержит в себе описание имени процедуры и формальных параметров (аргументы – те, что заданы - и результаты – те, что требуется получить и передать в точку вызова).

Блок процедуры содержит в себе описание так называемых локальных переменных и действия подпрограммы (ее тело).

Определение: Блок - фрагмент подпрограммы или программы, содержащий в себе действия над некоторыми определенными объектами и описания этих объектов. Действия в блоке заключаются между словами 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).


Поделиться:



Популярное:

  1. Bilignostum seu Adipiodon. Бис-(2,4,6-трийод -3-карбокси)анилид адипиновой к-ты
  2. C. Библейское обоснование позиции Претрибулационизма
  3. I. Экономика доиндустриальных цивилизаций
  4. II. «БЕЛКИ — УГЛЕВОДЫ». Никогда не ешьте концентрированный белок и концентрированный углевод в один прием пищи.
  5. II. ЛИКВИДАЦИЯ ПЕРИФЕРИЧЕСКОЙ ВАЗОКОНСТРИКЦИИ.
  6. III. Социометрия отношений в классе
  7. IV. Патриарх Московский и всея Руси
  8. V. Подача заявок и допуск команд
  9. XXII съезд КПСС-принятие новой (третья) программа КПСС – предусматривалось
  10. А если хочешь узнать что у тебя за команда, достаточно сыграть с сильным противником. Ты сразу удивишь все недостатки и недоработки, узнаешь, кто из игроков что стоит.
  11. Авторитарно-ориентированный менеджер, который прежде всего концентрирует свое внимание на решении производственных задач.
  12. Адлер выделил три основные жизненные цели (задачи): работу, дружбу и любовь.


Последнее изменение этой страницы: 2016-07-12; Просмотров: 566; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.039 с.)
Главная | Случайная страница | Обратная связь