Смекни!
smekni.com

Організація баз даних та знань (стр. 24 из 26)

Public Sub For1()

Dim A(1 To 5, 1 To 5) As Integer

Dim B(1 To 5, 1 To 5) As Integer

Dim C(1 To 5, 1 To 5) As Integer

Dim I As Integer, J As Integer, K As Integer

Dim Res As String

' Ініціалізація матриць A і B випадковими числами в интервалі [-10, +10]

VBA.Randomize

For I = 1 To 5

For J = 1 To 5

'Отримання випадкового числа Rnd і перетворення у ціле

A(I, J) = Int(21 * Rnd) - 10

Next J Next I

For I = 1 To 5

For J = 1 To 5

B(I, J) = Int(21 * Rnd) - 10 Next J

Next I

'Обчислення добутку матриць

For I = 1 To 5

For J = 1 To 5

C(I, J) = 0

For K = 1 To 5

C(I, J) = C(I, J) + A(I, K) * B(K, J)

Next K

Next J Next I

Res = "No"

C(2, 2) = 0

'Перевірка на нульове значення

For I = 1 To 5

For J = 1 To 5

If C(I, J) = 0 Then

Debug.Print "Індекси: ", I, J

Res = "Yes"

Exit For

End If

Next J Next I

Debug.Print Res

End Sub

Зверніть увагу, оператор виходу Exit For припиняє виконання тільки внутрішнього циклу, так що перевірка на нуль буде здійснюватися в кожному рядку матриці, незалежно від існування нулів у попередніх рядках.

4.5.6 Цикл Do...Loop

Повторює блок операторів, поки задана умова є істиною або поки вона не стане істиною.

Синтаксис. Є чотири варіанти синтаксису цього циклу. У двох перших варіантах умова перевіряється на початку циклу: Do [{While | Until} умова]

тіло циклу

Loop

В інших двох варіантах умова перевіряється наприкінці циклу:

Do

тіло циклу

Loop [{While | Until} умова]

Тут умова є числовим або строковим виразом зі значеннями True або False. Взагалі вона є необов'язковою. Значення Null умови трактується як False. Тіло циклу - це послідовність операторів, що буде виконуватися, поки умова залишається істиною, якщо перед ним стоїть ключове слово While або поки воно залишається помилковим - у варіантах циклу із ключовим словом Until.

Цикл While...Wend

Повторює виконання послідовності операторів, поки задана умова не стане помилковою.

Синтаксис:

While умова

тіло циклу

Wend

Тут умова й тіло циклу такі самі, як і для циклу Do…Loop... Тільки для цього виду циклу не передбачений оператор виходу Exit. Фактично цикл While…Wend-окремий випадок циклу Do…Loop-залишений у мові для сумісності з попередніми версіями.

4.5.7 Цикл For Each...Next

Повторює задану послідовність операторів для кожного елемента масиву або набору.

Синтаксис:

For Each елемент In група тіло циклу Next [елемент]

Тут елемент - змінна, яка виступає як значення елемента колекцій або масиву. Для колекцій елемент може бути змінної типу Variant, змінної типу Object або змінної (об'єктом) деякого класу. У випадку циклу по масиву елемент зобов'язаний бути змінного типу Variant. Група - це ім'я набору об'єктів (найчастіше це колекція об'єктів) або масиву, для елементів яких виконується цикл. Цикл не застосуємо для масивів, тип елементів яких визначений користувачем, тому що такі елементи не можуть бути значеннями змінної типу Variant. У таких масивах можна використовувати цикл виду For … Next... Тіло циклу - послідовність операторів, яка виконується для кожного елемента набору або масиву, - може містити оператори Exit For, що дозволяють перервати виконання циклу й передати керування операторові, що випливає за Next (звичайно такий вихід відбувається при виконанні деякої умови, що перевіряє в операторі If…Then…Else)... Указувати змінну елемент після ключового слова Next не обов'язково, але бажано.

4.6 Операції

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

Якщо вирази містять операції різних категорій, то першими виконуються арифметичні операції, потім, операції порівняння й останніми - логічні.

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

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

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

Розглянемо основні вбудовані математичні функції.

4.6.1 Математичні функції

Набір математичних функцій VBA досить стандартний. Перелічимо їх з короткими поясненнями:

· Abs(число) - абсолютне значення числа.

· Atn(число)- арктангенс (у радіанах) аргументу, що задає тангенс кута.

· Cos(число) - косинус кута. Аргумент числа задає кут у радіанах.

· Exp(число) - експонента, тобто результат зведення числа e (підстава натуральних логарифмів) у зазначений ступінь.

· Log(число) - натуральний логарифм числа.

· Rnd[(число)] - результат представляє рівномірно розподілене випадкове число в інтервалі [0 - 1]. Якщо аргумент числа не заданий або більше нуля, то породжується чергове випадкове число, якщо він дорівнює 0, то результатом буде попереднє випадкове число, а якщо число менше нуля, то будь-який породжує те саме число, обумовлене аргументом. Помітимо, для формування значення випадкових чисел використовується таймер.

· нуля - -1). Sgn(число) - знак числа (якщо число більше нуля - 1, дорівнює нулю - 0, менше
· Sin(число) - синус кута. Аргумент число задає кут у радіанах.
· Sqr(число) - квадратний корінь.
· Tan(число) - тангенс кута. Аргумент число задає кут у радіанах.

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

4.6.2 Робота з рядками

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

Звичайні операції порівняння можуть бути застосовані й до строкових даних. Ми вже говорили раніше про те, що інтерпретація цих операцій залежить від установки опції Option Compare.

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

· Якщо ця опція встановлена як Binary, то порівняння йде побітно. У цьому випадку порівняння природно, відчутно до регістра.

· При роботі з рядками в Access за замовчуванням застосовується сортування, задана на рядках БД Access. Помітьте, при створенні модуля в Access за замовчуванням уставляється опція Option Compare Database. Звичайно ця опція застосовна тільки при роботі в Access.

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

StrComp(string1, string2[, compare])

Аргументи string1 й string2 - порівнювані рядки. Необов'язковий аргумент compare вказує спосіб порівняння рядків: значення за замовчуванням 0 використовується, щоб виконати двійкове порівняння, 1 задає посимвольне порівняння без обліку регістра.

Якщо string1 менше ніж string2, то результат дорівнює -1, якщо рядки рівні, то - 0, якщо друга менше, то дорівнює 1, якщо хоч один з рядків має значення Null, те результат також дорівнює Null.

Оператори конкатенації рядків

Існують два оператори додавання рядків. Вони позначаються символами плюс (+) і амперсанд (&). Обоє оператори бінарні. Відмінність оператора полягає в тому, що він здатний перетворювати значення будь-якого вбудованого типу даних у рядок.

Приклад:

1: Dim A As String

2: A = “Здраствуй, ” + “світ! ”

4.6.3 Робота з датами й часом

Для того, щоб забезпечити програмістові можливість коректно працювати з датами й часом, VBA надає спеціальний тип даних Date, що зберігає дату й час. Над даними цього типу можна виконувати деякі операції, але при роботі з ними найчастіше використовуються спеціальні вбудовані функції. Спробуємо коротко розглянути основні можливості роботи з датами. Насамперед, помітимо, що можливий діапазон дат охоплює дати від 1.1. 100 року до

1-го січня 9999 року. Якщо говорити про внутрішнє подання дат, що займають 4 байти пам'яті, то ціла частина зберігає число днів від деякої початкової дати, дробова частина зберігає час від опівночі. Початковою датою є 30 грудня 1899 року. Завдяки такому внутрішньому поданню додавання й вирахування цілого числа сприймається як додаток або вирахування днів.

Присвоювання значень

При присвоюванні значень змінним типу дата необхідно містити дату в спеціальні обмежники "#" або задавати її як строкову константу. При завданні дати в обмежниках, наприклад, #9, May, 99 # вона автоматично перетвориться до стандартного формату #5/9/99# (місяць/день/рік). Наведемо приклад деяких дій над датами:

Public Sub WorkWithDates()

'Робота з датами

Dim dat1 As Date, dat2 As Date, dat3 As Date

'Присвоювання дат

dat1 = 12 dat2 = 9/5 / 99 dat3 = #9/5/1999#

Debug.Print dat1, dat2, dat3 dat1 = "15/7/99" dat2 = #5/9/1999# dat3 = dat3 + 100

Debug.Print dat1, dat2, dat3

If dat3 > dat2 Then

Debug.Print dat3 - dat2

Else

Debug.Print dat2 - dat3

End If

End Sub

Наведемо результати виконання цієї програми: