обов`язково повинен бути присутнім оператор присвоювання, в лівій частині якого стоїть ім`я цієї функції;
в заголовку функції обов`язково повинен бути вказаний тип функції;
виклик функції в основній програмі здійснюється безпосередньо усередині вираження по її імені із вказуванням фактичних параметрів.
Формальні і фактичні параметри функції
Формальні параметри представляють собою список перемінних із вказуванням їх типу, які відділяються один від одного крапкою з комою.
В представленій вище програмі використовувані формальні параметри функції – перемінна, яка вказує ім`я масиву, який обробляється усередині цієї функції (m:Mas); перемінна, яка вказує розмірність масиву (x:Integer); та символьне значення (А або В) – ім`я матриці (k:String):
Function Sum (k:String; x:Integer; Var m:Mas):Real;
Фактичні параметри указуються безпосередньо усередині тіла основної програми при виклику функції – після її імені в дужках.
ЗАВДАННЯ 2
Постановка задачі
Обчислити суми і кількість елементів, які знаходяться в інтервалі від a до b для матриць X(10,8) і Y(10,12).
Виконати з використанням підпрограми процедури.
Вирішення задачі
Program Kurs_Task2;
Uses Crt;
Const h=5; m=4; n=6;
Type Mas=Array[1..h,1..n] of Real;
Var x,y : Mas;
a1,b1,a2,b2 : Integer;
v1,v2 : Integer;
Sx,Sy : Real;
{-= Пpоцедуpа встановлення кольоpу шpифта =-}
Procedure Tc (p:Integer);
Begin
TextColor(p);
End;
{-= Пpоцедуpа введення числових елементiв матpиць =-}
Procedure InT (k:String; x:Integer; Var m:Mas);
Var i,j : Integer;
Begin
For i:=1 To h Do
Begin
For j:=1 To x Do
Begin
Write('Масив '); TC(15); Write(k); TC(7);
Write(' строка '); TC(15); Write(i); TC(7);
Write(' елемент '); TC(15); Write(j); TC(7);
Write(' > '); TC(15); ReadLn(m[i,j]); TC(7);
End;
End;
End;
Procedure Out (k:String; a,b,v:Integer; s:Real);
Begin
Write('Сума елементiв матpицi ',k,' в iнтеpвалi вiд ');
WriteLn(a,' до ',b,' доpiвнює ',s:5:2);
WriteLn('Кiлькiсть обчислених елементiв доpiвнює ',v);
End;
{-= Пpоцедуpа обчислення суми елементiв та їх кiлькостi =-}
Procedure Sum (x:Integer; a,b: Integer; m:Mas; Var s:Real; Var v:Integer);
Var i,j,p : Integer;
Begin
p:=0; s:=0; v:=0;
For i:=1 To h Do
Begin
For j:=1 To x Do
Begin
p:=p+1;
If (p>=a)and(p<=b) Then
Begin
s:=s+m[i,j];
v:=v+1;
End;
End;
End;
End;
{-= Основна пpогpама =-}
Begin
ClrScr;
InT('X',m,x);
InT('Y',n,y);
WriteLn('Задайте iнтеpвал для матpицi X:');
Write(' вiд > '); ReadLn(a1);
Write(' до > '); ReadLn(b1);
Sum(m,a1,b1,x,Sx,v1);
WriteLn('Задайте iнтеpвал для матpицi Y:');
Write(' вiд > '); ReadLn(a2);
Write(' до > '); ReadLn(b2);
Sum(n,a2,b2,y,Sy,v2);
Out('X',a1,b1,v1,Sx);
Out('Y',a2,b2,v2,Sy);
ReadKey;
End.
Отриманий результат після виконання програми
Масив X строка 1 елемент 1 > -10
Масив X строка 1 елемент 2 > -9
Масив X строка 1 елемент 3 > -8
Масив X строка 1 елемент 4 > -7
* * * *
Масив Y строка 5 елемент 3 > 16
Масив Y строка 5 елемент 4 > 17
Масив Y строка 5 елемент 5 > 18
Масив Y строка 5 елемент 6 > 19
Задайте iнтеpвал для матpицi X:
вiд > 5
до > 12
Задайте iнтеpвал для матpицi Y:
вiд > 7
до > 15
Сума елементiв матpицi X в iнтеpвалi вiд 5 до 12 доpiвнює -20.00
Кiлькiсть обчислених елементiв доpiвнює 8
Сума елементiв матpицi Y в iнтеpвалi вiд 7 до 15 доpiвнює 0.00
Кiлькiсть обчислених елементiв доpiвнює 9
Аналіз отриманого результату
Для зручності побудови програми замість параметрів (10,8) та (10,12) матриць X та Y відповідно, були використані розміри (5,4) та (5,6), які можуть змінюватися шляхом зміни чисельних значень констант m та n.
Вище приведено результат, обчислений програмою. При введенні обох матриць, вводяться всі числові значення, потім користувач позначає інтервал для обох матриць окремо, в якому потрібно виконати підсумовування та підрахунок кількості підсумованих елементів (в даному випадку для матриці X від 5 до 12, а в матриці Y від 7 до 15 елементу матриці):
Матриця X | Матриця Y
-10 | -9 | -8 | -7 | -10 | -9 | -8 | -7 | -6 | -5
-6 | -5 | -4 | -3 | -4 | -3 | -2 | -1 | 0 | 1
-2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13
6 | 7 | 8 | 9 | 14 | 15 | 16 | 17 | 18 | 19
Для перевірки вірності обчислення програмою суми елементів в заданому інтервалі від 5 до 12 матриці Х, виконаємо підрахунок виділених елементів для цієї матриці:
перевірочне обчислення:
(–6) + (–5) + (–4) + (–3) + (–2) + (–1) + 0 + 1 = –20
кількість елементів: 1 2 3 4 5 6 7 8
результат обчислення програми:
Сума елементiв матpицi X в iнтеpвалi вiд 5 до 12 доpiвнює -20.00
Кiлькiсть обчислених елементiв доpiвнює 8
Як ми можемо бачити, результати ідентичні, а це свідчить про те, що програма обробила вхідні дані вірно і видала вірну відповідь на обидва запитання в обох матрицях (масивах).
Вищевикладене може обгрунтовано свідчити про те, що програма виконана вірно.
Опис формату підпрограми процедури
Підпрограма процедура так же, як і функція, використовується якщо в програмі виявляються однотипові ділянки, які виконують ті ж самі обчислення, але з різними даними.
Структура процедури така ж, як і структура основної програми, тобто включає заголовок і блок. В свою чергу блок складається із розділу операторів.
Опис процедури має вигляд:
Procedure ім`я (формальні_параметри);
розділ описів
begin
розділ операторів
end;
і розміщується в основній програмі (program) в розділі описів.
Тут ім`я – ім`я процедури. Розділ описів, як і в основній програмі, включає розділи label, const, type, var і розділ процедур та функцій.
Параметри процедур можуть бути трьох видів:
параметри-значення (вхідні параметри);
параметри-перемінні (вихідні параметри);
параметри процедурного типу.
Опис вхідних параметрів процедури в списку формальних параметрів має такий вигляд:
список_перемінних1:тип1; список_перемінних2:тип2; …
Відповідно опис вихідних параметрів виглядає так:
var список_перемінних1:тип1; var список_перемінних2:тип2; …
В Турбо-Паскалі допускається також використання нетипізованих вихідних параметрів, які мають