При вирішенні нових завдань можна спробувати скористатися раніше написаними програмами. Алгоритм, раніше і цілком використовується в складі інших алгоритмів, називається допоміжним. Застосування допоміжних алгоритмів дозволяє розбити задачу на частини, структурувати її.
Вся програма умовно може бути розділена на дві частини: основну і допоміжну. В основній частині проводиться проста обробка інформації, організується звернення до різних допоміжних модулів (підпрограм).
Допоміжний алгоритм теж може викликати інші допоміжні, довжина такої ланцюжка викликів теоретично не обмежена. Тут і далі наступні пари слів використовуються як синоніми: алгоритм і програма, допоміжний алгоритм і підпрограма, команда і оператор, програма і модуль. Допоміжними і основними алгоритми є не самі по собі, а по відношенню один до одного.
При використанні допоміжних алгоритмів необхідно враховувати спосіб передачі значень вихідних даних для них і отримання результату від них. Аргументи допоміжного алгоритму # 151 це змінні, в яких повинні бути поміщені вихідні дані для рішення відповідної підзадачі. Результати допоміжного алгоритму # 151 це також змінні, де міститися результати вирішення цих підзадач, а також результатом може бути конкретна дія, яка вчиняє комп'ютер під дією підпрограми.
Підпрограми можуть бути двох видів: підпрограма без параметрів і підпрограма з параметрами. Звернення до підпрограми може бути організовано з будь-якого місця основної програми або іншої підпрограми скільки завгодно раз.
При роботі з підпрограмами важливими є поняття формальних і фактичних параметрів. формальні параметри # 151; це ідентифікатори вхідних даних для підпрограми. Якщо формальні параметри отримують конкретні значення, то вони називаються фактичними. Формальні параметри можуть отримати конкретні значення тільки в тій програмі, де виробляється звернення до даного модулю-підпрограмі. Тип і порядок запису фактичних параметрів повинні бути такими ж, як і формальних параметрів. В іншому випадку результат роботи програми буде непередбачуваним. З цього випливає, що фактичні параметри використовуються при зверненні до підпрограми з основної, а формальні параметри # 151; тільки в самому модулі.
Підпрограма з параметрами використовується для запису багаторазово повторюваних дій при різних вихідних даних. Підпрограми з параметрами можна розділити на два типи: підпрограми-функції і просто підпрограми з параметрами (їх називають процедурами).
При складанні підпрограм з параметрами треба дотримуватися таких правил:
1) кожна підпрограма має своє ім'я і список формальних параметрів;
2) процедура з основної програми викликається командою виклику, яка за формою нічим не відрізняється від виклику команди виконавця. Результат присвоюється одній або декільком змінним, які знаходяться в списку формальних параметрів. Але результатом можуть бути, звичайно, не тільки значення змінних, але будь-яке дію, виконане ЕОМ.
Приклад 1. Використовуємо алгоритм знаходження найбільшого спільного дільника двох натуральних чисел як допоміжний при вирішенні завдання: скласти програму віднімання дробів (a. B. C. D # 151; натуральні числа). Результат представити у вигляді звичайного нескоротного дробу.
Виклик процедури здійснюється наступним чином:
За способом передачі фактичних значень в підпрограму в Turbo Pascal 7.0 виділяють параметри-змінні. параметри-значення. параметри-константи і масиви відкритого типу. рядки відкритого типу. параметри-процедури. параметри-функції (подробиці # 151; в літературі).
Функція (на відміну від процедури) завжди повертає єдине значення.
Покажемо, як зміниться підпрограма з прикладу, якщо її записати у вигляді функції.
Отже, після списку параметрів вказується тип значення функції, а в тілі функції хоча б один раз зустрічається присвоювання змінної, ім'я якої збігається з ім'ям функції, відповідного значення.
Виклик функції буде наступним:
Взагалі, виклик функції може бути присутнім в виразі, що стоїть: у правій частині оператора присвоювання, в процедурі виведення, в якості фактичного параметра в виклику іншої підпрограми і т.д.
При вирішенні завдань доцільно проаналізувати умову, записати рішення в великих блоках (які не є операторами Pascal), деталізувати кожен з блоків (записавши у вигляді блоків, можливо, як і раніше не операторів Pascal), і т.д. продовжувати до тих пір, поки кожен з блоків не буде реалізований за допомогою операторів мови.
Приклад 2. Дано натуральне число n. Переставити місцями першу і останню цифри цього числа.
Можна помітити, що необхідно деталізувати логічну функцію Impossible, яка діагностує, чи можлива перестановка, і процедуру Change, яка цю перестановку (в разі, якщо вона можлива) виконує.
Тут необхідно деталізувати функцію Number, що повертає кількість цифр у записі натурального числа (тому що функція Impossible містить її виклик, то в розділі описів функція Number повинна їй передувати).
Нарешті, остання процедура.
Можливі також підпрограми, які викликають самі себе. Вони називаються рекурсивними. Створення таких підпрограм є гарним прийомом програмування, але не завжди доцільно через надмірне витрати пам'яті ЕОМ.
Приклад 3. Знайти максимальну цифру в запису даного натурального числа.
Сайт створено в системі uCoz