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

Циклы,не входящие в состав других циклов, называются внешними.  Циклы, входящие в состав внешнего цикла, называютсявнутренними. Если в составе внешнего цикла содержится  один внутренний, то такую конструкцию называют «цикл в цикле» (двойной цикл). Например: табулирование функции двух переменных – двойной цикл, а умножение,  сложение матриц – тройной цикл [ … [… [ … ]…] … ]. Каждый цикл (и внешний, и внутренний) реализуется по правилам выбранного для его организации оператора цикла.

Ответьте  на  вопрос! Какую структуру имеет вложенный цикл, если во внешнем  содержится два независимых внутренних цикла?

Внимание!!! Если и внешний, и внутренний цикл – это циклы с параметром, причем для их организации используетсяоператор циклас предусловием, то параметр  внутреннего цикла должен инициализироваться в составе внешнего цикла, а изменять свое значение – в составе внутреннего цикла. В общем случае переменные, по значению которых принимается решение о повторении действий внутреннего цикла или о выходе из него, должны изменять свое значение во внутреннем цикле, а во внешнем  восстанавливать свое начальное значение перед повторным входом во внутренний цикл. Например: задание 2.3 – вычисление значения полинома по схеме Горнера – классический пример двойного цикла, так как схема Горнера реализуется внутренним циклом, а параметром внешнего цикла является  переменная  х, которая принимает значения на заданном отрезке: 

·  инициализация параметра внешнего цикла  х = х0 и переменной y – значение полинома при заданном х. Эти действия должны быть выполнены до входа во внутренний цикл;

              вычисление значения полинома yпо схеме Горнера –  внутренний цикл;

·  вывод строки таблицы результатов со значениями х и  y–во внешнем цикле;

·  изменение значения параметра внешнего цикла  х = х +Dх;

·  проверка  условия  выхода  (повторения)  действий  во  внешнем  цикле   (пока x <= xn).

Обратите внимание на следующие рекомендации!

Метод развертывания цикла позволяет в несколько раз сократить число повторений. Например: для инициализации нулем большого количества последова-тельных элементов массива вместо оператора    for  (inti= 0;  i  < 1000;  i++)  a [i] = 0;            лучше записать   оператор                                       for    (inti= 0;  i  < 500;  i++) 

                                                                                         {    a [i] = 0;    a [500 + i] = 0;       }

Вложенные циклы рекомендуется упорядочить так, чтобы внешний цикл выполнялся как можно меньшее число раз.

Проверка в операторе управления циклом (рекомендация А. Голуба) – единственное место, где эффективность действительно является важным обстоятельством, так как код выполняется многократно. Это особенно важно для операторов управления вложенными циклами. Проверка флага завершения во внутреннем цикле может существенно замедлить выполнение, поэтому ее лучше избегать.

1.3.  Другие  операторы  передачи  управления

Для досрочного выхода из  оператора цикла любого вида или ветви  оператора условной передачи управления (ifили оператора выбора switch) используется оператор управления  break. Выполнение этого оператора  вызывает  досрочный выход из  цикла, в котором он записан, и переход к следующему за циклом   оператору программы, а также досрочный выход из  ветви «развилки». Например:

//  Вычисление квадратного корня из  положительного числа

double   x;

cout << “вводите последовательно исходные числа \n”;

while (1) {       

   cin >> x;       //  ввод числа с клавиатуры

   if  (x < 0)    {  cout << “Число  отрицательное.  Выход  из  цикла  \n”;                              

                        break;      };        

   else    cout << “x= “ << x << “\t корень квадратный = “ << sqrt (x) << ‘\n’;

.. .  // оператор  break  передает  управление   в  эту  точку  программы.

 Чтобы выйти из вложенных циклов, оператор break надо использовать в каждом из них.

Оператор управления  continue  может использоваться только в операторах цикла. Он  прерывает  текущее выполнение действий, т.е.  выходит на конец цикла   и осуществляет переход на его начало (к выполнению первого оператора в теле цикла). Таким образом, этот оператор позволяет проигнорировать операторы, записанные после него в теле цикла.  Например: