§ 7. Понятие вспомогательного алгоритма

7.4. Функции, возвращающие логический результат

Достаточно часто при решении задач возникает необходимость в проверке различных условий. Если условие не сложное, то можно использовать команду ветвления. Однако на практике условия могут быть достаточно сложными. В этом случае можно описать вспомогательный алгоритм, который выполнит проверку условия и вернет значение true или false в зависимости от того, выполнено условие или нет.

Пример 7.12. Даны два натуральных числа n и m (n < m). Вывести все числа, которые принадлежат отрезку [n; m] и удовлетворяют следующему условию: в числе нечетное количество цифр и сумма цифр числа кратна 5. Предусмотреть случай, когда таких чисел нет. Проверку одного числа оформить в виде подпрограммы.

Этапы выполнения задания

I. Исходные данные: переменные n и m.

II. Результат: числа из промежутка от n до m, удовлетворяющие условию задачи.

III. Алгоритм решения задачи.

1. Ввод исходных данных.
2. Для определения наличия искомых чисел будем использовать логическую переменную p, предварительно задав ей значение p = false.
3. В цикле от n до m проверяем текущее число.

3.1. Для проверки опишем функцию check, которая будет проверять число. Результатом функции будет true или false
3.2. Если число удовлетворяет условию, то выведем его. 
3.3. Если вывели число, то изменим значение переменной p на true.
4. 
Если после окончания цикла значение переменной p осталось false, то выведем сообщение, что искомых чисел на отрезке нет.

IV. Описание переменных: n и m — int, p —  bool.

Пример 7.12.

V. Программа:

#include <iostream>

using namespace std;

 

bool check(int x)

{

  int k = 0, s = 0;

  while (> 0){

    //сумма цифр числа

    s += x % 10;

    //количество цифр числа

    k++;

    x /= 10;

  }

  if (% 2 !=0 && s % 5 == 0)

    return true;

  else

    return false;

}

int main()

{

  int m, n, i;

  cout << "n=";

  cin >> n;

  cout << "m=";

  cin >> m;

  bool p = false;

  for (int i = n; i <= m; i++)

    if (check(i)){

      cout << i << " ";

      p = true;

    }

  if (!p)

    cout << "net chisel" << endl;

  return 0;

}

 

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

Поскольку функция для проверки результата имеет тип bool и условие (k % 2 != 0 && s % 5 == 0) в команде ветвления является выражением типа bool, то функция может быть записана следующим образом:

bool prov(int x)

{

  int k = 0, s = 0;

  while (> 0){

    //сумма цифр числа

    s += x % 10;

    //количество цифр числа

    k++;

    x /= 10;

  }

  return (% 2 != 0 && s % 5 == 0);

}