Інший бік справи - програмне забезпечення

Функція та її виклики

Розглянемо задачу: обчислити мінімальну з відстаней між точками площини AX1; Y1, BX2; Y2 і C1;2. Алгоритм розв'язання цієї задачі очевидний:

1 обчислити відстані D1=AB, D2=AC, D3=BC;

2 обчислити M= min{D1, D2, D3}.

Відстань між точками з довільними координатами X; Y, X'; Y' виражається формулою D=, і для обчислення відстаней нам необхідно тричі написати Паскалівський варіант цієї формули з різними наборами координат: X1, Y1, X2, Y2, потім X1, Y1, 1, 2, потім X2, Y2, 1, 2. Ці вирази досить громіздкі й задають по суті ті самі обчислення, тільки з різними наборами значень. Все це можна записати інакше.

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

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

У даному випадку параметрами будуть чотири координати двох точок. Назвемо їх a1, b1, a2, b2. Опис обчислень задається у вигляді функції, якій ми дамо ім'я dd:

Function dda1, b1, a2, b2: real:real;

Begin

Dd:=sqrt sqra1-a2+sqrb1-b2

End;

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

Program minimdisinput, output;

Var x1, y1, x2, y2, d1, d2, d3, m: real;

Function dda1, b1, a2, b2: real:real;

Begin

Dd:=sqrt sqra1-a2+sqrb1-b2

End;

Begin

Writeln'введіть координати двох точок:';

Readlnx1, y1, x2, y2;

D1:=ddx1, y1, x2, y2;

D2:=ddx1, y1, 1, 2;

D3:=ddx2, y2, 1, 2;

If d1d2 Then m:=d1 Else m:=d2;

If d3m Then m:=d3;

Writeln'найменша відстань: ', m

End.

При виконанні цієї програми після читання значень змінних виконується виклик функції dd: значення змінних x1, y1, x2, y2 присвоюються відповідним параметрам a1, b1, a2, b2 Як звичайним змінним і потім обчислюється значення dd. Воно і є значенням виразу ddx1, y1, x2, y2, що присвоюється змінній d1.

Так само, тільки з іншими аргументами, виконуються другий і третій виклики функції, і інші значення присвоюються змінним d2 і d3.

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

Функція має такий загальний вигляд:

Function Ім'яОзначення параметрів: Ім'я типу;

Означення

Begin

Послідовність Операторів

End;

У першому рядку функції записано Заголовок, де вказано її ім'я й Означення Параметрів. Наприкінці заголовка обов'язково записується ім'я типу значень, що обчислюються в результаті виконання викликів функції. Ці значення називаються такими, що Повертаються.

Параметрів у функції може не бути, тоді й дужки відсутні, а виклик такої функції є просто її ім'ям.

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

1 функція записується серед означень програми;

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

Виклик функції є виразом того типу, який указано в її заголовку. І він, як усякий вираз, може бути частиною складнішого виразу. Наприклад, за необхідності ми могли б написати d1:=sqrddx1, y1, 1, 2+1.

Повернемося до прикладу. Нескладно написати функцію обчислення меншого з двох значень:

Function minx1, x2: real:real;

Begin

If X1x2 Then Min:=x1

Else min:=x2

End;

І помістити її слідом за функцією dd у програмі minimdis. З її використанням обчислення мінімального зі значень змінних d1, d2, d3 можна в тілі програми задати так:

M:=mind1, d2; m:=minm, d3

Або навіть так:

M:=minmind1, d2, d3

При обчисленні останнього виразу спочатку виконується внутрішній виклик mind1, d2. Значення, обчислене при його виконанні, стає аргументом у зовнішньому виклику.



Головне меню

Схожі статті:

Популярні записи