Процедури
<заголовок>: procedur <ім'я> [(<список формальних параметрів>)];[forward;] <тіло процедури>
Правила описування формальних параметрів та використання випереджуючого описування при організації рекурсії такі ж самі, як і для функції.
Різниця: - у зверненні - у випадку використання процедури як початкові данні так і результати повинні бути передані як парамети.
Приклад: визначити середнє
а) за допомогою функції program first; var x,y:real; function midle(a,b:real):real; begin midle:=(a+b)/2; end; begin readln(x,y); writeln(midle(x,y):8:2); end.
в) за допомогою процедури program second; var x,y,m:real; procedure midle(a,b:real;var mi:real); begin mi:=(a+b)/2; end; begin readln(x,y); midle(x,y,m); writeln(m:8:2); end.
Приклад: виконати множення матриць A(m,n),B(n,k), введення, виведення та множення оформити у вигляді процедур.
Program mul; Type mat=array[1..50,1..50] of real; Var a,b,c:mat; m,n,k,i,j:byte; Procedure inpm(var x:mat:m,n:byte); {введення матриці} Var i,j:byte; Begin {введення розміру матриці та її елементів} write(‘введіть розмірність, m,n ‘); readln(m,n); {введення матриці по рядках} for i:=1 to m do begin for j:=1 to n do read(x[i,j]); readln; end; end;
procedure outpm(x:mat;m,n:byte); {виведення матриці} var i,j:byte; begin for i:=1 to m do begin for j:=1 to n do write(x[i,j]:7:2); writeln; end; end;
procedure mul(m,n,k:byte;a,b:mat;var c:mat); {множення A(m,n)*B(n,k)=C(m,k)} var i,j,p:byte; begin for i:=1 to m do for j:=1 to k do begin c[i,j]:=0; for p:=1 to n do c[i,j]:=c[i,j]+a[i,p]*b[p,j]; end; end; {головна програма} begin inpm(a,m,n); inpm(b,n,k); mul(m,n,k,a,b,c); outpm(c,m,k); end;
|