Цикли и оптимизация

Определение

Циклите са конструкции, които позволяват многократно изпълнение на едно или няколко действия. Те се състоят от две основни части: условие и тяло. Тялото съдържа действията, които ще се повтарят. Всяко изпълнение на тялото се нарича итерация. Условието решава дали итерациите да продължат или не.

Употреба

Представете си, че трябва да извършите дадено действие 1000 пъти. Бихте ли писали едно и също нещо 1000 пъти? Или предпочитате да използвате конструкция от няколко блока, които ще направят повторенията вместо вас?

Ето и един пример за цикъл:

В началото програмата проверява условието. Приемаме, че то е “истина”. Влизаме в тялото на цикъла, където нашите действия се изпълняват. След тялото се връщаме отново към проверката. Ако тя все още връща "истина" програмата ще направи още една итерация. Това ще се повтаря докато проверката не се промени. Веднъж върнала "false", изпълнението продължава със следващия блок, който се сочи от "false" стрелката(в примера алгоритъмът приключва).

Тялото на може да бъде толкова сложно, колкото е необходимо. Може да го направим съвсем просто(само един блок) или може да бъде съставено от повече блокове.

Пример: Напишете алгоритъм, който показва числата от 1 до 999.

В този кратък алгоритъм тялото на цикълът е съставено от два блока: извеждането на текущото число и преминаването към следващото число. Те ще се повтарят, докато "number" не достигне 1000. Тогава за първи път проверката за край на цикъла ще върне "false" и програмата ще премине към "край".

Вместо да продължаваме с теория, урокът ни ще продължи с още примери.

Пример: Направете алгоритъм, който намира сумата на първите N числа. N се въвежда от потребителя.

Пример: Изведете на екрана първите N четни числа.

Добре е да разгледаме по-подробно последния пример. Както забелязвате тук тялото на цикъла е по-сложно. В него са включени 4 блока: пресмятане на остатък, проверка на остатъка, принтиране и инкрементиране. Ако сега ви изглежда сложно, след няколко примера ще свикнете и ще правите такива примери с лекота.

Предишната задача е интересна и от още една гледна точка – оптимизация. Нека проверим колко действия извършваме във всяка стъпка на цикъла(включително условието на цикъла):

  • Ако числото е четно: проверка(условието на цикъла) + делене + проверка + принтиране + увеличаване = 5 действия.
  • Ако числото е нечетно: проверка + делене + проверка + увеличаване = 4 действия.

Ако проверим числата от 1 до 100 ще имаме 50 четни и 50 нечетни, т.е. 250 + 200 = 450 действия.

Опитен програмист веднага ще забележи, че само около половината стъпки в цикъла са полезни. Всяко обхождане на нечетно число е излишна стъпка. От тук възниква въпросът: Възможно ли е да избегнем излишните стъпки?

Да, възможно е. Знаем, че първото четно число е 2. Знаем, че всяко следващо четно число е по-голямо с 2 от предишното. Следователно можем да променим началото и стъпката на цикъла, така че да обхождаме само четни числа и така ще подобрим ефективността на цикъла.

Нека отново сметнем колко действия ще се извършат. Всяка стъпка на цикъла извършва:

  • проверка (условие на цикъла) + извеждане + увеличаване = 3 действия.

Ако отново проверяваме числата от 1 до 100. Ще имаме два пъти по-малко стъпки, и всяка стъпка ще има само 3 действия. Следователно ще имаме 50 * 3 = 150 действия.

С малко оптимизация успяхме да съкратим дейсвията от 450 на 150!. Това е пример за много добра оптимизация. Винаги имайте едно на ум, когато боравите с цикли.

Ако искате да се занимавате сериозно с програмиране обмислете възможността да изкарате курс по програмиране. Ние предлагаме обучения, водени от програмисти с опит. При завършване на курса желаещите могат да получат държавно признати сертификати. За записвания може да погледнете в графика, а най-добрия вариант е направо да се свържете с нас.

За упражнение

  1. Напишете алгоритъм, който показва числата от 100 до 0 ( в намаляващ ред).
  2. Показва на екрана първите N числа, които се делят на 3 без остатък.

Следващ урок: Работа с масиви

Предишен урок: Оператори – аритметични и логически

Разгледайте и други уроци за начинаещи.