Створення власних процедур

Тема №7

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

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

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

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


ü вбудовані;

ü визначені користувачем.


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

 

Стандартні функції

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

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

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

До стандартних функцій, що найбільш широко використовуються, відносяться наступні:

ü abs(x) – визначає абсолютне значення аргументу, яким може бути число або вираз цілого або дійсного типу;

ü arctan(x) – обчислює арктангенс кута, значення якого виражене в радіанах;

ü copy(x,n,l) – виділяє в рядковій змінній х групу символів, починаючи з позиції під номером п. Довжина групи дорівнює l. Параметри п і l повинні бути величинами цілого типу;

ü cos(x) – обчислює косинус кута, значення якого виражене в радіанах;

ü delete(x,n,l) – видаляє із рядкової змінної х групу символів, починаючи з позиції під номером п. Кількість символів дорівнює l;

ü ехр(х) – обчислює експоненту аргументу (тобто е в степені х);

ü int(x) – визначає цілу частину аргументу. Значенням функції є величина дійсного типу;

ü ln(х) – обчислює натуральний логарифм аргументу;

ü round(x) – округляє значення аргументу до найближчого цілого числа;

ü sin(x) – обчислює синус кута, значення якого виражене в радіанах;

ü sqr(x) – обчислює квадрат аргументу, яким може бути число або вираз цілого або дійсного типу;

ü sqrt(x) – обчислює квадратний корінь з аргументу;

ü trunc(x) – визначає цілу частину аргументу. Значенням функції є величина цілого типу.

ü length(x) – визначає кількість символів в рядку. Аргументом функції є рядкова змінна (або рядок), а значенням функції є величина цілого типу;

ü ord(x) – визначає код символу в таблиці ASCII Аргументом функції є символ, а значенням функції є величина цілого типу;

ü chr(x) – визначає символ по коду. Аргументом функції є ціле число, а значенням – символ.

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

Функції

Функція, визначена користувачем, складається з заголовка і тіла функції. Заголовок містить зарезервоване слово Function, ідентифікатор (ім’я) функції, взятий у круглі дужки, список формальних параметрів і тип значення, що повертається функцією.

Формат опису:

Function <ім’я> (формальні параметри): <тип результату>;

<ім’я> – задається по тим же правилам, що й імена змінних.

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

<тип функції> – після дужок обов’язково вказується тип значення, що повертає функція після свого виконання. Результат, що повертається, може мати будь-який простий тип і тип string.

Приклад заголовка функції: Function beta (x, b: integer; z: real): real;

Дана функція має ім’я beta, у ній використаються 3 параметри: х і b – цілого типу, z – дійсного, а значення самої функції є дійсним.

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

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

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

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

Y:=<ідентифікатор функції > (фактичні параметри);

В основній частині програми дії, зазначені в розділі опису функції, виконуються тоді, коли необхідно знайти її значення. Для цього необхідно здійснити звертаннядо функції. Звертання до функції в основній частині програми містить у собі ім’я функції й наступний за ним список параметрів, поміщений у дужки. Параметри, зазначені при звертанні до функції, називаються фактичними параметрами, а параметри, зазначені в описі функції – формальними. Фактичні параметри повинні бути того ж типу, що й формальні.

Наприклад, права частина оператора присвоювання d:= beta (3, 4, 7.5) – це звертання до функції beta, a 3, 4 і 7.5 – фактичні параметри даної функції на відміну від формальних параметрів х, b і z. Як фактичні параметри функції можуть виступати й константи (як у вищенаведеному прикладі), і змінні. Зверніть увагу, що всі фактичні параметри перераховуються через кому, навіть якщо вони належать до різних типів. Кожен аргумент повинен відповідати формальним параметрам, зазначеним у заголовку, і мати той же тип.

Процедури

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

Стандартні процедури

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

До таких стандартних процедур відноситься вже відома нам команда ClrScr. Процедурами є й оператори введення/виведення Read, Readln, Write і Writeln. Поряд із цими стандартними процедурами в мові Паскаль широко використовуються також наступні:

ü Delay ( i ) - здійснює затримку виконання програми на i мілісекунд (тисячних часток секунди);

ü Exit — ця процедура не має параметрів. Вона здійснює вихід із процедури або функції в основну частину програми (не плутати з командою Exit меню системи програмування Турбо Паскаль, що закриває систему програмування й робить вихід у середовище операційної системи);

ü GotoXY ( a, b ) - переводить курсор у точку екрана з координатами (а, b);

ü Halt - ця процедура не має параметрів. Вона завершує виконання програми й передає керування операційній системі.

Створення власних процедур

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

Загальний вид опису процедури наступний:

Procedure <заголовок процедури >;

<розділ описів процедури >;

Begin <розділ операторів процедури > end;

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

Формат опису: Procedure <ім’я> (формальні параметри);

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

Формат виклику процедури: <ім’я процедури> (фактичні параметри);

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

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

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

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

Приклад заголовка процедури: рrocedure vspomog (a, b: integer; var с, d: real);

де: vspomog – ім’я процедури; a, b, с, d – імена формальних параметрів, причому а й b є параметрами-значеннями, а с і d – параметрами-змінними.

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: