Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Существует еще одна инструкция безусловного перехода Go to, которая в общем виде записывается так:
Go to Метка.
Метка это идентификатор с двоеточием, стоящий перед инструкцией, которая должна быть выполнена после инструкции Go to.
Пример 1 написать программу вычисления , если введен правильный пароль.
Sub pparol()
Dim parol, x, y
finish:
parol = (InputBox("введите пароль"))
If parol <> "nataly" Then 'nataly правильный пароль
MsgBox "неверный пароль, доступ запрещен"
GoTo finish
End If
x = Int(Rnd * 10 + 1): y = x ^ 0.5
MsgBox "x=" & x & "y=" & y
End Sub
Sub pr42()
'Ввести три любых числа, сумму двух чисел поделить на третье, сделать про‘верку, что в знаменателе число <>0.
Dim x, y, sum, z
x = Val(InputBox("введите x:"))
y = Val(InputBox("введите y:"))
1: z = Val(InputBox("введите z:"))
If z <> 0 Then
sum = (x + y) / z
ElseIf z = 0 Then
MsgBox "введен ноль"
GoTo 1
End If
MsgBox "sum=" & sum
End Sub
Циклы
Циклы предназначены для многократного выполнения группы инструкций. В VBA для организаций циклов используются инструкции For…next, While…Wend, Do …Loop и For Each… Next.
Инструкция For…next
Эта инструкция повторяет выполнение группы инструкций указанное число раз.
Синтаксис инструкции For…next:
For Счетчик = Начало To Конец [Step Шаг]
[Инструкции]
[Exit For]
[Инструкции]
Next[Счетчик]
Синтаксис инструкции содержит For…next элементы, представленные в табл. 1.
Таблица Элементы синтаксиса инструкции For…next
Элемент | Описание |
Счетчик | Обязательный элемент. Числовая переменная (за исключением типа Boolean), используемая в качестве счетчика цикла. Эта переменная не может быть элементом массива |
Начало | Обязательный элемент — начальное значение переменной Счетчик |
Конец | Обязательный элемент конечное значение переменной Счетчик |
Шаг | Необязательный элемент — представляет собой значение, на которое изменяется счетчик при каждом выполнении тела цикла. По умолчанию шаг равен единице |
Инструкции | Необязательный элемент — одна или несколько инструкций. составляющих тело цикла |
Аргумент Шаг может быть как положительным, так и отрицательным. Значение этого аргумента определяет выполнение цикла в соответствии с правилами, приведенными в табл. 2.
Таблица 2. Выполнение цикла в зависимости от значения аргумента Шаг
Значение | Условие |
Положительное или 0 Отрицательное | Счетчик<= Конец Счетчик>= Конец |
После выполнения всех инструкций цикла значение элемента Шаг добавляется к текущему значению переменной Счетчик. После этого инструкции цикла либо выполняются еще раз, либо цикл завершается (если значение счетчика сравниваетcя со значением элемента конец) и выполнение программы продолжается с инструкции, следующей за инструкцией Next.
Пример цикла For…Next
Подсчитать сумму четных чисел в диапазоне от 0 до 10 включительно.
Sub p1()
Dim i As Integer, sum As Integer
For i = 0 To 10 Step 2
sum = sum + i
Next i
MsgBox "sum=" & sum
End Sub
Подсчитать произведение четных чисел в диапазоне от 2 до 10 включительно.
Sub p2()
Dim i As Integer, pr As Integer
pr = 1
For i = 2 To 10 Step 2
pr = pr * i
Next i
MsgBox "pr=" & pr
End Sub
Допускается организация вложенных циклов For..Next. При этом счетчик каждого цикла должен иметь уникальное имя.
Пример вложенных циклов: создать таблицу умножения.
Sub p3()
Dim i, j As Integer
Dim a(2 To 9, 1 To 10), str_a
For i = 2 To 9
For j = 1 To 10
a(i, j) = i & "x" & j & "=" & (i * j)
str_a = str_a & " " & a(i, j) & " "
Next j, i
MsgBox str_a
End Sub
Инструкция Do…Loop
Инструкция Do…Loop имеет два варианта синтаксиса: в первом варианте условие проверяется в начале цикла, во втором условие проверяется после выполнения инструкций тела цикла.
При использовании ключевого слова While цикл будет выполняться, пока условие имеет значение True со словом Until - пока условие не примет значение True.
Первый вариант синтаксиса инструкции Do…Loop:
Do [{While | Until} Условие]
[Инструкции]
[Exit Do]
[Инструкции]
loop
Пример. Даны два положительных целых числа найти их наибольший общий делитель (например 45 и 27 нод=9)
Sub nod()
Dim a, b, r, nod
a = Val(InputBox("введите a:"))
b = Val(InputBox("введите b:"))
Do While (a Mod b) <> 0
r = a Mod b
a = b
b = r
Loop
nod = b 'nod – наибольший общий делитель
MsgBox "a=" & a & " " & "b=" & b & Chr(10) & Chr(13) & _
"nod=" & nod
End Sub
Пример. Определение простого числа. Например 11 mod 2=1,
11 mod 3=2, 11 mod 4=2, 11 mod 5=1, 11 mod 6=5, 11 mod 7=4,
11 mod 8=3, 11 mod 9=2, 11 mod 10=1, 11 mod 11=0, 11 простое число.
Sub prostoe()
Dim n, d, r
n = Int(Rnd * 100) + 1
d = 2
Do While n Mod d <> 0
r = n Mod d
d = d + 1
Loop
If d = n Then
MsgBox "n простое число" & " " & "n=" & n
Else
MsgBox "n – непростое число" & " " & "n=" & n
End If
End Sub
Второй вариант синтаксиса инструкций Do… Loop
Do
[Инструкции]
[Exit Do]
[Инструкции]
Loop [{While | Until} Условие]
Пример. Определение простого числа.
Sub prostoe1()
Dim n, d, r
n = Int(Rnd * 100) + 1
d = 2
Do
r = n Mod d
d = d + 1
Loop While n Mod d <> 0
If d = n Then
MsgBox "n простое число " & "n=" & n
Else
MsgBox "n не простое число" & " " & "n=" & n
End If
End Sub
Таблица 3, Элементы синтаксиса инструкции Do Loop
Элемент | Описание |
Условие | Необязательный элемент. Представляет числовое выражение или строковое выражение, которое имеет значение True или False. Если условие имеет значение Null, то оно рассматривается как значение False. |
Инструкции | Одна или несколько инструкций, выполнение которых повторяется до тех пор, пока условие имеет значение True или пока оно не приобретет значение True. |
В первом варианте синтаксиса цикла Do..Loop и в цикле сначала всегда проверяется условие, поэтому возможна ситуация, когда инструкции могут ни разу не выполняться. Во втором варианте синтаксиса Do..Loop инструкции, составляющие тело цикла, будут выполнены по крайней мере один раз.
Дата публикования: 2014-11-26; Прочитано: 318 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!