Организация циклических вычислений. Основной теоретический материал. Операторы для организации циклов, страница 2

Если значение условия повторения истинно, то выполняются операторы, входящие  в тело  цикла, иначе выход из цикла и переход к оператору, записанному в программе после оператора while. Значение операнда условие_повторения вычисляется при каждом переходе на начало цикла. Если значение условия повторения в операторе while окажется ложным уже при первой проверке, то операторы в теле цикла не выполнятся ни одного разаНапример:

//   Суммирование первых десяти чисел натурального ряда

int  i  = 1,  sum = 0;

while (i <= 10)  {  sum +=i;   i++;  }    // можно записать и так:    sum += i++; 

Оператор   цикла   с  постусловием   имеет  вид:

do    {  тело_цикла   }   while  (условие_повторения);

Операторы, входящие в тело цикла, гарантированно выполнятся хотя бы один раз, так как условие повторения (выхода) проверяется в конце цикла. Операторы в составе цикла выполняются до тех пор, пока истинно значение условия повторения. При получении ложного значения операнда  условие_повторения  осуществляется выход из цикла и переход к следующему оператору программы. Разработчик  должен позаботиться о том, чтобы после выполнения тела цикла while или do while некоторое число раз произошел выход из цикла, т.е. условие_повторения стало ложным, иначе произойдет зацикливание.

       // Сумма гармонического ряда  1 + 1/2 + 1/3 + …+ 1/n + …, пока   (1 / n) > e

int         n = 2;

double  x,   eps = 1e-8,   sum = 1.0;     

do         {    x = 1.0 / n;   sum += x;   n++;     

}   while  (x  > eps);

cout  << "сумма " << n - 1 << “ членов гармонического ряда  =  “ << (sum – x); 

Почему  в операторе вывода  указаны  выражения  n - 1  иsumx?

Выражение условие_повторения может состоять из нескольких простых выражений, разделенных операторами логических операций. Например:

do  {  //   суммирование ряда до тех пор, пока  сумма < 5  и  член ряда  > eps     

          …

      }  while   ((sum < 5) && (x > eps));  // выход,  если  sum >= 5 или  1 / n < eps.

Для организации цикла с заданным числом повторений (цикла с параметром) в С++ предназначается оператор цикла  for, который имеет вид:

for  (выражение_1;  выражение_2;  выражение_3)  тело_цикла;

Параметр цикла   for –  целочисленная или вещественная переменная, которая   изменяется монотонно (возрастает или убывает). Значение операнда выражение_1 инициализирует параметр  (управляющую переменную) цикла, операнд выражение_2 задает условие повторения операторов в теле цикла, а операнд выражение_3 предназначается для изменения текущего значения параметра цикла.

//  Суммирование первых десяти членов натурального ряда 

for  (int  i = 1, sum = 0;  i <= 10;  i++)  sum +=  i;

Компилятор реализует оператор цикла   for  по  следующей  схеме:

·  значение операнда  выражение_1  вычисляется только один раз до начала цикла. Оно  инициализирует переменную, которая является параметром цикла. Так как инициализация параметра цикла выполняется до входа в  тело цикла, то параметр цикла попадает в область видимости функции, которая содержит соответствующий оператор for. Благодаря этому в операнде выражение_1 параметр цикла может быть не только проинициализирован, но и предварительно описан (см.  пример  выше);

·  шаг 1: выполнение цикла начинается с вычисления значения  операнда выражение_2. Если его значение  равно нулю (false), то  осуществляется выход из  цикла и переход к следующему оператору программы. Если значение условия повторения отлично от нуля (true), то переход к следующему  шагу;

·  шаг 2:  выполняются операторы, входящие в    тело цикла;

·  шаг 3: вычисляется значение операнда выражение_3, т.е. параметр цикла получает новое значение, и происходит безусловный переход к шагу 1.

Таким образом,   оператор   цикла   for   эквивалентен   группе   операторов:

выражение_1;      //  инициализация  параметра  цикла

while (выражение_2)  {  . . .     //  операторы  тела   цикла;

                                          выражение_3;

                                      }

при условии, что выражение_2  -  непустое  и в теле цикла нет оператора досрочного выхода из цикла.