Лекція №3
Тема:
Процедури і функції
ПЛАН
3ЛЕКЦІЯ №3
3.1Загальні відомості
3.2Область видимості ідентифікаторів
3.3Обмін даними між програмою і підпрограмами
3.4Рекурсія
3.5Процедурні (функціональні) типи
Час:
4 год.
Література:
[1], [2], [3], [4], [5]
Загальні відомості
Як правило, для спрощення розробки складної програми виконується декомпозиція – поділ програми на окремі підзадачи. При цьому часто виникає ситуація, коли в різних місцях програми повинні виконуватися ті самі дії, призначені для рішення деякої підзадачи. У такому випадку доцільно оформити ці дії у виді підпрограми і потім у потрібних місцях виконувати виклик цієї підпрограми.
Підпрограма– відносно самостійний фрагмент програми, оформлений особливим образом і має ім'я.
Підпрограми можуть бути стандартними (визначаються стандартом мови) і користувальницькими. Опис користувальницьких підпрограм може бути виконане в основній програмі (у розділі описів) чи ж у виді окремого модуля (у цьому випадку в основній програмі вказується підключення даного модуля).
У мові Паскаль існує два види підпрограм:
процедури;
функції.
Структура опису будь-якої підпрограми (процедури або функції) аналогічна структурі програми і містить наступні розділи:
заголовок;
розділ описів;
розділ операторів.
Розділ описів і розділ операторів утворять тіло підпрограми (процедури або функції).
Заголовок процедуримає вид:
Procedure ім'я(список параметрів);
Заголовок функціїмає вид:
Function ім'я(список параметрів): тип результату;
Процедура– це підпрограма, що виконує дії, але не повертає результату.
Функція– це підпрограма, що повертає значення. Тому в її розділі операторів завжди присутній присвоювання виду:
ім'я функції:=вираження;
При цьому тип вираження повинний збігатися з типом функції, зазначеним у її заголовку.
Функція може повертати значення тільки простих типів (символьний, речовинний, цілий, логічний), строкового чи вказівного типів.
Приклад використання процедури. (виведення заданого символу визначене число раз)
Program NWrt;
{Опис процедури}
Procedure NWrite(Ch:Char;N:Integer);
Var
i:Integer;
Begin
For i:=1 to N do Write(Ch);
End;
Var
X:Char;
N:Integer;
{Розділ операторів програми}
BEGIN
Write('Увести символ=');
ReadLn(X);
NWrite(X,10); {Виклик процедури}
END.
При складанні блок-схем алгоритмів подібних програм керуються наступним:
виклик процедури позначається символом: , усередині символу поміщають ім'я викликуваної процедури і список фактичних параметрів;
після блок схеми основної програми приводять блок-схеми її підпрограм;
блок-схема підпрограми складається по таких же правилах, як і схема звичайної програми.
Таким чином, блок-схема алгоритму приведеної вище програми:
Блок-схема алгоритму процедури NWrite
Приклад використання функції(обчислення кореня ступеня N з числа X)
Program NRoot;
{Опис функції}
Function Root(X:Real;N:Byte):Real;
Begin
If X=0 then Root:=0
Else Root:=Exp(Ln(X)/N);
End;
Var R:Real;
BEGIN
R:=Root(27,3); {Обчислення за допомогою заданої функції}
WriteLn(‘Корінь=’,R:8:4);
END.
Виклик підпрограм
При виклику процедури або функції приводиться її ім'я й у дужках – список параметрів (якщо він є).
Виклик процедури в основній програмі є оператором.
Семантика виклику процедури:припиняється поточна послідовність операторів, обчислюються значення переданих процедурі параметрів (якщо вони є), потім виконується послідовність операторів у тілі процедури; після завершення їхнього виконання керування передається на оператор, що випливає за викликом процедури.
Виклик функції є не оператором, а елементом вираження.
Семантика виклику функції:припиняється обчислення вираження, обчислюються значення передані функції параметрів (якщо вони є), виконуються оператори в тілі функції, потім повернуте функцією значення використовується для продовження обчислення вираження.