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

23)Процедурні типи

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

Характерно, що синтаксис запису процедурного типу в точності збігається із записом заголовка процедури або функції, тільки опускається ідентифікатор після ключового слова procedure або function. Наведемо деякі приклади описів процедурного типу (Turbo / Borland Pascal не дозволяє описувати функції, які повертають значення процедурного типу. Результат функції повинен бути строкового, речового, цілого, символьного, булевского типу, покажчиком або мати перелічувальний тип, визначений користувачем):

Як видно з наведених прикладів, існує два процедурних типу: тип-процедура і тип-функція. Імена параметрів в описі процедурного типу відіграють суто декоративну роль - на сенс опису вони не впливають. Необхідними є тільки ідентифікатори типів параметрів і результатів (для функцій).

Після оголошення процедурного (або функціонального) типу його можна використовувати в описах параметрів підпрограм. І, звичайно, необхідно написати ті реальні процедури і функції, які будуть передаватися як параметри. Вимога до них одне: вони повинні компілюватися в режимі {$ F +}. Оскільки за замовчуванням прийнято режим {$ F-}, такі процедури обрамляются парою відповідних директив.

Процедурні типи, щоб вони були сумісними з привласнення, повинні мати однакову кількість формальних параметрів, а параметри на відповідних позиціях повинні бути одного типу. Також, повинні збігатися типи повертаються значень у функцій. Крім цього, процедурні змінні за форматом сумісні з змінними типу Pointer і після приведення типів можуть обмінюватися з ними значеннями. Але краще не зловживати операціями обміну значень таких змінних, тим більше з привидами типів. Програми з подібними прийомами дуже важко налагоджувати, вони мають тенденцію "зависати" при найменшій помилку. Однією з причин зависання може стати така дуже поширена помилка, як спроба використовувати змінну-процедуру, що не присвоївши їй відповідного значення. Це нічим не діагностується, і призводить до непередбачуваних наслідків. Наведений вище приклад був побудований для наочності, тому що немає необхідності вводити змінні-процедури там, де замість них можна підставити звичайні дзвінки. Однак, використання процедурних типів не обмежується простими процедурними змінними. Як і будь-який інший тип, процедурні типи можуть брати участь у побудові структурованих типів (наприклад, записи):

Підпрограми, як параметри.Один з ефективних способів створення великих програм, технологія низхідного проектування, полягає в їх конструюванні за принципом «розділяй і пануй»: програма розглядається як набір маленьких фрагментів, кожний з яких виконує певну логічно завершену дію, може бути виконаний декілька разів та є більш керованим, ніж програма в цілому. Такий невеликий фрагмент програмного коду називається підпрограмою. Підпрограма позначається ідентифікатором, тобто має власне унікальне ім'я. Вказування в тексті програми імені підпрограми рівнозначне запису всіх її операторів і називається викликом підпрограми.Отже підпрограма — це іменована частина програми, котра описує деякі обчислення і може бути викликана з будь якого місця програми, де синтаксисом мови це не заборонено. Таким чином, для багаторазового виконання деякого програмного коду достатньо записати його один раз у підпрограмі, і надалі, в разі потреби, вказувати лише її ім'я. Концепція програмування, що ґрунтується на використанні підпрограм як стандартних блоків для створення нових програм, отримала назву повторне використання коду. Мови, в яких реалізовано механізми використання підпрограм, називаються процедурно-орієнтованими. Мова Pascal належить до таких мов.Зазначимо, що конструювання програм з невеликих «будівельних блоків» сприяє їх більшій ясності та гнучкості, що приводить до підвищення їх ефективності, якості та надійності. Одна з найпомітніших переваг такого підходу полягає у простоті механізму внесення змін і виправлень у процедурно-орієнтовані програми. Пояснимо цю тезу на прикладі. Припустимо, що програма створює зображення моделі одягу. Якщо програма не є процедурно-орієнтованою, то кожен ґудзик малюватиметься окремими, «своїми» операторами, і для того щоб змінити форму всіх ґудзиків, доведеться послідовно змінювати спосіб відображення кожного з них. Якщо ж креслення ґудзика записати у вигляді підпрограми, то внесення змін до цієї підпрограми приведе до автоматичної зміни зображення всіх ґудзиків.В мові Pascal існує два різновиди підпрограм: процедури та функції. Функція відрізняється від процедури тим, що повертає деяке значення в точку її виклику. Іншими словами, під час виклику функції її ім'я може інтерпретуватись як ім'я деякої змінної величини. В розділах 4.1.1 та 4.1.2 розглядатимуться способи створення та використання процедур і функцій. Розділ 4.1.3 присвячено стандартним процедурам і функціям, які є частиною системи програмування Pascal. У розділах 4.1.4 - 4.1.6 підпрограми розглядаються в розрізі процесів, що відбуваються в оперативній пам'яті під час їх виконання. Нарешті, в розділі 4.1.7 описано процедурні типи — один із найбільш потужних інструментів процедурно-орієнтованого програмування.

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