Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лабораторна робота №5




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

 

Кількість занять – 2(4години).

Мета роботи – навчитися писати програми мовою ТР 7.0 із застосуванням процедур та функцій (структурне програмування).

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

Послідовність виконання індивідуального завдання.

1.Отримати індивідуальне завдання.

2.Скласти графічну блок-схему виконання завдання.

3.Написати програму мовою ТР 7,0, яка реалізує даний алгоритм.

4.Ввести, налагодити та виконати програму за комп’ютером.

5.Оформити та захистити звіт.

 

3.5.1.Поняття процедур та функцій

До цього часу при розробленні програм ми не використовували другий розділ структури ТР 7.0, що орієнтована саме на широке розділення процедур та функцій, за допомогою яких поставлена глобальна задача розділяється на більш дрібні (локальні) задачі, кожна з котрих розв’язується окремо підпрограмою (процедурою або функцією). Такий підхід реалізує так зване структурне програмування.

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

А) Процедура. Опис процедури має вигляд:

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

Параметри, які вказуються при описі процедури (функції), називаються формальними. Приклад опису:

PROCEDURE VVOD (X: CHAR; VAR Y:INTEGER).

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

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

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

Наприклад: VVOD(‘A’,B).

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

Для нашого прикладу:

‘А’ В (фактичні параметри)

передача

Х Y (формальні параметри).

Між фактичними і формальними параметрами повинна бути відповідність:

а) в кількості (кількість фактичних параметрів дорівнює кількості формальних параметрів);

б) у типі (тип кожного фактичного параметра збігається з типом відповідного йому параметра);

в) у порядку слідування (фактичні параметри повинні записуватися в такому ж порядку, в якому відповідні їм параметри слідують у списку формальних параметрів);

Б) функція. Опис функції має вигляд:

FUNCTION<ім’я функції>(<список формальних параметрів>):<тип значення функції>;

Наприклад:

FUNCTION F(X,Y:REAL):REAL.

Для виклику і виконання функції в основному блоці програми використовується вказівник функції, який оформляється таким чином:

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

Z:=(A+B)*F(N,M);

 
 

 


указівник функції.

У наведеному прикладі функція F повертає в основну програму на своє місце значення дійсного типу (REAL).

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

Коли слід використовувати процедуру, а коли функцію? Тут існує таке правило:

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

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

 

3.5.2. Механізм параметрів у процедурі та функції

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

Формальні параметри діляться на параметри-значення, параметри-змінні (перед ними стоїть ключове слово VAR), параметри-процедури (перед ними стоїть ключове слово FUNCTION).Розглянемо перші два види параметрів.

Механізм параметрів у процедурі показано на рисунку 3.5.1. Нехай опис процедури має вигляд:

PROCEDURE MECHANIZM(AF, BF:REAL;VAR CF:REAL);

а оператор процедури (при її виклику з основної програми):

МECHANIZM(A, B, C).

У момент цього виклику в області ОЗП процедури (див. рис.) автоматично створюються робочі змінні AF і BF, яким присвоюються обчислені в основній програмі значення фактичних параметрів (значення змінних А та В). Таким чином, змінні AF і BF є копіями змінних А й В, і саме над ними виконуються дії в процедурі. На фактичних же параметрах(змінних А і В) ці дії ніяк не відбиваються (процедура їх не змінює). Після повернення з процедури в основну програму робочі змінні AF і BF знищуються, а їх вміст загублюється.

Усе сказане справедливо лише для параметрів-значень. Для параметрів-змінних (формальний параметр CF) робоча змінна (копія) в області ОЗП процедури не утворюється і ніяка передача даних в неї не відбувається. При цьому в процедуру лише передається адреса області пам’яті, де знаходиться відповідний фактичний параметр (зміна С), і всі дії в процедурі виконуються саме над змінною С. Таким чином, із фізичної точки зору, змінні С та CF є одним і тим же і їм відповідає одна й та ж комірка пам’яті комп’ютера. Після виходу з процедури результат її роботи зберігається в змінній С, і саме через неї процедура передає цей результат в основну програму.

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

Механізм параметрів у функції показано на рисунку 3.5.2. Розглянемо цей механізм для наступного опису функції:

FUNCTION F (X, Y: REAL; VAR Z: REAL): REAL.

Під час виклику функції передача їй фактичних параметрів виконується за тими ж правилами, що і при виклику процедури (див. вище). Однак, на відміну від процедури, функція виробляє скалярне значення, яке є основним результатом її роботи. Це значення повинно при роботі функції присвоюватися змінній, ім’я якої збігається з іменем самої функції (змінна F). Саме через цю змінну за допомогою вказівника F(A, B, C) результат роботи функції передається в основну програму.

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

 

 
 

 


Область ОЗУ основної програми

 

 

Область ОЗУ процедури

 

Рис.3.5.1. Механізм параметрів в процедурі.

 

A,B,C(CF) — фактичні параметри (змінні, з якими працює основна програма).

С(СF) — параметр-змінна.

AF,BF — параметри-значення.

AF,BF,C(CF) — формальні параметри (змінні, з якими працює процедура).

 

 

 
 

 

 


Область ОЗУ основної F(A,B,C)

програми


Область ОЗУ функції

 

 

A,B,C(Z),F(A,B,C) — фактичні параметри (змінні, з якими працює основна програма).

С(Z) — параметр-змінна.

X,Y,C(Z) — формальні параметри (змінні, з якими працює процедура).

X,Y — параметри-значення.

F — результат роботи.

 

Рис.3.5.2. Механізм параметрів у функції

 

3.5.3.Зразок виконання індивідуального завдання

Завдання: Виконати індивідуальне завдання лабораторної роботи №1(див. п.3.1.4.) з використанням процедур та функцій.

Перш за все необхідно з’ясувати, які дії програми будуть виконуватися за допомогою процедур і функцій. Очевидно, що обчислення значень функції F(X) необхідно оформити у вигляді функції (вона буде виробляти конкретні значення). Введення масиву Х та табуляцію функції з використанням різних циклічних конструкцій (дій) запишемо як процедуру. Тоді робота основного блоку програми зводиться лише до виклику відповідних процедур і передачі їм відповідних параметрів. Такого типу програми е компактними, їх легко читати та налагоджувати.

Складемо алгоритм обчислень у вигляді графічних блок-схем (див. рис. 3.5.3-3.5.8).


 

 

 

Рис.3.5.3.Блок-схема обчислення значень функції F(x)(функція)

 

так ні

 

 

Рис.3.5.4.Блок-схема табуляції (процедура)

 

 

 

Рис.3.5.5.Блок-схема табуляції функції (процедура 2)

 

 

ні

 

так

 

 

Рис.3.5.6.Блок-схема введення масиву х (процедура 3)

 

так ні

 

 

Рис.3.5.7.Блок-схема обчислень значень функції (процедура 3)

 

 

Рис.3.5.8.Блок-схема виконання завдання (основний блок програми)

 

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

PROGRAM TABULATION 4;

USES Crt;

CONST n=20;{опис глобальних констант}

TYPE MASSIV=array[1..n]OF REAL; {опис глобальних типів}

VAR h,a,b,c:REAL;

X:MASSIV; {опис глобальних змінних}

 

FUNCTION F(XF:real); {опис функції}

BEGIN {основний блок функції}

IF XF<C

THEN

F:=ln(XF+1)/ln(5)

ELSE

F:=exp(XF*ln(2));

END;

 

PROCEDURE REP_UNT(aF,bF,hF: REAL);{опис процедури 1}

VAR (xL,FL:REAL); {опис локальної змінної}

BEGIN {основний блок процедури 1}

XL:=aF;

REPEAT

FL:=F(xL);

WRITELN (xL, FL);

XL:= xL+ hF;

UNTIL xL>bF;

END;

 

PROCEDURE WHILE_DO (aF,bF,hF: REAL); {опис процедури 2}

VAR xL,FL:REAL;

BEGIN {основний блок процедури }

XL:=aF;

WHILE xL<=bF DO

BEGIN

FL:=F(xL);

WRITELN (xL,FL);

xL:=xL+hF;

END;

END;

 

PROCEDURE VVOD (nF: INTEGER; VAR xF:MASSIV) {опис процедури 3}

var I:=integer,; {опис локальних змінних}

BEGIN {основний блок процедури}

FOR I:=1 TO nF DO

BEGIN

WRITE(‘введіть ‘,і,’-ий елемент масиву:’);

READLN (xF [і]);

END;

END;

 

PROCEDURE FOR_TO_DO(nF:INTEGER;VAR xF:MASSIV){опис процедури4}

VAR I: INTEGER; {опис локальних змінних}

VAR FL: REAL;

BEGIN {основний блок процедури 4}

FOR I:=1 TO nF DO

BEGIN

FL:=F(xL [і]);

WRITELN (xF [і], FL);

END;

END;

 

BEGIN {розділ основного блоку програми}

WRITE (‘Введіть нижній кінець інтервалу а:’);

READLN (A);

WRITE (‘Введіть верхній кінець інтервалу b(b>a):’);

READLN (b);

WRITE (‘Введіть крок табуляції h(h<<(b>a)):’);

READLN (h);

WRITE (‘Введіть число с(a<c< b):’);

READLN (с);

WRITE {‘уведення пустого рядка’}

WRITE (‘Результати обчислень із використанням REPEAT..UNTIL:’);

REP UNT (a, b, h,); {виклик процедури 1}

WRITELN (‘натисніть будь яку клавішу’);

READLN; {пауза для перегляду результатів}

WRITELN (‘Результати обчислень із використанням WHILE:’);

WRITE DO(a, b, h) {виклик процедури 2}

WRITELN (‘натисніть будь яку клавішу’);

READLN; {пауза}

VVOD(n,X); {виклик процедури 3}

WRITELN:

WRITELN(‘Результати обчислень із використанням FOR:’);

FOR TO DO (n,X);

WRITELN (‘натисніть будь яку клавішу для закінчення’);

READLN;

END. {Кінець програми}

 

 

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

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

Дві процедури REP_UNT та WHILE_DO не мають формальних параметрів-змінних. Це викликано тим, що вони не передають результати своєї роботи в основну програму, а виводять їх безпосередньо на екран монітору за допомогою оператора виведення WRITELN. Аналогічно відбувається і в останній процедурі FOR_TO_DO, однак вона все ж містить формальний параметр-змінну xF. Справа в тому, що цей параметр має тип ARRAY(масив). Якби він був указаний як параметр-значення, то для нього була б створена копія — також масив. Це призводить до нераціонального використання пам’яті комп’ютера, тому рекомендують формальні параметри типу ARRAY описувати як параметри-змінні (для яких копії не створюються). До речі, зверніть увагу, що для використання такого формального параметра треба попередньо створити ім’я типу в підрозділі типів за допомогою ключового слова TYPE (в нашому випадку цей тип має ім’я MASSIV).

Введемо, налагодимо та виконаємо наведену програму за комп’ютером.

 

 

Контрольні вправи та питання

1. Як і в якому місці програми виконується опис процедури та функції?

2. Які види формальних параметрів Ви знаєте?

3. Який механізм параметрів у процедурах і функціях?

4. В чому різниця між процедурою та функцією і коли їх слід використовувати?

5. Зробіть покрокове виконання наведеної програми та її трасування. В чому різниця?

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

7. Як процедури і функції повертають результат своєї роботи в основну програму?

 




Поделиться с друзьями:


Дата добавления: 2014-10-31; Просмотров: 431; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.