►Вложенные команды управления...76

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

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

        /* NestedDemo — вводится последовательность чисел. */

        /*              Числа суммируются, пока пользователь не введёт отрицательное число. Этот процесс будет повторяться, пока общая сумма не станет равной 0. */

        #include <cstdio>

        #include <cstdlib>

        #include <iostream>

        using namespace std ;

        int main( int argc , char* pszArgs[ ] )

        {

             setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */

             cout << "Эта программа суммирует "

                   << "последовательности чисел. Ввод каждой "

                   << "последовательности завершается "

                   << "вводом отрицательного числа "

                   << "Чтобы завершить ввод последовательностей,"

                   << "нужно ввести два отрицательных числа подряд " ; 

             /* Внешний цикл работает с последовательностями чисел */

             int accumulator ;

             do

             {

                 /* Начинаем ввод очередной последовательности чисел */

                 accumulator = 0 ;

                 cout << " Введите очередную последовательность " ;

                 /* Бесконечный цикл */

                 for ( ; ; )

                 {

                      /* Введение очередного числа */

                      int value = 0 ;

                      cout << "Введите очередное число: " ;

                      cin >> value ;

                      /* Если оно отрицательное... */

                      if ( value < 0 )

                      {

                          /* ...выходим из цикла */

_________________

76 стр. Часть 1. Первое знакомство с С++

                          break ;

                      }

                     /* ...иначе добавляем число к общей сумме */

                     accumulator = accumulator + value ;

                 }

                 /* Вывод результата вычислений... */

                 cout << " Общая сумма равна "

                      << accumulator

                      <<" " ;

                 /* ... если накопленная общая сумма чисел последовательности не равна нулю, начинаем работать со следующей последовательностью */

             } while ( accumulator != 0 ) ;

             cout << "Программа завершена " ;

             /* Пауза для того, чтобы посмотреть на результат работы программы */

             system( "PAUSE" ) ;

             return 0 ;

          }