Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Підручник по ТР.DOC
Скачиваний:
11
Добавлен:
19.11.2019
Размер:
1.79 Mб
Скачать

7. Поняття про процедури та функції

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

Ще одним головним завданням розділу є необхідність привести вас до осмислення написання і використання власних процедур і функцій. Авторам з практики відомо, що більшість з тих, хто починав програмувати на Бейсику у подальшому з великими труднощами приходять до використання цього потужного інструменту програміста. Але ми переконані, що зможемо вас переконати у використанні власних процедур і функцій.

§ 7.1 Чи потрібні процедури і функції

Питання, винесене до заголовку даного параграфу, може здатись вам дещо незрозумілим, як воно незрозуміле і нам. Адже ми до цього весь час використовували стандартні процедури і функції мови програмування, правда особливо на цьому не наголошували. А оскільки ми їх використовували, то вони потрібні! Але мова йтиме далі не про процедури і функції, вкладені в систему програмування розробниками мови, а про написання власних процедур і функцій. І ось тут питання стає доречним: чи потрібні власні процедури і функції? Відповідь однозначна: потрібні і навіть дуже, особливо при написанні великих програм. Уявимо собі таку картину, взяту з футбольного матчу. Перед початком гри тренер дає вказівку правому захиснику: “Ти повинен на 7, 12, 15, 21, 29, 43, 47, 54, 76 і 86 хвилинах зустрічі здійснювати рейди по правому краю.” Мабуть всім вам така інструкція здасться абсурдною. Нам також! Мабуть набагато простішою і ціннішою для гравця і всієї команди в цілому була б інструкція такого типу: “При можливості частіше здійснюй проходи по правому краю”!

Те ж саме і з програмою. Візьмемо конкретний приклад. Нехай нам потрібно розв’язати наступну задачу.

Задача 146 Знайти найменше спільне кратне (НСК) 5-ти чисел.

Розв’язання: Для розв’язання цієї задачі нам потрібно вміти знаходити НСК двох чисел. Тому спочатку розв’яжемо саме цю задачу, а потім повернемось до розв’язання сформульованої вище.

Задача 147 Знайти НСК 2-х чисел.

Розв’язання: Нам відомо, як знаходити НСД (nsd) за алгоритмом Евкліда (див задачу ). Скористаємось ним для знаходження НСК (nsk) на підставі такого твердження: якщо НСД (a,b)=nsd, то nsk=(a div nsd)·b. Спробуйте самостійно вивести дану формулу. А ми приведемо програмну реалізацію розв’язку задачі, не використовуючи ніяких коментарів, ми вже й так все роз’яснили.

program n_s_k1;

var a, b, a1, b1, nsk : longint;

begin

write(’ Введіть перше число: ’); readln(a);

write(’ Введіть друге число: ’); readln(b);

a1:=a; b1:=b;

while a1 <> b1 do

if a1 > b1 then a1 := a1–b1

else b1 := b1–a1;

nsk := (a div a1)*b;

writeln(’НСК чисел ’,a,’ та ’,b,’ = ’,nsk);

readln

end.

Тепер ми можемо повернутись до розв’язання попередньої задачі. Спосіб знаходження НСК для п’яти чисел полягатиме у тому, що ми знайдемо НСК для першого і другого числа, потім знайдемо НСК для знайденого перед цим НСК і третього числа, потім для НСК і четвертого і, нарешті, знайдемо НСК для знайденого на попередньому кроці НСК і п’ятого (останнього!) числа. Спробуйте самостійно реалізувати запропонований спосіб і перевірити, наскільки ваша програма відрізнятиметься від приведеної нижче нами.

program n_s_k1;

var a, b, b1, b2, b3, b4, b5, nsk : longint;

begin

write('Введiть перше число: '); readln(b1);

write('Введiть друге число: '); readln(b2);

write('Введiть трете число: '); readln(b3);

write('Введiть четверте число: '); readln(b4);

write('Введiть п''яте число: '); readln(b5);

a:=b1; b:=b2;

while a <> b do

if a > b then a := a - b

else b := b - a;

nsk := (b1 div a)*b2;

a:=nsk; b:=b3;

while a <> b do

if a > b then a := a - b

else b := b - a;

nsk := (nsk div a)*b3;

a:=nsk; b:=b4;

while a <> b do

if a > b then a := a - b

else b := b - a;

nsk := (nsk div a)*b4;

a:=b1; b:=b2;

a:=nsk; b:=b5;

while a <> b do

if a > b then a := a - b

else b := b - a;

nsk := (nsk div a)*b5;

writeln('НСК п''яти чисел = ',nsk);

readln

end.

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