ФУНКЦІЇ.
Відмінні особливості функції від процедури заключаються в тому, що вона має тільки один результат виконання, але може мати декілька вхідних параметрів. Результат визначається ім'ям функції і передається в основну програму.
Структура функція має наступний вигляд:
|
| Заголовок;
Розділ опису;
Begin
Розділ операторів;
End;
| |
Заголовок функції складається із службового слова Function, після якого вказується ім’я функції, а в круглих дужках формальні параметри разом зі своїм типом. Закінчується заголовок типом результату функції.
Наприклад:
Function Sum(a,b:integer):Integer;
Розділ опису подібний до розділу процедури.
Всі останні розділи подібні до розділів опису в процедурі.
Викликається функція за її ім'ям з вказівкою фактичних параметрів. Якщо функція змінює значення формальних параметрів, або значення глобальних параметрів- змінних по відношенню до даної функції, то це говорить про те, що функція має побічний ефект. Застосування такої функції порушує структуру програми, тому її використання небажано.
Серед операторів, що входять в функцію, повинен обов'язково бути присутнім
хоч би один оператор присвоєння, в лівій частині якого стоїть ім'я даної функції. Цей оператор визначає значення, яке виробляється функцією.
Виклик та виконання функції виконується при обчисленні значення вказівника функції, який входить в деякий вираз. Після виконання функції, вироблений нею результат використовують в якості значення вказівника функції в тому виразі, в який входить цей вказівник. При виклиці функції передача фактичних параметрів здійснюється так само, як і при виклиці процедури.
Приклад: знайти помилки в наступній програмі:
Program b;
Var a: real;
Function z (x: real): real;
Begin
Z: =x;
If x<0 then z:=z+x; {тут в правій частині використовується оператор присвоєння імені функції.}
End;
Procedure w(var x:real; у: real);
Begin
X: =cos (у);
End;
Begin
W (a,z(5)); {невідповідність типів)
Writeln;
End.
процедурами:
1. В заголовку вказується службове слово Function і закінчується він їм’ям того типу, якому належить значення функції.
2. Складений оператор, який розміщується в опису функції., повинен обов'язково містити в середині себе оператор присвоєння, в якому зліва від присвоєння розміщується ім'я функції. Таких операцій може бути декілька. Але при кожному конкретному зверненні до функції спрацьовувати повинен тільки один. Це присвоєння і визначає значення функції.
Приклад2: Написати програму знаходження максимального елементу одновимірного масиву, який містить не більше п дійсних чисел. Пошук оформити в вигляді функції.
Program fu1;
Uses crt;
Type mas=array[1..100] of real;
Var mas1:mas;
і,п: integer;
function sirch ( mas2:mas; n2: integer): real;
var max: real;
begin
max:=mas2[1];
for i: =1 to n2 do
if max<mas2[i] then max:=mas2[i];
sirch: =max;
writeln(‘максимальний елемент : ', max: 4:2);
end;
begin
clrscr;
write ('Введіть кількість елементів ');
readln(n);
writeln('Bведіть елементи : ');
for і: =1 to n do read(masl[i]);
sirch (mas1,n);
end.
Параметрами-процедурами або параметрами-функціями називають параметри, які в свою чергу являються процедурами або функціями. Для параметра-процедури в заголовку вказується тільки ім'я формального параметру. А для параметра-функції вказується також і тип результату. При виклиці підпрограми формальним параметрам-процедури і параметрам - функції, вказаним в середині процедури повинні відповідати фактичні параметри, які співпадають з ними по кількості і по типу.
При використанні імен процедур та функцій в якості фактичних параметрів треба пам'ятати: якщо процедура, яка передається має параметри, то вони повинні бути значимі. При звертанні передається тільки ім'я процедури або функції, але не їх параметри.
Приклад1 Обчислити k=( vl+v2+v3 ) / 3; де vl,v2,v3 - це об'єми куль з радіусами rl,r2,r3. Об'єми обчислювати з використанням функцій..
Program ju2;
Var k, rl, r2, r3: real;
Function W(k:real):real;
ConstPI=3.14159;
Var v: real;
Begin
v:=4/3*PI*sqr(r) *r;
W: =v;
End;
Begin
Write ('Введіть радіуси rl,r2,r3 ');
Readln(rlr2,r3);
K: =(W(rl)+W(r2)+W(r3))/3;
Writeln('k= ‘,k:5:2);
End.
Приклад: Скласти програму для визначення числа комбінацій, використовуючи функцію для обчислення факторіала.
C=
program Ju3;
uses crt;
var f: real;
nm,n,m: integer;
function fact(n: integer):integer;
var p,i: integer;
begin
P:=1;
for i: =1 to n do
p:=p*i;
fact:=p;
end;
begin
clrscr;
write(‘Введіть n та m: ‘);
readln(n,m);
nm:=n-m;
f:=fact(n)/fact(m)*fact(nm);
writeln(‘Число сходжень з n по m:’f:4:2);
end.
Приклад: Дани відрізки a,b,c,d. Для кожноі трійки цих відрізків, з
яких можливо побубдувати трикутник, надрукувати площу трикутника, знаючи його сторони.
program fu4;
var a,b,c,d,k,l,m: integer;
s,p:real;
function figure(k,l,m: integer): integer;
begin
if((k+l+m)/2 <=k) or ((k+l+m)/2<=l) or ((k+l+m)/2<=m) then
writeln('для даних сторін побудувати трикутник неможливо');
else begin
р: ={k+l+m)/2;
s: =sqrt(p*(p-k) *(p-l) *(p-m));
writln(‘площа=',s: 5:2);
end;
end;
begin
witeln(‘введіть сторони a,b,c,d’);
readln(a,b,c,d);
figure(a,b,c);
figure(b,c,d);
figure(c,d,a);
figure(d,a,b);
end.