§ 5. Оператор цикла
5.2. Оператор цикла с постусловием
Цикл, в котором условие для завершения работы проверяется после выполнения тела цикла, в С++ записывается следующим образом: do { тело цикла; } while (<условие>); Цикл работает, пока условие истинно, и прекращает работу, когда условие становится ложным. Этот цикл называют циклом с постусловием, так как проверка условия осуществляется после выполнения тела цикла. Использовать цикл do...while лучше в тех случаях, когда команды в теле цикла должны выполниться хотя бы один раз, либо когда внутри тела цикла происходит инициализация переменных, участвующих в проверке условия окончания его работы. Фигурные скобки в записи цикла с постусловием могут быть опущены, если тело цикла состоит из одной команды. Пример 5.2. Написать программу, которая будет генерировать случайные числа из промежутка [1; x] до тех пор, пока не будет сгенерировано число, кратное k. Вывести это число и количество сгенерированных чисел. Значения k и x вводятся (k < x). Этапы выполнения задания I. Исходные данные: числа k и r. II. Результат: r (искомое число) и n (количество чисел). III. Алгоритм решения задачи. 1. Ввод исходных значений. 3.1. Генерируем случайное число r. В С++ для этого используется функция rand(), которая генерирует случайное число в промежутке [0; 32767). Это число будет использоваться в условии проверки окончания работы цикла. 4. Вывод результата. IV. Описание переменных: n, k, x — int. |
Числа, сгенерированные функцией rand(), называют псевдослучайными, поскольку при каждом запуске программы будет сгенерирована одна и та же последовательность чисел. Каждое новое число в последовательности генерируется по определенному алгоритму из предыдущего. Первое число в этой последовательности — константа, известная компилятору. Такой подход удобен для отладки программы. Однако для получения результатов необходимо при каждом запуске получать другие числа. Функция srand(n) из библиотеки cstdlib позволяет изменить первое число в последовательности в зависимости от значения параметра n. Однако, если значение n является константой, то последовательность чисел изменится по отношению к начальной, но не будет меняться при новых запусках программы. Если в качестве значения n взять системное время (функция time(NULL) из библиотеки ctime), то при каждом запуске программы будем получать новую последовательность случайных чисел. Пример 5.2. V. Программа:
VI. Тестирование. VII. Поскольку числа генерируются случайно, то для одних и тех же исходных данных могут получаться различные результаты (тесты 2—4) |