Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
все лабы.doc
Скачиваний:
9
Добавлен:
05.11.2018
Размер:
1.86 Mб
Скачать

Лабораторна робота 8 процедури і функції

Мета роботи: виробити практичні навички в написанні та налагодженні програм з використанням процедур і функцій.

Процедури

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

У найпростішому випадку процедура може бути лише пойменованою групою операторів, наприклад:

procedure aa;

begin

d:=x; x:=y; y:=d

end;

У такій процедурі без параметрів і без оголошення перемінних всі імена передбачаються відомими програмі, оголошеними раніше. Ці змінні називаються глобальними. Змінна може бути локалізована, тобто оголошена в процедурі.

Процедура з параметрами перелічує змінні - параметри, що будуть використовуватися при виконанні процедури. Такі параметри вказуються в круглих дужках після імені процедури, наприклад:

procedure tr(a,b,c:real; var y:real);

Зазначені в дужках параметри називаються формальними. Якщо перед ім'ям формального параметра стоїть слово var, то такий параметр є параметром-перемінною, у противному випадку - значенням.

Для звертання до процедури досить указати її ім'я і список фактичних параметрів у круглих дужках, наприклад:

tr(p1, p2, p3, rez);

При звертанні потрібно, щоб, по-перше, кількість фактичних та формальних параметрів збігалося; по-друге, фактичні параметри p1,p2, p3,rez мали той же тип, що і формальні параметри a,b,c,y. У нашому випадку тип real. Фактичний параметр, що відповідає параметру-змінній, може бути тільки змінною. Фактичний параметр, що відповідає параметру-значенню може бути будь-яким вираженням відповідного типу, зокрема константою. Наприклад, звернутися до tr можна так:

tr (2.5,sqr(x)+4,a+b*x,r);

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

Процедура має ту ж структуру, що і головна програма, тобто складається із заголовка і блоку. Блок містить розділи label, const, type, var і виконувану частину (від begin до end;).

Процедура міститься в головній програмі після розділу var і перед begin програми. У будь-якій процедурі може міститися звертання до раніше описаної процедури.

Функції

Функції відрізняються від процедур тим, що в них результат обчислень привласнюється безпосередньо імені функції.

Опис функції повинен починатися зі службового слова function і закінчуватися вказівкою типу функції:

function f(x:matr; var y:real):real;

Серед операторів функції обов'язково має бути присвоювання імені функції деякого значення: f:=<значення>;

Формальні параметри функцій вводяться за тими ж правилами, що й формальні параметри процедур.

Приклад виконання завдання лабораторної роботи

Приклад 29. Обчислити значення виразу

.

Елементи масивів a(10) і b(5) визначаються за формулами:

ai=3,1i2+4,9і-5, bi=10ln(i+5)+cos2(i).

Обчислення добутку модулів елементів оформимо у виді процедури, а обчислення суми квадратів елементів - у виді функції. Програма має вид:

program pr29;

uses crt;

const m=10; n=5;

type raz=1..m; mac=array[raz] of real;

var a,b:mac; pa,pb,sa,sb,z:real;i:integer; w:char;

procedure pro(x:mac;k:integer; var p:real);

var i:integer;

begin p:=1;

for i:=1 to k do p:=p*abs(x[i])

end;

function sum(x:mac;k:integer):real;

var i:integer; s:real;

begin s:=0;

for i:=1 to k do s:=s+sqr(x[i]); sum:=s

end;

begin clrscr;

WRITELN(' ':10,'МАСИВ А ');

for i:=1 to m do begin

a[i]:=3.1*sqr(i)+4.9*i-5;

Write(a[i]:8:2,' ':4);

IF I MOD 5 = 0 THEN WRITELN; END;

WRITELN; WRITELN(' ':10,'МАСИВ B ');

for i:=1 to n do begin

b[i]:=10*ln(i+5)*sqr(cos(pi*i));

write(b[i]:8:2,' ':4); end; writeln;

pro(a,m,pa); pro(b,n,pb);

sa:=sum(a,n); sb:=sum(b,n);

z:=(pa+pb)/(sa+sb); writeln;

WRITELN(' PA = ',PA:8:2,' PB = ',PB:8:2);

WRITELN(' SA = ',SA:8:2,' SB = ',SB:8:2);

WRITELN(' Z = ',Z:8:2);

w:=readkey

end.