Добавил:
Меня зовут Катунин Виктор, на данный момент являюсь абитуриентом в СГЭУ, пытаюсь рассортировать все файлы СГЭУ, преобразовать, улучшить и добавить что-то от себя Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика / Вопросы / теория (по экз. вопросам).doc
Скачиваний:
39
Добавлен:
02.08.2023
Размер:
1.26 Mб
Скачать

13. Работа с циклами.

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

Как и для алгоритма ветвления, в VBA для реализации алгоритма цикла предусмотрены различные команды, представленные в табл. 11.5, которые в ряде ситуаций взаимозаменяемы.

Команда

Условия применения

For / Next

Заранее известное количество повторений (итераций).

Do While

Повтор, пока выполняется заданное условие.

Do Until

Повтор, пока не выполнится заданное условие

Команда For / Next – предназначена для организации циклов с конечным числом повторений.

For <счетчик> = <начало> To <конец> [Step <шаг>]

<набор команд>

[Exit For]

Next [<счетчик>]

Принцип работы команды состоит в следующем: переменная, используемая для подсчета номера итерации (счетчик) устанавливается в начальное значение. Выполняется набор команд, составляющих тело цикла. По команде  Next управление передается снова команде For, в которой счетчик увеличивается на заданный шаг (Step) и проверяется на достижение величины, заданной в значении <конец>. Если это условие выполнится, управление в программе передается на команду, следующую за Next, иначе цикл повторяется.

Имя идентификатора <счетчик> после ключевого слова Next указывают, как правило, в сложных вложенных циклах для визуального контроля. 

Инструкции [Exit For] не обязательны и применяются для экстренного выхода из For до достижения конца цикла (число таких альтернативных способов выхода из цикла не ограничено). Инструкция Exit For часто применяется вместе с проверкой некоторого условия (например, If...Then). Эта инструкция передает управление инструкции, непосредственно следующей за инструкцией Next.

Аргумент (Step) может быть как положительным, так и отрицательным. Если шаг не задан, он принимается равным 1.

Пример 1: Найти сумму первых 50 чисел натурального ряда.

Dim i, s As Integer

s = 0

For I = 1 To 50 

s = s + I

Next

Пример 2: В массив М2 внесена информация. Обработать N элементов и найти сумму значений четных элементов массива. При достижении заданного число SK выйти из цикла досрочно.

Dim i, S,N As Integer

Dim M2(200) As Integer 

S = 0

For I = 2 To N Step 2 

S=S+M2(i) 

If S >=SK Then Exit For

Next

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

Пример.

В ячейки А1:А33 внесена информация. В какой строке  содержится максимальное значение и чему оно равно.

N = 1: mx = Cells(1, 1)

For k = 2 To 33

If Cells(k, 1) > mx Then

N = k: mx = Cells(k, 1)

End If

Next k

Cells(1, 2) = N: Cells(2, 2) = mx

'Значение первой строки – условный Max.

'Цикл начинается со 2 строки.

'Если элемент превышает условный 'Max, он принимается как новый Max.

'Конец проверки.

' Конец цикла.

'Вывод результатов.

Отступы слева при наборе операторов применены для улучшения восприятия логики программы. VBA их не требует, ни и не опротестовывает.

При организации вложенных циклов For...Next (один цикл For...Next располагается внутри другого). Счетчик каждого цикла должен иметь уникальное имя. Допускаются следующие конструкции:

For I = 1 To 10

       For J = 1 To 10

              For K = 1 To 10

                     ...

              Next K

       Next J

Next I

Команда организации циклов While.

Команда While – предназначена для организации циклов, в которых ведется повторение набора команд, пока соблюдается некоторое условие.

Синтаксис команды допускает варианта ее применения.

1 вариант

2 вариант

Do While  <условие>

<набор команд>

[Exit Do]

Loop

While  <условие>

<набор команд>

[Exit Do]

Wend

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

Инструкции [Exit Do] не обязательны и применяются для экстренного выхода из цикла до достижения его конца (число таких альтернативных способов выхода из цикла не ограничено). Инструкция Exit Do часто применяется вместе с проверкой некоторого условия (например, If...Then). Эта инструкция передает управление команде, непосредственно следующей за командой Loop (или Wend).

Обратите внимание, что циклы While берут на себя труд проверять ЛЮБОЕ сложное условие выхода из цикла, чего не было в циклах For, но не заботятся ни о каких счетчиках, а значит, об изменении номера текущего элемента массива или строки электронной таблицы должны позаботиться Вы!

Пример 1.

В столбце A заданы целые числа. Определить их сумму, Если количество заполненных строк заранее не известно.

i = 1

  Do While Cells(i, 1) <> ""

  S = S + Cells(i, 1)

  i = i + 1

  Loop

' Начальное значение счетчика строк.

'Повтор до первой пустой ячейки.

'Приращение счетчика строк.

Пример 2.

Имеются таблицы продаж и ценник (рис. 11.13).  Рассчитать стоимость по каждой продаже, если число строк в таблицах заранее не известно.

Рис. 11.13. Фрагмент рабочего листа Excel.

Один из вариантов макроса имеет вид:

i = 2

While Cells(i, 1) <> ""

price = 0: j = 2

Do While Cells(j, 7) <> ""

If Cells(i, 1) = Cells(j, 7) Then

price = Cells(j, 8)

Exit Do

End If

j = j + 1

Loop

If price = 0 Then

Cells(i, 4) = "Цены нет!"

Else

Cells(i, 4) = Cells(i, 3) * price

End If

i = i + 1

Wend

Команда организации циклов Until.

Команда Until – предназначена для организации циклов, в которых ведется повторение набора команд, пока не выполнится некоторое условие. 

Синтаксис команды:

Do Until  <условие>

<набор команд>

[Exit Do]

Loop

Команда Until  работает точно так же, как и описанная выше команда While, их принципиальное отличие - в способе проверки условия окончания цикла. Если цикл While повторяется, пока выполняется условие, то цикл Until перестает работать при первом же выполнении условия.

Пример.

Для таблицы продаж, представленной на рис. 11.13, определить дату продажи товара «мандарин».

i = 2 : X="мандарин"

  Do Until Cells(i, 1) = X

  i = i + 1

  Loop

Cells(1, 10) = Cells(i, 2) ' Запись результата в ячейку J1.