Операции и функции

Do

Loop

Итерационный цикл Do Until...Loop или Do...Loop Until

Do

Loop

Итерационный цикл Do While...Loop или Do...Loop While

Лекция 7

Здесь While (пока) и Loop(цикл) зарезервированные слова. Циклы типа While предназначены для ситуаций, когда количество повторений тела цикла (итераций) заранее неизвестно. Вот синтаксис двух разновидностей цикла While:

Первый вариант:

 

Do While УсловиеПовторения

Группа инструкций

Здесь УсловиеПовторения – это выражение логического типа (подробнее), которое принимает либо значение True, либо значение False. Выполнение этой инструкции происходит так. Сначала вычисляется значение логического выражения УсловиеПовторения. Если оно имеет значение True, то выполняются инструкции, помещенные между строками Do WhileиLoop.Затем все повторяется с начала. Если же логическое выражение имеет значение False, то происходит выход из цикла. Следующей будет выполнена инструкция, помещенная ниже строки Loop. Все это поясняет блок-схема на рис. 7.1.


Второй вариант:

 

Группа инструкций

Loop While УсловиеПовторения

 


Блок-схема реализуемого алгоритма приведена на рис. 7.2. Различие между этими двумя вариантами заключается в том, что УсловиеПовторения (условие повторения выполнения тела цикла) проверяется в первом случае до выполнения тела цикла (цикл – пока), а во втором случае – после выполнения тела цикла (цикл - до).

Перейдем к примерам. Рассмотрим действие следующего участка программы.

 

Пример 1

 

Счетчик = 0

Номер = 20

Do While Номер > 10

Номер = Номер – 1

Счетчик = Счетчик + 1

Loop

MsgBox ("Выполнено " & Счетчик & " итераций цикла.")

 

При выполнении этого участка программы в окне функции MsgBox будет выведено:

 

Выполнено 10 итераций цикла.

 

В этой программе условие проверяется до входа в цикл. Если переменной Номер задать значение, равное 10 вместо 20, инструкции внутри цикла выполняться не будут.

 

Пример 2

 

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

 

Счетчик = 0

Номер = 9

Do

Номер = Номер – 1

Счетчик = Счетчик + 1

Loop While Номер > 10

MsgBox ("В цикле выполнено " & counter & " итераций.")

 

Инструкцию Do...Loop можно завершить досрочно с помощью инструкции Exit Do.

 

Until (до) – зарезервированное слово. По своей логике цикл Until подобен циклу Whileс той лишь разницей, что выполнение условия означает необходимость выхода из цикла. Как и в случае цикла While, проверка условия выхода в цикле Untilможет осуществляться перед очередным проходом или после него. Вот синтаксис этих двух вариантов.

Первый вариант:

 

Do Until УсловиеВыхода

Группа инструкций

Блок-схема реализуемого алгоритма приведена на рис. 7.3.


Второй вариант:

 

Группа инструкций

Loop Until УсловиеВыхода

 

Блок-схема реализуемого алгоритма приведена на рис. 7.4.


Перейдем к примерам.

 

Пример 3

Рассмотрим действие участка программы:

 

Счетчик = 0

Номер = 20

Do Until Номер = 10

Номер = Номер – 1

Счетчик = Счетчик + 1

Loop

 

Переменная Счетчик получит значение 10.

 

Пример 4

 

Счетчик = 0

Номер = 1

Do

Номер = Номер + 1

Счетчик = Счетчик + 1

Loop Until Номер = 10

 

Переменная Счетчик получит значение 9.

 

Инструкцию Do...Loop можно завершить досрочно с помощью инструкции Exit Do.

 

Пример 5

 

Задана строка символов. Получить новую строку символов, отличающуюся от исходной тем, что из нее удалены все пробелы.

Так, например, строки “Это тест” и “ Это тест ” должны считаются идентичными.

Применим некоторые стандартные функции VB, предусмотренные для обработки строк:

Len(Строка) – возвращает количество символов в аргументе Строка;

InStr([Начало], Строка1,Строка2) – возвращает номер позиции, начиная с которой Строка2 входит в Строку1 или 0, если Строка2 не входит в Строку1, аргумент Начало – номер позиции, с которой начинается поиск;

Left(Строка, КоличествоСимволов) – возвращает строку, включающую первые КоличествоСимволов аргумента Строка;

Right(Строка, КоличествоСимволов) – возвращает строку, включающую последние КоличествоСимволов аргумента Строка.

 

Function УдалениеПробелов(Строка As String) As String

Dim Длина As Long, Позиция As Long, Старт As Long

Старт = 1

Do

Длина = Len(Строка)

Позиция = InStr(Старт, Строка, " ")

If Позиция > 0 Then Строка = Left(Строка, Позиция – 1) _

& Right(Строка, Длина – Позиция)

Старт = Позиция

Loop Until Позиция = 0

УдалениеПробелов = Строка

End Function

 

В этой функции в цикле определяется номер позиции от начала заданной строки, в которой стоит пробел. Затем из строки вырезается эта позиция с пробелом. Цикл прекращается, когда в строке не остается ни одного пробела (в этом случае функция InStr(Старт, Строка, " ") возвратит 0).

В расположенной далее таблице дан полный перечень операций, которые могут быть применены к числовым данным.

 

Операция Функция
Математические операции
[операнд1] + [операнд2] Сложение
[операнд1] - [операнд2] Вычитание
- операнд Перемена знака
[операнд1] * [операнд2] Умножение
[операнд1] / [операнд2] Деление
[операнд1] \ [операнд2] Целочисленное деление. Результат – целая часть отношения операндов
[операнд1] MOD [операнд2] Деление по модулю. Операнды округляются до целого значения. Результат – остаток отношения операндов, например 5.4 MOD 2 = 1
[операнд1] ^ [операнд2] Возведение в степень
Операции отношения
[операнд1] < [операнд2] Меньше.   Результат True, если отношение выполняется, или False, если отношение не выполняется
[операнд1] > [операнд2] Больше
[операнд1] <= [операнд2] Меньше или равно
[операнд1] => [операнд2] Больше или равно
[операнд1] = [операнд2] Равно
[операнд1] <> [операнд2] Не равно

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

 

Таблица приоритетов.

Приоритет Операция
Вызов функции, скобки.
^
-
*, /
\
MOD
+, -

 

Математические функции (углы выражаются в радианах).

Обращение к функции Возвращаемое значение
Abs(x) Абсолютное значение х
Atn(x) arctg x
Cos(x) cos x
Exp(x) ex
Int(x) Целая часть
Fix(x) Целая часть
Log(x) ln x
Rnd Случайное число
Sgn(x) Знак числа
Sin(x) sin x
Sqr(x) Квадратный корень от х
Tan(x) tg x

Функции Int и Fix возвращают значение типа, совпадающего с типом аргумента, которое содержит целую часть числа.

Синтаксис:

Int(число)

Fix(число)

Обязательный аргумент число – это любое допустимое числовое выражение. Различие между функциями Int и Fix состоит в том, что для отрицательного значения аргумента функция Int возвращает ближайшее отрицательное целое число, меньшее либо равное указанному, а Fix ближайшее отрицательное целое число, большее либо равное указанному. Например, функция Int преобразует -8.4 в -9, а функция Fix преобразует -8,4 в -8.

Функция Rnd возвращает значение типа Single, содержащее случайное число, меньшее 1 и большее или равное нулю.

Перед первым вызовом функции Rnd надо использовать инструкцию Randomize без аргумента для инициализации генератора случайных чисел.