Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
PAGE 50
EMBED Visio.Drawing.6
Цикл это структурная конструкция, в которой некоторые алгоритмические действия - тело цикла (ТЦ) неоднократно повторяются. В программировании используются три основные конструкции циклов: цикл по переменной (цикл-модификация) (рис. 3.1), цикл с постусловием (рис. 3.2) и цикл с предусловием (рис. 3.3). В языке С/С++ они поддерживаются операторами for, do-while и while, соответственно.
Рис. 3.1. Цикл по переменной Рис. 3.2. Цикл с постусловием
Рис. 3.3. Цикл с предусловием
Цикл по переменной (цикл-модификация) наиболее часто используется в программах. Его работа основана на том, что управляющая переменная цикла i пробегает значения от начального J до конечного K с шагом L и для каждого из них исполняется тело цикла ТЦ. В языке С/С++ в качестве управляющей может быть использована переменная как целого, так и вещественного типа. Параметры цикла J , K и L представляют собой выражения соответствующего типа, в частном случае, переменные или константы.
Цикл по переменной в С/С++ поддерживается оператором for, который имеет следующий синтаксис:
for (<инициализация>; <условие повторения>; <модификация>)
<оператор>;
Элементы этого оператора следующие:
Примеры записи оператора for:
for (i=1; i<=n; i++) cout<<i<<endl;
for (x=Xmin; x<=Xmax; x+=Xstp)
{
...
...
}
Язык С, в отличие от других, позволяет внутри тела цикла изменять значение управляющей переменной, но делать это категорически не рекомендуется. Ее значение должно управляться оператором for, а внутри тела цикла оно может только использоваться.
В операторе for можно задать одновременное (синхронное) изменение двух или более переменных, например,
for (i=1, j=n; i<=n; i++, j--) {...}
В этом случае инициализирующие и модифицирующие выражения для каждой из переменных разделяются запятыми и исполняются слева направо (операция запятая). В данном примере тело цикла будет исполняться n раз, переменная i будет пробегать значения от 1 до n, а переменная j от n до 1.
Этот цикл не следует путать с циклом по j, вложенным в цикл по i, в котором тело цикла выполняется n2 раз:
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
{
...
}
...
Цикл с пост-(после-)условием в языке C/C++ поддерживается оператором do-while. Его синтаксис имеет вид:
do <оператор> while (<логическое выражение>);
Оператор тела цикла выполняется до тех пор, пока логическое выражение имеет значение «Истина». Если тело цикла включает несколько операторов, то они объединяются фигурными скобками в блок:
...
do
{
...
...
...
}
while (<логическое выражение>);
Тело цикла при этом рекомендуется выделить (форматировать) двумя отступами.
Цикл с предусловием в языке C/C++ поддерживается оператором while. Его синтаксис имеет вид:
while (<логическое выражение>) <оператор>;
Оператор тела цикла также выполняется, пока логическое выражение имеет значение «Истина». Тело цикла, состоящее из нескольких операторов, объединяется фигурными скобками.
Операторы do-while и while являются взаимозаменяемыми. Необходимо только помнить, что логическое выражение в операторе while вычисляется до выполнения тела цикла и предусмотреть это при первоначальном входе в цикл.
В качестве логического выражения в операторах do-while и while иногда используются числовые выражения целого типа. Так цикл
...
i=n;
while (i--)
{
...
...
...
}
...
осуществляет обратный цикл по переменной i от n до 0. Пока i>0 выражение в скобках трактуется как «Истина» и тело цикла выполняется. Когда i станет равным 0 («Ложь»), произойдет выход из цикла.
Оператор continue позволяет завершить тело цикла, не исполняя его окончание, при выполнении некоторого условия (истинности логического выражения) и перейти к новому повторению тела цикла. Тем самым реализуется структурная конструкция, показанная на рис. 3.4 для цикла for.
Оператор break завершает весь цикл при выполнении некоторого условия (истинности логического выражения) и передает управление следующему за циклом оператору. На рис. 3.5 показана получающаяся структурная конструкция при использовании цикла с постусловием.
Операторы continue и break могут быть использованы в любом из трех типов циклов и позволяют оптимизировать их исполнение.
Рис. 3.4. Цикл for с оператором Рис. 3.5. Цикл do-while
continue с оператором break
Некоторые примеры программ, использующих простейшие циклы, приведены в подразделе Examples \ 03 Циклы \ 3 Примеры циклов. Ряд программ достаточно просты и предназначены для самостоятельного анализа. Поясним лишь наиболее сложную программу, реализующую метод простых итераций для решения нелинейных уравнений. Она представлена в различных вариантах в файлах ex030330.cpp, ex030332.cpp, ex030335.cpp и ex030337.cpp.
Уравнение , где - левая часть, не допускающая возможности решить это уравнение аналитически, может быть решено методом последовательных приближений (итераций). Для этого его нужно предварительно привести к виду: . Отсюда вытекает простая итерационная формула
, (3.1)
где k = 1, 2, 3, … - номер итерации. Нулевое приближение - задается, а затем осуществляются итерации по формуле (3.1). Для очень многих уравнений итерационный процесс сходится, т.е. каждое последующее значение все ближе и ближе приближается к значению корня уравнения. В качестве условия прекращения итераций обычно используют
, (3.2)
где - заданное заранее значение погрешность определения корня.
На рис. 3.6 приведена блок-схема алгоритма, выполняющего метод простых итераций с помощью цикла с постусловием. Она реализована в программе, находящейся в файле ex030330.cpp. Сначала задаются значения входных переменных X0 и (на блок-схеме не показано). Затем выполняются начальные установки: переменной X присваивается значение X0, а счетчик циклов k обнуляется. В теле цикла сначала выполняется инкремент счетчика, а затем вычисляется новое приближение корня Xnew по итерационной формуле (3.1). Перед выполнением операции переприсваивания X = Xnew выполняется вычисление разности DX, которая необходима для проверки условия повторений итераций. Условие повторения представляет собой противоположное условию (3.2).
При реализации цикла с предусловием необходимо, чтобы при первом вхождении в цикл величина DX имела значение, обеспечивающее его выполнение. Это реализуется оператором начального присваивания DX = 2 .
Рис. 3.6. Блок-схема алгоритма метода простых итераций
Входные переменные: X0 - нулевое приближение корня;
eps - абсолютная погрешность вычисления корня.
Выходные переменные: X - значение корня;
k - число выполненных итераций.
Внутренние переменные: k - номер текущей итерации;
Xnew - значение корня, получаемое на текущей итерации;
DX - разность значений корня, полученных на текущей итерации и на предыдущей.
; где i = 1, 2, 3, … - номер итерации.
Итерации следует прекращать, когда будет выполнено условие ;
где - заданная погрешность.
Проверить работу программы на решении уравнений
и .