МОДУЛЬНЕ ПРОГРАМУВАННЯ


План лекції:

6.1. Створення процедур (підпрограм) загального призначення

6.2. Процедури типу Function

6.3. Процедури типу Sub

6.1. СТВОРЕННЯ ПРОЦЕДУР (ПІДПРОГРАМ)

ЗАГАЛЬНОГО ПРИЗНАЧЕННЯ

 

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

В стандартному модулі можна створити три види процедур загального призначення:

1. Процедури типу Function (функція). Такі процедури викликаються з інших процедур. Вони можуть мати аргументи, через які одержують вхідні значення також повертати значення у вигляді імені. Зазвичай використовуються для обчислень.

2. Процедури типу Sub (підпрограми). Вони також викликаються за ім'ям з інших процедур, можуть мати аргументи, одержувати вхідні значення, виконувати відповідні дії і повертати значення. На відміну від функцій процедури Sub використовуються для одержання або обробки вхідних даних і відображення вихідних даних або встановлення властивостей значень.

3. Процедури типу Property (Властивість). Такі процедури використовуються для створення властивостей, які визначаються користувачем у програмах, і маніпулювання ними. Це корисно, коли вимагається створити засіб, який дозволяє використовувати засоби управління Visual Basic.

Щоб набрати будь-яку процедуру загального призначення необхідно:

У меню Разработать вибрати команду Добавить модуль (Add Module).

Відкриється вікно Add Module. Вибрати Новый та натиснути кнопку Open (Открыть). У вікні Code з'явиться новий стандартний модуль.

Ввести в стандартному модулі текст процедури.

6.2. ПРОЦЕДУРИ ТИПУ FUNCTION

Синтаксис:

Function ім'я (х1 [As тип], х2 [As тип],... хn [As тип]) As Тип

блок операторів

ім'я = А

[оператори ]

[Exit Function ]

End Function

де ім’я – ідентифікатор функції;

x1, х2, х3..., хn - формальні параметри, які можуть бути:

1) змінними;

2) масивом;

Exit Function – достроковий вихід із процедури.

Звернення до функції здійснюється за ім’ям:

ім'я(а1,а2, ...,аn),

де а1, а2,..., аn – фактичні аргументи.

Фактичними аргументами можуть бути:

· змінні (прості та з індексами);

· масив;

· константа;

· арифметичний вираз.

 

Зауваження! Щоб передати у процедуру масив, достатньо після імені вказати порожні дужки Х().

 

Дія:

При зверненні до процедури:

1) формальні параметри визначаються фактичними аргументами;

2) виконується процедура, в якій ім’я приймає значення;

3) значення передається в головний модуль.

 

Приклад.Обчислити P=arctg a+4.7b, де а – сума компонентів вектора х; b – сума компонентів вектора y; x(1.5; -6.7; 8.35; -1.9; 0.7)

Компоненти вектора y обчислюються за формулою

Yi=xi /cos i

Нехай ім’я процедури Function SV.

1. Відкрити новий проект.

2. За допомогою елемента CommandButton створити командну кнопку в формі.

3. Змінити стандартний напис на командній кнопці (властивість Caption) на Пуск.

4. Обов’язково встановити для властивості форми Autoredraw значення Да (True).

5. Двічі клацнути по кнопці Пуск у формі. У вікні Форма1(Код) з’явиться заголовок процедури та його кінець:

Private Sub Команда1_Click()

 

End Sub

6.Після заголовку процедури набрати текст(тіло програми).

Option Base 1

Dim y!

Private Sub Команда1_Click()

Dim a!, b!, p!

N=InputBox(“n=”)

ReDim y(n)

X=Array(1.5, -6.7, 8.35, -1.9, 0.7)

Print “Вектор y”

For i=1 to n

Y(i)=x(i)/cos(i)

Print y(i);Spc(3);

Next і: Print

A=SV(5,x)

B=SV(n,y)

P=Atn(a)+4.7*b

Print Tab(5);”Результати обчислень”

Print Spc(5);”a=”; a; Spc(5);”b=” ; b; Spc(5); “p=”; p

End sub

7. У меню Разработать обрати команду Добавить модуль. З’явиться вікно Add Module. Вибрати Новый і натиснути кнопку Открыть.

8. З’явиться вікно Проект1-Модуль 1(Код).

Надрукуємо ім’я процедури Function SV(n,z) і натиснемо Enter. З’явиться End Function (кінець процедури).

9. Після заголовку процедури набрати текст(тіло процедури).

Function SV(n,z)

S=0

For i=1 to n

S=s+z(i)

Next i

SV=s

End Function

10. Запустити команду на виконання, натиснувши кнопку Начать на панелі інструментів Стандартная.

11. У вікні Форма1 клацнути по командній кнопці Пуск. Ввести розмір масиву n. (n<=5=розміру массиву х).

Результат виконання процедури буде показаний у вікні форми (рис. 6.1).

 

 

Рисунок 6.1. Вікно форми з результатом виконання прикладу.

 

12. Для закінчення розрахунків необхідно клацнути по кнопці Конец на панелі інструментів.

13. Зберегти проект, клацнувши Сохранить (Save Project).

6.3. ПРОЦЕДУРИ ТИПУ SUB

Синтаксис:

Sub ім'я (х1 [As тип], х2 [As тип],... хn [As тип])

блок операторів

[Exit Sub ]

End Sub

де ім’я – довільний ідентификатор процедури;

x1, х2, х3,..., хn – формальні параметри, які умовно поділяються на 2 групи:

· параметри, що визначаються фактичними аргументами (при звернені до процедури)

· параметри, що визначають фактичні аргументи (після виконання процедури)

і ті і інщі можуть бути:

1) змінною;

2) масивом;

3) константою;

4) арифметичним виразом.

Exit Sub – достроковий вихід з процедури.

Звернення до процедури – функції здійснюється за допомогою оператора Call

Синтаксис:

Call ім'я(а1,а2, ...,аn),

де а1, а2,...,аn – фактичні аргументи.

 

Зауваження! Щоб передати в процедуру масив, достатньо після імені його вказати пусті дужки Х().

 

Приклад. Задані матриці Anm та Bmn (n>m)/

Нехай елементи матриць знаходяться на проміжку [f1,f2], де f1=-20; f2=20. Обчислити матрицю С=A*B. Формування матриці та знаходження суми елементів матриці оформити у вигляді процедури (підпрограми).

1. Відкрити новий проект.

2. Створити командну кнопку в формі.

3. Дати нову назву цій кнопці Пуск.

4. Обов’язково встановити для властивості форми Autoredraw значення Да(True).

5. Двічі клацнути по кнопці Пуск у формі. У вікні Форма1(Код) (Code) з’явиться заголовок процедури та його кінець:

Private Sub Комманда1_Click()

End Sub

Після заголовку процедури набрати текст (тіло програми)

Option Base 1

Dim a!(), b!(), с!(), S!

Private Sub Комманда1_Click()

Dim n%, m%, i%, j%, k%, f1!, f2!, p!

m = InputBox("m=")

n = InputBox("n=")

l = InputBox("L=")

f1 = Val(InputBox("f1="))

f2 = Val(InputBox("f2="))

ReDim a(m, n), b(n, l), C(m, l)

Print Tab(10); "Матриця А"

Call Form(m, n, f1, f2, a!())

Print Tab(10); "Матриця В"

Call Form(n, l, f1, f2, b!())

Print Tab(10); "Матриця С=A*B"

For i = 1 To m

For j = 1 To l

Call Sum(i, j, n, S)

C(i, j) = S

Next j

Next i

For i=1 To m

t = 2

For j = 1 To l

Форма1.Print Tab(t); C(i, j);: t = t + 7

Next j

Форма1.Print

Next i

End Sub

 

У меню Разработать вибрати команду Добавить модуль.

У вікні Add Module обрати Новый і натиснути кнопку Открыть.

З’явиться вікно Проект1 – Модуль1 (Код). Надрукуємо ім’я процедури Sub Form(k,f1,f2,z!()) і натиснемо Enter. З’явиться End Sub (кінець процедури).

Після заголовку процедури набрати текст(тіло процедури).

Private Sub Form(k, l, f1, f2, z!())

For u = 1 To k

t = 2

For q = 1 To l

z(u, q) = Int((f2 - f1 + 1) * Rnd) + f1

Форма1.Print Tab(t); z(u, q);: t = t + 7

Next q

В цій процедурі елемент матриці створюється за допомогою генератора випадкових чисел. Для введення реальної конкретної матриці досить замінити оператор

z(i,j)=int((f2-f1+1)*Rnd)+f1 на

z(i,j)=Val(InputBox(“Введіть елемент матриці”).

В меню Разработать вибрати команду Добавить модуль.

В вікні Add Module вибрати Новый і натиснути кнопку Открыть.

З’явиться вікно Проект1 – Модуль2 (Код). Надрукуємо ім’я процедури Sub Sum (k,z!(),s!) і натиснемо Enter. З’явиться End Sub (кінець процедури).

Після заголовку процедури набрати текст(тіло процедури).


Sub Sum(i, j, n, S)

S = 0

For k = 1 To n

S = S + a(i, k) * b(k, j)

Next k

End Sub

12. Запустити команду на виконання, натиснувши кнопку Начать на панелі інструментів Стандартная.

13.У вікні Форма1 клацнути по командній кнопці Пуск. Ввести початкові дані m,n,L,f1,f2.

Результат виконання процедури буде показаний у вікні форми (рис.6.2).

 

Рисунок 6.2. Результат знаходження добутку матриць

 

15. Для закінчення розрахунків необхідно клацнути по кнопці Конец на панелі інструментів.

16. Зберегти проект, клацнувши Сохранить (Save Project).

Приклад. Створити додаток для обчислення ймовірності події за алгоритмом, блок-схема якого відображена на рис. 1.10.

1. Відкриваємо новий проект.

2. На формі встановимо 5 елементів TextBox.

3. Відкриваючи вікна їх властивостей, видалимо з вікон текст по замовчуванню (Текст1, Текст2,…). Поруч з текстовими вікнами розмістимо елементи Label з написами про призначення тестових вікон. Подвійним щигликом на вікні елемента Текст4 відкриємо вікно коду з рядками.

Private Sub Текст4_Exchange()

 

End Sub

4. Замінимо подію Exchange на LostFocus і введемо наступний код головної процедури

Private Sub Текст4_LostFocus()

Dim u!, v!, R1!, R2!, R3!, p!, no%, n%, m%, k%, D!

no = Текст1.Text

n = Текст2.Text

m = Текст3.Text

k = Текст4.Text

Call R(n, k, R1)

Call R(no - n, m - k, R2)

Call R(no, m, R3)

D = R1 * R2 / R3

Текст5.Text = D

End Sub

5. Потім введемо код підпрограми R(u,v,R):

Private Sub R(u, v, R)

Dim C1!, C2!, C3!

Call Fakt(u, C1)

Call Fakt(v, C2)

Call Fakt(u - v, C3)

R = C1 / C2 / C3

End Sub

6. Після цього або перед цим (порядок розміщення процедур не має значення) вводимо код підпрограми Fakt(z,p).

Private Sub Fakt(z, p)

p = 1

For i = 1 To z

p = p * i

Next i

End Sub

7. Клацнемо кнопку Начать на панелі інструментів.

8. Введемо в текстові поля початкові дані. Четверте вікно заповнюємо останнім і клацаємо на п’ятому. При цьому четверте вікно втрачає фокус і починає виконуватись головна процедура, яка відповідає такій події. В п’ятому вікні з’явиться результат (рис.6.3)

У Basic N і n не відрізняються, тому замість імені змінної N використовуємо ім’я no.

Коли головна процедура звертається до підпрограми R(u,v,R), наприклад, за командою Call R(k,n,R1), то формальні параметри заміщуються фактичними, так ніби u=k, v=n, а результат R1=R. За наступною командою Call(no-n, m-k, R2) u=no-n, v=m-k, а результатом стане R2 і т.д. В свою чергу процедура R при кожному звертанні до неї сама тричі звертається до підпрограми Fakt(z,p), Це здійснюється послідовністю операторів

Call Fakt(u, C1)

Call Fakt(v, C2)

Call Fakt(u - v, C3)

В наслідок виконання яких, отримуємо C1=u!, C2=v!, C3=(u-v)!

 

 

Рисунок 6.3. Результат обчислення ймовірності.

 

Приклад. Обчислити наближене значення функції Лапласа для 0< x <5 за формулою з точністю до 0.00001.

Скористаємось алгоритмом розглянутим в розділі 1 (рис.1.10). На формі розмістимо лише один елемент управління – командну кнопку, якій дамо ім’я Обчислити. Значення x будемо вводити за допомогою функції InputBox, а результат виводити безпосередньо на форму за допомогою оператора Print.

Private Sub Обчислити_Click()

Dim Fi As Single, x As Single, eps As Single, i As Integer

s = 0

i = 0: eps = 0.00001

x = Val(InputBox("x=", " Ввести значення x"))

Do

a = (-1) ^ i * x ^ (2 * i + 1) / (2 * 3.14159) ^ 0.5 / ((2 * i + 1) * 2 ^ i * Fact(i))

i = i + 1

s = s + a

Loop Until (Abs(a) < eps)

Print x, Format(s, "#.#####")

End Sub

Function Fact(i)

P = 1

For t = 1 To i

P = P * t

Next t

Fact = P

End Function

 

 

Рисунок 6.4. Результат обчислення функції Лапласа

 

Приклад. Створити за допомогою генератора випадкових чисел Матрицю А. Показати її у вікні Текст1. Впорядкувати її за зростанням. Знайти суму позитивних елементів матриці.

1. Відкрити новий проект. На формі встановити командну кнопку Пуск і два елементи TextBox з розмірами достатніми для відображення матриць. Суму позитивних елементів передбачається вивести у вікні MsgBox.

2. У вікнах властивостей текстових вікон очистити властивості Текст, а властивостям Multiline надати значення Да.

В вікні коду, що виникне після подвійного щиглика на кнопці Пуск записати наступну програму.

Option Base 1

Private Sub Пуск_Click()

Dim A(), B(), S!, m%, n%, i%, j%, t!

m = Val(InputBox("m=", Число рядків m", "Ввести"))

n = Val(InputBox("n=", "Число стовпців n", "Ввести"))

ReDim A(m, n), B(m, n)

Текст1.Text = ""

For i = 1 To m

For j = 1 To n

A(i, j) = 20 * Rnd - 10

Текст1.Text = Текст1.Text & " " & CSng(A(i, j))

Next j: Текст1.Text = Текст1.Text & Chr(13) & Chr(10)

Next i

Текст1.Text = Текст1.Text & " До впорядкування"

For i = 1 To m

For j = 1 To n

For u = 1 To m

For v = 1 To n

If A(i, j) < A(u, v) Then

t = A(i, j): A(i, j) = A(u, v): A(u, v) = t

End If

Next v

Next u

Next j

Next i

Текст2.Text = ""

For i = 1 To m

For j = 1 To n

Текст2.Text = Текст2.Text & " " & CSng(A(i, j))

Next j: Текст2.Text = Текст2.Text & Chr(13) & Chr(10)

Next i

S = 0

For i = 1 To m

For j = 1 To n

If A(i, j) > 0 Then S = S + A(i, j)

Next j, i

Текст2.Text = Текст2.Text & " Після впорядкування"

MsgBox "Сума позитивних елементів S=" & S

End Sub

 

 

Рисунок 6.5. Впорядкування елементів матриці.

 

 

Рисунок 6.6. Результат обчислення суми елементів

 

КОНТРОЛЬНІ ЗАПИТАННЯ

 

1. Розкрийте поняття модульна структура програми.

2. Які типи процедур ви знаєте?

3. Які дії потрібно виконати щоб додати до проекту процедуру визначеного типу?

4. В яких випадках виникає необхідність використання процедури Function…End Function? Наведіть приклади.

5. Звернення до підпрограми Function…End Function. Які аргументи використовуються при звернені до цієї підпрограми?

6. В яких випадках виникає необхідність використання процедури Sub…End Sub? Наведіть приклади.

7. Які параметри використовуються у процедурі Sub…End Sub?

8. Що необхідно зробити, щоб передати до процедури масив?

9. Що таке фактичний аргумент?

10. Що таке лінійна форма функції користувача? Який вона має формат?

 


Лекція 7

РОБОТА З ФАЙЛАМИ

План лекції:

7.1. Типи доступу до файлів

7.2. Обробка файлових структур даних з послідовним доступом

7.2. Обробка файлових структур даних з довільним доступом

 

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

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

7.1. ТИПИ ДОСТУПУ ДО ФАЙЛІВ

 

Тип даних, що містяться у файлі, визначає тип доступу до нього. У Visual BASIC 6.0 реалізовано три типи доступу до файлів:

· послідовний – для читання та запису текстових файлів;

· довільний – для читання і запису тексту або структурованих двійкових файлів із записами фіксованої довжини;

· двійковий – для читання та запису довільно структурованих файлів.

З вищеперерахованих режимів доступу тепер найбільш часто використовується послідовний, оскільки в практиці програмування нерідко виникає необхідність запису даних втекстовий файл, для чого послідовній доступ найбільш зручний. Значно рідше в наш час находять застосування довільний і двійковий режими доступу, які достались Visual Basic у спадок з тих часів, коли ще не було Windows з її можливостями і програмісту доводилось самому писати підпрограми для здійснення складних дискових операцій з файлами баз даних, малюнками і іншими складними форматами. В наш час це здійснюється значно простіше з використанням обєктів і методів інших додатків Windows. Операційна система або будь-який додаток, у тому числі розроблений мовою програмування Visual BASIC 6.0 зв'язується з файлом за допомогою каналу введення-виведення. Під час відкривання файлу ставиться у відповідність канал за допомогою якого записуються або прочитуються дані.

Процес відкривання і збереження файлів складається з кількох етапів:

· відкриття файлу;

· читання або запис даних;

· закриття файлу.

 

7.2 ОБРОБКА ФАЙЛОВИХ СТРУКТУР ДАНИХ

З ПОСЛІДОВНИМ ДОСТУПОМ

 

Послідовний доступ розміщує елементи (записи) у файлі за принципом "наступний після попереднього". У такій послідовності елементи з файлу і читаються – спочатку перший, потім другий, далі третій і т.д. Двадцять перший елемент можна прочитати тільки після двадцятого. Послідовний доступ застосовується головним чином для роботи з текстовими файлами, тобто з файлами, елементи яких записано у вигляді символів. Кожен елемент може мати довільну довжину. Тому вони розподіляються спеціальним символом. Дії в режимі послідовного доступу подібні до роботи з аудіозаписами на касеті в магнітофоні.

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



Дата добавления: 2021-11-16; просмотров: 297;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.058 сек.