ТОП 10:

Організація програм, що містять підпрограми



(процедури)

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

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

Рисунок 1 - Класифікація підпрограм

 

У мові Турбо-Паскаль виділяють два види підпрограм: процедури (Procedure) і функції (Function). Будь-яка програма може містити кілька процедур і функцій. Процедури і функції з'являються в розділі опису слідом за розділом змінних.

Будь-яка процедура оформляється аналогічно програмі, тобто містить заголовок, розділ описів і розділ операторів:

PROCEDURE [ім' процедури] (формальні вхідні параметри; var вихідні параметри); Розділ описів (починається ключовим словом „var”) BEGIN
Розділ операторів

Розділ операторів

У заголовку вказується службове слово PROCEDURE, далі йде ім'я процедури і параметри, що називаються формальними. Допускається використання процедур без параметрів. Розділ описів процедури, подібно основній програмі, складається з розділів міток, констант, типів, змінних і, у свою чергу, процедур і функцій. Розділ операторів заключається в дужки BEGIN...END, причому після END, на відміну від основної програми, ставиться крапка з комою. Виконання програми починається з операторів основної програми. Як тільки з'вляється необхідність виконати дію процедури, вона викликається по її імені і починає виконуватися. Дані з основної програми передаються в процедуру (вхідні параметри). Після виконання процедури її результати (вихідні параметри) передаються в основну програму. Потім продовжує виконуватися основна програма з оператора, наступного за викликом процедури.

Program UIPA;

Розділ описів глобальних змінних

Procedure P1;

Розділ описів процедури P1

Begin

Розділ операторів процедури P1

End;

Procedure P2;

Розділ описів процедури Р2

Begin

Розділ операторів процедури Р2

End;

BEGIN

Розділ операторів основної програми

END.

Область дії імен

Імена, оголошені в розділі опису основної програми, діють у розділі операторів основної програми й у будь-якій підпрограмі (процедурі чи функції). Ці імена називаються глобальними. Імена, оголошені в підпрограмі, у тому числі і формальні параметри, діють тільки в цій підпрограмі й у будь-якій оголошеній у ній чи процедурі функції. Такі імена називаються локальними. Вони недоступні для операторів основної програми. Формальні параметри являють собою список перемінних із указівкою їхнього типу.

Для виділення вихідних параметрів перед ними ставиться слово Var.

Приклад оформлення програми що містить процедуру:

Утворити блок-схему алгоритму, програму, що містить програму та підпрограму (процедуру) для обчислення значення функції. Дано дійсні числа t,s. Обчислити

D = max(t,-2s,1.17) + max(2.2, t, s - t), ДЄt=1.3, s=0.8

Складемо блок -схему алгоритму:

{Підпрограма Користувача PROCEDURE}

ProgrammyProgram;

Var

t,s,d,m : real;

procedureMax1(a,b,c : real;

varf : real);

Begin

f := a;

ifb > a thenf := b;

ifc > a thenf := c; end;

Begin

writeln('BeAiTbзначення змінних t,s'); read(t,s);

Max1(t, -2*s, 1.17, m); d := m;

Max1(2.2, t, s - t, m);

d := d + m;

writeln('Результат');

writeln('d=',d:6:2);

End.

Реакція ЕОМ:

Введіть значення змінних t, s
1.3 0.8
Результат
d= 3.50

 

В процедурі: а, в і с - вхідні параметри, їхні значення передаються з основної програми в цю процедуру. Результатами процедури (вихідними параметрами) є максимальне значення, що передається з процедури в основну програму і там використовується.

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

Ім'я процедури (фактичні параметри);

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

Організація програм, що містять підпрограми,

Процедури - функції

 

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

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

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

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

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

Перевага такого низхідного програмування очевидна: блоки підвищують надійність Р-програми (кожен блок можна реалізувати незалежно від інших та автономно його тестувати), полегшують її розуміння та дозволяють вести розробку Р-програми колективом програмістів.

Наведемо основні особливості функції користувача.

1) Вона має тільки один результат виконання (але може мати декілька вхідних параметрів).

2) Результат позначається іменем функції і передається в P-програму, яка її викликала.

Функція користувача має вигляд:

Function[ім'я] (формальні вхідні параметри; var вихідні параметри): тип; Розділ описів (починається ключовим словом „var”) BEGIN Розділ операторів

 

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

Область дії імен

Імена, оголошені в розділі опису основної програми, діють у розділі операторів основної програми й у будь-якій підпрограмі (процедурі чи функції). Ці імена називаються глобальними. Імена, оголошені в підпрограмі, у тому числі і формальні параметри, діють тільки в цій підпрограмі й у будь-якій оголошеній, у ній чи процедурі функції. Такі імена називаються локальними. Вони недоступні для операторів основної програми. Формальні параметри являють собою список перемінних з вказівкою їхнього типу.

Для виділення вихідних параметрів перед ними ставиться слово Var.

Приклад оформлення програми що містить процедуру:

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

Складемо блок -схему алгоритму:

{Підпрограма Користувача FUNCTION}

Program myProgram;

var

a,b,c,d,x,y,v,z:real;

Function F1(p,q,s: real) : real;

begin

F1:=Sqrt(Abs(p*q+s));

end;

Begin

writeln('Введіть значення змінних a,b,c,d,x,y,v ');

read(a,b,c,d,x,y,v);

z:=Ln(F1(a+c,v,-(b+d))) / (F1(a,x,b)*F1(c,y,d));

writeln('Результат');

writeln('начення функції Z=',z:6:2);

End.

 

Реакція ЕОМ:

Введіть значення змінних a,b,c,d,x,y,v
2.25 1.78 4.44 3.35 14.6 16.4 8.17
Результат
Значення функції Z= 0.04

 

Хід роботи:

1. Вивчити теоретичний матеріал.

2. Виконати індивідуальне завдання.

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

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

1. Які види підпрограм використовують у мові Pascal?

2. Що таке функція?

3. Як викликається функція?

4. Що таке процедура?

5. Як викликається процедура?

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

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

8. Що таке глобальні змінні?

9. Що таке локальні змінні?

10. Чи можна використовувати функції як процедури у мові Pascal?

Індивідуальні завдання: Скласти програми для розв'язання таких завдань із використанням функцій або процедур:

1. Задані цілі числа n0, d0, n1, d1, ... , n7, d7, a, b ( d0 d1... d7b¹0). Обчислити за схемою Горнера , визначивши процедури повного скорочення раціонального числа, яке задано чисельником та знаменником, а також процедури додавання та множення раціональних чисел.

2. Задано натуральне n, цілі числа a1,a2,..., an. Розглянути відрізки послідовності a1,a2,..., an (підпослідовності елементів, які ідуть підряд), які складаються з

а) степенів натурального m

б) простих чисел.

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

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

4. Дано координати вершин трикутника і координати деякої точки усередині нього. Знайти відстань від даної точки до найближчої сторони трикутника. (При визначенні відстані врахувати, що площа трикутника обчислюється і через три його сторони, і через основу і висоту. )

5. Знайти найменше спільне кратне n заданих натуральних чисел.

6. Два натуральних числа називаються "дружніми", якщо кожне з них дорівнює сумі всіх дільників іншого, за винятком його самого (такі, наприклад, число 220 и 284). Надрукувати всі пари "дружніх" чисел, що не перевищують заданого натурального числа.

7. По дійсному числу a>0 обчислити величину

Корені обчислювати з точністю e=0.0001 по наступній ітераційній формулі:

yo=1; yn+1 =yn+(x/yk-1 -yn)/k,

прийнявши за відповідь наближення y(n+1), для якого ïyn+1-ynï <e .

8. Задане натуральне число n (n³2). Знайти всі прості числа, які менше за n, використовуючи решето Ерастофена ( Виписати всі цілі числа від 2 до n. Перше просте число 2. Підкреслити його, а всі більші числа , які кратні 2, закреслити. Перше з чисел, що зосталися - 3. Підкреслити його, а всі числа, які кратні 3, закреслюємо. І т.д.).

9. Нехай задана квадратна матриця порядка m та натуральне число n. Треба знайти Аn. Використати алгоритм: якщо n=2k, то Аn= (А2)k. Якщо n=2k+1, то Аn= (А2)kА. Для k далі застосовують той же алгоритм.

10. Задане натуральне число n. Записати його подання у системі счислення з основою k.

11. Задано три цілі матриці розміром 9*4. Надрукувати ту з них, де більше нульових рядків (якщо таких матриць декілька, надрукувати їх усі).

12. Дано натуральне число p і дійсні квадратні матриці A,B і С 3-го порядку. Обчислити (ABC)p.

13. Задане парне число n>2. Перевірити для цього числа гіпотезу Гольбаха: кожне парне n>2 можна подати у вигляді суми двох простих чисел.

14. Нехай задана квадратна матриця порядка m та натуральне число n. Треба знайти Аn. Використати алгоритм: якщо n=2k, то Аn= (А2)k. Якщо n=2k+1, то Аn= (А2)kА. Для k далі застосовують той же алгоритм.

15. Задані цілі числа a1,a2,..., an, b1, b2, ... ,bm, k. Якщо в послідовності a1,a2,..., an нема жодного елементу з значенням k, то перший по порядку елемент цієї послідовності, не менший всіх інших елементів, замінити на значення k. За цим же правилом перетворити послідовність b1, b2, ... ,bm. стосовно до значення 10.

 


Лабораторна робота №10.







Последнее изменение этой страницы: 2016-04-18; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.233.215.196 (0.009 с.)