Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Visual Basic.doc
Скачиваний:
105
Добавлен:
09.04.2015
Размер:
1.1 Mб
Скачать

Лекция 7

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

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

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

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

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

Loop

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

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

Do

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

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.

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

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

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

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

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

Loop

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

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

Do

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

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).