Дефиниция:
Процес, който представлява многократното изпълнение на дадена последователност от операции с еднакви/различни данни.
(или неформална дефиниция): Цикъл е операция, която се повтаря N на брой пъти.
Видове:
- Индуктивен цикличен процес - цикличен процес, при който броят на повторенията е предварително известен.
- Итеративен цикличен процес - цикличен процес, при който броят на повторенията НЕ е известен предварително.
while(<условие>) {
<действия>
}
Семантика:
- while (докато) – запазена дума
- <условие> - булев израз
- <действия> – инициализира се кодът, който трябва да се изпълни определен брой пъти.
Пресмята се стойността на <условие>.
Ако тя е false изпълнението на оператора while завършва без да се изпълни тялото му.
Ако тя е true, изчисляването на условието и изпълнението на <действия> продължава, докато <условие> не стане false
//Пример
while (true) {
std::cout << “I love C++\n”; //безкраен цикъл
}
//Пример
unsigned i = 0;
while(i < 1000) {
std::cout << i; //ще изпише числата от 0 до 999
++i;
}
//Пример
unsigned i = 0;
while(true) {
if(i == 99) {
break; //ето как можем да счупим безкраен цикъл след 100 стъпки
} else {
++i;
}
}
Използва се преждевременно излизане от цикъл, преди той да е завършил изпълнението си по естествения си начин.
Ако break се извика в цикъл, цикълът се прекъсва.
Използва се, когато реализираният алгоритъм изисква пропускане на част от операторите или част от кода в тялото на даден цикъл.
Пропуска всичко останало от тялото на цикъла и се преминава на следващата итерация.
//Принтиране на всички четни числа от 1 до 1000
int counter = 0;
while (counter < 1000) {
++counter;
if (counter % 2 != 0) {
continue;
}
std::cout << counter << “ “;
}
Пояснение:
- Оператор continue прекратява командата в цикъла
- За разлика от оператор break, оператор continue не прекратява цикъла, а само командата, като цикълът продължава все едно нищо не се е случило.
do {
<действия>
} while(<условие>);
Семантика:
- do (направи/прави), while (докато) – запазени думи.
- <действия> - инициализира се кодът, който трябва да се изпълни определен брой пъти.
- <условие> - булев израз
Изпълнява се тялото на цикъла поне веднъж, след което се пресмята стойността на <условие>.
Ако то е false, изпълнението на оператора do/while завършва.
В противен случай се повтарят действията:
- Изпълнение на тялото на цикъла.
- Пресмятане на стойността на <условие>, докато <условие> = true.
//Пример
int i = 2;
do {
std::cout << "Hello World\n";
i++;
} while (i < 1);
//Пример
int a = 0;
do {
std::cout << "value of a: " << a << std::endl;
a += 1;
} while (a < 20)
Важно: Тялото се изпълнява поне веднъж.
for ( <инициализация>; <условие> ; <корекция> ) {
<действия> //Тяло на цикъла
}
Семантика:
- for - запазена дума
- <инициализация> - задава начало на изпълнението, като тя се изпълнява само веднъж в началото на цикъла.
- <условие> - булеви израз.
- Ако стойността му е false изпълнението на for завършва без тялото на цикъла да се изпълни.
- Ако стойността му е true се повтарят следните действия:
- изпълнение на тялото на цикъла.
- корекция/актуализация.
- пресмятане на стойността на условие, докато е true.
- Ако стойността му е false изпълнението на for завършва без тялото на цикъла да се изпълни.
Задача 1: Да се напише програма, която приема поток от числа. Числата се събират, докато не срещне числото 0.
Тогава трябва да се отпечата акумулираният резултат и програмата да приключи.
Вход: 1 2 3 4 5 6 0; Изход: 21
Вход: 9 9 1 0; Изход: 19
Вход: 5 4 3 0; Изход: 12
Задача 2: Да се напише програма, която приема цяло положително число, обръща го и го увеличава с 1.
Вход: 123; Изход: 322
Вход: 24689; Изход:98643
Задача 3: Напишете програма, която приема цяло число и връща най-често срещаната цифра. Ако има няколко най-често срещани, то да се отпечата най-малката.
Вход: 2881, Изход: 8
Вход: 456, Изход: 4
Задача 4: Напишете програма, която приема две естествени числа и връща най-големият им общ делител.
Вход: 16 24; Изход: 8
Задача 5: Напишете програма, която приема две естествени числа и връща най-малкото им общо кратно.
Задача 6: Напишете програма, която приема естествено число и връща дали числото е просто.
Вход: 17; Изход: Prime
Вход: 25; Изход: not prime
Задача 7: Напишете програма, която приема естествено число и отпечатва разбиването му на прости множители, сортирани низходящо.
Вход: 50; Изход: 5^2 2^1