ЗМІСТ:
Алгоритм – це послідовність, система, набір систематизованих правил виконання обчислювального процесу, що обов'язково приводить до розв'язання певної задачі після скінченного числа операцій. При написанні комп'ютерних програм алгоритм описує логічну послідовність операцій.
Однією з властивостей алгоритму є дискретність – можливість поділу процесу обчислення (алгоритму) на окремі етапи, можливість виділення ділянок програми з певною структурою. Можна виділити і наочно представити графічно три прості структури:
послідовність двох або більш за операції;
вибір напряму;
повторення.
Будь-який обчислювальний процес може бути представлений як комбінація цих елементарних алгоритмічних структур. Відповідно, обчислювальні процеси, що виконуються на комп’ютері за заданою програмою, можна розділити на три основні види:
лінійні;
розгалужені;
циклічні.
Лінійним прийнято називати обчислювальний процес, в якому операції виконуються послідовно, в порядку їх запису. Кожна операція є самостійною, незалежною від яких-небудь умов. На схемі блоки, що відображують ці операції, розташовуються в лінійній послідовності.
Лінійні обчислювальні процеси використовуються, наприклад, при обчисленні арифметичних виразів, коли є конкретні числові дані і над ними виконуються відповідні дії. На рис.1 показаний приклад лінійного алгоритму, що визначає процес обчислення арифметичного виразу:
у=(b2 - ас) :(а+с).
Рис. 1. Приклад лінійного алгоритму
Обчислювальний процес називається розгалуженим, якщо для його реалізації передбачено декілька напрямів процесу. Кожен окремий напрям процесу обробки даних є окремою гілкою обчислень. Галуження в програмі – це вибір однієї з декількох послідовностей команд при виконанні програми. Вибір напряму залежить від заздалегідь визначеної ознаки, яка може відноситися до початкових даних, до проміжних або кінцевих результатів. Ознака характеризує властивість даних і має декілька значень.
Напрям галуження вибирається логічною перевіркою, в результаті якої можливі дві відповіді: "так" – умова виконана і "ні" – умова не виконана.
Хоча на схемі алгоритму мають бути показані усі можливі напрями обчислень залежно від виконання певної умови (чи умов), при одноразовому проходженні програми процес реалізується тільки по одній гілці, а інші виключаються. Будь-яка гілка, по якій здійснюються обчислення, повинна призводити до завершення обчислювального процесу.
На рис. 2 показаний приклад алгоритму з розгалуженням для обчислення наступного виразу:
Y = (а+b), якщо Х <0;
з/b, якщо Х>0.
Рис. 2 Приклад розгалуженого алгоритму
У системі програмування Visual Basic оператори в тілі процедури виконуються послідовно один за одним. Для зміни послідовності виконання операторів використовуються оператори управління. До них відносяться умовні оператори та оператори циклу.
Умовний оператор використовується для подання розгалуженого обчислювального процесу у коді програми мовою Visual Basic. Умовний оператор If…Then…Else має дві структури: лінійну та блочну.
Синтаксис лінійної структури умовного оператора:
If <логічний вираз> Then <оператори1> [ Else <оператори2>]
Обчислюється значення логічного виразу, результатом якого може бути одне з двох значень (істина) або (хибність). Логічний вираз складається з операторів логічного типу, між якими містяться знаки логічних операцій і може мати одне з двох значень: True (Істина) або False (Хибність). Вираз у квадратних дужках [ ] може бути відсутній.
ПРИКЛАД:
Комп'ютер повинен перемножити два числа – 167 і 121. Якщо їх добуток перевищує 2000, то комп'ютер повинен надрукувати текст «Добуток великий», інакше повинен виводитися текст «Добуток маленький». Після цього комп'ютер в будь-якому випадку повинен надрукувати сам добуток.
Dim a As Integer
Dim b As Integer
Dim y As Integer
Private Sub Form_Load()
a = 167
b = 121
y = a * b
If y > 20000 Then Debug.Print "Добуток великий " _
Else Debug.Print "Добуток маленький "
Debug.Print y
End Sub
Часто кількість операторів після Then і Else буває набагато більшою, та й самі ці оператори бувають набагато більш складними і довгими. У цьому випадку рядок стає великим і не вміщується на екрані. Для таких випадків створено багаторядковий (або блоковий) оператор If.
Синтаксис блочної форми умовного оператора:
If< логічний вираз 1> Then
оператори 1
[Else if <логічний вираз2> Then
оператори 2]
[Еlse оператори n]
End If
Конструкція End If означає, що в цьому місці оператор If закінчується. Частини Else може не бути взагалі.
Блоковий If виконується так: спочатку перевіряється перша умова, якщо вона не виконується, то Visual Basic переходить до перевірки другої умови і так далі. Натрапивши нарешті на умова, яке виконується, Visual Basic виконує оператори, що стоять після його Then і на цьому закінчує роботу, навіть якщо нижче є умови, які теж виконуються. Якщо не виконується жодна з умов, Visual Basic виконує оператори, які стоять за Else.
ПРИКЛАД:
У комп'ютер вводиться ціле число a.
• якщо a <0, то комп'ютер повинен вивести "Число від’ємне".
• якщо a = 0, то комп'ютер повинен вивести "Ви ввели нуль".
• якщо a> 100, то комп'ютер повинен вивести "Число велике".
• в інших випадках комп'ютер нічого не повинен нічого виводити, а тільки обчислити і надрукувати його квадрат.
В будь-якому випадку після всього цього комп'ютер повинен сказати "До побачення".
Private Sub Command1_Click()
a = InputBox("Введіть число")
If a < 0 Then
MsgBox ("Число від’ємне")
ElseIf a = 0 Then
MsgBox ("Ви ввели нуль")
ElseIf a > 100 Then
MsgBox ("Число велике")
Else
Print a ^ 2
End If
MsgBox ("До побачення!")
End Sub
Згідно синтаксичної схеми оператора If, після Then і Else може стояти будь-який оператор Visual Basic, в тому числі і If.
ПРИКЛАД:
В комп'ютер вводиться число (нехай для конкретності це буде дальність пострілу). Якщо воно знаходиться в інтервалі від 28 до 30, то надрукувати текст ПОТРАПИВ, інакше – НЕ ПОТРАПИВ.
Спочатку складемо алгоритм: Введи число. Якщо воно менше 28, то друкуй НЕ ПОТРАПИВ, в іншому випадку якщо число менше 30, то друкуй ПОТРАПИВ, інакше друкуй НЕ ПОТРАПИВ.
Private Sub Command1_Click()
a = InputBox("Введіть дальність вистрілу")
If a < 28 Then
MsgBox ("НЕ ПОПАВ")
Else
If a < 30 Then MsgBox ("ПОПАВ") Else MsgBox ("НЕ ПОПАВ")
End If
End Sub
Цю ж програму можна записати і без вкладеного If:
Private Sub Command1_Click()
a = InputBox("Введіть дальність пострілу")
If a < 28 Then
MsgBox ("НЕ ПОПАВ")
ElseIf a < 30 Then
MsgBox ("ПОПАВ")
Else
MsgBox ("НЕ ПОПАВ")
End If
End Sub
ПРИКЛАД.
Створимо додаток для обчислення платні за працю в нічні години.
Для введення даних і відображення результату використаємо елементи типу TextBox. Для програмування зупинимось на події – втрата фокуса елементом Текст2 (Текст2_ LostFocus()). Програма і вигляд додатку відображені нижче.
Оператор вибору Select Case використовується для перевірки однієї умови і виконання одного з декількох блоків операторів.
Формат запису оператора:
Select Case <перевіряється вираз>
Case <список виразів 1>
<Оператори 1> Case <список виразів 2>
<Оператори 2> Case <список виразів 3>
<Оператори 3>
Case Else
<Оператори групи Else>
End Select
Логіка роботи Select Case абсолютно така ж, як і у блочного If. У процесі виконання оператора комп'ютер порівнює значення змінної по черзі з усіма значеннями, перерахованими в варіантах. Після збігу, виконуються оператори, що стоять в цьому варіанті. На цьому виконання оператора Select Case завершується. Якщо ж збігу не знайшлося, то виконуються оператори, що стоять в варіанті Else.
ПРИКЛАД:
ВАРІАНТ 1:
Dim Bal As Integer
Private Sub Command1_Click()
Bal = InputBox("Яку оцінку ти отримав?")
If Bal = 1 Or Bal = 2 Then
Print "Жах!"
ElseIf Bal = 3 Then
Print "Погано"
ElseIf Bal = 4 Then
Print "Непогано"
ElseIf Bal = 5 Then
Print "Молодець!"
Else
Print "Такої оцінки не буває"
End If
End Sub
ВАРІАНТ 2:
Dim Bal As Integer
Private Sub Command1_Click()
Bal = InputBox("Яку оцінку ти отримав?")
Select Case Bal
Case 1, 2
Print "Жах!"
Case 3
Print "Погано"
Case 4
Print "Непогано"
Case 5
Print "Молодець!"
Case Else
Print "Такої оцінки не буває "
End Select
End Sub
ПРИКЛАД.
Розглянемо використання оператора множинного вибору Select Case на прикладі обчислення денного заробітку робітника з врахуванням тарифу і тарифного розряду.
Для вибору тарифного коефіцієнта за розрядом використаємо оператор Select Case r.
Параметр вибору r може приймати 7 різних значень тож використання множинного оператора вибору значно зручніше ніж багаторазове використання лінійної форми умовного оператора If.
If r=1 then k=1
If r=2 then k=1.1
………………….
If r=7 then k=2.2
Private Sub Пуск_Click()
Dim Z!, r%, t!, tr!, k!
Т = Val(InputBox("Т", "Укажіть тариф"))
r = Val(InputBox("r", "Тарифний розряд"))
tr = Val(InputBox("tr", "Відпрацьований час"))
Select Case r
Case 1: k = 1: Case 2: k = 1.1: Case 3: k = 1.35:
Case 4: k = 1.5: Case 5: k = 1.7: Case 6: k = 2:
Case 7: k = 2.2
End Select
Z = t * tr * k
Print "Тариф Т=" & Т; " грн/годину"
Print "Розряд r=" & r
Print "k=" & k
Print " Відпрацьовано tr=" & tr & " Годин"
Print "Заробіток Z=" & Z & " Грн."
End Sub
Логічний вираз складається з констант, змінних, функцій, які з'єднані між собою знаками арифметичних операцій, знаками відношень та логічними операціями.
У Visual Basic існують наступні логічні операції:
Not – заперечення ,(⌐)
And – кон'юнкція (логічне множення), (v)
Or – диз'юнкція (логічне додавання), (Λ)
Хоr – виключення ("строга" диз'юнкція),( )
Еог – еквіваленція, А ó В
Imp – імплікація, А→В
Логічні вирази, в яких відсутні знаки логічних операцій, називаються простими, а логічні вирази, в яких вони присутні, називаються складними. Результатом логічного виразу є два значення: True (Істина) – 1, або False (Хибність) – 0.
Результати логічних операцій наведено у таблиці:
Пріоритет виконання дій в логічних виразах:
обчислюються арифметичні вирази (якщо вони є);
виконуються операції відношень;
виконуються логічні операції в послідовності:
Not
And
Or, Xor
Imp
Eor
Приклад. Обчислити значення логічного виразу
(x > y) v х-у > 2 Λ х-0,5<4, де х=1,5; у=0,6.
Логічний вираз на Visual Basic записується так:
Not(x>y) And х-у>2 Or х- 0.5<4
Послідовність дій:
1) х > у → True (1):
2) х-у = 1,5 - 0,6 = 0,9 => 0,9 >2 → False (0);
3) х-0,5= 1,5-0.5=1 => 1 <4 →True(1);
4) Not (True) → False (0);
5) False (0) And False (0) = False (0);
6) False (0) Or True (1) = True (1).
Відповідь: в результаті виконання логічного виразу одержали значення True (1).
Логічні вирази застосовуються в операторах циклів While-Wend, Do-Loop та конструкціях if, Elseif та Select Case.
Логічні вирази в розгалуженні можуть бути простим чи складним. Логічні вирази утворюються із простих шляхом використання операцій кон'юнкції (and), диз'юнкції (or), заперечення (not). Порядок виконання цих операцій у Visual Basic такий самий, як і математичної логіки.
ПРИКЛАД: Обчислити значення заданої функції:
Блок-схема розв'язку задачі
Інтерфейс проєкту
Private Sub Button1_Click()
Dim x, y As Single
x = Val(Text1.Text)
If (x > -3) And (x < 5) Then
y = 2 * x - 12
Label5.Text = "Умова виконується"
Else
y = 7 - 8 * x
Label5.Text = "Умова не виконується"
End If
Label4.Text = y
End Sub
Питання для перевірки:
У яких випадках використовують розгалужені алгоритми? Наведіть приклади.
Яке призначення має умовний оператор?
Порівняйте за призначенням лінійну та блочну форми умовного оператора?
З якою метою можна застосовувати функцію MsgBox?
Придумайте приклад з повсякденного життя, де було б використано умовний оператор.
У яких випадках використовують розгалужені алгоритми? Наведіть приклади.
Яке призначення має умовний оператор?
Порівняйте за призначенням лінійну та блочну форми умовного оператора?
Який обчислювальний процес називається розгалуженим?
Що таке розгалуження обчислень?
Чи є обов'язковою частиною Else в умовному операторі?
Запишіть та поясніть формат оператора IfElse.
За допомогою яких логічних операторів здійснюються складні порівняння?
Запишіть та поясніть формат оператора Case.
Накресліть блок-схему алгоритму оператора IfElse.
Накресліть блок-схему алгоритму оператора Select Case.