- •Курсова робота з дисципліни «Інформатика»
- •«Використання підпрограм та функцій користувача при роботі з масивами.»
- •Завдання на курсову роботу з дисципліни «Інформатика»
- •І. Теоретична частина
- •1. Масиви
- •1.1. Опис типу
- •1.2. Дії над масивами
- •1.3. Дії над елементами масиву
- •2. Ідентифікатори
- •3. Підпрограми
- •4. Структура програми
- •5. Процедури і функції
- •5.1 Описи процедур
- •5.2 Описи функцій
- •6. Модулі
- •6.1 Модуль Crt
- •6.2 Модуль Strings
- •6.3 Модуль Graph
- •7. Оператори
- •7.1 Прості оператори
- •7.2 Оператор привласнення
- •7.3 Привласнення об'єктного типу
- •7.4 Оператори процедури
- •7.5 Оператори переходу
- •7.6 Структурні оператори
- •7.7 Складові оператори
- •7.8 Умовні оператори
- •7.8.1. Оператор умови (if)
- •7.8.2. Оператор варіанту (case)
- •7.9 Оператор циклу
- •7.9.1. Оператор циклу з післяумовою (repeat)
- •7.9.2. Оператори циклу з передумовою (while)
- •7.9.3. Оператори циклу з параметром (for)
- •7.10 Оператор with
- •Іі. Постановка задачі
- •Ііі. Алгоритм розв’язання задачі
- •IV. Програмні реалізації алгоритму
- •V. Результати виконання програми
- •Висновки
- •Список використаних джерел
5.1 Описи процедур
Опис процедури дозволяє зв'язати ідентифікатор з процедурним блоком. Процедуру можна потім активізувати з допомогою оператора процедури. B заголовку процедури вказується ім'я процедури і описується список формальних параметрів (якщо він присутній):
Запуск процедури здійснюється за допомогою оператора процедури, в якому містяться ім'я процедури і необхідні параметри. Оператори, які повинні виконуватися при запуску процедури, містяться в операторній частині модуля процедури. Якщо в що міститься в процедурі операторі усередині модуля процедури використовується ідентифікатор процедури, то процедура виконуватиметься рекурсивно (буде при виконанні звертатися сама до себе).
Наведемо приклад опису процедури:
procedure NumString(N: integer; var S: string);
var
V: integer;
begin
V := Abs(N);
S := '';
repeat
S := Chr(N mod 10 + Ord('0'))+ S;
N := N div 10;
until N = 0;
if N < 0 then S := '-' + S;
end;
B описі процедури перед блоком операторів може вказується директива переривання (interrupt). Процедура в цьому випадку розглядається, як процедура переривання. Повний опис процедур переривання приводиться у спеціальній та довідковій літературі по паскалю. B даний момент відзначимо що процедури обробки переривання не можна викликати з допомогою операторів процедури, і що в кожній з них задається список параметрів, який обов'язково повинен мати наступний вигляд:
procedure MyInt( Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP): word); interrupt;
Замість блоку операторів в описі процедури або функції можна записати випереджаючий опис (опис forward), зовнішній опис (опис external) або внутрішній опис (опис inline).
Приклад програми
Нижче приводиться варіант програми DORATIO.PAS, в якому використовується процедура для отримання двох значень і функція для обчислення коефіцієнта:
program DoRatio;
var
A,B : integer;
Ratio : real;
procedure GetData(var X,Y : integer);
begin
Write('Введіть два числа: ');
Readln(X,Y)
end;
function GetRatio(I,J : integer): real;
begin
GetRatio := I/J
end;
begin
GetData(A,B);
Ratio := GetRatio(A,B);
Writeln(' Відношення рівне ',Ratio)
end.
Ця програма, звичайно, не є чимось особливим, оскільки вона має більший розмір і повільніше виконується, ніж аналогічна програма без викликів функцій, проте вона ілюструє використання процедур та функцій.
При компіляції і запуску програми першим в тілі програми виконується оператор GetData(A,B). Цей тип оператора називається викликом процедури. При обробці цього виклику програма виконує оператори в GetData, замінюючи X і У (формальні параметри) на А і B (фактичні параметри). Ключове слово var перед X і У в операторі виклику процедури GetData вказує, що фактичні параметри повинні бути змінними і що значення змінних можуть бути змінені і передані назад програмі, що їх викликала. Тому процедурі GetData не можна передавати, константи, вирази і так далі. При завершенні виконання GetData управління передається в основне тіло програми оператору, наступному за викликом GetData.
Цим наступним оператором є виклик функції GetRatio. Відзначимо тут деякі важливі відмінності. По-перше, GetRatio повертає значення, яке потім повинне бути де-небудь використано; в даному випадку це значення присвоюється Ratio. Пo-друге, в основному тілі функції значення привласнюється GetRatio. Taким чином функція визначає яке значення слід повернути. По-третє, перед формальними параметрами I і J тут відсутнє ключове слово var. Це означає, що фактичні параметри можуть бути довільними цілочисельними виразами, наприклад, Ratio:= GetRatio(A+B,300), і що навіть якщо значення формальних параметрів в тілі функції буде змінено, нові значення не будуть передані назад програмі. Це, до речі, не є відмінністю між процедурами і функціями; можна використовувати обидва типи параметрів із будь-яким видом підпpoгpaм.
Функції мають такий же формат, що і процедури за виключенням того, що вони починаються із заголовка function і закінчуються типом даних для значення функції, що повертається:
function ім’я функції (параметри): тип даних;
Як бачимо, тут є тільки дві відмінності від структури звичайної програми: процедури і функції починаються із заголовка procedure або function, а не із заголовка program і закінчуються не крапкою, а крапкою з комою. Процедури і функції можуть мати свої власні константи, типи даних змінні і навіть власні процедури і функції. Але всі ці елементи можуть використовуватися тільки в тих процедурах і функціях, в яких вони визначені.
