В данном пункте рассмотрим возможность применения всех трех видов циклов для решения одной задачи.
Пример 5.9. Вывести на экран наибольшее натуральное число из промежутка [n, m], которое делится на заданное число x, или сообщение «нет таких чисел».
Этапы выполнения задания
I. Исходные данные: n, m (границы промежутка), x (заданное число).
II. Результат: искомое число или сообщение «нет таких чисел».
III. Алгоритм решения задачи.
1. Пусть i — текущее число из промежутка. 2. Поскольку нас интересует наибольшее число из промежутка, то просмотр чисел начнем со значения i = m. На каждом шаге будем уменьшать i на 1. 3. Цикл завершится, если мы нашли число, делящееся на x без остатка (остаток равен нулю), или просмотрели все числа из промежутка [n, m]. 4. Для решения с циклом while — если по окончанию цикла i = n – 1, то нет чисел, удовлетворяющих условию задачи. 5. Для решения с циклом do…while — если по окончанию цикла i = n – 1, то нет чисел, удовлетворяющих условию задачи. Поскольку уменьшение значения i происходит до проверки условия, то начальное значение i = m + 1. 6. Для решения с циклом for — если число найдено, воспользуемся командой break и прервем выполнение цикла. Значение найденного числа сохраним в переменной z, которой до начала работы цикла присвоим значение –1. Если по окончанию цикла z осталось равным –1, то числа, удовлетворяющие условию задачи, не найдены.
IV. Описание переменных: n, m, x, i, z – int. |
Пример 5.9.
V. Программа (с циклом while):
#include <iostream>
using namespace std;
int main()
{
int n, m, x;
cout << "granicy" << endl;
cin >> n >> m;
cout << "x = ";
cin >> x;
///while
int i = m;
while (i >= n && i % x)
i--;
if (i == n - 1)
cout << "net takih" << endl;
else
cout << "naideno - " << i << endl;
return 0;
}
|
Фрагмент решения с циклом do…while:
///do...while
int i = m + 1;
do
i--;
while (i >= n && i % x);
if (i == n - 1)
cout << "net takih" << endl;
else
cout << "naideno - " << i << endl;
|
Фрагмент решения с циклом for:
///for
int z = -1;
for (int i = m; i >= n; i--)
if (i % x == 0) {
z = i;
break;
}
if (z == - 1)
cout << "net takih" << endl;
else
cout << "naideno - " << z << endl;
|
VI. Тестирование.
|