ЗМІСТ:
При програмуванні часто виникає необхідність написання одних і тих же обчислень, але при різних вхідних даних. Для того, що б виключити повторення однакових записів та зробити програму простішою та зрозумілішою, бажано виокремлювати повторюваний код в самостійну частину програми, яка може використовуватись багаторазово за необхідності. Тобто, необхідний блок команд записується в коді тільки один раз, після чого до нього можна звертатися з будь-якої частини програми багаторазово. Така автономна частина програми, що реалізує визначений алгоритм та викликається із різних частин основної програми називається процедурою. Оголошувати процедуру можна в будь-якій частині програми!
Процедура містить заголовок, починається оператором Sub і закінчується оператором End, між якими і поміщається код. Ім'я процедури обробки події складається з імені об'єкта та імені події:
[Public / Private] [Static] Sub <Ім'я процедури> (<Параметри>)
<Оператори>
End Sub
Іменування процедури повинно відбуватися за певними правилами. В дужках за іменем процедури вказують формальні параметри, від яких буде залежати результат програми.
Процедури, оголошені з ключовим словом Public, можна викликати в будь-якому модулі додатка (кожна форма – це окремий модуль). Процедури оголошені як Private, можна викликати тільки в поточному модулі.
Static означає, що всі змінні, оголошені в процедурі, будуть статичними, тобто їх значення зберігаються між викликами.
Параметри забезпечують зв'язок процедури з додатком. Це дані, що передаються в процедуру при виклику.
Змінні, які використовуються в програмі можуть бути локальними чи глобальними. Локальні змінні оголошуються лише в самій процедурі чи функції та існують тільки під час їх виконання. Глобальні змінні оголошуються в основній програмі та розповсюджуються в тому числі на процедури і функції.
Формальні параметри – це назви змінних, через які подається інформація із основної програми або іншої процедури в процедуру.
! Список фактичних параметрів може бути відсутнім.
Відповідність між фактичними та формальними параметрами повинно бути наступним:
кількість фактичних параметрів повинно бути рівним кількості формальних параметрів;
існуючі фактичні та формальні параметри повинні співпадати за порядком та за типом.
Виконання оператора виклику процедури полягає в наступному:
всі формальні параметри замінюються відповідними фактичними;
створюється так званий динамічний екземпляр процедури, який і виконується;
після виконання процедури відбувається передача управління основній програмі, тобто починає виконуватися оператор, наступний за оператором виклику процедури.
Крім процедур обробки подій в програму можна включити процедури і функції, що не пов'язані з подіями. Вони виконують окремі дії і можуть бути використані неодноразово. Їх називають загальними. Процедури загального призначення викликаються на виконання у коді програми. Використання процедур економить час і дозволяє уникнути зайвих помилок. Функції відрізняються від процедур тим, що повертають певне значення.
ПРИКЛАД: Ввести значення трьох змінних за допомогою функції Vvid та вивести значення введених змінних.
Dim a, b, c as Integer
Sub Vvid (x)
x=Inputbox (“Введіть значення змінної: ”, “Вікно вводу”)
End Sub
Vvid a
Vvid b
Vvid c
Print “Ви ввели наступні зміні:” a; b; c
Процедури загального призначення близькі до внутрішніх операторів та функцій. У Visual Basic вони викликаються за іменем, можуть мати аргументи і кожна з них виконує конкретні дії. Процедури загального призначення дозволяють економити час, роблять програми більш компактними, зручними в перегляді (читанні), спрощують роботу програм.
Загальний синтаксис процедури:
Private Sub Form_<Подія> ([Аргументи])
Оператор 1
Оператор 2
……..
Оператор n
End Sub
У стандартному модулі можна створити три види процедур загального призначення:
1. Процедури типу Function (функція). Такі процедури викликаються з інших процедур. Вони можуть мати аргументи, через які одержують вхідні значення, а також повертати значення у вигляді імені. Зазвичай використовуються для обчислень.
2. Процедури типу Sub (підпрограми). Вони також викликаються за ім'ям з інших процедур, можуть мати аргументи, одержувати вхідні значення, виконувати відповідні дії і повертати значення. На відміну від функцій процедури Sub використовуються для одержання або обробки вхідних даних і відображення вихідних даних або встановлення властивостей значень.
3. Процедури типу Property (Властивість). Такі процедури використовуються для створення властивостей, які визначаються користувачем у програмах, і маніпулювання ними. Це корисно, коли потрібно створити засіб, який дозволяє використовувати засоби управління Visual Basic.
Можна створювати і власні процедури, так звані загальні процедури. Для цього потрібно перейти до секції (General) (Declaration). У вікні коду ввести Sub, потім ім'я, наприклад Spends, і натиснути клавішу Enter. Після цього з'являється нова процедура:
Sub Spends ()
…
End Sub
Ця процедура відноситься до секції (General) (Declaration). Тема процедури закінчується порожніми дужками, проте там можуть міститися аргументи.
Щоб набрати будь-яку процедуру загального призначення необхідно:
у меню Разработать вибрати команду Добавить модуль (Add Module) → відкриється вікно Add Module → вибрати Новый та натиснути кнопку Open (Открыть) → у вікні Code з'явиться новий стандартний модуль. Ввести в стандартному модулі текст процедури.
Приклад. Розглянемо приклад процедури, яка буде виводити на екран повідомлення "Hello World!":
Private Sub ShowMessage ()
MsgBox "Hello World!"
End Sub
Дана процедура має тип Private, тобто доступна буде тільки з коду саме тієї форми (модуля), де вона оголошена (згадайте типи оголошення змінних). Дана процедура не містить параметрів, про що нам говорять порожні круглі дужки. Призначення – вивести повідомлення Hello World на екран.
MsgBox – це вбудована функція Visual Basic, яка виводить на екран вікно з повідомленням, заданим в якості параметра. Інші параметри необов'язкові (їх всього 5).
Для того, що б викликати процедуру потрібно написати ім'я процедури:
ShowMessage
А можна і так:
Call ShowMessage 'більш наочні варіант
Обидва ці варіанти абсолютно еквівалентні. Але для виклику процедур все-таки краще використовувати другий варіант.
Синтаксис:
Sub ім'я (х1 [As тип], х2 [As тип],... хn [As тип])
блок операторів
[Exit Sub ]
End Sub
де ім’я – довільний ідентификатор процедури;
x1, х2, х3,..., хn – формальні параметри, які умовно поділяються на 2 групи:
параметри, що визначаються фактичними аргументами (при звернені до процедури);
параметри, що визначають фактичні аргументи (після виконання процедури)
і ті і інші можуть бути:
змінною;
масивом;
константою;
арифметичним виразом.
Exit Sub – достроковий вихід з процедури.
Звернення до процедури – функції здійснюється за допомогою оператора Call
Синтаксис:
Call ім'я(а1,а2, ...,аn),
де а1, а2,...,аn – фактичні аргументи.
Процедура сама в процесі своєї роботи може викликати яку-небудь іншу процедуру. І так далі.
Визначте без комп'ютера, що надрукує програма:
Private Sub Command1_Click()
Print 1; : A : Print 2; : B : Print 3;
End Sub
Private Sub A()
Print 4;
End Sub
Private Sub B()
Print 5; : C : Print 6;
End Sub
Private Sub C()
Print 7;
End Sub
Відповідь:
1 4 2 5 7 6 3
Запам'ятайте правило: Потрібно намагатися, що б розміри будь-якої процедури не перевищували розміру одного екрану монітора.
Функція – це процедура, яка повертає результат своєї роботи в основну програму. Коли вона завершує роботу, то повертає управління основній програмі та передає їй результат розрахунку і цим вона відрізняється від процедури (процедура не повертає основній програмі значення). Оформляється аналогічно процедурі:
Синтаксис:
Function ім'я (х1 [As тип], х2 [As тип],... хn [As тип]) As Тип
блок операторів
ім'я = А
[оператори ]
[Exit Function ]
End Function
де ім’я – ідентифікатор функції;
x1, х2, х3..., хn – формальні параметри, які можуть бути змінними або масивом;
Exit Function – достроковий вихід із процедури.
Звернення до функції здійснюється за ім’ям:
ім'я(а1,а2, ...,аn),
де а1, а2,..., аn – фактичні аргументи.
Фактичними аргументами можуть бути: змінні (прості та з індексами), масив, константа, арифметичний вираз.
Щоб передати у функцію масив, достатньо після імені вказати порожні дужки Х().
При зверненні до функції:
формальні параметри визначаються фактичними аргументами;
виконується функція, в якій ім’я приймає значення;
значення передається в головний модуль.
Виклик функції може відбуватися:
без присвоювання:
MyFunc (Prm1, Prm2, … PrmN)
з присвоюванням:
x = MyFunc (Prm1, Prm2, … PrmN)
Всередині тіла процедури чи функції можна оголошувати нові змінні за допомогою ключового слова Dim.
ПРИКЛАД: Вивести на екран значення п’яти введених змінних та їх подвоєну величину.
Sub Res (i, a)
Print i; “введене число: ” ; a, “подвоєне число: ”; 2*a
End Sub
Dim a, i
For i=1 to 5
a = Inputbox (“Введіть число: ”, “Вікно вводу:”)
Res i, a
Next i
Вбудовані функції. Певні набори команд, наявні в мові Visual Basic і призначені для обчислення тих чи інших значень на підставі вихідних даних. Вбудованими є, зокрема, як математичні, так і рядкові функції (Abs, Cos, Sin, Mid, Len і т.д.)
Основні відмінності функції від процедури полягають у наступному:
1. Функція має тип (аналогічно змінній) і може повертати в програму значення, яке присвоюється функції за допомогою оператора:
<Ім'я функції> = значення
2. Виклик функції, як правило, здійснюється за допомогою вказівки в правій частині будь-якого оператора її імені та параметрів. З іншого боку, процедура викликається за допомогою окремого оператора:
Call <Ім'я процедури> (Параметри)
або
<Ім'я процедури> (Параметри)
Якщо при виклику процедури використовується ключове слово Call, то список параметрів повинен бути зазначений в дужках. Якщо ж процедура викликається без використання Call, то її параметри перераховуються без дужок.
При цьому процедура, що викликається, може не мати параметрів. У цьому випадку (якщо використовувалося службове слово Call) після імені процедури слід ставити порожні дужки.
Раніше ми розглядали процедури, які виконували свою роботу до кінця і закінчували її тільки на операторі End Sub, не раніше. Існують оператори, які подібно операторам виходу з циклу Exit Do і Exit For змушують комп'ютер покинути процедуру, не доходячи до її кінця.
Оператор End змушує Visual Basic завершити роботу не тільки процедури, а всього проекту, не доходячи до кінцевого End Sub. Приклад:
Private Sub Command1_Click ()
Print 1 ;: Print 2 ;: End: Print 3;
End Sub
Програма надрукує 1 2. Правда, помітити це ви встигнете тільки в покроковому режимі, так як End завершує режим роботи і проект миттєво переходить в режим проектування.
Існує спеціальний оператор паузи, комп'ютер призупиняє виконання програми коли доходить до його виконання. Це оператор Stop. Дійшовши до нього, комп'ютер переходить у режим переривання і робить паузу до тих пір, поки ви знову не натиснете кнопку Start. Тоді він продовжує роботу з того місця, де зупинився. Ось варіант програми, при якому ви встигаєте розглядати результат:
Private Sub Command1_Click ()
Print 1 ;: Print 2 ;: Stop: End: Print 3;
End Sub
Ще приклад: програма
Private Sub Command1_Click ()
Print 2 ;: A: Print 3 ;: End: Print 4;
End Sub
Private Sub A ()
Print 6 ;: End: Print 7;
End Sub
Програма надрукує 2 6.
Оператор Exit Sub не такий рішучий, як End. Він не викидає Visual Basic з режиму роботи, а змушує комп'ютер вийти з процедури, в якій він виконався. Якщо він викликається процедурі, то Visual Basic повертається в процедуру, яка її викликала. Якщо він виконався в процедурі обробки події, то Visual Basic просто завершує роботу цієї процедури.
Приклад: Замінимо в попередній програмі обидва End на Exit Sub:
Private Sub Command1_Click ()
Print 2 ;: A: Print 3 ;: Exit Sub: Print 4;
End Sub
Private Sub A ()
Print 6 ;: Exit Sub: Print 7;
End Sub
Ця програма надрукує 2 6 3.
Константами називаються ті конкретні значення величин, які ми бачимо в програмі. Наприклад, у фрагменті
a = 1 + 0.25
b = "Амазонка"
Debug.Print "Дніпро", 10
Form1.BackColor = 15767511
If a> 3 Then Cls
константи це 1 0.25 "Амазонка" "Дніпро" 10 15767511 3.
Якщо яка-небудь константа зустрічається в програмі кілька разів, то зручно, придумати їй ім'я і позначати цим ім'ям.
При спробі змінити значення константи Visual Basic видасть повідомлення про помилку. Наприклад, помилкою завершиться виконання такої програми:
Const a = 5
Private Sub Command3_Click ()
a = a + 2
End Sub
Добре це чи погано? Це погано там, де величина за змістом задачі повинна змінювати своє значення, і добре там, де не повинна. Наприклад, якщо в програмі:
Const Пі = 3.14
Private Sub Command4_Click ()
r = 50
Довжина_кола = 2 * Пі * r
Площа_кола = Пі * r ^ 2
End Sub
ми по недбалості де-небудь напишемо оператор типу Пі = 2.87, то Visual Basic видасть повідомлення про помилку, оскільки число Пі – дуже відома константа, рівна 3.14, і ніхто не має права змінювати її значення.
Таким чином, за допомогою оголошення констант підвищується надійність програмування.
Крім перерахованих вище констант існує багато так званих внутрішніх констант Visual Basic. Оголошувати їх не треба, ними можна відразу користуватися, якщо знати їх імена і призначення. Наприклад, такими константами є назви кольорів - vbRed, vbBlack і т.п. Кожна з таких констант має конкретне чисельне значення (наприклад, vbRed = 255), але назви запам'ятовуються легше, ніж числа. Імена і значення внутрішніх констант описані в Object Browser.
Питання для перевірки:
Розкрийте поняття «модульна структура програми».
Опишіть структуру процедури.
Опишіть структуру функції.
Назвіть основні відмінності процедури та функції.
Дайте визначення поняттям: глобальні змінні, локальні змінні.
Дайте визначення поняттям: формальні значення, фактичні значення.
Опишіть механізм передачі параметрів із основної програми у підпрограму та навпаки.
Які типи процедур ви знаєте?
Які дії потрібно виконати щоб додати до проекту процедуру визначеного типу?
В яких випадках виникає необхідність використання процедури Function…End Function? Наведіть приклади.
Звернення до підпрограми Function…End Function. Які аргументи використовуються при звернені до цієї підпрограми?
В яких випадках виникає необхідність використання процедури Sub…End Sub? Наведіть приклади.
Які параметри використовуються у процедурі Sub…End Sub?
Що необхідно зробити, щоб передати до процедури масив?
Що таке фактичний аргумент?
Що таке лінійна форма функції користувача? Який вона має формат?
Що таке підпрограма і для чого вона використовується?
Чого дозволяє досягти використання підпрограм?
Які види підпрограм ви знаєте? У чому їхня відмінність?
Наведіть синтаксис процедури та поясніть призначення її складових частин.
Наведіть синтаксис функції та поясніть призначення її складових частин.
Яку роль у підпрограмах відіграють їхні аргументи?
Що таке «іменований аргумент»?
Що таке "необов'язковий аргумент"?
Войтюшенко Н. М., Інформатика і комп’ютерна техніка: навч. пос. [для сутд. вищ. навч. закл.]/ Н.М. Войтюшенко, А.І.Остапець. – К.: Центр учбової літератури, 2009. – 564 с.
Трофименко О.Г. Програмування в Visual Basic. [Методичний посібник для лабораторних занять]. – Одеса, 2004. – 38 с.
Рогоза М.Є. Основи інформатики та технологій програмування: навчальний посібник / Рогоза М.Є., Рамазанов С.К., Велігура А.В., Танченко С. М. - Луганськ: Вид-во СНУ ім. В.Даля, 2012. - 568 с.