Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Програмування.doc
Скачиваний:
7
Добавлен:
19.11.2019
Размер:
742.91 Кб
Скачать

2.1 Процедурний підхід до програмування

2.1.1 Теоретичні відомості

Процедура - фрагмент програми, який має своє ім'я. Якщо в програмі звернемося до імені, в програмі відбувається активізація процедури, що називається викликом процедури.

Після виклику виконуються оператори в процедурі, а по закінченні управління повертається назад в головну програму і виконується оператор, який стоїть за викликом процедури. Опис процедури:

Procedure ім'я_процедури (ім'я_параметра1: тип;

ім'я_параметра2: тип;

var ім'я_параметра3:тип;

.......................):

begin

{тіло процедури} end;

Процедура повертає значення, що визначається, через параметри-змінні, які описуються, як var ім'я_параметра3:тип; в списку параметрів. Параметри, що описуються як ім'я_параметра2: тип; називаються параметрами - значеннями.

Опис функції:

function ім'я_функції (ім'я_параметру) : тип_значення_функції;

begin { тіло функції, в кінці тіла обов'язковий оператор

ім'я_функції:= значення; } end;

Функція завжди визначає тільки одне значення і повертає його до головної програми через своє ім'я. Оператор виклику процедури:

ім'я_процедури(фактичні значення параметрів);

Виклик функції можливий через оператор присвоєння або через параметр процедури або іншої функції:

ім'я_змінної:=ім'я_функції (фактичні значення параметрів);

writeln(ім'я_функції (фактичні значення параметрів));

формальні параметри - це локальні змінні, що використовуються тільки в тілі процедури або функції. Фактичні параметри підставляються під час виклику процедури або функції та замінюють формальні параметри. Для опису параметрів використовується розділ типів користувача: type ім'я_типу=стандартний_тип;

Випреджуючий опис процедур та функцій використовується, коли в програмі необхідно використати процедуру до моменту її опису. Для цього використовується ключове слово FORWARD.

Procedure a( параметри) ; forward;

Procedure b( параметри) ;

Begin

…….

A(P);

End;

Procedure a( параметри) ;

Begin

…….

B(P);

End;

При використанні зовнішніх процедур задається директива компілятора {$L ім'яфайла.OBJ}. Для використання процедур та функцій в головній програмі вони повинні бути об'явлені своїми заголовками та ключовим словом EXTERNAL;

{$L ім'яфайла.OBJ}

Procedure Proc1; EXTERNAL;

Procedure Proc2(X,Y:Byte); EXTERNAL;

Function Func1(X,Y:Byte):word; EXTERNAL;

2.1.2.Приклад програми

Умова задачі: Ввести матрицю цілих чисел вимірністю 5*5, в кожному рядку знайти максимальний елемент та замінити його на діагональний

type matr=array[1..5,1..5]of integer;

vector=array[1..5]of integer;

var

a:matr; {матриця}

max:vector; {масив максимальних елементів}

ind:vector; {масив номерів стовпчиків, де є максимальний елемент}

i,j:integer; {параметри циклів}

n:integer; {вимірність матриці}

procedure vvod(var ap:matr;var np:integer);

var i,j:integer;

begin write('n: ');

readln(np);

writeln('matr');

for i:=1 to np do

for j:=1 to np do

read(ap[i,j]);

end;

procedure poisk(ap:matr;np:integer;var maxp:vector;var indp:vector);

var i,j:integer;

begin

for i:=1 to np do {перегляд рядків матриці}

begin

{фіксація першого максимального елемента}

maxp[i]:=ap[i,1];indp[i]:=1;

for j:=1 to np do {перегляд стовпчиків}

if maxp[i]<ap[i,j] then

begin {визначення максим, елемента та його індексів}

maxp[i]:=ap[i,j];

indp[i]:=j; {масив індексів максимальних елементів рядків} end;

end;

end;

procedure VyvodMatr(ap:matr; np:integer);

var i,j:integer;

begin for i:=1 to np do begin

for j:=1 to np do

write(ap[i,j]:5);

Writeln; end;

end;

procedure VyvodVector(maxp:vector;np:integer);

var i:integer;

begin for i:=1 to np do

writeln('B рядку ',i,' максим, елемент ',maxp[i],'ind=', ind[i]);

end;

procedure zamena(var ap:matr;np:integer;indp:vector);

var i,j:integer;

begin

for i:=1 to np do

a[i,i]:=ap[i,indp[i]];end;

{головна програма}

begin

writeln('Результати л.р.вар.');

vvod(a,n);

writeln('задана матриця');

VyvodMatr(a,n);

poisk(a,n,max,ind);

VyvodVector(max,n);

zamena(a,n,ind);

writeln('матриця пiсля замiни');

VyvodMatr(a,n);

end.