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

Можна виділити3 способи запису повторюваниху програмі команд: цикли, макро (макроси)(макрокоманди)(відкриті підпрограми) і звичайні підпрограми (закриті підпрограми).

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

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

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

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

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

У разівідкритої підпрограмипри її викликі (макровизові) в точку виклику (замість виклику) копіюється текст макро (макроподстановка), причому це робиться (т.зв. препроцесором в Сі) до початку роботи компілятора.

Нехай, наприклад, треба скласти у різних місцях програми3 рази по 3 числа. Можна складання кожної трійки чисел зробити просту макрокоманду типу (на препроцессорі Сі):

ім'я макроформальні параметри виклику (те, що дозволяє налаштувати макро на роботу з

L AQItABQABgAIAAAAIQD/FrNIBQMAAHoGAAAOAAAAAAAAAAAAAAAC4CAABkcnMvZTJvRG9jLnht bFBLAQItABQABgAIAAAAIQDmviZJ3wAAAAkBAAAAAAAAAAAAAAAF8FAABk AQABADzAAAAawYAAAAA "/>#define sum(x,y,z) ((x)+(y)+(z))

B Ai0AFAAGAAgAAAAhAABzHeEFAwAAegYAAA4AAAAAAAAAAAAAAALgIAAGRycy9lMm9Eb2MueG1s UEsBAi0AFAAGAAgAAAAhAIwPElfeAAAACAEAAAAAAAAAAAAAAAAAAAAXwUAAGRycy9k BgAAAAA= "/>

що міняємона що міняємо

з урахуванням параметрів, вказаних під час виклику

З використанням такого макро додавання у різних місцях програми трьох трійок – (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 тип підпрограми

З використанням такої підпрограми додавання у різних місцях програми трьох трійок – (1,2,3), (4,5,6), (7,8,9) – можна було б оформити у такий спосіб:

. 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

Ось що відбувається при описаних викликах функції (закритої підпрограми) у пам'яті програми: передача керування (з програми до підпрограми)

Код функції SUM у пам'яті
.

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

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

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

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

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

Переваги (достоїнства) використання підпрограм у програмі:

- економія місця (у програмі) - --- описуємо лише 1 раз у програмі;

- економія часу (програміста) --- 1 раз налагоджуємо;

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

- можна використовувати розробки програми кількох программистов.

Поняття блоку

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

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

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

Визначення:Блок- фрагмент підпрограми або програми, що містить у собі дії над деякими певними об'єктами та опис цих об'єктів. Дії в блоці полягають між словамиbeginтаend(Паскаль).

У мові Сі конструкція може використовуватися самостійно практично скрізь, де може зустрічатися звичайний оператор:

У Паскалі на відміну Си блокисамостійно не використовуються, а лише у складі підпрограм і програм (до блоку додається заголовок і описи локальних для блоку змінних).

Примітка.З блокомне треба плутати складовий оператор. Складовий оператор включає тільки дії, а блок є закінченою конструкцією, де є і описи і дії.

Блоки буваютьзовнішні (що охоплюють) івнутрішні (подібний поділ є відносним).

1Program p1;блок1глобальна