Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Циклы с условием




Циклы с условием используются в тех случаях, когда число повторений тела цикла заранее неизвестно. Такой цикл продолжает работу пока выполняется (или не выполняется) условие окончания цикла. Причем, если условие окончания цикла проверяется перед выполнением тела цикла, то такие циклические структуры называют циклами с предусловием («Выполнять пока»), а если проверка условия происходит после выполнения тела цикла – циклами с постусловием («Выполнять до тех пор, пока»).

Цикл с предусловием Цикл с постусловием

 

В VB такие циклы образуются с помощью конструкций
Do … Loop. Существует 4 вида таких циклических конструкций, их синтаксис определяется типом проверяемого условия и местом его расположения.

Синтаксис Описание
Do While Условие Операторы Loop Цикл с предусловием типа «Пока». Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу, пока это условие остается истинным.
Do Операторы Loop While Условие Цикл с постусловием типа «Пока». Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы 1 раз. Цикл работает, пока это условие остается истинным.
Do Until Условие Операторы Loop Цикл с предусловием типа «До тех пор пока». Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу до тех пор, пока это условие не выполнится (то есть до тех пор, пока условие является ложным)
Do Операторы Loop Until Условие Цикл с постусловием типа «До тех пор пока». Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы один раз. Цикл работает до тех пор, пока это условие не выполнится (то есть до тех пор, пока условие является ложным).

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

Замечание 2. Циклы могут быть вложенными, когда внутри одного циклического процесса должен выполняться другой. В этом случае необходимо придерживаться правила: каждый цикл должен иметь свое начало – For или Do (заголовок цикла) и свой конец – слово Loop или Next (окончание цикла). Причем, каждый раз сначала должен быть закончен внутренний цикл, а затем уже внешний.

Для безусловного выхода из цикла с условием используется оператор Exit Do.

Пример 1. Определить количество цифр в целом числе N. Алгоритм решения состоит в том, что нужно делить число N на 10 до тех пор, пока в целой части числа не окажется 0. Количество таких делений будет равно числу цифр в числе.

Private Sub Command1_Click() n = Val(Text1.Text) 'Ввод числа k = 0 'Обнуление счетчика k – количество цифр Do'Начало цикла n = Int(n / 10) 'Выделение цифры k = k + 1 'Подсчет количества цифр Loop While n > 0 'Окончание цикла 'Цикл работает, пока это условие остается истинным  
Text2.Text = Str(k) 'Вывод k Text2.Visible = True Label2.Visible = True 'Содержимое поля становится видимым End Sub   Private Sub Command2_Click() End End Sub   Private Sub Form_Load() Text1.Text = "" 'Очистка поля Label2.Visible = False 'При загрузке формы фраза '«Количество цифр» не видна Text2.Text = "" Text2.Visible = False End Sub

 

Использование операторов цикла с условием оправдано в том случае, когда количество повторений тела цикла определяется в ходе самих вычислений и заранее неизвестно. Например, для вычисления сумм бесконечного ряда обычно задают точность вычислений ε и вычисления ведут до тех пор, пока очередное слагаемое по модулю не станет меньше заданного ε: .

Пример 2. Вычислить с точностью ε = 10-4.

Private Sub Command1_Click() Dim x,y,a As Single Eps = Val(Text1.Text) 'Ввод точности вычислений s = 0 'Инициализация переменной s n = 1 Do'Начало цикла a = n/(n^2+1) 'Вычисление очередного члена последовательности s=s+a 'Вычисление суммы последовательности n=n+1 Loop While a>=0.0001 Text2.Text = Str(s) 'Вывод полученной суммы End Sub   Private Sub Command2_Click() End End Sub

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

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

Как правило, в этом случае рекуррентная формула имеет вид: , откуда, зная общий член последовательности, можно будет найти коэффициент c, на который нужно умножать каждый предыдущий член последовательности, чтобы найти следующий:

Пример. Вычислить .

Найдем коэффициент c, разделив :

 

Таким образом, очередной член ряда можно вычислить по рекуррентной формуле:

.

Пример 3. Найти количество членов бесконечного ряда , сумма которых дает приближенное значение sin(x) с точностью ε=10-4.

Private Sub Command1_Click() Const Pi = 3.14159265358979 Eps = Val(Text4.Text) 'Точность x = Val(Text1.Text) 'Аргумент x x = x / 180 * Pi 'Перевод в радианную меру f = Sin(x) 'Вычисление точного значения функции s = 0 'Инициализация переменной s a = x 'Первый член ряда k = 1 'Вывод значения Sin(x) по формату Text2.Text = Format(f, "0.000E+")  
Do While Abs(f - s) > e 'Цикл выполняется пока условие a = -a * x ^ 2 / (2 * k) / (2 * k + 1) s = s + a: k = k + 1 Loop Text3.Text = Format(s, "0.000E+") Text5.Text = Str(k) End Sub

Замечание. Иногда возникает необходимость переделать цикл типа For…Next на цикл Do…Loop (наоборот не всегда получается).

For…Next Do…Loop с предусловием Do…Loop с постусловием
For i = 1 to n Тело цикла Next i i = 1 Do While i <= n Tело цикла i=i+1 Loop i=1 Do Тело цикла i=i+1 Loop Until i > n

Использование функции Timer

Условие продолжения или завершения цикла не всегда связано только с внутренними причинами, - изменяющимися от шага к шагу значениями каких-либо переменных. Часто, например, цикл завершается после того, как исчерпывается отпущенное на его выполнение время. Чтобы реализовать такое условие, следует воспользоваться системной функцией Timer. Она возвращает текущее время с точностью до 0,01 сек.

Пример 4. Вычислить сумму бесконечного ряда с использованием функции Timer

Private Sub Command1_Click() Dim x,y,a As Single Eps = Val(Text1.Text) T=Timer 'Зафиксировали время начала работы программы s = 0: n = 1 Do a = n/(n^2+1) s=s+a: n=n+1 If Timer-T>10 Then Exit Do'Если разница между текущим 'временем и временем начала работы больше 10 сек, то выход из цикла Loop Until a<0.0001 End Sub



Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 1870; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.