Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
План-конспект проведення лекційного заняття з дисципліни «Інформатика»
Модуль 5. Структуровані типи даних (масиви, рядки, записи та файли), підпрограми
Лекція: 5.7. Підпрограми (функції та процедури) у мові Pascal ABC.
ВСТУП
Процедура або функція це послідовність операторів, що має імя, список параметрів та може бути викликана із різних частин програми. На відміну від процедур, функція у результаті виконання, повертає значення. Функції та процедури разом називають підпрограмами.
Будь-яка процедура або функція повинна бути попередньо описана у описовому розділі. Опис підпрограми має вигляд:
procedure імя (список формальних параметрів);
описовий розділ
begin
оператори
end;
Опис функції має вигляд:
function імя (список формальних параметрів): тип значення, що повертається;
описовий розділ
begin
оператори
end;
Оператори підпрограми, разом з операторними дужками, називають тілом підпрограми. Список формальних параметрів разом із дужками може бути відсутнім. Він складається з одної або декількох секцій, розділених символом ";". Кожна секція складається із списку змінних, перелічених через кому, після якого слідують двокрапка і тип. Кожна секція може починатися із службового слова var, що вказує на передавання параметрів за посиланням.
Описовий розділ процедури або функції складається також, як описовий розділ основної програми. У ньому описуються так звані локальні змінні та константи, типи, а також вкладені процедури і функції. Всі локальні змінні доступні тільки усередині даної підпрограми та недоступні із зовні.
Приклад опису процедури:
procedure Reverse(var a: array [1..100] of integer; n: integer);
var i,v: integer;
begin
for i:=1 to n div 2 do
begin
v:=a[i];
a[i]:=a[n-i+1];
a[n-i+1]:=v;
end;
end;
Усередині тіла функції імя функції можна використовувати як спеціальну змінну, який необхідно присвоїти значення, що повертається. Наприклад:
function Add(a,b: real): real;
begin
Add:=a+b;
end;
Імя функції може використовуватися з метою повернення значення тільки у левій частині оператора присвоювання. Якщо імя функції використовується у виразі, це трактується як рекурсивний виклик цієї функції. Замість імені функції усередині тіла функції можна використовувати спеціальну змінну з імям Result. На відміну від імені функції, змінну Result можна використовувати у виразах:
function MinElement(var a: array [1..100] of real; n: integer): real;
var i: integer;
begin
Result:=a[1];
for i:=1 to n do
if a[i]<Result then Result:=a[i];
end;
Якщо усередині функції не присвоїти імені функції або змінній Result деяке значення, функція у результаті свого виконання поверне непередбачене значення.
Параметри, що вказуються при опису підпрограми, називають формальними. Параметри, що вказуються при виклику підпрограми, називають фактичними. Якщо формальний параметр описаний за допомогою службового слова var, то його називають параметром змінній та говорять, що він передається за посиланням. Якщо параметр описаний без слова var, то його називають параметром значенням та говорять, що він передається за значенням.
Якщо параметр передається за значенням, то при виклику підпрограми значення фактичних параметрів присвоюються відповідним формальним параметрам. Наприклад, маємо наступний опис процедури:
procedure PrintSquare(i: integer);
begin
writeln(i*i);
end;
Тоді при виклику PrintSquare(5*a-b) значення 5*a-b буде обчислено і присвоєно змінній i, після чого виконується тіло процедури. Якщо параметр передається за посиланням, то при виклику підпрограми фактичний параметр заміняє собою відповідний йому формальний параметр. У результаті, будь-яки зміни формального параметра змінної усередині процедури приводять до відповідних змін фактичного параметра. Наприклад, якщо описана процедура:
procedure Mult2(var a: integer);
begin
a:=a*2;
end;
то після виклику Mult2(d) значення d збільшується у 2 рази.
У якості фактичного параметра значення можна вказувати будь-який вираз, тип якого співпадає з типом формального параметра або неявно до нього приводиться. Як фактичний параметр змінну можна вказувати тільки змінну, тип якої точно співпадає з типом формального параметра.
При передаванні параметра за посиланням у підпрограму передається адреса фактичного параметра. Тому, якщо параметр займає багато памяті (масив або запис), звичайно він передається за посиланням. У результаті, у процедуру передається не сам параметр, а його адреса, що зменшує необхідний обсяг памяті та збільшує швидкість виконання програми. Наприклад:
procedure Print(var a: array [1..10] of integer; n: integer);
var i: integer;
begin
for i:=1 to n do
write(a[i],' ');
writeln;
end;
Параметр також може описаний за допомогою службового слова const. Це означає, що змінювати його у підпрограмі заборонено. Наприклад:
procedure PrintSquare1(i: integer);
begin
i:=i*i; // верно
writeln(i);
end;
procedure PrintSquare2(const i: integer);
begin
i:=i*i; // помилка!!!
writeln(i);
end;
В Pascal ABC константний параметр передається за значенням (в Delphi за посиланням).
Змінні, що описані у описовому розділі підпрограми, називають її локальними змінними. Змінні, що описані зовні підпрограми, називають глобальними відносно підпрограми. Параметри підпрограми вважають її локальними змінними.
Якщо імя локальної змінної співпадає з імям глобальної змінної, то локальна змінна приховує глобальну так, що до глобальної змінної неможливо звернутися усередині підпрограми. Наприклад:
var i: real;
procedure p;
var i: integer;
begin
i:=5; // присвоювання локальній змінній;
end;
Література