ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 3) онлайн

Оператор break

Оператор break производит выход из цикла подобно тому, как он действовал в конструкции switch. Следующим оператором, исполняемым после break, будет являться первый оператор, находящийся вне данного цикла. Это проиллюстри- ровано на рис. 3.16.

Для того чтобы продемонстрировать использование оператора break, приве- дем программу, которая изображает распределение простых чисел:

// showprim.cpp            

// изображает распределение простых чисел #include  <iostream> using namespace std;

#include  <conio.h>       // для getche()

int main() {

   const unsigned char WHITE =219; // белый цвет для простых чисел

  const unsigned char GRAY =176;   // серый цвет для остальных чисел

  unsigned char ch;

  // действия для каждой позиции на экране

  for(int count=0; count<80*25-1 ;count++)

  {

    ch = WHITE;                    //предполагаем, что число простое

    for(int j=2; j<count; j++)     // делим на каждое целое, большее 2

    if( count % j == 0)            // если остаток равен 0,

    {

      ch = GRAY;                   // то число не простое

      break;                       // выход из внутреннего цикла

    }

    cout << ch;                    // вывод символа на экран

  }

  getch();                         // задержка полученного изображения

  return 0;

}

                      

 

Все позиции консоли размером 80x25 символов пронумерованы числами от 0 до 1999. Если число является простым, то позиция с соответствующим номером закрашивается белым цветом; в противном случае позиция закрашивается серым цветом.

 

На рисунке 3.17 представлен экран с результатом работы программы. Строго говоря, числа 0 и 1 не являются простыми, но соответствующие позиции закра- шены белым, чтобы не вносить лишней путаницы в программу. Колонки, соответ- ствующие одинаковым позициям в каждой строке, нумеруются с 0 по 79. В ко- лонках с четными номерами не может находиться ни одно простое число, кроме 2, поскольку все четные числа делятся на 2. Есть ли закономерность распреде- ления для остальных простых чисел? Пока математики не нашли такой форму- лы, которая позволяла бы определять, является ли число простым или нет.

Рис. 3.17. Результат работы программы SHOWPRIM

Когда программа с помощью внутреннего цикла for определяет, что число не является простым, переменной ch присваивается значение GRAY, и программа выходит из внутреннего цикла с помощью оператора break (мы не хотим про-

изводить выход из программы, поскольку нам необходимо обработать не одну, а множество последовательностей чисел).

Обратите внимание на то, что оператор break производит выход только из од- ного цикла с максимальной глубиной вложения. Не имеет значения, какие кон- струкции и с какой глубиной вложены друг в друга: break производит выход только из одной такой конструкции, в которой он сам находится. Например, ес- ли бы внутри нашего цикла for находилось ветвление switch, то оператор break внутри switch вывел бы нас за пределы конструкции switch, но оставил бы внут- ри цикла for.

Последний оператор с cout печатает псевдографический символ, и затем цикл начинается для следующего числа.

Эта программа использует два символа из расширенной таблицы символов ASCII, в которой представлены символы с кодами от 128 до 255 (см. приложение А «Таблица ASCII»). Число 219 соответствует закрашенному прямоугольнику (бе- лого цвета на черно-белом мониторе), а число 176 — прямоугольнику серого цвета.

Программа SHOWPRIM использует функцию getch() в последней строке для того, чтобы после выполнения программы командная строка DOS появилась не сразу, а после нажатия любой клавиши. Таким образом, экран «застывает» до тех пор, пока клавиша не будет нажата.

Мы используем для символьных переменных тип unsigned char потому, что тип char способен хранить только числа, не превышающие 127, в то время как беззнаковая версия этого же типа позволяет хранить числа величиной до 255.

 

46