Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УВЕДЕННЯ в VBA.doc
Скачиваний:
17
Добавлен:
05.03.2016
Размер:
231.42 Кб
Скачать

3. Написання програмного коду.

Тепер саме цікаве! Ми буде писати код для нашої програми! Давайте ще раз продумаємо алгоритм роботи програми:

Уводимо вихідні дані в тектовые полючи (a,b,c). Нагадаю, що код для цього писати не потрібно. За нас усі зробить Visual Basic і Windows. У цьому те і полягає принадність графічного інтерфейсу користувача (GUI). Ми тільки вважаємо введені значення й усіх.

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

Виводимо отримані значення в мітки (Label'и).

Нам необхідно написати обработчик події клік (Click) нашої кнопки - cmdCalculate. Що значить оброблювач події? Оброблювач події - це процедура, що буде виконуватися всякий раз, коли відбудеться та або інша подія. Наприклад собите Click. Воно відбувається всякий раз при натисканні на кнопку. Т.е., якщо запустити програму на виконання і не натискати на кнопку cmdCalculate нічого не відбудеться. Але як тільки ви кликніть по кнопці, відбудеться виконання коду, що написаний у процедурі обробки події Click (процедурі з ім'ям cmdCalculate_Click). Він буде виконуватися всякий раз, коли користувач кликне по кнопці. У цьому те і складається та сама Событийно-Управляемая модель програмування, що відрізняється від плоских послідовних програм (Turbo Паскаля, наприклад). Програмування на Visual Basic цілком і цілком базується на цієї Событийно-Управяемой моделі.

Сподіваюся, що ви уловили мою думку. Якщо ні, то не отчаивайтесь, далі усі стане зрозуміло.

Щоб створити оброблювач події Click необхідно зробити подвійний клік по нашій кнопці cmdCalculate (при подвійному кліці, VB створює заготівлю оброблювача події - по-умовчанню. У кнопки, ця подія Click, у форми - Load, у таймера - Timer і т.д.). Visual Basic створить для вас заготівлю процедури, що буде виглядати в такий спосіб:

Private Sub cmdCalculate_Click()

End Sub

Щоб створити оброблювач для іншої події, необхідно вибрати подію в правому списку у вікні коду:

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

Так само, як і якесь властивості елементів керування, події теж повторюються. Наприклад, подія Click. Воно є й в елемента кнопки (Command Button), і в елемента мітки (Label) і в багатьох інших. Є воно й у форми. Це дуже полегшує процес програмування. Не потрібно витрачати багато часу на вивчення кожного елемента керування, тому що багато чого повторюється.

Помітьте також, що в процедури обробки події Click немає вхідних параметрів, про що нам говорять порожні дужки. Додати свої параметри в цю процедуру не можна. У процедур обробки деяких інших подій можуть бути параметри. Наприклад, у події MouseMove (координати курсору миші) або KeyUp (код віджатої клавіші). Ці параметри передаються непомітно для програміста, і їх можна використовувати за своїм розсудом (а можна і зовсім не використовувати).

Тепер давайте приступимо безпосередньо до програмування. Для початку оголосимо перемінні з типом Double (для збереження речовинних чисел):

Private Sub cmdCalculate_Click()     ' повідомляємо перемінні     Dim param As Double     Dim param As Double     Dim param As Double     Dim x1 As Double     Dim x2 As Double     Dim D As Double End Sub

Тепер вважаємо введені параметри a, b і с. Для цього привласнимо перемінним param, param і param значення властивості Text усіх 3-х полів для введення (TextBox'ов). Ми можемо це зробити тому, що Visual Basic сам перетворить число у виді рядка в звичайне число з крапкою, що плаває.

param = txtParam.Text param = txtParam.Text param = txtParam.Text

Доступ до властивості будь-якого елемента керування здійснюється через крапку, що розділяє ім'я властивості й ім'я елемента. Зверніть увагу на технологію Intellisence. Visual Basic видає список доступних властивостей цього елемента керування. Це дуже зручно. Вам не прийдеться вивчати напам'ять довгі і складні назви властивостей. Досить вибрати потрібна властивість зі списку й усі.

Тепер нам потрібно розрахувати дискримінант. Для цього привласнимо перемінної D, що буде зберігати значення дискримінанта, що випливає вираження:

D = (param * param) - (4 * param * param)

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

Тепер, знаючи значення дискримінанта, потрібно порівняти його з нулем. Якщо він більше нуля, то обчислити обидва корені, якщо дорівнює нулеві, то обчислити один корінь, ну а якщо менше, те нічого не обчислювати і видати повідомлення про те, що коренів немає. Таке розгалуження ми організуємо за допомогою оператора If:

If D > 0 Then     x1 = (param + Sqr(D)) / (2 * param)     x2 = (param - Sqr(D)) / (2 * param)     lbl.Caption = "Дискременант: " & D     lbl1.Caption = "Корінь №1: " & x1     lbl2.Caption = "Корінь №2: " & x2 ElseIf D = 0 Then     x1 = param / (2 * param)     x2 = x1     lbl.Caption = "Дискременант: " & D     lbl1.Caption = "Корінь №1: " & x1     lbl2.Caption = "Корінь №2 = Кореневі №1" ElseIf D < 0 Then     lbl.Caption = "Дискременант: " & D     lbl1.Caption = "Корній немає!"     lbl2.Caption = ""     MsgBox "Дискременант менше нуля! Корній немає!", vbCritical End If

Не забувайте про відступи! З ними код набагато наочніше.

Корінь ми обчислюємо убудованою функцією VB - Sqr (від Square). У вираженнях, що ми привласнюємо властивості Caption у міток, ми використовуємо оператор конкатенації (склеювання рядків). Їм ми склеюємо рядок ліворуч від & з рядком праворуч. Відкіля береться рядок праворуч? Адже там перемінні типу Double!? Як я вже говорив, Visual Basic неявно займається перетворенням типів. У даному випадку перед конкатенацією, числа Double спочатку перетворяться в рядок.

У принципі, програма вже готова. Давайте перевіримо її працездатність. Натисніть кнопку Start. З'явиться наша форма. Уведіть значення в поля: a = 3, b = -6, c = 2. Натисніть на кнопку "Вирішити!". Якщо ви всі делати правильно, те повинні побачити наступну картину:

Справа в тім, що рядок для висновку в Label не вписується в його розміри. Тому відбувається перенос на наступний рядок. Щоб цього уникнути, закрийте програму й установите властивість міток AutoSize у True (Рада: Щоб не встановлювати ця властивість 3 рази для кожної мітки, виділи їх відразу всі 3 і установите властивість.). Властивість AutoSize - підганяє розмір мітки так, щоб текст у властивості Caption цілком умістився в один рядок і не переносився на іншу. Тепер знову запустите програму, уведіть ті ж значення і натисніть на кнопку:

Теперь всё в порядке! Программа работает! Можете поэкперементировать, вводя разные значения коэффициентов.

Но, обратите внимение! Что произойдёт, если мы, не введя значения в поля , нажмём на кнопку? Что тогда присвоиться нашим переменным? Или, что будет, если мы введём нули в качестве коэффициентов? В обоих случаях Visual Basic сгенерирует ошибку. Почему? Ответ на этот вопрос мы разберём на.