- •Введение
- •Основные элементы программирования
- •1. Переменные, оператор присваивания
- •Определение переменной
- •Имена переменных
- •Типы данных
- •Объявление переменных
- •Оператор присваивания
- •Область видимости переменных
- •Область видимости переменных и их объявление
- •2. Константы
- •3. Массивы
- •4. Математические операторы
- •5. Обработка числовых данных
- •6. Обработка строк
- •7. Процедуры
- •ПроцедурыSub
- •Процедуры Function
- •[Private|Public] [Static] Function ИмяПроцедуры(Аргументы) [As type]
- •Создание процедур
- •8. Операторы управления
- •Операторы передачи управления
- •Условные выражения
- •Операторы выбора
- •Переключатели
- •9. Операторы цикла
- •Оператор цикла For…Next
- •Операторы цикла Do…Loop
- •ОператорExit
- •10. Элементы программирования и алгоритмы
- •Содержание
Операторы цикла Do…Loop
Циклы Do…Loop– это циклы с условием. Существуют два типа циклов с условием:цикл с предусловиемицикл с постусловием.
Синтаксис цикла с предусловием:
Do While | Until Условие
Операторы – тело цикла
Loop
Синтаксис цикла с постусловием:
Do
Операторы – тело цикла
Loop While | Until Условие
В этих выражениях:
Do–выполнить, ключевое слово, обозначающее начало цикла;
Loop–петля, ключевое слово, означает возврат к началу цикла;
While – пока; с этим ключевым словом операторы цикла будут выполнятьсяпока Условие истинно (True), т. е. пока условие выполняется. При первом невыполнении условия цикл прекращается и выполняется строка кода, следующая послеLoop;
Until – до, пока не; с этим ключевым словом операторы циклабудут циклически выполняться при невыполнении Условия (False). При первом выполнении условия (True) цикл прекращается, и выполняется строка кода, следующая послеLoop. ПередУсловиемиспользуется одно из ключевых слов:WhileилиUntil.
Условие – логическое выражение, принимающее одно из двух значений –True, если условие выполняется илиFalse, если условие не выполняется; проверяется после каждого выполнения цикла.
Цикл с предусловием может ни разу не выполниться, если при первом же выполнении цикла с Whileусловие не выполнится, а в цикле сUntil, наоборот, выполнится.
Приведем примеры четырех вариантов цикла при решении одной и той же задачи.
Пример 9.15. Определение суммы ряда натуральных чисел 1+2+3+4+…, превышающую 350, но наиболее близкую к 350.
Словесно опишем 4 варианта алгоритма.
Первый вариант (с предусловием, Пока ).
Пока сумма не превышает величину 350, складываем натуральные числа 1 + 2 + 3 +….
Второй вариант (с предусловием, До).
До выполнения неравенства Сумма > 350складываем числа 1 + 2 + 3 +….
Третий вариант (с постусловием, Пока ).
Складываем натуральные числа 1 + 2 + 3 +…., пока сумма не превышает величину 350.
Четвертый вариант (с постусловием, До).
Складываем числа 1 + 2 + 3 +….до выполнения неравенства Сумма > 350.
Приведем программы, реализующие эти варианты алгоритма.
Первый вариант этого цикла (с предусловием):
intSum = 0: s = 0
Do While intSum < 350
s = s + 1: intSum = intSum + s
Loop
Второй вариант этого цикла (с предусловием):
intSum = 0: s = 0
Do Until intSum > 350
s = s + 1: intSum = intSum + s
Loop
Третий вариант этого цикла (с постусловием):
intSum = 0: s = 0
Do
s = s + 1: intSum = intSum + s
Loop While intSum < 350
Четвертый вариант этого цикла (с постусловием):
intSum = 0: s = 0
Do
s = s + 1: intSum = intSum + s
Loop Until intSum > 350
Если после цикла вывести сумму intSumиs– последнее суммируемое число, то получимintSum= 351 иs= 26. Следовательно, были просуммированы числа: 1 +2 + 3 + … + 26.
В заключение приведем задачу, для решения которой, кроме оператора Do…Loopиспользуем также процедуру-функциюFunction.
Пример 9.16. Вычисление суммы членов бесконечного ряда Cosx с заданной точностью:
Программа вычислений:
Private Sub cmdВычислить_Click()
Const Pi As Single = 3.141593, Pi2 = 2 * Pi
Dim x As Single, eps As Single, S As Single
Dim Sn As Single, k As Integer ‘ в поле txtX вводим х в радианах:
x = Val(txtX): eps = Val(txtEps) ‘eps – точность расчета
x = x * Pi / 180 'перевод из градусов в радианы
x = x - Pi2 * Int(x / Pi2) 'исключается кратность 360 градусам
Cls ‘ чистка формы
CurrentY = 3240
S = 0: k = 0
Do
Sn = (-1) ^ k * x ^ (2 * k) / Fak2(k)
S = S + Sn: k = k + 1
Loop Until Abs(Sn) < eps
Print " CosX = "; FormatNumber(S, 11)
End Sub
Public Function Fak2(k) As Long ‘вычисляет факториал (2k)!
Dim i As Long, Fak As Long
Fak = 1 ' если k = 0
For i = 1 To 2 * k
Fak = Fak * i ‘ при k = 0 этот оператор не выполнится,
Next i ‘ т. к. 1 > 2*k
Fak2 = Fak
End Function