§ 5. Оператор цикла

5.5. Решение задач с использованием оператора цикла

В данном пункте рассмотрим возможность применения всех трех видов циклов для решения одной задачи.

Пример 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 (>= n && i % x)

    i--;

  if (== n - 1)

    cout << "net takih" << endl;

  else

    cout << "naideno - " << i << endl;

  return 0;

}

Фрагмент решения с циклом do…while:

  ///do...while

  int i = m + 1;

  do

    i--;

  while (>= n && i % x);

  if (== n - 1)

    cout << "net takih" << endl;

  else

    cout << "naideno - " << i << endl;

Фрагмент решения с циклом for:

///for

  int z = -1;

  for (int i = m; i >= n; i--)

    if  (% x == 0) {

      z = i;

      break;

    }

  if (== - 1)

    cout << "net takih" << endl;

  else

    cout << "naideno - " << z << endl;

VI. Тестирование.