Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
68
Добавлен:
02.05.2014
Размер:
101.89 Кб
Скачать

Управляющие операторы в VB 6

Операторы, которые могут изменить последовательность выполнения инструкций в программе или процедуре являются управляющими.

Основанием для принятия решений в управляющих операторах являются условные выражения (логические).

Логические выражения состоят из логических операций, примененных к логическим переменным, и возвращают одно из двух значений True (Истина) или False (Ложь). Логические выражения содержат логические отношения (операции сравнения: =, >, <, <>, >=, <=), связанные логическими операциями.

Основные логические операции

Таблица 1.

Операция

Обозначение

Истолкование

1

Отрицание (инверсия)

Not A

Не А;

Неверно, что А

2

Конъюнкция (логическое произведение, логическое И)

А And В

А и В; как А, так и В;

А вместе с В; А в то время, как В

3

Дизъюнкция (логическое сложение, логическое ИЛИ)

А Or В

А или В;

А или В или оба

4

Исключающее ИЛИ

А Xor В

А либо В;

А или В, но не оба

Приоритеты выполнения логических операций в логических выражениях:

  1. Отрицание

  2. Логическое произведение

  3. Логическое сложение, исключающее или

Скобки меняют порядок выполнения операций.

Ниже приведена Таблица 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

DoLoop с предусловием

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

8