►Вложенные команды управления...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 ;
}
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ