Оператор циклу з параметром (for) використовують, якщо заздалегідь відомо скільки разів потрібно виконувати деякі оператори.
Існують задачі, коли заздалегідь невідомо скільки разів потрібно виконувати деякі оператори, але відома умова при який цикл виконується або умова при який цикл завершується.
Коли спочатку потрібно перевірити умову, а потім виконувати тіло циклу використовується оператор циклу while
Коли спочатку потрібно виконати тіло циклу, а потім перевіряти умову використовується оператор циклу do while.
| Загальний вигляд | Приклад |
|---|---|
|
|
Дано натуральне число n. Чи є воно степенем числа 2?
Щоб з’ясувати, чи є число степенем числа 2, потрібно ділити це число на 2 (тобто виконувати оператор n=n / 2) поки це можна виконувати без остачі (тобто, якщо вірна умова n % 2==0). Тобто, спочатку ми перевіряємо умову – чи ділиться число n на 2 і, якщо ділиться, виконуємо ділення. Тому у цій задачі потрібно використовувати оператор циклу while
В результаті одного чи декількох ділень числа на 2 ми отримаємо n=1, якщо число є степенем числа 2 (бо ділення на 2 завжди можливе), або n!=1, якщо число не є степенем числа 2.
| Ввід | Вивід |
|---|---|
| 8 | yes |
| 12 | no |
#include <iostream>
using namespace std;
int main()
{
int n; // Вхідне число
cin>>n;
while (n%2==0) // Поки число ділиться на 2
{
n=n/2; // Ділимо число на 2
}
if (n==1) {cout <<"yes";} // Якщо отримали 1 - це степінь двійки
else {cout<<"no";} // Інакше - не степінь двійки
return 0;
}
| Загальний вигляд | Приклад |
|---|---|
|
|
У циклі вводяться цілі числа. Умова закінчення вводу – ввід числа 0. Знайти суму додатних чисел.
Тобто, спочатку потрібно ввести число з клавіатури, зробити з ним потрібні дії, а потім перевірити і, якщо введене число =0, то цикл потрібно завершити. Тому у цій задачі потрібно використовувати оператор циклу do while
| Ввід | Вивід |
|---|---|
| 8 -3 4 -2 0 | 12 |
#include <iostream>
using namespace std;
int main()
{
int a, s = 0; // a - вхідне число, s - сума додатніх чисел
do
{
cin >> a;
if (a > 0) // Якщо число додатнє
{
s = s + a; // Додаємо до суми
}
} while (a != 0); // Повторюємо, доки не введемо 0
cout << "s=" << s; // Виводимо суму
return 0;
}
У циклі вводяться цілі числа. Умова закінчення вводу – ввід числа 0. Знайти суму чисел з парними порядковими номерами. Тобто потрібно знайти суму другого, четвертого, шостого і т.д. чисел.
Ця задача відрізняється від попередньої тільки тим, що перевіряються не самі числа, а їх порядкові номери. Нумерацію чисел прийдеться організувати самостійно, бо цикл з умовою не має параметру.
| Ввід | Вивід |
|---|---|
| 8 3 4 2 0 | 5 |
#include <iostream>
using namespace std;
int main()
{
int i = 1, a, s = 0; // i - лічильник введень, a - вхідне число, s - сума парних за порядком чисел
do
{
cin >> a; // Введення числа
if (i % 2 == 0) // Якщо порядковий номер парний
{
s = s + a; // Додаємо число до суми
}
i++; // Інкрементуємо лічильник
} while (a != 0); // Цикл триває до введення нуля
cout << "s=" << s; // Виведення суми
return 0;
}
- У циклі вводяться цілі додатні числа. Умова закінчення вводу – ввід від’ємного числа. Знайти кількість додатних чисел.
- У циклі вводяться цілі непарні числа. Умова закінчення вводу – ввід парного числа. Знайти суму непарних чисел.
- У циклі вводяться будь-які цілі числа. Умова закінчення вводу – ввід числа 0. Знайти порядковий номер найменшого числа.
- У циклі вводяться будь-які цілі числа. Умова закінчення вводу – ввід числа 0. Знайти найбільше число та його порядковий номер.
- У циклі вводяться будь-які цілі числа. Умова закінчення вводу – ввід числа 777. Чи є серед цих чисел, хочаб одне число, що кратне 7?
- У циклі вводяться будь-які цілі числа. Умова закінчення вводу – ввід числа 0. Чи всі ці числа додатні?
- У циклі вводяться будь-які цілі числа. Умова закінчення вводу – ввід числа 0. Знайти серед введених чисел останнє, яке закінчується цифрою 0. Якщо таких чисел немає, вивести повідомлення.
- Вводіть у циклі цілі числа, які створюють послідовність, яка спадає. Умова закінчення вводу – ввід числа, що порушує спадання. Знайти суму чисел у послідовності.
- Вводіть у циклі цілі числа, які створюють послідовність, яка зростає. Умова закінчення вводу – ввід числа, що порушує зростання. Знайти кількість чисел у послідовності.
- Дано ціле число. Знайти його найменший дільник, який відрізняється від 1.
- Громадянин 1 березня відкрив у банку рахунок та поклав на нього А грн. Через кожний місяць розмір вкладу збільшується на 2% від суми, що є на рахунку. Через скільки місяців величина вкладу стане більше В грн?
- У циклі вводяться будь-які цілі числа. Умова закінчення вводу – ввід числа 0. Знайти скільки разів у цій послідовності чисел змінюється знак. Наприклад, серед чисел 1 -34 8 14 -5 0 знак змінюється 3 рази.
- У циклі вводяться будь-які цілі числа. Умова закінчення вводу – ввід числа 0. Знайти кількість чисел, які більші своїх сусідів.
- У циклі вводяться будь-які цілі числа. Умова закінчення вводу – ввід числа 0. Знайти суму тих чисел, що є простими числами.
- У циклі вводяться будь-які цілі числа. Умова закінчення вводу – ввід числа 0. Знайти суму тих чисел, що є числами Фібоначчі.
- Дано ціле число. Розкласти це число на прості множники. Наприклад, для числа 2340, відповідь буде така: 2 2 3 3 5 13 .
- Дано прямокутник розмірами a на b. Від нього відрізают квадрати максимального розміру, поки це можливо. Потім, від прямокутника, що залишився знову відрізают квадрати максимального розміру і так далі. На які квадрати та в який кількості буде розрізано початковий прямокутник? Наприклад для прямокутника a=11 b=3 відповідь буде така:
1) 3 x 3
2) 3 x 3
3) 3 x 3
4) 2 x 2
5) 1 x 1
6) 1 x 1