Процедури.
Підпрограми.
В програмуванні часто зустрічаються випадки, коли по ходу виконання програми треба виконувати одні і ті ж самі обчислення, але при різних вхідних даних. Щоб зробити програму легше та зрозуміліше, а також виключити повторення однакових операторів, виділяють ділянки, що повторюються в самостійну частину програми, яку можна використовувати багаторазово по мірі необхідності.
Автономна частина програми, яка реалізує визначений алгоритм і допускає звернення до неї із різних частин програми називається підпрограмою. Підпрограми оформлюються в вигляді замкнутих ділянок програми, що мають чітко визначений вхід та вихід. При цьому імена змінних в основній програмі і підпрограмах задані незалежно один від одного. Використання підпрограм дозволяє реалізувати один із самих прогресивних методів програмування - структурне програмування.
В мові Паскаль виділяють два вида підпрограм: процедуру та функцію. Будь-яка програма може включати в себе декілька процедур та функцій. Процедури та функції об'являються у розділі опису вслід за розділом опису змінних. Виконання програми починається з операторів основної програми. При необхідності викликається підпрограма і починають діяти її оператори. Потім управління передається в основну програму, яка продовжує виконуватися. Люба підпрограма може містити підпрограми.
Процедура — це програма, в якій результат являється необов'язково розрахованим значенням, в той час як обчислення функції завжди повинно виконуватися до кінця.
Приклад: вивести на друк зображення квадрату за допомогою трьох
операторів:
Writeln(‘***’);
Writeln(‘* *’);
Writeln(‘***’);
Program рr;
Procedure gv;
Веgіп
Writeln(‘***');
Writeln(‘* *');
Writeln(‘***');
End;
Ведіп
gv;
end.
Приклад: запишемо цю саму програму з об'явленням нових змінних..
Ргодгат рr;
Procedure gv;
Var і: integer;
{змінна і має зміст тільки в процедурі)
begin
for і: =1 to 3 do write ('*') ; writeln;
writeln('* *');
for i: =1 to 3 do write ('*') ;
end;
begin
gv;
end.
Заголовок;
Розділ опису;
Begin
Розділ операторів;
End;
Заголовок процедури являє собою службове слово procedure, далі йде його ім’я та параметри: procedure <ім'я> (параметри);
де параметри - це перелік імен для позначення вхідних даних і результатів роботи процедури з вказуванням їх типів.
Параметри, що перелічені у списку - формальні (можна параметри не описувати). Розділ опису складається з розділів міток, констант, типів, змінних, процедур та функцій.
Розділ операторів заключається в операторні дужки Begin та End. Викликається процедура по її імені за допомогою фактичних параметрів.
За допомогою формальних та фактичних параметрів дані передаються із процедури в програму і навпаки. Кожен формальний параметр вказується зі своїм типом, а відповідний йому фактичний параметр - без типу. Між формальними та фактичними параметрами повинна бути відповідність по кількості, їх типу та порядку слідування. Якщо декілька формальних параметрів мають однаковий тип, то їх можна записати через кому, а потім вказати тип, наприклад:
Procedure AK(A,B,C: integer); {А,В,С-формальні параметри}
........................................................................
AK(5,k, 13); {5, k, 13- фактичні параметри}
Приклад: оформити алгоритм обчислення у =x.
Procedure SS(x, n: integer; var у: integer );
Var I: integer;
Begin
У:=1;
For і: =1 to n do
Y:=y*x;
End;
Тут в заголовку задаються х, n — вхідні параметри; у — значення вихідних даних.
Тіло процедури складається з:
1) частини, що описується. В ній визначена змінна, яка має зміст тільки в середені процедури і називається локальною змінною;
2) оператора, що реалізує алгоритм обчислення степені цілого числа х з натуральним показником.
Приклад: Оформити алгоритм обчислення у=хбез параметрів.
Procedure ss;
Var і: integer;
Begin
У:=1;
For i:=1 to n do
Y:=y*x;
End;
В цьому прикладі процедура не містить списку формальних параметрів і працює з локальною змінною і, що описана у блоці процедури та із змінними х,у,n, які описані в основній програмі. В даному випадку х,у,п являються глобальними змінними по відношенню до процедури. Значення глобальних змінних доступні і можуть бути використані в любій точці основної програми.
Приклад: Знайти кількість від'ємних елементів в масивах А,В,С: А(1..10),В(1..8),С(1..6).
program prozl;
Type mas=array[l..10]of integer;
var a,b,c,r:mas;
nl,n2,n3,i: integer;
procedure ak (n: integer; var r:mas);
var k,i:integer;
begin
k:=0;
for i:=1 to n do
If r[i]<0 then k:=k+1;
write(k:2);
end;
begin
write ('Введіть кількість елементів масивів A,B,C’);
readln(nl,n2,n3);
writeln('Bвeдiть елементи для массиву А:’);
for і: =1 to n1 do read (A[i]);
writeln(Bвedimь елементи для массиву В:’);
for і: = 1 to n2 do read (В[і]);
writeln ('Введіть елементи для массиву С:’);
for і: =1 to пЗ do read (C[i]);
writeln('Kількість від'ємних елементів в масивах А,В,С:');
ak(nl ,a);
ak(n2,b) ;
ak(n3,c);
END.
Для локальних змінних дозволяється вибирати за бажанням любе ім'я. Ідентифікатор локальної змінної не здійснює ніякого впливу на інші частини програми. Якщо в процедуру треба передавати в якості параметру не просто одне значення, а масив, то фактичним параметром повинно бути ім'я масиву. При цьому формальний параметр вказується після слова Var разом з типом масива. Сам опис масиву здійснюється у розділі Туре основної програми.
Переваги використання процедур:
- Економить пам'ять;
- Можливість використання одних і тих самих змінних.
Приклад: Заповнити масив випадковими числами від -50 до 50.
Procedure init (var m:mas);
Var і: integer;
Begin
For i: =1 to n do
M[i]: =-50+random(c);
End;
Де с описано в const c=100. В основній програмі йде виклик randomize;