Головна

Рrоgram Ехаmple;

Vаr а, b: integеr;

{---}

Рrосеdure Swap (Var х, y:integеr);

Vаr z: integеr;

Begin

z:=x; x:=y; y:=z

End;

{---}

Begin

Write ('Введіть значення змінних а і b:');

Readln (а, b);

Swap(a, b); {звернення до процедури}

Writeln ('а=',а,' b=',b) {виведення нових значень}

End.

Питання для самоконтролю

1. Що таке підпрограма? Для чого використовуються підпрограми? Вкажіть переваги використання підпрограм.

2. Що таке формальні та фактичні параметри?

3. Які змінні називаються глобальними, а які локальними. Наведіть приклади.

4. Який загальний вигляд оформлення процедур?

5. Як виглядає виклик процедури в головній програмі?

Задачі

1) Використовуючи процедуру для обчислення степеня числа, знайти значення виразу:

у=а4х43х32х21х+а0.

Коефіцієнти а4, а3, а2, а1, а0 і значення х вводяться з клавіатури.

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

3) Дано натуральне число. Написати програму з використанням процедури, яка друкує всі його дільники й підраховує їх кількість.

2.2. Підпрограми-функції

Розглянемо другий вид підпрограм - функції. Відмінність від процедур полягає в тому, що результатом виконання функції є єдине значення. Це обчислюване значення присвоюється імені функції.

Опис функції

Загальний вигляд опису функції такий:

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

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

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

Приклад №1

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

Розв'язування

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

FunctionQuantity(x:integer):integer; Var k:integer;

Begin

k:=0;

While x<>0 Do

Begin

k:=k+1;

x:=x div 10;

End;

Quantity:=k;

End;

У заголовку функції зазначене її ім'я - Quantity. Функції передається тільки один параметр - ціле число, кількість цифр якого треба знайти. Результат - теж ціле число. У розділі змінних описана змінна k - лічильник цифр. У тілі функції за допомогою циклу While збільшується значення лічильника й щоразу вилучається остання цифра.

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

Program Examplе;

Var n1,n2, k1,k2:integer;

{---}

Function Quantity(x:integer):integer;

Var k: integer;

Begin

k:=0;

While x<>0 Do

Begin

K:=k+1;

x:=x div 10

End;

Quantity:=k

End;

{---}

Begin

Write('Введіть два числа:');

Readln(n1,n2);

k1:=Quantity(n1);{кількість цифр першого числа}

k2:=Quantity(n2);{кількість цифр другого числа}

if k1=k2 Then Writeln('Однакова кількість цифр')

Else if k1>k2

then Writeln('У першому числі цифр більше.')

else Writeln('У другому числі цифр більше.')

End.

Приклад №2

Знайти найменше спільне кратне трьох чисел.

Розв'язування

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

Program NSK_3;

Var x,y,z,r1,r2:integer;

{---НСД двох чисел---}

Function NSD(a,b:integer):integer;

Begin

While a<>b do

If a>b then a:=a-b

else b:=b-a;

NSD:=a;

End;

{---НСК двох чисел ---}

Procedure NSK_2(a,b:integer; Var Nsk:integer);

Begin

Nsk:=(a*b)div NSD(a,b);

End;

{--- основна програма---}

Begin

Write ('Введіть три цілих числа:');

Readln(x,y,z);

NSK_2(x,y,r1);

NSK_2(r1,z,r2);

Writeln('NSK_3=',r2);

End.

Питання для самоконтролю

1. Який загальний вигляд оформлення функцій?

2. Як виглядає звернення до функції в головній програмі?

Заданий фрагмент програми:

Var a,b,c,d : Real;

Function Dum (a,b:Integer; c:Real):Real;

Begin

Dum:=a+b*c;

End;

{---}

Begin

...

a:=Dum(3,6,b);

d:=Dum(9,12,a);

...

End.

3. Якоий тип має змінна а, яка використовується в операторі Dum:=a+b*c?

4. Який тип має змінна а, яка використовується в операторі а:=Dum(3,6,b)?

5. Який тип має змінна а, яка використовується в операторі d:=Dum(9,12,a)?

Дано опис функції:

Function S(a,b,c:integer):integer;

Begin

S:=a*b+b*c+a*c

End;

Чому будуть дорівнювати значення змінної z після виконання операторів:

6. z:=7-S(2,2,3);

7. z:=9+S(3,-7,1);

8. z:=S(0,14,3)*2;

9. Написати текст функції, яка використовується у фрагменті програми:

P:=Per(a,b,c);

WriteLn ('Периметр трикутника=',P).

10. Написати текст функції, яка використовується у фрагменті програми:

m:=Sum(a);

WriteLn('Сума цифр двоцифрового числа', a,' дорівнює ',m).

11. Написати текст функції, яка використовується у фрагменті програми:

V:=Volume(a,b,c);

WriteLN ('Об''єм акваріума=',V).

Задачі

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

1) Знайти суму цифр цілого числа.

2) Знайти суму всіх дільників числа.

3) Визначити, чи є число досконалим (використати функцію з попереднього завдання, змінивши за необхідності).

4) Відстань між двома точками на площині, заданими координатами визначається за формулою . Напишіть функцію для знаходження відстані між двома точками. Використовуючи її, знайдіть периметр трикутника, заданого координатами своїх вершин.

2.3. Підготовка до оцінювання теми
«Процедури і функції»

Заданий фрагмент програми:

Var x,y,z:Real;

Neo,Tank:Real;

{---}

Function Matrix(a:Integer; b,c:Real):Real;

Var m,n : byte;

Begin

m:= Int(b+c);

n:= a*a*a-m;

Matrix:=b/m + c/n

End;

{---}

Begin

...

Neo:= Matrix(15,z,3.14159)+z;

Tank:= Matrix(21,y,0.999)-y;

x:=Neo+Tank;

...

End.

1) Вкажіть змінні, які є глобальними.

2) Вкажіть змінні, які є локальними для функції.

3) Вкажіть змінні, які використовуються в якості формальних параметрів функції.

4) Вкажіть дані, які використовуються в якості фактичних параметрів функції.

Дані описи процедури і функції:

Procedure First(var a,b:integer;c:integer);

Begin

a:=c div a;

b:=c div b

End;

{---}

Function Second(m,k:integer):integer;

Begin

Second:=m*(k mod 10)+k*(m mod 10)

End;

5) Вкажіть правильні оператори.

а) z:= First (m, k, 32000); б) First (a+1, b-2, 0); в) First (m, k, 99000);

г) Second (7, 8); д) a:= Second (a, b); е) Second (3.14, 8).

6) Вкажіть правильні оператори.

а) d:= First (3, 4, 12); б) First (3, 4, 12); в) First (a, b, c);

г) x:= Second (7, 8); д) Second (m, k); е) Second (a, b).

7) Вкажіть правильні оператори.

а) x:= First (a, b, c); б) First (a-1, b+2, a+b); в) First (a, b, 7);

г) n:= Second (k, m); д) z:= Second (3.14, 8); е) Second (m, k).

Дано описи процедури і функцій:

Procedure P (var a,b:integer);

Begin

a:=a+b;

b:=a-b

End;

{---}

Function F (m,k:integer):integer;

Begin

F:=m div 10 + k mod 10

End;

{---}

Function G (a,b:integer):integer;

Begin

G:=a*a+b*b

End;

8) Чому будуть дорівнювати значення змінних a та b після виконання наведеного фрагмента програми?

a:=7; b:=3; P(a,b); b:=F(a,b-a).

9) Чому будуть дорівнювати значення змінних a та b після виконання наведеного фрагмента програми?

a:=98; b:=86-G(a mod 10,a-97); a:=F(a,b).

10) Чому будуть дорівнювати значення змінних a та b після виконання наведеного фрагмента програми?

a:=10; b:=5; b:=G(a,b); P(b,a).

Практичні завдання

11) Знайти найдовшу сторону чотирикутника, заданого координатами своїх вершин у порядку обходу.

12) Задано два натуральні числа M i N. Яке з двох чисел буде більшим, якщо в обох числах переставити крайні цифри?

3. Побудова графічних зображень



  1   2   3   4   5   6   7   8   9   10   11   12   13   Наступна

Середовище програмування АЛГО | G, alfa, test17, x2y, _h1, | Початок | Оператор вибору | Цикл з передумовою | Символьний тип даних | Програма-годинник | Практичне завдання | Початок | Початок |

© um.co.ua - учбові матеріали та реферати