- •3.1. Найпростіші конструкції мови Турбо Паскаль
- •Алфавіт мови.
- •Типи даних.
- •Константи та змінні.
- •Арифметичні вирази.
- •3.2. Лінійні програми в Турбо Паскалі Загальна структура програми.
- •Присвоювання значень.
- •Введення-виведення даних.
- •Лінійні програми.
- •3.3. Розгалужені програми в тп
- •Логічні вирази.
- •Умовний оператор.
- •Оператор вибору case.
- •Оператор безумовного переходу.
- •3.4. Циклічні програми в тп
- •§2. Оператор циклу з параметром.
- •Оператор циклу з передумовою.
- •Оператор циклу з післяумовою.
- •3.5. Нестандартні типи даних
- •Скалярні типи даних.
- •Масиви даних.
- •Двовимірні масиви.
- •3.6. Підпрограми
- •Функції.
- •Процедури .
3.6. Підпрограми
Циклічний процес передбачає багаторазове повторювання одних і тих же дій на одному етапі обробки інформації. Однак широко поширена інша форма повторювання, коли одна і та ж послідовність дій повинна виконуватися не підряд, а на різних етапах обробки інформації. В алгоритмах такого роду в різних місцях зустрічаються фрагменти, однакові за діями, що виконуються, і різні тільки за значеннями початкових даних. При створенні програми за таким алгоритмом приходиться задавати одну й ту ж групу операторів, що відповідає кожному такому фрагменту. Для більш ефективного програмування подібних повторень в ТП введено конструкцію – підпрограми. Повторювана послідовність операторів оформлюється у вигляді самостійної програмної одиниці, записаної одноразово, але у відповідних місцях програми забезпечується її виконання за зверненням до неї.
Використання апарату підпрограм дозволяє скоротити обсяг та покращити структуру програми с точки зору наочності та сприйняття, зменшити можливість помилок та спростити відладку програми. Підпрограма може розглядатися як самостійний модуль із своїми вхідними і вихідними даними, що дозволяє використовувати її в загальному ієрархічному підході при конструюванні алгоритму та програми за принципом спадаючого проектування.
В Турбо Паскалі підпрограми реалізуються у вигляді процедур та функцій.
Функції.
Функція – це група операторів. в результаті виконання котрих обчислюється одне значення, яке присвоюється імені функції. До речі, за таким принципом визначаються значення стандартних функцій, з якими ми ознайомилися при вивченні арифметичних виразів. Зараз мова йде про функції користувача, які потрібні для складання однієї програми і не будуть потрібні в інших , на відміну від стандартних функцій.
Опис функції розміщується в програмі перед основним блоком і містить заголовок та тіло функції . Опис виглядає як звичайна самостійна програма з своєрідним заголовком:
FUNCTION <ім’я> (<список параметрів та їх типів>) : <тип функції> ;
<ім’я> – ідентифікатор функції;
<список параметрів та їх типів> – перелік формальних параметрів із вказівкою їх типів;
<тип функції> визначає, які значення може набувати ідентифікатор функції.
Формальні параметри – це імена змінних, що використовуються для визначення закону обчислення значення функції. Область дії формальних параметрів обмежується підпрограмою, яка їх використовує. Більш того, ті ж самі імена можуть бути використані в інших підпрограмах і в головній програмі. Функція може не мати параметрів.
Після заголовку і перед тілом функції, як і в будь-якій програмі ,повинні йти блоки оголошень всіх констант, змінних, типів, підпрограм, які використовуються в тілі функції, тобто її основному блоці. Все це – її локальні дані , які не можуть бути використані в головній програмі.
Тіло функції – це послідовність операторів, результатом виконання яких повинно стати значення функції. Тому серед цих операторів обов’язковий оператор присвоювання із ідентифікатором функції в його лівій частині.
Опис функції, як і всі оголошення не викликає ніяких дій. Активізувати підпрограму-функцію може звернення до неї, яке здійснюється за допомогою конструкції:
<ім’я функції> (<список фактичних параметрів>) ;
Список фактичних параметрів повинен відповідати списку формальних параметрів в заголовку функції за послідовністю, кількістю та типами. Фактичні параметри заміщують всі формальні у відповідності до списку.
Послідовність дій при виконанні виклику підпрограми-функції:
Робота головної програми припиняється і починається виконання ПП-функції.
Головна програма передає ПП одне або декілька конкретних значень, тобто відбувається заміна формальних параметрів на фактичні.
Виконуються дії, передбачені ПП, в результаті яких обчислюється значення функції.
Знайдене значення функції повертається в головну програму, саме в ту точку, з котрої викликалася ПП.
Механізм виконання виклику підпрограми-функції можна схематично представити так:
FUNCTION
F ( a1
: T1
; a2:
T2
; …….. ; an :
Tn )
: T ;
F ( b1 , b2, ……, bn )
Правила формування та використання підпрограми-функції:
Перший рядок опису ПП-функції – її заголовок, в якому визначаються : ім’я функції, ім’я та тип кожного формального параметра, тип результату, тобто самої функції.
Локальні змінні, що оголошуються за заголовком функції, ніяк не пов’язані з об’єктами головної програми, навіть якщо в них співпадають імена; при виконанні тіла функції ПП користується окремою від головної “стековою” пам’яттю.
Фактичні параметри можуть бути змінними, константами або навіть виразами.
ПП починає виконуватися з тими значеннями своїх формальних параметрів, які вони мали в момент входу в ПП.
Необхідні для виконання дії містить тіло ПП, яке береться в операторні дужки, як і належить основному блоку, і обов’язково має оператор присвоювання значення імені функції; тип значення повинен бути таким, як указано у заголовку.
Значення, що повертається в головну програму, може бути 1)присвоєне деякій змінній; 2)використано як складова якогось виразу; 3)надруковано; 4)передано в іншу ПП як фактичний параметр.
Підпрограму-функцію можна тестувати та відладжувати незалежно від інших модулів.
Приклад. Скласти програму обчислення значення кількості сполучень
Враховуючи, що в програмі необхідно тричі обчислювати факторіал , має сенс використати для цього конструкцію підпрограми-функції.
PROGRAM SPOLUCH ;
VAR CNM : REAL ;
N , M , L : INTEGER ;
FUNCTION FACTOR ( K : INTEGER ) : INTEGER ;
VAR I , P : INTEGER ;
BEGIN
P := 1 ;
FOR I := 1 TO K DO P := P*I ;
FACTOR := P
END ;
BEGIN
WRITELN (‘ВВЕСТИ N,M’) ; READ ( N , M ) ;
L := N – M ;
CNM := FACTOR(N)/ (FACTOR(M) *F ACTOR(L)) ;
WRITELN ( ‘Кількість сполучень із ‘ , N , ‘ по ‘ , M ,
‘ = ‘ , CNM )
END .
