Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика VBA.pdf
Скачиваний:
891
Добавлен:
27.03.2016
Размер:
1.1 Mб
Скачать

Sub Пример_4_1() s = 0: k=0

For Each Elem In Selection 'Цикл для элемента Elem в группе Selection s = s + Elem : k=k+1

Next

MsgBox "Ответ: Количество элементов в группе " &k & " их сумма"&s

End Sub

Процедура обрабатывает элементы выделенной области (объект Selection) построчно, т. е. элемент «Elem» последовательно принимает значения 1; 3; -1; 2; 5 и т.д. (см. рисунок 4.2). В результате работы процедуры на экран активного листа будет выведено диалоговое окно, представленное на рисунке 4.3.

Рисунок 4.3 - Диалоговое окно, выведенное процедурой «Пример_4_1»

После завершения цикла значение элемента «Elem» становится неопределенным.

4.2 Оператор цикла Do

C использованием оператора цикла Do (делай) можно программировать и циклы с предусловием и циклы с постусловием, а также бесконечные циклы. Количество итераций в цикле конструкции Do зависит от заданного условия окончания цикла. Существует пять разновидностей данной циклической конструкции.

Первые две разновидности используются для создания цикла с предусловием:

Do While условие

Do Until условие

тело цикла

тело цикла

Loop

Loop

58

В цикле Do While операторы тела цикла выполняются пока «условие», заданное в заголовке, принимает значение «истина» (True), если оно ложно (False), то осуществляется выход из цикла и управление передается оператору, расположенному после служебного слова Loop (цикл). Во второй разновидности конструкции DO (Do Until), тело цикла выполняется до тех пор, пока «условие», заданное в заголовке, имеет значение «ложь» (False), а если оно истинно (True), осуществляется переход к оператору, расположенному после служебного слова Loop. Цикл с предусловием может не выполняться ни разу, если при начальных значениях параметра цикла «условие», заданное в заголовке цикла, принимает соответствующее значение. Неправильная запись логического выражения в заголовке цикла может привести к бесконечному циклу, и, если не предпринять дополнительных действий, к «зацикливанию» программы.

При использовании следующих двух разновидностей циклической конструкции DO:

Do

Do

тело цикла

тело цикла

Loop While условие

Loop Until условие

создается цикл с постусловием, в котором операторы тела цикла выполняются хотя бы один раз, вне зависимости от условия. Условие проверяется после первого выполнения тела цикла. Операторы тела цикла Do разновидности Loop While выполняются до тех пор, пока «условие», заданное в последней строке цикла, принимает значение «истина» (True), а в разновидности Loop Until – тело цикла выполняется до тех пор, пока условие не выполняется (имеет значение False). Неправильная запись условия в этих разновидностях цикла DO также может привести к «зацикливанию» программы.

Пятая разновидность циклической конструкции DO имеет следующий синтаксис:

59

Do

тело цикла

Loop

и используется для создания «бесконечных» циклов. Такой цикл обречен на бесконечное повторение. Однако он не лишен смысла вместе с условием завершения, помещенным в тело такого цикла. Выход из цикла разновидности Do_Loop осуществляется командой Exit Do, записываемого, как правило, в условном операторе If:

If условие Then Exit Do

Эту же команду следует применять для программирования досрочного выхода из цикла, организованного с использованием других разновидностей оператора DO. После команды Exit Do управление передаётся оператору, следующему за оператором Loop.

Применение оператора DO с бесконечным циклом позволяет отказаться от использования в программе оператора GoTo. Так пример 3.4 может быть реализован с бесконечным циклом.

Пример 4.2.

Sub Пример_4_2()

Dim x As Single, y As Single, n As Integer, k As Integer

'считываем из диалогового окна координаты x и y

Do

x= CSng ( InputBox("Задайте координату X"))

y= CSng ( InputBox("Задайте координату Y"))

'функция Csng переводит строку текста в число и требует,

'разделителя дробной и целой части числа - символа "запятая"

'вычисление значения n по формуле с упрощенным оператором If

n = 2 If y > -x And y > x Then n = 1 If x ^ 2 + y ^ 2 > 4 Then n = 0

'выводим полученный результат в диалоговое окно с заголовком

'"Ответ" и двумя световыми кнопками - "Повтор" и "Отмена"

60

k= MsgBox("Номер области" & Str(n), vbRetryCancel, "Ответ")

'анализируем код нажатой кнопки

If k = vbCancel Then Exit Do ' если нажата кнопка "Отмена" –

'завершаем работу

'если нажата клавиша "Повтор" продолжить цикл DO

Loop Do End Sub

4.3Вложенные циклы

Для расчета графика функции двух переменных y=F(a,x) используются циклы, вложенные один в другой. Один из таких циклов называют внешним, а другой внутренним. Телом внешнего цикла является весь внутренний цикл. При записи рассчитанных значений функции следует учитывать тип диаграммы, с помощью которой будут отображаться кривые. Для диаграммы типа «График» представляется целесообразным разместить данные в виде таблицы: один столбец которой содержит значения аргумента xi, а соседние столбцы содержат координаты yi для заданных значений второго параметра. Если же предполагается выводить графики в виде диаграммы типа «Точечная», а для неоднозначных функций это единственный способ корректного их представления в Excel, то значения аргумента и функции должны располагаться в соседних столбцах. Причем, если на одну диаграмму выводятся точки нескольких кривых, то точки одной кривой от точек другой должны отделяться пустой строчкой.

Пример 4.3. Рассчитать значения функции Y =

 

a x

 

на интерва-

 

 

 

1+a x2

 

 

 

ле [-4, 4], с шагом 0,2. Параметр «а» последовательно принимает значения 1; 1,5; 2; 2,5. По рассчитанным значениям точек функции построить в Excel диаграммы типа «График».

61

Option Explicit ' запрет на использование в программе ' необъявленных переменных

Sub Пример_4_3()

Dim x As Single, a As Single

Dim i As Integer, k As Integer

Cells(1, 1) = "x\а" ' Записываем в первую строку заголовок таблицы a = 1

For k = 2 To 5 ' Цикл по параметру a (k-номер столбца для записи Yi) Cells(1, k) = a ' Запись в первую строку таблицы значения параметраa i = 2 ' Номер строки для выводимых координат

For x = -4 To 4.1 Step 0.2 ' Цикл по параметру x

If k = 2 Then Cells(i, 1) = x ' Запись в ячейку координаты x Cells(i, k) = a*x / Sqr(1 + a*x^2) ' Запись в ячейку координаты y i = i + 1 ' Номер следующей строки для вывода координат

Next x

a = a + 0.5 ' изменяем значение a для следующего цикла Next k ' заканчиваем цикл по параметру a

End Sub

На рисунке 4.4 приведен вид полученной таблицы значений функции и диаграмма с графиками для разных значений параметра а. Следует отметить следующее. В первом столбце таблицы выведены значения переменной х, которые вычисляются по закону арифметической прогрессии в операторе «For x=-4 …». Нетрудно заметить, что ожидаемого нулевого значения переменной х нет, а есть значение 6,258∙10-7. Как было указано выше, это связано с ошибками округления результатов арифметических действий в ЭВМ (если переменной х присвоить тип Double, ошибка округления будет значительно меньше, но она все равно останется). Ошибка начинает проявляется с числа «– 1,8», а для положительных значений ошибка вычисления переменной

62

х проявляется в шестом знаке после запятой. Поэтому, если бы в операторе For по параметру х, конечное значение было задано ровно 4, как в условии задания, то последняя точка кривой не была бы рассчитана. Для исключения такой ошибки, конечное значение в этом операторе увеличено на половину шага. Цикл по параметру «a» оформлен через переменную «k» целого типа, поэтому изменять конечное значение не требуется.

Рисунок 4.4 - Таблица значений и графики функции Y =

 

a x

 

 

 

 

1+a x2

 

 

 

Пример 4.4. Изобразить на точечной диаграмме Excel полярные кривые r=|20+a|cos2φ - sin2φ||, 0≤ φ ≤2π, Δφ =π/36, при каждом из значений параметра а= 60, 40, 20, 0.

В первый столбец таблицы выведем значения координаты x=r(φ)∙cos(φ), в соседний столбец выведем значения координаты y=r(φ)∙sin(φ). Значение параметра «a», будем выводить в третий стол-

63

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

Option Explicit ' запрет на использование в программе ' необъявленных переменных

Sub Пример_4_4()

Dim r As Single, a As Single, fi As Single Dim H As Single

Dim i As Integer

Const pi As Single = 3.1415927

'Заносим заголовки в первую строку таблицы

Cells(1, 1) = "x": Cells(1, 2) = "y": Cells(1, 3) = "a" H = pi / 36 ' вычисляем шаг изменения угла

i = 2 ' Номер строки для выводимых координат. For a = 60 To 0 Step -20 ' Цикл по параметру a

Cells(i, 3) = a ' Запись в ячейку Excel значения параметра

For fi = 0 To 2 * pi + 0.01 Step H ' Цикл по углу fi

'число 0.01 учитывает ошибку при вычислении конечного значения fi r = Abs(20 + a * Abs(Cos(fi) ^ 2 - Sin(fi) ^ 2))

Cells(i, 1) = r * Cos(fi) ' Запись в ячейку координаты x Cells(i, 2) = r * Sin(fi) ' Запись в ячейку координаты y

i = i + 1 ' Номер следующей строки для вывода координат.

Next ' конец внутреннего цикла по параметру fi

i = i + 1 ' Для пропуска строки после вывода координат кривой

Next a

End Sub

64

Рисунок 4.5 - Графики функции r=|20+a|cos2φ - sin2φ| | в виде «Точечной» диаграммы

65