Назад Зміст Вперед

Задачі з використанням логічних змінних

Цей алгоритм використовується, якщо для деякої послідовності чисел потрібно на деяке запитання відповісти: „так” чи „ні”.

Приклад 1

Дано n цілих чисел. Знайти в цій послідовності кількість непарних чисел.

Дано: кількість чисел та самі числа.

Знайти: Кількість непарних чисел.

Змінні:

Вхідні:

Вихідні:

Проміжні:

Програма

#include <iostream>
using namespace std;

int main()
{
    int i, n, a, k = 0;  // i - лічильник, n - кількість чисел, a - поточне число, k - лічильник непарних
    cin >> n;            // Введення кількості чисел

    // Цикл для обробки n чисел
    for (i = 1; i <= n; i++)
    {
        cin >> a;        // Введення поточного числа

        // Перевірка на непарність
        if (a % 2 != 0)
        {
            k++;         // Збільшення лічильника непарних чисел
        }
    }

    cout << k;          // Виведення кількості непарних чисел
    return 0;
}

Результати роботи програми

№ Ввід Відповідь Пояснення
1 5
8 2 6 4 8
0 5 – кількість чисел. 8 2 6 4 8 – самі числа. Серед них немає непарних, тому 0
2 4
1 6 8 4
1 4 – кількість чисел. 1 6 8 4 – самі числа. Серед них є одне непарне, тому 1
3 6
1 3 2 4 3 9
3 6 – кількість чисел. 1 3 2 4 3 9 – самі числа. Серед них є три непарних, тому 3

Для того, щоб відповісти на питання, чи є в цій послідовності хоча б одне непарне число, потрібно перевірити значення k. Якщо k>0, то відповідь "так", у іншому випадку "ні".

Програма

#include <iostream>
using namespace std;

int main()
{
    int i, n, a, k = 0;  // i - лічильник, n - кількість чисел, a - поточне число, k - лічильник непарних
    cin >> n;          // Введення кількості чисел

    // Цикл для аналізу n чисел
    for (i = 1; i <= n; i++)
    {
        cin >> a;        // Введення поточного числа
        if (a % 2 != 0)  // Перевірка на непарність
        {
            k++;         // Інкрементація лічильника
        }
    }

    // Виведення результату
    if (k > 0) {
        cout << "yes";   // Якщо знайдено непарні числа
    } else {
        cout << "no";    // Якщо непарних чисел немає
    }
    
    return 0;
}

Для того, щоб відповісти на питання, чи всі числа в цій послідовності непарні, потрібно перевірити значення k. Якщо k=n, то відповідь "так", у іншому випадку "ні".

Програма

#include <iostream>
using namespace std;

int main()
{
    int i, n, a, k = 0;  // i - лічильник, n - кількість чисел, a - поточне число, k - лічильник непарних чисел
    cin >> n;          // Введення кількості чисел

    // Перебір усіх введених чисел
    for (i = 1; i <= n; i++)
    {
        cin >> a;        // Введення поточного числа
        if (a % 2 != 0)  // Перевірка, чи число непарне
        {
            k++;         // Збільшення лічильника непарних чисел
        }
    }

    // Перевірка, чи всі числа непарні
    if (k == n) {
        cout << "yes";   // Якщо всі числа непарні
    } else {
        cout << "no";    // Якщо хоча б одне число парне
    }

    return 0;
}

Існує ще один спосіб відповісти на ці питання, без рахування кількості, з використанням логічних змінних - перемикачей.

Приклад 2

Дано n цілих чисел. З’ясуйте, чи є в цій послідовності хоча б одне непарне число.

Дано: кількість чисел та самі числа.

Знайти: Якщо серед чисел є непарні, то надрукувати yes, якщо немає, то надрукувати no.

Змінні:

Вхідні:

Вихідні:

Проміжні:

Алгоритм

  1. Спочатку потрібно присвоїти початкове значення ознаці f=false. Тобто вважаємо, що непарних серед чисел немає. Якщо зустрінемо непарне, змінимо це значення на протилежне.
  2. Вводимо n – кількість чисел, що будемо вводити. Це значення буде визначати кількість витків циклу.
  3. У циклі будемо виконувати такі дії:
  4. Коли цикл закінчиться, тобто будуть введені всі n чисел, значення змінної f (ознаки) або залишиться початковим false (якщо серед чисел немає непарних), або зміниться на true (якщо серед чисел є одне чи декілька непарних).
  5. Після завершення циклу потрібно перевірити значення змінної f.
  6. Для перевірки значення логічної змінної можна не використовувати операцію «=». Тому:

Програма

#include <iostream>
using namespace std;

int main()
{
    int i, n, a;        // i - лічильник, n - кількість чисел, a - поточне число
    bool f = false;     // Прапорець наявності непарних чисел
    cin >> n;      // Введення кількості чисел

    // Перевірка кожного числа
    for (i = 1; i <= n; i++)
    {
        cin >> a;        // Введення числа
        if (a % 2 != 0)  // Якщо число непарне
        {
            f = true;    // Встановлюємо прапорець
        }
    }

    // Виведення результату
    if (f) {
        cout << "yes";  // Якщо знайдено хоча б одне непарне число
    } else {
        cout << "no";   // Якщо всі числа парні
    }

    return 0;
}

Результати роботи програми

№ Ввід Відповідь Пояснення
1 5
8 2 6 4 8
No 5 – кількість чисел. 8 2 6 4 8 – самі числа. Серед них немає непарних, тому No
2 4
1 6 8 4
Yes 4 – кількість чисел. 1 6 8 4 – самі числа. Серед них є непарні, тому Yes
3 6
1 3 2 4 3 9
Yes 6 – кількість чисел. 1 3 2 4 3 9 – самі числа. Серед них є три непарні, тому Yes

Приклад 3

Дано n чисел. З’ясуйте, чи всі вони непарні.

Дано: кількість чисел та самі числа.

Знайти: Якщо всі числа непарні, то надрукувати yes, якщо є парні, то надрукувати no.

Змінні:

Вхідні:

Вихідні:

Проміжні:

Алгоритм

  1. Спочатку потрібно присвоїти початкове значення ознаці f=true. На відміну від попереднього прикладу вважаємо, що всі числа непарні. Тоді якщо зустрінемо парне число, змінимо це значення на протилежне.
  2. Вводимо n – кількість чисел, що будемо вводити. Це значення буде визначати кількість витків циклу.
  3. У циклі будемо виконувати такі дії:
  4. Коли цикл закінчиться, тобто будуть введені всі n чисел, значення змінної f (ознаки) або залишиться початковим true (якщо всі числа непарні, тобто серед чисел немає парних), або зміниться на false (якщо серед чисел є одно чи декілька парних).
  5. Після завершення циклу потрібно перевірити значення змінної f.

Програма

#include <iostream>
using namespace std;

int main()
{
    int i, n, a;        // i - лічильник, n - кількість чисел, a - поточне число
    bool f = true;      // Прапорець: чи всі числа непарні (початково true)
    cin >> n;         // Введення кількості чисел

    // Перевірка кожного введеного числа
    for (i = 1; i <= n; i++) 
    {
        cin >> a;       // Введення числа
        if (a % 2 == 0) // Якщо число парне
        {
            f = false;  // Встановлюємо прапорець у false
        }
    }
    // Виведення результату
    if (f) {
        cout << "yes";  // Якщо всі числа непарні (f залишився true)
    } else {
        cout << "no";   // Якщо знайдено хоча б одне парне число
    }
    return 0;
}

Результати роботи програми

№ Ввід Відповідь Пояснення
1 5
1 2 3 4 5
No 5 – кількість чисел. 1 2 3 4 5 – самі числа. Вони не всі непарні, тому No
2 4
1 5 7 2
No 4 – кількість чисел. 1 5 7 2 – самі числа. Серед них є парне, тому No
3 6
1 3 5 7 9 3
Yes 6 – кількість чисел.1 3 5 7 9 3 – самі числа. Вони всі непарні, тому Yes

Правило використання ознаки

    При складанні програм з використанням ознаки потрібно пам’ятати:
  • Перед циклом (перед перевіркою даних) ознаці потрібно присвоїти початкове значення.
  • У циклі, в процесі перевірки ознака може змінити своє значення тільки на протилежне. Вона не може змінюватись «туди сюди».
  • Після завершення циклу значення ознаки потрібно перевірити. Це значення може залишитися початковим, а може змінитися на протилежне.

Варіанти задач

Варіант 1

  1. Дано n цілих чисел. Чи всі вони кратні 5?
  2. Дано n цілих чисел. Чи є в цій послідовності числа =0?

Варіант 2

  1. Дано n цілих чисел. Чи є в цій послідовності від’ємні числа?
  2. Дано n цілих чисел. Чи всі вони кратні 10?

Варіант 3

  1. Дано n цілих чисел. Чи всі вони додатні?
  2. Дано n цілих чисел. Чи є в цій послідовності числа, які закінчуються цифрою 2?

Варіант 4

  1. Дано n цілих чисел. Чи є в цій послідовності числа кратні 3?
  2. Дано n цілих чисел. Чи всі вони закінчуються цифрою 1?

Варіант 5

  1. Дано n цілих чисел. Чи всі вони однозначні?
  2. Дано n цілих чисел. Чи є в цій послідовності парні числа?

Варіант 6

  1. Дано n цілих чисел. Чи є в цій послідовності додатні числа?
  2. Дано n цілих чисел. Чи всі вони однозначні та кратні 4?

Варіант 7

  1. Дано n цілих чисел. Чи всі вони додатні та однозначні?
  2. Дано n цілих чисел. Чи є в цій послідовності числа, які кратні b?

Варіант 8

  1. Дано n цілих чисел. Чи є в цій послідовності однозначні числа?
  2. Дано n цілих чисел. Чи всі вони закінчуються на 33?

Варіант 9

  1. Дано n цілих чисел. Чи всі вони закінчуються цифрою 3?
  2. Дано n цілих чисел. Чи є в цій послідовності двозначні від’ємні числа?

Варіант 10

  1. Дано n цілих чисел. Чи є в цій послідовності двозначні числа?
  2. Дано n цілих чисел. Чи всі вони двозначні та закінчуються на 6?

Варіант 11

  1. Дано n цілих чисел. Чи всі вони двозначні?
  2. Дано n цілих чисел. Чи є в цій послідовності числа, які закінчуються на 00?

Варіант 12

  1. Дано n цілих чисел. Чи є в цій послідовності числа, які закінчуються цифрою 5?
  2. Дано n цілих чисел. Чи всі вони додатні та тризначні?

Варіант 13

  1. Дано n цілих чисел. Чи всі вони тризначні?
  2. Дано n цілих чисел. Чи є в цій послідовності числа, які належать інтервалу [x, y] ?

Варіант 14

  1. Дано n цілих чисел. Чи є в цій послідовності двозначні числа які складаються з однакових цифр?
  2. Дано n цілих чисел. Чи всі вони кратні b?

Варіант 15

  1. Дано n цілих чисел. Чи всі вони двозначні та складаються з різних цифр?
  2. Дано n цілих чисел. Чи є в цій послідовності числа, які належать інтервалу [x, y] та кратні b?

Варіант 16

  1. Дано n цілих чисел. Чи є в цій послідовності тризначні числа?
  2. Дано n цілих чисел. Чи всі вони від’ємні та закінчуються на 55?

Варіант 17

  1. Дано n цілих чисел. Чи всі вони належать інтервалу [x, y]?
  2. Дано n цілих чисел. Чи є в цій послідовності тризначні додатні числа, які складаються з різних цифр?

Назад Зміст Вперед