Смекни!
smekni.com

Структуровані типи даних записи та множини Використання процедур та функції мови Turbo Pascal (стр. 3 из 3)

Приклад1 розробки процедури:

Procedure Sum (a, b : real; var y, z : real);

const n=10;

var i : integer;

begin

for i := 1 to n do

begin

y := a + b * i;

z := 4 * y – i;

end;

end.

Тут aі b– вхідні параметри, їх значення передаються із основної програми в цю процедуру. Результати процедури (вхідні параметри)є обчислені значення yі z, які передаються із процедури в основну програму і там можуть бути використані.

b. Методика використання процедури у зовнішньому блоці.

Для використання процедур існує так званий оператор процедури:

<ім’я процедури>_ (список фактичних параметрів)

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

Program PR;

procedure P(x, y : real; var z : real );

end;

begin

P(a, b, c);{виклик процедури}

end.

Рис.3

Приклад 2: в програмі визначити довжину кола C і площі круга S, обмеженого цим колом; відстань Lцентра кола від початку координат О. Координати центра кола – x, y , радіус кола – R.

Program KOLO ( input, output );

Var R : real; {радіус}

x, y : real:{координати центра}

C : real;{довжина кола}

S : real;{площа круга}

L : real;{відстань від центру}

Procedure KRUG ( R, x, y : real; var C, S, L : real);

Const pi = 3.14;

Begin

C := 2 * pi * R;

S := pi* sqr ( R );

L := sqrt ( sqr(x) + sqr(y));

End;

Begin

Writeln (ввести R, x , y :‘);

Read ( x, y , R);

KRUG ( R, x ,y, C, S, L);

Writeln (‘довжина кола = ’, C : 6 : 2);

Writeln (‘площа кола = ’, S : 6 : 2);

Writeln (‘відстань = ’, L : 6 : 2);

End.


Результат виконання:

Ввести значення R, x, y:

386

довжина кола = 18,84

площа круга = 8,26

відстань = 10,00

Пояснення процесу звертання до процедур:

При виконанні дій, заданих оператором процедури, виконується передача фактичних параметрів, т.б. їх підставка на місце фіктивних. Таким чином в тілі процедури кожен формальний параметр заміняється фактичним. Виникає, так зване, модифіковане тіло процедури, яке безпосередньо реалізується ЕОМ. Після виконання процедури в комірках пам’яті ЕОМ залишаються результати, які поіменовані фактичними параметрами, які відповідають даним результатам.

Суть (трактовка) параметрів-значень і параметрів змінних.

Розглянемо особливості передачі параметрів із зовнішнього блоку до внутрішнього.

1-й спосіб – підстановка на місце формальних параметрів обчислених значень фактичних параметрів. Наприклад:

Sum (3.5, 7.6, y, z);

2-й спосіб – підстановка замість формальних параметрів імен фактичних параметрів:

Sum (x1, x2, y, z);

При цьому результати процедури завжди утримують імена (і не обов’язкого співпадаючи з іменами формальних параметрів). Наприклад:

Sum (x1, x2, С, D);

Розглянемо можливі варіанти опису фактичних параметрів у зовнішньому блоці і відповідне звертання до процедури.

Таблиця 1

І. ProcedureP(x : тип; y : тип; varz : тип);

1

A – const; B - const;

C – var

P (A, B, C)
2

A – var; B – var;

C – var

A := F1; B := F2;

…………….

P (A, B, C); або

read (A, B);

……………

P (A, B, C);

3 C – var; P (3, 4 ,C);

ІІ. Procedure P1(var x : тип; var y : тип; var z : тип);

4

A- var;

B- var;

C- var;

A := F1; B :=F2;

aбо

read (A, B);

……………………

P1 (A, B, C);

Коментарій табл.1:

1) фактичні параметри A,B у зовнішньому блоці описані як const і замінюють формальні параметри-значення x, y процедури Р;

2) фактичні параметри А і В обчислюються або вводяться у зовнішньому блоці перед вставленням їх у процедуру;

3) фактичні параметри А і В не об’явлені. Тому замість їх імен вставленні конкретні значення 3 і 4;

4) всі параметри задані змінні, тому при формуванні модифікованого тіла процедури на місце формальних параметрів підставлені імена фактичних параметрів.


7. Процедури без параметрів

В таких процедурах замість формальних параметрів використовують глобальні змінні.

Використання процедур без параметрів потребує уваги і коректності при складанні програм, точного дотримання правил локалізації змінних.

Для приклада 2 – програма обчислення параметрів кола при використані процедури без параметрів буде мати вигляд:

Приклад 2а:

Program KOLO1 ( input, output );

Var R, x, y, С, S, L : real;

Procedure KRUG ( R, x, y : real; var C, S, L : real);

Const pi = 3.14;

Begin

C := 2 * pi * R;

S := pi* sqr ( R );

L := sqrt ( sqr(x) + sqr(y));

End;

Begin

Writeln (ввести R, x , y :‘);

Read ( x, y , R);

KRUG ;

Writeln (‘довжина кола = ’, C : 6 : 2);

Writeln (‘площа кола = ’, S : 6 : 2);

Writeln (‘відстань = ’, L : 6 : 2);

End.

Змінні, яки використані у процедурі описані як глобальні.

8. Особливості використання функцій

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

Особливості функцій:

1) має тільки один результат виконання;

2) результат позначається іменем функції і передається в основну програму, тому імені функції присвоюють необхідний тип даних:

3) форма побудови функції відрізняється від процедури тільки заголовком;

4) можна викликати в середині виразу:

F := FAST (M) – FAST (K);

Приклади заголовків функції:

1) FUNCTION f (a, b :real) : real;

А і В – дійсні параметри значення;

F – ім’я функції, яка отримає результат виконання функції типа real/

2) FUNCTION f1 (x : real; var y, z : integer) : real;

x- дійсні параметри значення;

y, z – цілі параметри змінні;

Суть параметрів-значень і параметрів-змінних аналогічна процедурам

3) FUNCTION f2 : real;

без параметрів

Приклад 3; знайти різницю факторіалів F=m! – k!

FUNCTION FACT ( n: real) : real;

Var i :integer:

p : real;

Begin

p :=1:

for i := 1 to n do

p := p * i;

FACT := p;

End;

Тут FACT– ім’я функції, якому присвоюється результат типа real. Формальним параметром є n – параметр-значення типу integer.

(наприк. mik):

F := FAST (M) – FAST (K);

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

9. Методи звертань до процедур і функцій

Існує 3 варіанти звертання до процедур і функцій:

1) із зовнішнього блоку (цей спосіб розглянули у попередніх питаннях лекції);

2) із сусідньої функції;

3) із самої функції – рекурсія.

Розглянемо на прикладах 3-й і 2-й варіанти звертання:

Функцій (процедура), яка викликає сама себе називається рекурсивною.

Суть рекурсії розглянемо на прикладі4:

Визначити факторіал у рекурсивній формі:

n!=1, при n=0ж

n!=n(n-1)!, при n>0.

Тут n! визначається через (n!-1), т.б. через ту ж саму функцію.

Programa FACT (input, output);

Var n : integer;

FUNCTION F ( v : integer) : integer;

Begin

If v = 0 then

F := 1

else

F := v * F(v-1);

End;

Begin

Writeln (‘ ввести аргумент n ‘);

Read ( n );

If n<0 then

Writeln (‘факторіал не визнач.’);

else Writeln (‘факторіал’,n ,’= ’, F(n));

end.

В прикладі4 рекурсивна функція F можно представити і не в рекурсивною:

FUNCTION F( v : integer) : integer;

Begin

F := 1:

for i := 1 to v do

F := F * i;

End;

Особливість: на реалізацію рекурсивної функції ЕОМ затрачує значний час, хоча її опис більш компактний і наочний. Не рекурсивні функції обчислюються швидко.

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

Для виключення таких ситуацій використовують, так званий, випереджальний опис процедур і функцій. При цьому до опису процедури F1 вказується на подальші використання процедури F2. Тоді звертання з F1 до F2 допустимо (рис.5).

ProgramPr…;

Procedure F2 (…);

FORWARD;

Procedure F1 (…);

F2 (…);

End;

Procedure F2;

end;

begin

end.

Рис.5

Pr містить 2-і незалежні процедури F1, F2. В F1 є звертання до F2, тому використаний випереджальний опис процедури F2, який складається із заголовка з параметрами і службового слова FORWARD.

Тоді сам опис F2 має заголовок без повторення формальних параметрів.

Особливості:

1)при наявності у складі програми декількох процедур або функцій, які звертаються одна до одної, то виникає, так звана, пряма рекурсія. У цьому випадку використовують випереджальний опис процедур.

2)Вхід до блоку процедур або функцій тільки через його початок, а вихід по закінченню всіх дій.

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

3)при необхідності із середини блока можна використати стандартну процедуру EXIT, яка має форму:

EXIT (аргумент)

Якщо аргументом є ім’я програми або службове слово PROGRAM, то виконання програми достроково завершується.

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


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

Висновки

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