Нц повторять
Действия
до условие выхода
кц
В языке Visual Basic циклические конструкции записываются следующим образом:
Цикл For …. Next
For счётчик=нач.знач. to конеч.зн. [ step шаг ]
Операторы1
[Exit For]
Операторы2
Next счётчик
По умолчанию значение шага равно 1. Оператор Exit For используется для досрочного или аварийного выхода из цикла.
Цикл Do…Loop
Существует четыре разновидности данной конструкции:
Цикл с предусловием «пока»
Do While условие выполнения
операторы
Loop
Цикл с постусловием «до»
Do
операторы
Loop Until условие выхода
В основном постараемся использовать эти варианты, совпадающие с базовыми алгоритмическими.
Два других варианта являются их комбинацией:
Цикл с предусловием «до»
Do Until условие окончания
операторы
Loop
Цикл с постусловием «пока»
Do
операторы
Loop While условие выполнения
Пример. Составить алгоритм вычисления бесконечной суммы
с заданной точностью (для данной знакочередующейся бесконечной суммы требуемая точность будет достигнута, когда очередное слагаемое станет по абсолютной величине меньше
).
Вычисление сумм — типичная циклическая задача. Особенностью же нашей конкретной задачи является то, что число слагаемых (а, следовательно, и число повторений тела цикла) заранее неизвестно. Поэтому выполнение цикла должно завершиться в момент достижения требуемой точности.
При составлении алгоритма нужно учесть, что знаки слагаемых чередуются и степень числа х в числителях слагаемых возрастает.
Решая эту задачу "в лоб" путем вычисления на каждом i -ом шаге частичной суммы
S:=S + ((-1)**(i-1)) * (x**i) / i,
мы получим очень неэффективный алгоритм, требующий выполнения большого числа операций. Гораздо лучше организовать вычисления следующим образом: если обозначить числитель какого-либо слагаемого буквой р, то у следующего слагаемого числитель будет равен —р*х (знак минус обеспечивает чередование знаков слагаемых), а само слагаемое m будет равно p/i, где i — номер слагаемого.
алг Сумма (арг вещ x, Eps, рез вещ S) дано | 0 < x < 1 надо | S = x - x**2/2 + x**3/3 -... нач цел i,вещ m, p ввод x, Eps S:= 0; i:= 1 | начальные значения m:= 1; p:= -1 нц пока abs(m) > Eps p:= -p*x | p - числитель | очередного слагаемого m:= p/i | m - очередное слагаемое S:= S + m | S - частичная сумма i:= i + 1 | i - номер | очередного слагаемого кц вывод S кон | ![]() |
Алгоритм, в состав которого входит итерационный цикл, называется итеpационным алгоpитмом. Итерационные алгоритмы используются при реализации итерационных численных методов.
В итерационных алгоритмах необходимо обеспечить обязательное достижение условия выхода из цикла (сходимость итерационного процесса). В противном случае произойдет "зацикливание" алгоритма, т.е. не будет выполняться основное свойство алгоритма — результативность (бесконечный цикл).
Возможны случаи, когда внутри тела цикла необходимо повторять некоторую последовательность операторов, т. е. организовать внутренний цикл. Такая структура получила название цикла в цикле или вложенных циклов. Глубина вложения циклов (то есть количество вложенных друг в друга циклов) может быть различной. Первым всегда заканчивается вложенный цикл. За шаг основного цикла вложенный пробегает все свои значения.
При использовании такой структуры для экономии машинного времени необходимо выносить из внутреннего цикла во внешний все операторы, которые не зависят от параметра внутреннего цикла.
Пример вложенных циклов для
Вычислить сумму элементов заданной матрицы А(5,3).
Матрица А ![]() | ![]() | S:= 0; нц для i от 1 до 5 нц для j от 1до 3 S:=S+A[i,j] кц кц |