Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab 8,9.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
27.38 Кб
Скачать

2.5. Глобальні та локальні змінні

Усі змінні, описані в розділі опису змінних до опису процедур, є

глобальними змінними. Вони зберігають своє значення протягом виконання

всіх функцій і процедур, а також головної програми.

Змінні, описані в розділі опису змінних конкретної процедури або

функції, є локальними змінними. Їхні значення зберігаються лише на час

виконання функції або процедури та діють лише у цих функціях та процедурах,

а також у будь-якій описаній в них процедурі чи функції (вкладені процедури

чи функції). Локальні змінні недоступні для операторів головної програми.__

ПОНЯТТЯ ФУНКЦІЇ

У математиці поняття функції – це залежність однієї змінної від іншої. Ці

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

Таблиця

x 1 2 3 4 5

y 1 4 9 16 25

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

мовах розглядаються лише ті функції, для яких можна задати алгоритм

визначення їхніх значень.

0

5

10

15

20

25

30

0 1 2 3 4 5

y = x2

математичний вираз

графік функції

y

х

48

У мові програмування Паскаль допускаються лише ті функції, які дають

результат простого типу. Це пояснюється тим, що результат повертається з

функції в головну програму через ім’я функції, тому може бути єдиним і

простим значенням.

2.2. Опис функцій в мові паскаль

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

програми після опису змінних. Структура опису функції аналогічна структурі

основної програми. Опис функції складається із заголовка та тіла функції. Тіло

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

FUNCTION <ім’я функції> (<формальні параметри>:<тип

формальних параметрів>):<тип результату>;

<Розділ описів і визначень локальних параметрів

функції>

BEGIN

<оператор 1>;

<оператор 2>;

........

<оператор n>;

<ім’я функції>:=<результат>

END;

ВИКЛИК ФУНКЦІЇ

Виклик функції здійснюється за аналогією з викликом стандартної функ-

ції, тобто:

1. Виклик функції здійснюється за її іменем. У дужках задаються фак-

тичні параметри.

2. Виклик функції може стояти лише праворуч від оператора присво-

ювання.

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

та передається у заданий вираз.

51

Приклад:

Обчислити вираз S = i! +5 +(2k)! + (3k)!

Для обчислення факторіала використати функцію.

Текст програми:

PROGRAM TEST (INPUT, OUTPUT);

VAR

S, I, K :INTEGER;

{Опис функцiї}

FUNCTION FACT(N:INTEGER):INTEGER;

VAR F,I1: INTEGER;

BEGIN

F:=1;

FOR I1:=1 TO N DO

F:=F*I1;

FACT:=F

END;

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

BEGIN

READLN(I,K);

S:=FACT(I) +5 + FACT(2*K) + FACT(3*K);

WRITELN(’S= ’,S)

END.

РЕКУРСИВНІ ФУНКЦІЇ

У Паскалі функції можуть бути рекурсивними, тобто викликати самі себе.

Прикладом рекурсії може бути приклад обчислення факторіала N!, який

можна подати як:

0! = 1 4! = 3!*4

1! = 1 …

2! = 1!*2 N! = (N-1)!*N

3! = 2!*3

Тобто:

  

− >

=

=

( 1)!* , 0

1, 0

!

N N якщо N

якщо N

N

52

Рекурсивна функція обчислення N! має такий вигляд:

FUNCTION FACTR(N:INTEGER):INTEGER;

BEGIN

IF N=0 THEN

FACTR:=1

ELSE

FACTR:=FACTR(N-1)*N;

END;

Тут ім’я функції FACTR(N-1) стоїть праворуч в операторі присвоєння із

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

Виконання рекурсивної функції розглянемо на прикладі виклику функції:

S:=FACTR(3).

При першому входженні у функцію формальний параметр N отримує

значення 3.

Оскільки N ≠ 0, то виконується оператор:

FACTR:=FACTR(3-1)*3 – тобто FACTR(2).

Знову здійснюється перевірка N = 2, де N ≠ 0, отже, знову виконується

оператор:

FACTR:=FACTR(2-1)*2.

Тоді N = 1.

Знову здійснюється перевірка N = 1, де N ≠ 0, отже, знову виконується

оператор:

FACTR:=FACTR(1-1)*1.

Нарешті N = 0, виконується оператор: FACTR:= 1.

А далі іде збільшення аргумента до 3.

Значення формального параметра N стає: N=1, тоді:

FACTR:=FACTR(0)*1 = 1*1 = 1.

Значення формального параметра N стає: N=2, тоді:

FACTR:=FACTR(1)*2 = 1!*2 = 2!

Значення формального параметра N стає: N=3, тоді:

FACTR:=FACTR(2)*3 = 2!*3 = 3!

Слід пам’ятати, що кожен черговий рекурсивний виклик призводить до

утворення нової копії локальних змінних. Крім цього, на повторне звертання до

функції витрачається комп’ютерний час.

53

Якщо порівняти використання функції обчислення факторіала як рекур-

сивну, так і не рекурсивну, то можна зробити висновок:

1. Рекурсія – це не властивість самої функції, а властивість її опису.

2. Рекурсивний запис коротший та наочніший, але дає програш у вико-

ристанні пам’яті під локальні змінні та у комп’ютерному часі.

3. Нерекурсивний опис довший, але використання пам’яті комп’ютера

та машинного часу ефективніше.__

Завдання

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

Текст програми

program q;

var f,f1: text; s,str: string;

b:array[1..100]of integer;i,n:integer;

procedure p1(str: string; var k: integer);

var i: integer;

begin

k:=0;

for i:=1 to length(str) do

if str[i]='e' then k:=k+1 else

if str[i]='y' then k:=k+1 else

if str[i]='u' then k:=k+1 else

if str[i]='i' then k:=k+1 else

if str[i]='o' then k:=k+1 else

if str[i]='a' then k:=k+1;

end;

begin

begin

assign(f,'D:\student\f.txt'); rewrite(f);

writeln('Ââåä³òü ê-ñòü ðÿäê³â');

readln(n);

for i:=1 to n do

begin

readln(str);

writeln(f,str);

if i=n then writeln('Ви вже ввели вс³ рядки');

end;

close(f);

end;

assign(f1,'D:\student\f.txt'); reset(f1);

for n:=1 to n do

begin

readln(f1,s);

p1(s,b[n]);

end;

for n:=1 to n do writeln('У рядку ¹',n,' ',b[n],' Голосних');

close(f1);

end.

Висновок:

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]