Программирование на BASIC / Visual Basic / Visual Basic 6.0 / БВГ / БурковВГ_Материалы_Расширений_электронных_лекций / К_лекции_Буркова_Управляющие операторыVB
.docУправляющие операторы в VB 6
Операторы, которые могут изменить последовательность выполнения инструкций в программе или процедуре являются управляющими.
Основанием для принятия решений в управляющих операторах являются условные выражения (логические).
Логические выражения состоят из логических операций, примененных к логическим переменным, и возвращают одно из двух значений True (Истина) или False (Ложь). Логические выражения содержат логические отношения (операции сравнения: =, >, <, <>, >=, <=), связанные логическими операциями.
Основные логические операции
Таблица 1.
№ |
Операция |
Обозначение |
Истолкование |
1 |
Отрицание (инверсия) |
Not A |
Не А; Неверно, что А |
2 |
Конъюнкция (логическое произведение, логическое И) |
А And В |
А и В; как А, так и В; А вместе с В; А в то время, как В |
3 |
Дизъюнкция (логическое сложение, логическое ИЛИ) |
А Or В |
А или В; А или В или оба |
4 |
Исключающее ИЛИ |
А Xor В |
А либо В; А или В, но не оба |
Приоритеты выполнения логических операций в логических выражениях:
-
Отрицание
-
Логическое произведение
-
Логическое сложение, исключающее или
Скобки меняют порядок выполнения операций.
Ниже приведена Таблица 2. истинности для основных логических операций когда операнды А и В принимают значения (здесь значение 1 соответствует True, а
0 соответствует False):
Таблица 2.
А |
В |
Not A |
A And B |
A Or B |
A Xor B |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
Условные операторы If . . . Then
Могут иметь простую однострочную или блочную структуру.
Однострочный синтаксис
If Условие Then Оператор [Else Оператор]
Если условие после If истинно,( т.е. результат его вычисления = True), то выполняется оператор после ключевого слова Then. Если результат условия = False, то выполняется оператор, следующий за ключевым словом Else, если таковое имеется.
If a= 7 Then Beep
If x < 9 Then Print “False!” Else Print “True!”
Блочный синтаксис
If Условие Then
{Операторы 1}
[Elseif условие Then
{Операторы 2}
Else
{Операторы 3}
End if
Блочный синтаксис используется, когда необходимо выполнить не простую команду, а группу операторов.
Пример 1. Решение квадратного уравнения ax2 + bx + c = 0
d = b*b – 4 * a * c
If d < 0 Then
Print “Уравнение не имеет корней”
Elseif d = 0 Then
x = -b / (2*a)
Print “Уравнение имеет один корень”; x
Else
x1 = (-b + sqr(d)) / (2 * a)
x2 = (-b - sqr(d)) / (2 * a)
Print “Уравнение имеет два корня ”; x1, x2
End if
Select Case(оператор выбора).
Позволяет выполнить одну из групп операторов в зависимости от значения условия Case
Синтаксис:
Select Case тест_выражение
Case список_выражений 1
[Блок операторов 1]
[Case список_выражений 2
[Блок операторов 2]]
. . .
[Case Else
[Блок операторов 3]]
End Select
Пример 2.
Решение квадратного уравнения ax2 + bx + c = 0
D=(b * b - 4 * a * c)
Select Case D
Case Is < 0
Print "Уравнение не имеет корней"
Case Is = 0
x = -b / (2 * a)
Print "Уравнение имеет один корень"; x
Case Else
X1 = (-b + Sqr(D)) / (2 * a)
X2 = (-b - Sqr(D)) / (2 * a)
Print "Уравнение имеет два корня "; X1, X2
End Select
Пример 3.
Проанализировать сгенерированное в интервале от 0 до 10 случайное число,
Private Sub Command1_Click()
Randomize
a = Int(Rnd * 9) + 1 'случайное число от 1 до 10
Select Case a
Case 1
Print "Равно 1"
Case 2, 3
Print "Равно 2 или 3"
Case 4 To 6
Print "Больше или равно 4 и меньше или равно 6"
Case Is >= 9
Print "Больше или равно 9"
Case Else
Print "Ни одно из предшествующих"
End Select
End Sub
Циклы
Предназначены для многократного выполнения одного или нескольких операторов в программе.
Цикл с параметром: For … To … Next применяется, когда известно количество проходов.
Цикл «Делать пока»: Do ... Loop с вариациями – цикл с постусловием и цикл с предусловием. Используют, когда число проходов зависит от условия.
Синтаксис For … To … Next
For Счетчик = Начальное_значение To Конечное_значение [Step Шаг]
[Тело цикла]
Next [Счетчик]
В начале выполнения цикла значение Счетчик устанавливается в Начальное_значение. При каждом проходе переменная Счетчик увеличивается на 1 или на величину Шаг. Если Счетчик достигает или становится больше Конечное_значение, то цикл завершается, и выполняются следующие за циклом операторы.
Разные конструкции оператора:
For i = 1 To 10
Print i * 100
Next i
For L = 100 To 5 Step -0.5
x = y * L
Next L
For i = 1 To 5
For j = 10 To 20
Print Am(i , j)
Next j
Next i ‘ Или Next j, i
Для безусловного выхода из цикла используется оператор Exit For.
Пример 5 .
Напечатать 10 чисел ряда Фибоначчи (каждое последующее число равно сумме двух предыдущих), начиная с 11 числа.
Private Sub Command1_Click() Dim f1, f2 As Integer Dim i As Byte f1 = 1: f2 = 1 For i = 1 To 20 If i > 10 Then Print f1 f2 = f1 + f2 f1 = f2 - f1 Next i
End Sub |
Пример 6 .
Вычислить произведение
Private Sub Command1_Click() n = Slider1.Value m = Slider2.Value p = 1 For i = 1 To n For j = 1 To m p = p * i / (1 + j ^ 2) Next j Next i Text1.Text = Str(p) End Sub
Private Sub Command2_Click() Unload Me End Sub |
Иногда для ввода данных удобно пользоваться элементом управления Slider (ползунок), его свойство Value отвечает за перемещение указателя ползунка во время работы программы, свойства min и max задают диапазон значений ползунка (по умолчанию min=0, max =10).
Пример 7.
Протабулировать функцию sin(x) на отрезке [–π, π] с шагом 0,1.
Private Sub Command1_Click() Const pi = 3.1415926 Dim n As Integer: Dim h As Single Dim x As Single: Dim y As Single Dim sa As String: Dim sf As String h = Val(Text1.Text) n = Int(2 * pi / h) + 1 x = -pi: sa = "": sf = "" For i = 1 To n y = Sin(x) sa = sa + Format(x, "0.000") + Chr(13) + Chr(10) sf = sf + Format(y, "0.000") + Chr(13) + Chr(10) x = x + h Next Text2.Text = sa: Text3.Text = sf End Sub
Private Sub Command2_Click() Unload Me End Sub |
При проектировании данного проекта необходимо для TextBox –ов, предназначенных для вывода, установить следующие свойства Multiline = true и Scrollbars=Vertical
Циклы «Делать пока»
Синтаксис Do ... Loop (см.Таблицу3.)
Таблица 3.
Do While <условие> [операторы] Loop |
Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу, пока это условие остается истинным. |
Do [операторы] Loop While <условие> |
Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы 1 раз. Цикл работает, пока это условие остается истинным. |
Do Until <условие> [операторы] Loop |
Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу до тех пор, пока это условие не выполнится (то есть до тех пор, пока условие является ложным) |
Do <операторы> [операторы] Loop Until <условие> |
Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы один раз. Цикл работает до тех пор, пока это условие не выполнится (то есть до тех пор, пока условие является ложным). |
Для безусловного выхода из цикла используется оператор Exit Do.
Пример 8.
Определить количество цифр в целом числе N. Для этого нужно делить число N на 10 до тех пор, пока в целой части числа не будет 0. Число делений равно числу цифр. K– число делений или цифр, INT – выделение целой части числа.
Private Sub Command1_Click() n = Val(Text1.Text) k = 0 Do n = Int(n / 10) k = k + 1 Loop While n > 0 Text2.Text = Str(k) Text2.Visible = True Label2.Visible = True End Sub
Private Sub Command2_Click() Unload Me End Sub
Private Sub Form_Load() Text1.Text = "" Label2.Visible = False Text2.Text = "" Text2.Visible = False End Sub |
Пример 9.
Найти количество членов бесконечного ряда с точностью ε=10-4.
Private Sub Command1_Click() Const pi = 3.14159265358979 e = Val(Text4.Text) x = Val(Text1.Text) x = x / 180 * pi f = Sin(x) s = x a = x k = 1 Text2.Text = Format(f, "0.000E+") Do While Abs(f - s) > e a = -a * x ^ 2 / (2 * k) / (2 * k + 1) s = s + a k = k + 1 Loop Text3.Text = Format(s, "0.000E+") Text5.Text = Str(k) End Sub
Private Sub Command2_Click() Unload Me End Sub |
Dim a(1 To 10) As Integer
Private Sub Command1_Click()
n = Val(Text3.Text)
s = Split(Text2.Text, ";")
For i = 1 To n
a(i) = Val(s(i - 1))
Next
For i = 1 To n
p = a(i)
Do While p > 1
p = p / Val(Text1.Text)
Loop
If p = 1 Then Picture1.Print a(i); " ";
Next
End Sub
Замечание:
Иногда возникает необходимость переделать цикл типа For…Next на цикл Do…Loop (наоборот не всегда получается).В Таблица 4. показано это соответствие
Таблица 4.
For…Next |
Do…Loop с предусловием |
Do…Loop с постусловием |
I1 = text1.Text I2 = text2.Text For I = I1 To I2 [тело цикла] Next |
I = text1.Text I2 = text2.Text Do While I <= I2 [тело цикла] I=I+1 Loop |
I = text1.Text I2 = text2.Text Do [тело цикла] I=I+1 Loop Until I > I2 |