Циклы
Циклы выполняют выражения или блоки выражений до тех пор, пока выражение условия не становится истинным. Наша программа требует двух циклов (один вложен в другой). Пока пользователь желает угадывать последовательности:
{ выводить на дисплей последовательности
Пока догадка неверна, а пользователь желает угадать еще
Раз}
Цикл while в С++ вполне подходит для нашей цели:
Bool next_seq = true; // показать следующую последовательность?
Bool go_for_it = true; // пользователь хочет продолжить угадывание?
Bool got_it = false; // пользователь угадал?
Int num_tries = 0; // количество попыток
Int num_right = 0; // количество правильных ответов
While (next_seq == true){
11 вывести на дисплей последовательность для пользователя while ((got_.it == false) && (go_for_.it == true)) { int usr_guess; сіп » usr_guess; num_tries++;
If (usr_guess == next_elem) { got_it = true;
Num_cor++; }
Else {
// пользователь не угадал // сказать, что ответ неверен // спросить, еще угадываем?
If (usr_rsp == "N" И usr_rsp == V) go_for_it =
False;
}
} // конец вложенного цикла while cout « "Want to try another sequence? (Y/N) " char try_again; cin » try-again;
If (try_again == "N" II try_again == "n")next_seq = false;
) // конец while(next_seq == true)
Цикл while начинается с вычисления выражения условия в круглых скобках. Если оно истинно, выражение или блок выражений, следующий за циклом while, выполняется. После выполнения выражения (блока) выражение условия обновляется. Этот цикл обновления/выполнения продолжается, пока условие не станет ложным. Обычно некоторое условие внутри исполняемого блока устанавливает условное выражение в состояние false. Если выражение условия никогда не становится ложным, мы говорим, что ошибочно попали в бесконечный цикл.
Наш внешний цикл while выполняется, пока пользователь не скажет, что хочет остановиться:
Bool next_seq = true;
While (next_seq == true) { // ...
If (try_again == "N" II try_again == "n")next_seq = false;
Где при инициализации next__seq в false блок выражений не будет выполняться. Вложенный цикл while позволяет пользователю выполнять множество аналогичных попыток.
Цикл может быть прерван внутри выполняемого блока выполнением выражения break. В следующем фрагменте кода цикл while выполняется, пока tries__cnt не станет равно max_tries. Однако если пользователь дает правильный ответ, цикл прерывается выражением break:
Int max_tries = 3; int tries_cnt = 0;
While (tries_cnt < max_tries){ // прочитываем попытку пользователя if (usr_guess == next_elem) break; // прерываем цикл tries_cnt++;// more stuff
}
Программа может иметь быстрое завершение текущего выполнения цикла, выполнив выражение continue. Например, рассмотрим следующий фрагмент программы, в котором все слова, в которых больше четырех букв, отбрасываются:
String word; const int min_size = 4; while (cin » word) { if (word. size() < min_size) // прерываем этот цикл continue;
// попадаем сюда, только если слово // больше или равно min-size... process_text(word);}
Если слово меньше min_size, выполняется выражение continue. Результатом выполнения выражения continue является прерывание текущего прохождения цикла. Остаток тела цикла while (в данном случае - process_text ()) не выполняется. Вернее, цикл начинается заново, с новым вычислением условия, которое прочитывает другое значение строки в word. Если word больше или равно min__size, полное тело цикла выполняется. В этом случае все слова, имеющие больше четырех букв, отбрасываются.