Дискретность алгоритма. Это свойство означает, что процесс решения задачи расчленен на отдельные элементарные действия (шаги).
Определенность алгоритма. Это свойство означает, что каждая команда алгоритма должна быть понятна исполнителю.
Результативность алгоритма. Свойство алгоритма, состоящее в том, что он всегда приводит к результату.
Массовость алгоритма. Это свойство заключается в том, что каждый алгоритм, разработанный для решения некотрой задачи, должен быть применим для решения задач этого типа при всех допустимых значениях исходных данных.
Алгоритм
Алгоритм — последовательность инструкций исполнителю для решения доставленной задачи (от англ, algorithm; назван в честь великого узбекского математика IX Аль Хорезми). Существуют разные способы задания алгоритмов:
1) словесный - позволяет описать алгоритм с помощью слов и предложений.
2) графический — когда каждое действие записывается в соответствующей геометрической фигуре.
Применение аппарата схем для описания алгоритмов
Графическое представление хода решения задачи – самый наглядный способ записи алгоритма. Блок-схемы наиболее распространенный способ изображения алгоритмов
Алгоритм, заданный словесно или графически (блок-схемой), может быть обработан с помощью ЭВМ только в том случае, если он переведен на какой-либо язык программирования. Выбор языка зависит от многих факторов — как объективнее, так и субъективных: наличия техники, программного обеспечения, наличия литературы. Программа — запись алгоритма на языке программирования.
Система программирования Visual Basic относится к группе программных средств общим названием системы программирования. Система программирования обеспечивает пользователя средой для обработки программ, в Visual Basic это, называется проектированием приложений. В систему программирования Visual Basic входит текстовый редактор для написания текстов программ и конструктор форм. Программист пишет исходные тексты программ на формализованном языке, который представляет собой последовательность команд или операторов. Разработка интерфейса программы выполняется с помощью конструктора форм. Чтобы программа
выполнялась, исходные тексты переводятся на машинный язык. Это делает компилятор, который также входит в систему программирования. Не выходя из среды Visual Basic, вы монете многократно запускать свою программу на выполнение, проверяя и отлаживая ее работу, и возвращаться обратно. Таким образом, программа может находиться либо в проектирования, либо в режиме выполнения.
Структура программы:
Заголовок Sub(процедура).
Объявление переменных и констант Dim (переменные и константы).
Тело программы
Вывод результатов.
Конец программы Еnd Sub.
Способы записи чисел
Используются в основном 2 способа:
Запись числа с фиксированной точкой, например:
123,456 454 9,456.
Запись числа с плавающей точкой (нормализованная, экспоненциальная запись). Например: 2,14E+3 тоже, что и 2,14*103=2140.
Общая форма записи числа N в таком виде:
, т.е.
,
здесь
- мантисса числа N
(
;
- порядок числа N).
В языках программирования обычно .
Примеры:
1E+0=1; 9E-2=0,09 3,65E+2=365.
В Visual Basic используются числа с плавающей точкой обычной точности (Single) - количество чисел не более 7 и числа с плавающей точкой двойной точности - количество чисел не более 17.
Например 1/3=0,3333333 (для типа Single) и 1/3=0,333333333333333 (для типа Double).
Данные
В VBA могут использоваться следующие виды данных: 1)константы; 2)простые переменные и массивы.
Константы.VBA используются числовые и текстовые константы. Числовые константы записываются в программе в виде конкретного числа (вещественного или целого).
Переменная — именованное место в памяти компьютера, которое имеет ИМЯ (Идентификатор) и ЗНАЧЕНИЕ. Имя переменной (Идентификатор) — последовательность букв, цифр и спецсимволов (!, #, $, @, %^ А), начинающаяся с буквы и содержащая до 40 символов.
Типы данных
Типы данных являются одним из важнейших элементов языка VBA. Подобно всем современным языкам программирования VBA поддерживает несколько типов данных , которые можно использовать для объявления типов переменных или создания массивов.
При объявлении переменных тип данных указывается после ключевого слова As, с помощью одного из ключевых слов представленных в таблице 1.
Типы данных
Тип данных |
Значения |
Размер, байт |
1 |
2 |
3 |
Byte (байт) |
От 0 до 255 |
1 |
Boolean (логический) |
True или False |
2 |
Integer (целое) |
От -32768 до 32767 |
2 |
Long (длинное целое) |
От -2147483648 до 2147483647 |
4 |
Single (с плавающей точкой обычной точности) |
От -3,402823E38 до -1,401129E-45 для отрицательных значений; 1,401129E-45 до 3,402823E38 для положительных значений |
4 |
Double (с плавающей точкой двойной точности) |
От -1,79769313486232E308 до -4,94065645841247E-324 для отрицательных значений; 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений |
8 |
1 |
2 |
3 |
Currency (денежный) |
От -922337203685477,5808 До 922337203685477,5807 |
8 |
Decimal (масштабируемое целое) |
без дробной части 7,9228162514264337593545950335 с 28 знаками справа от запятой, минимальное ненулевое значение равняется 0,0000000000000000000000000001
|
14 |
Date (даты и время) |
От 1 января 100 г. До 31 декабря 9999 г. |
8 |
Object (объект) |
любой указатель объекта |
4 |
String (строка переменной длины) |
От 0 до приблизительно 2 миллиардов |
10+длина строки |
String (строка постоянной длины) |
От 1 до приблизительно 654000 |
длина строки |
Variant (числовые подтипы) |
Любое числовое значение (до границ диапазона для типа Double) |
16 |
Variant (строковые подтипы) |
Как для строки (String) переменной длины |
22+длина строки |
Тип данных, определяемый пользователем (с помощью ключевого слова Type) |
Диапазон каждого элемента определяется его типом данных |
Размер определяется пользователем |
Переменные типа Byte, Boolean,Integer, Long, Currency, Decimal, Double и Date в VBA называют числовыми переменными. Числовыми переменными также являются переменные подтипов Empty (что означает отсутствие инициализации переменной), Integer, Long, Currency, Decimal, Double, Date, Error и Bate типа Variant.
Переменные типа String относят к строковым переменным. Этот тип переменных может содержать буквы, цифры, знаки пунктуации, пробелы и специальные символы.
VBA не требует обязательного объявления переменных. В случае если переменная не была объявлена, ей автоматически присваивается тип Variant. Этот тип является универсальным и может содержать данные различных подтипов: Long, Integer, String и т.д.
Операторы
Операторы предназначены для выполнения различных операций над операндами. Например, оператор «+» выполняет операцию сложения двух чисел или выражений, являющихся операндами. Большинство операторов VBA требует наличия двух операндов. Все операторы можно разделить на несколько групп:
Арифметические операторы. Они используются для используются для выполнения основных арифметических операций над операндами, представляющие числовые выражения.
Логические операторы, предназначены для выполнения различных логических операций включая логическое сложение, логическое умножение и т.п.
Операторы сравнения предназначены для выполнения операций сравнения логических выражений. Результатом их выполнения является значение типа Boolean.
Оператор присваивания «=».
Арифметические операции |
Знаки операций |
Возведение в степень |
^ |
Изменение знака на обратный |
- |
Умножение |
* |
Деление |
/ |
Целочисленное деление |
\ |
Определение остатка от целочисленного деления |
MOD |
Сложение |
+ |
Вычитание |
- |
Операция сравнения |
Знак операции |
Равно |
= |
Не равно |
<> |
Меньше |
< |
Больше |
> |
Меньше или равно |
<= |
Больше или равно |
>= |
Булева операция |
Оператор |
Отрицание |
NOT |
Конъюнкция (логическое «И») |
AND |
Дизъюнкция (логическое «Или») |
OR |
Исключающее «Или» |
XOR |
Эквиваленция |
EQV |
Импликация |
IMP |
И – истина, Л – ложь.
Выражение 1 |
Выражение 2 |
NOT |
AND |
OR |
XOR |
EQV |
IMP |
И |
И |
Л |
И |
И |
Л |
И |
И |
И |
Л |
Л |
Л |
И |
И |
Л |
Л |
Л |
И |
И |
Л |
И |
И |
Л |
И |
Л |
Л |
И |
Л |
Л |
Л |
И |
И |
Функции
Тригонометрические функции
№ |
Функция |
Оператор |
Что делает |
1 |
Arctg x |
ATN(x) |
Возвращает арктангенс указанного числового выражения |
2 |
Cos |
COS() |
Возвращает косинус указанного угла. Угол задан в радианах. |
3 |
Sin |
SIN() |
Возвращает синус указанного угла. Угол задан в радианах. |
4 |
Tg |
TAN() |
Возвращает тангенс указанного угла. Угол задан в радианах. |
Уголв
радианах=Уголв
градусах
;
где
=3,141592654.
Связь между обратными тригонометрическими функциями
ArcSin
x=Arctg(
;
ArcCos=Arctg(
Математические функции
Математическая запись |
Функция |
Выполняемое действие |
|
ABS(x) |
Возвращает абсолютное значение числовой переменной x |
|
CDBL(x) |
Переводит числовое выражение в значение с двойной точностью |
|
CSNG |
Переводит числовое выражение в значение с обычной точностью |
|
CINT |
Округляет числовое выражение до целого значения |
ex |
EXP(x) |
Возвращает e, возведенное в степень x |
Ln(x) |
LOG(x) |
Возвращает натуральный числового выражения |
|
INT(x) |
Возвращает наибольшее целое, меньшее или равное числовому выражению |
|
FIX(x) |
Округляет выражение с плавающей точкой до его целой части |
|
RND(x) |
Возвращает случайное число одинарной точности от 0 до 1 |
|
SQR(x) |
Возвращает квадратный корень числового выражения |
|
SQN(x) |
Возвращает значения, указывающее знак числового выражения |
в частности
Работа с символьной информацией
Обработка числовой информации в тексте – функции val, str$.
Символьные функции
функция |
Выполняемое действие |
ASC(x) |
Возвращает код ASII первого символа в символьной переменной x |
CHR(x) |
Возвращает символ соответствующий коду ASII x |
INSTR(x,y) |
Возвращает позицию первого обнаружения строки x в строке y |
LEFT(x,n) |
Возвращает n символов, стоящих с левого края символьной переменной x |
LTRIM(x) |
Удаляет начальные пробелы в символьной переменной x |
MID(x,I,k) |
Вырезает из символьной переменной x k символов, начиная с i-того |
RIGTH(x,n) |
Возвращает n символов, стоящих с правого края символьной переменной x |
RTRIM(x) |
Удаляет конечные пробелы в символьной переменной x |
SPASE(n) |
Возвращает n пробелов |
STR(x) |
Переводит числовое значение переменной в символьное |
STRING(L,x) |
Возвращает L символов, совпадающих с первым символом символьной переменной x |
VAL(x) |
Переводит символьное значение переменной x в числовое значение |
Инструкции принятия решения (оператор условия и оператор выбора)
Инструкции принятия решения позволяют выполнять группы инструкций в зависимости от определенного условия. В VBA для принятия решения используются две инструкции: If …then …else и Select Case.
Инструкция If …then …else
Инструкция If …then …else задает выполнение определенных групп инструкций в зависимости от значения выражения. Ее синтаксис приведен ниже:
If Условие Then Инструкции [Else Инструкции_ Else]
Допускается также использование блоковой формы синтаксиса:
If Условие Then
[Инструкции]
[Else
[Инструкции_else]
End if
Или расширенная блоковая форма синтаксиса:
If Условие Then
[Инструкции]
[Elseif Условие-n Then
[Инструкции_elseif]]
[Else
[Инструкции_elseif_else]]
End if
При этом предложение Elseif…Then может повторяться несколько раз. Синтаксис инструкции If …then …else содержит элементы, представленные в таблице 1
Таблица 1. Элементы синтаксиса инструкции If …then …else
Элемент |
Описание |
Условие
Инструкции
Условие 1
Инструкции_elseif
Инструкции_else
Инструщии_ elseif_else |
Обязательный элемент, представляющий логическое выражение, имеющее значение True или False. Если Условие имеет значение Null, то значение Условие считается равным False
Необязательный элемент в блоковой форме, но обязательный — в строчной форме. Этот элемент представляет собой одну или несколько инструкций, разделяемых двоеточиями, которые выполняются, если Условие имеет значение True
Обязательный элемент, аналогичный элементу Условие, если употреблено выражение Elseif
Необязательный элемент — одно или несколько инструкций, которые выполняются, если Условие имеет значение False, а Условие-п — True
Необязательный элемент— одна или несколько инструкций, которые выполняются, если Условие имеет значение False
Необязательный элемент — одно или несколько инструкций, которые выполняются, если ни Условие, ни Условие-n не имеют значение False |
Однострочная форма допускает выполнение нескольких инструкций в результате проверки одного условия if…Then. При этом все инструкции должны находиться на одной строке и разделяться двоеточием, как показано в приведенном ниже
примере:
Существуют четыре целых числа, если inta мешьше intв, то к inta прибавить 3 и intb прибавить 7 и intc приравнять сумме inta и intb.
Sub testsub()
Dim inta As Integer, intb As Integer, intc As Integer, _
intd As Integer, intanew As Integer, intbnew As Integer, _
intcnew As Integer
inta = Int(Rnd * 10 + 1): intb = Int(Rnd * 10 + 1)
intc = Int(Rnd * 10 + 1): intd = Int(Rnd * 10 + 1):
If inta < intd Then intanew = inta + 3: intbnew = intb + 7
intcnew = intb + inta
MsgBox "inta=" & inta & Chr(10) & Chr(13) & _
"intb=" & intb & Chr(10) & Chr(13) & _
"intc=" & intc & Chr(10) & Chr(13) & _
"intd=" & intd & Chr(10) & Chr(13) & _
"intanew=" & intanew & Chr(10) & Chr(13) & _
"intbnew=" & intbnew & Chr(10) & Chr(13) & _
"intcnew=" & intcnew
End Sub
Если inta=4, intb=8, intc=1, intd=7, то intanew=7, intbnew=15, intc=12. Если inta=9, intb=8, intc=1, intd=8, то intanew=0, intbnew=0, intc=0.
Существуют четыре целых числа, если inta мешьше intd, то к inta прибавить 3 и intb прибавить 7 и intc приравнять сумме inta и intb, иначе inta прибавить 30 и intb прибавить 70 и intc приравнять сумме inta и intb
Sub testsub1()
Dim inta As Integer, intb As Integer, intc As Integer, _
intd As Integer, intanew As Integer, intbnew As Integer, _
intcnew As Integer
inta = Int(Rnd * 10 + 1): intb = Int(Rnd * 10 + 1)
intc = Int(Rnd * 10 + 1): intd = Int(Rnd * 10 + 1)
If inta < intd Then
intanew = inta + 3
intbnew = intb + 7
intcnew = intb + inta
Else
intanew = inta + 30
intbnew = intb + 70
intcnew = intb + inta
End If
MsgBox "inta=" & inta & Chr(10) & Chr(13) & _
"intb=" & intb & Chr(10) & Chr(13) & _
"intc=" & intc & Chr(10) & Chr(13) & _
"intd=" & intd & Chr(10) & Chr(13) & _
"intanew=" & intanew & Chr(10) & Chr(13) & _
"intbnew=" & intbnew & Chr(10) & Chr(13) & _
"intcnew=" & intcnew
End Sub
Если inta=5, intb=3, intc=7, intd=7, то intanew=8, intbnew=10, intc=8. Если inta=6, intb=10, intc=10, intd=3, то intanew=36, intbnew=80, intc=60.
При выполнении блоковой формы инструкции if также сначала проверяется Условие. Если оно имеет значение True, то выполняются инструкции, следующие за словом then. Если же Условие имеет значение false, то при наличии одного или нескольких условий elseif выполняется последовательная проверка каждого из них.В случае истинности одного из условий осуществляется выполнение следующих за соответствующим предложением then. В том случае, если ни из условий elseif не имеет значение true или предложения elseif отсутствуют, то выполняются инструкции, следующие за else.После выполнения инструкций, следующих за then или else, происходит передача управления на инструкцию, расположенную непосредственно за end if.
Ввести три числа: x, y, z.Если сумма трех попарно различных чисел x, y, z меньше 1, то меньшее из x,y заменить полусуммой y и z, иначе большее из x и z заменить на y4 .
Sub lop177()
Dim x, y, z, s
x = Val(InputBox("введите x:"))
y = Val(InputBox("введите y:"))
z = Val(InputBox("введите z:"))
If (x + y + z) < 1 Then
If x < y Then
x = (y + z) / 2
Else
y = (y + z) / 2
End If
MsgBox "x=" & x & Chr(10) & Chr(13) & _
"y=" & y & Chr(10) & Chr(13) & _
"z=" & z
Else
If x > z Then
x = y ^ 4
Else
z = y ^ 4
End If
MsgBox "x=" & x & Chr(10) & Chr(13) & _
"y=" & y & Chr(10) & Chr(13) & _
"z=" & z
End If
End Sub
Инструкция Select Case
Инструкция Select Case выполняет одну из нескольких групп инструкций в зависимости от значения некоторого выражения. Ниже приведен ее синтаксис:
Select Case Выражение
[Case Список_выражений-n
[Инструкции-n
[Case Else
[Инструкции_else]]
Еnd Select
Элементы синтаксиса инструкции Select Case представлены в табл.2
Таблица 2 Элементы синтаксиса инструкции Select Case
Элемент |
Описание |
Выражение
Список_выражений-n
Инструкции-n
Инструкции_else |
Обязательный элемент — любое числовое или строковое выражение
Обязательный элемент синтаксиса при наличии предложения Case. Представляет собой список с разделителями. Синтаксис такого списка может быть одним из представленных ниже: Выражение, Выражение_1 To Выражение_2, Is Оператор сравнения_сравнения выражения Ключевое слово To задает диапазон значений. При использовании ключевого To слова перед ним должно находиться меньшее значение. Ключевое слово Is с операторами сравнения [не должны использоваться операторы Is и Like) задает диапазон значений. Если ключевое слово Is не указано, оно вставляется по умолчанию.
Необязательный элемент — одна или несколько инструкций, которые выполняются в том случае, если выражение совпадает с любым компонентом списка Список_выражений-n
Необязательный элемент — одна или несколько инструкций, выполняемых в том случае, если выражение не совпадает ни с одним из предложений Case |
Перейдем к алгоритму работы инструкции Select Case. Если выражение совпадает с любым выражением из Списка_выражений-n в предложении Case, то все инструкции, следующие за данным предложением Case до следующего выражения Case (в случае если это предложение является последним, то до инструкции End Select). После этого управление передается инструкции, следующей за End Select.
В Н И М АН И Е . Если выражение совпадает с выражениями из списка в нескольких предложениях Сазе, то выполняются только инструкции, расположенные после первого из этих предложений.
Отметим некоторые свойства инструкции Case Else:
Предложение Case Else задает список Инструкции_else. Эти инструкции будут
выполнены, если нет ни одного совпадения Выражения и элемента Список_вы-
ражений-n ни в одном из предложений Case .
Хотя предложение Case Else не является обязательным, рекомендуется поме-
щать его в блок Select Case, чтобы предусмотреть неожиданные значения выра-
жения.
Если ни в одном предложении Case элемент Слисок_выражений-n не содержит
значения, отвечающего аргументу Выражение, и отсутствует инструкция Case Else, выполнение программы продолжается с инструкции, следующей за инст-
рукцией End Select.
В предложении Case допускается использование нескольких выражений или
диапазонов. Например, допустимым является следующее предложение Case :
Case 1 То 5, 8 То 10, 15, 18, Is > Мах _number
(ПРИМЕЧАНИЕ Обратите внимание, что следует отличать оператор сравнения Is от ключевого слова 1з, которое используется в инструкции Select Case.
Допускается вложенность инструкций Select Case. При этом каждой вложен-
ной инструкции Select Case должна соответствовать инструкция End Select.
Sub testsub1()
Dim sngналог As Single, intпараметр, sngсумма
intпараметр = Val(InputBox("введите целое число:"))
sngсумма = Val(InputBox("введите число:"))
Select Case intпараметр
Case 0
sngналог = sngсумма * 0
Case 1
sngналог = sngсумма * 0.05
Case 2
sngналог = sngсумма * 0.1
Case 3
sngналог = sngсумма * 0.15
Case 4
sngналог = sngсумма * 0.2
Case Else
sngналог = sngсумма * 0
End Select
MsgBox "sngналог=" & sngналог
End Sub
В этом примере осуществляется выбор ставки налога (0; 0,05; 0,10; 0,15; 0,20) в
зависимости от значения выражения intпараметр. Предусмотрен также вариант
выбора, когда значения выражения intпараметр не совпадают ни с одним выражением в предложениях Case.
Инструкция Go to
Существует еще одна инструкция безусловного перехода 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 инструкции, составляющие тело цикла, будут выполнены по крайней мере один раз.
