Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Цикли. Оператори break и continue.

Въведение

Дефиниция:
Процес, който представлява многократното изпълнение на дадена последователност от операции с еднакви/различни данни.
(или неформална дефиниция): Цикъл е операция, която се повтаря N на брой пъти.

Видове:

  • Индуктивен цикличен процес - цикличен процес, при който броят на повторенията е предварително известен.
  • Итеративен цикличен процес - цикличен процес, при който броят на повторенията НЕ е известен предварително.

Цикъл while

while(<условие>) {
	 <действия>
}

Семантика:

  • while (докато) – запазена дума
  • <условие> - булев израз
  • <действия> – инициализира се кодът, който трябва да се изпълни определен брой пъти.

Пресмята се стойността на <условие>.
Ако тя е false изпълнението на оператора while завършва без да се изпълни тялото му.
Ако тя е true, изчисляването на условието и изпълнението на <действия> продължава, докато <условие> не стане false

while-loop

//Пример
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

Използва се преждевременно излизане от цикъл, преди той да е завършил изпълнението си по естествения си начин.
Ако break се извика в цикъл, цикълът се прекъсва.

Оператор continue

Използва се, когато реализираният алгоритъм изисква пропускане на част от операторите или част от кода в тялото на даден цикъл.
Пропуска всичко останало от тялото на цикъла и се преминава на следващата итерация.

//Принтиране на всички четни числа от 1 до 1000
int counter = 0;
while (counter < 1000) {
    ++counter;
    if (counter % 2 != 0) {
        continue;
    }
    std::cout << counter << “ “;
}

Пояснение:

  • Оператор continue прекратява командата в цикъла
  • За разлика от оператор break, оператор continue не прекратява цикъла, а само командата, като цикълът продължава все едно нищо не се е случило.

Цикъл do-while

do {
  <действия>
} while(<условие>);

Семантика:

  • do (направи/прави), while (докато) – запазени думи.
  • <действия> - инициализира се кодът, който трябва да се изпълни определен брой пъти.
  • <условие> - булев израз

Изпълнява се тялото на цикъла поне веднъж, след което се пресмята стойността на <условие>.
Ако то е false, изпълнението на оператора do/while завършва.
В противен случай се повтарят действията:

  • Изпълнение на тялото на цикъла.
  • Пресмятане на стойността на <условие>, докато <условие> = true.

do-while-loop

//Пример
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)

Важно: Тялото се изпълнява поне веднъж. do-while-vs-while-loop

Цикъл for

for ( <инициализация>; <условие> ; <корекция> ) {
    <действия> //Тяло на цикъла
}

Семантика:

  • for - запазена дума
  • <инициализация> - задава начало на изпълнението, като тя се изпълнява само веднъж в началото на цикъла.
  • <условие> - булеви израз.
    • Ако стойността му е false изпълнението на for завършва без тялото на цикъла да се изпълни.
    • Ако стойността му е true се повтарят следните действия:
      • изпълнение на тялото на цикъла.
      • корекция/актуализация.
      • пресмятане на стойността на условие, докато е true.

for-loop

Задачи

Задача 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