- •Основи програмування мовою Паскаль
- •Часть 1. Основы языка Паскаль 2
- •Часть 2. Элементы профессионального программирования на Паскалі 62
- •Частина 1. Основи мови Паскаль
- •1. Алгоритм і програма
- •1.1. Алгоритм
- •1.2. Властивості алгоритму
- •1.3. Форми запису алгоритму
- •1.4. Програма й програмне забезпечення
- •1.5. Етапи розробки програми
- •2. Дані в мові Паскаль
- •2.1 Константи
- •2.2 Змінні й типи змінних
- •3. Арифметичні вирази
- •4. Лінійний обчислювальний процес
- •4.1 Оператор присвоювання
- •4.2 Оператор уведення
- •4.3 Оператор виведення
- •4.4 Керування виводом даних
- •4.5 Вивід на друк
- •5. Структура простої програми на Паскалі
- •6. Компілятор і оболонка Turbo Pascal
- •7. Обчислювальний процес, що розгалужується, і умовний оператор
- •7.4. Короткий умовний оператор
- •If логічний_вираз then оператор1;
- •7.5. Повний умовний оператор
- •If логічний_вираз then оператор1
- •7.7. Вкладені умовні оператори
- •7.9. Приклади програм з умовним оператором
- •8. Директиви компілятора й обробка помилок уведення
- •9. Оператор циклу. Цикли із передумовою і після-умовою
- •10. Цикл із лічильником і дострокове завершення циклів
- •11. Типові алгоритми табулювання функцій, обчислення кількості, суми й добутку
- •11.1 Алгоритм табулювання
- •11.2 Алгоритм організації лічильника
- •11.3 Алгоритми нагромадження суми й добутку
- •12. Типові алгоритми пошуку максимуму й мінімуму
- •13. Розв'язок навчальних завдань на цикли
- •14. Одномірні масиви. Опис, уведення, вивід і обробка масивів на Паскалі
- •15. Розв'язок типових завдань на масиви
- •Частина 2. Елементи професійного програмування на Паскалі
- •16. Кратні цикли
- •16.1 Подвійний цикл і типові завдання на подвійний цикл
- •16.2 Оператор безумовного переходу
- •17. Матриці й типові алгоритми обробки матриць
- •18. Підпрограми
- •18.1 Процедури
- •18.2 Функції
- •18.3 Масиви як параметри підпрограми
- •18.4 Відкриті масиви
- •19. Безлічі й перечислимые типи
- •20. Обробка символьних і строкових даних
- •20.1. Робота із символами
- •20.2 Робота з рядками
- •21. Текстові файли
- •21.1 Загальні операції
- •21.2 Приклади роботи з файлами
- •21.3 Робота з параметрами командного рядка
- •22. Записи. Бінарні файли
- •23. Модулі. Створення модулів
- •23.1. Призначення й структура модулів
- •Implementation
- •23.2. Стандартні модулі Паскаля
- •24. Модуль crt і створення простих інтерфейсів
- •25. Модуль Graph і створення графіки на Паскалі
- •Додаток 1. Таблиці Ascii-Кодів символів для операційних систем dos і Windows
- •Додаток 2. Основні директиви компілятора Паскаля
- •Додаток 3. Основні повідомлення про помилки Паскаля
- •Додаток 4. Додаткові лістинги програм
- •Додаток 5. Розширені коди клавіатури
- •Ascii‑ коди
- •Розширені коди
- •Додаток 6. Правила гарного коду
- •Додаток 7. Рекомендована література
18. Підпрограми
Написання будь-якої великої програми неможливо як без розбивки завдання на менш складні подзадачи, які ми можемо вирішувати незалежно, так і без повторного використання раніше написаного коду (представимо, що кожна нова програма писалася б "з нуля"?!). Розв'язати ці найважливіші завдання дозволяє механізмпідпрограм, наявний у будь-якій мові програмування, у тому числі, і в Паскалі.
Підпрограмоюназивають незалежну частину програми, призначену для розв'язку якоїсь подзадачи. Підпрограма взаємодіє з основною програмою через механізмпараметрів– так називають вхідні й вихідні дані, з якими працює підпрограма. Одного разу написана підпрограма, виконана з тими або іншими значеннями параметрів, може вирішувати деякий клас завдань.
Використання підпрограм у чомусь схоже на розрахунки з використанням математичних або фізичних формул. Так, маючи загальні формули розв'язку квадратного рівняння, ми можемо підставити замість коефіцієнтів a, b і c будь-які числові значення й розв'язати будь-яке конкретне рівняння. Аналогічно, ми могли б написати підпрограму із вхіднимипараметрами a, b, c івихіднимипараметрами x1, x2 (знайдене коріння рівняння), а потім, використовуючи потрібне число раз цю підпрограму (однократне використання підпрограми називається їївикликом), розв'язати будь-яка кількість квадратних рівнянь.
Отже, використання підпрограм дозволяє розв'язати наступні завдання:
Зменшення розмірів коду й економія пам'яті за рахунок можливості кількаразового виклику однієї й тієї ж підпрограми в рамках однієї програми;
Краще структурування програми за рахунок розбивки завдання на більш прості подзадачи;
Ефективне повторне використання одного разу написаного коду.
Розглянемо загальну структуру складної програми, що містить дві підпрограми:
Var розділ_описів_1;
Заголовок Підпрограми_1;
Begin
{Тіло підпрограми_1}
End;
Заголовок Підпрограми_2;
Begin
{Тіло підпрограми_2}
End;
Var розділ_описів_2;
Begin
{Тіло головної програми}
End.
Як видне з опису, кожна підпрограма має заголовок( щонайменше, у цьому заголовку повинне бути зазначене її призначене програмістом ім'я) ітіло, що полягає з операторів. Подібно тілу циклу, тіло підпрограми укладене в операторные дужкиbegin … end;. Зверніть увагу, що в лістингу два розділи описів. Перший з них розташований до обох підпрограм, другий – після них перед тілом головної програми. Дані, описані в першому розділі –глобальні, вони доступні всім частинам програми, розташованим нижче по її тексту. Дані другого розділу описів доступні лише головній програмі, тому що описані безпосередньо перед нею. Загальне правило дуже простої: підпрограми "бачать" усі глобальні змінні, описані вище їхні тіла. Аналогічно, без вживання спеціальних заходів підпрограма "бачить" і може викликати будь-яку іншу підпрограму, розташовану вище її по тексту програми. Тут друга підпрограма може викликати першу, але не навпаки. Головна програма, як правило, розташована останньої, може викликати всі підпрограми.
На практиці не рекомендуєтьсяробити підпрограми залежними від глобальних даних, тому що це знижує їхпереносимость(можливість повторного використання). Зрозуміло, кожного з розділів описів у конкретній програмі може й не бути. Більше того, оскільки підпрограма – окрема й, в ідеалі, незалежна частина програми, вона може містити власний розділ описулокальнихзмінних, призначених лише для її потреб і невидимих з інших частин програми. Наприклад, для підпрограми розв'язку квадратного рівняння такий локальної змінної могла б бути зміннаd, призначена для обчислення дискримінанта рівняння. Пояснимо цей важливий момент на прикладі:
Var i:integer;
{глобальна змінна – описана поза всіма підпрограмами}
Заголовок Підпрограми;
Var i:integer;
{локальна змінна – описана після заголовка підпрограми}
Begin
{Тіло підпрограми}
End;
Begin
{Тіло головної програми}
End.
Описана перед тілом підпрограми локальна змінна iне має ніякого відношення до однойменної змінної, описаної вище. На час виконання підпрограми локальна зміннаiвитісняєглобальну, роблячи значення останньої недоступної. Після завершення підпрограми значення локальноїiбуде загублено, а значення глобальної iніяк від цього не зміниться. Уточните по цьому прикладу визначення глобальної й локальної змінних.
У Паскалі існує два види підпрограм, які ми вивчимо в даній темі – процедури й функції. У програмі може бути довільна кількість як функцій, так і процедур.