4 Програмування циклічних алгоритмів

4.1 Поняття циклу

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

Багаторазово повторювані ділянки обчислень називають циклами. Один прохід циклу називається ітерацією чи повторенням. Величини, що визначають кількість повторень циклу, називають параметрами циклів. Параметрами циклу можуть бути константи та змінні, причому серед них обов'язково має бути хоча б одна змінна, значення якої змінюється при виконанні циклу. Цілочисленні параметри циклу, що змінюються з постійним кроком кожної ітерації, називаються лічильниками циклу. Обчислювальні процеси, які містять цикли, називають циклічними.

Цикли складаються з наступних частин:

підготовки до виконання циклу (привласнення параметрів циклу початкових значень);

визначення моменту завершення циклу (умови повторення циклу);

тіла циклу, що включає:

робочу частину циклу, що містить дії, безпосередньо пов'язані з розв'язанням задачі, для якої розроблено алгоритм;

підготовку даних чергового кроку циклу (зміна параметрів циклу).

Розрізняють цикли з передумовою та цикли з постумовою. У циклах з умовою умова повторення циклу перевіряється раніше, ніж виконується тіло циклу, тому можливо, що цикл не виконається жодного разу. У циклах з умовою повторення циклу перевіряється після виконання тіла циклу і підготовки даних для чергового кроку циклу, тому цикл виконується завжди хоча б один раз. У загальному вигляді цикли з передумовою та постумовою графічно можна зобразити, як показано на рис.4.1.

У мові Сі цикли програмуються за допомогою трьох різнихоператорів for, while, do-while. Можливе примусове завершення поточної ітерації та циклу загалом. Для цього є оператори break, continue, return, goto. Передавати керування ззовні всередину циклу не рекомендується.

Використання оператора goto призводить до створення заплутаного коду, що важко читається, прозваного програмістами "спагетті". Використання оператора goto серед програмістів вважається верхом непристойності. Щоб уникнути оператора goto, використовують складні умови повторення циклу.

На рис. 4.1 представлені графічні схеми циклічних алгоритмів.

а)Цикл із передумовоюб)Цикл із постумовою

передумовою

Рис.4.1Графічні схеми циклів а) - з передумовою та б) - з постумовою

4.2 Програмування циклу із заздалегідь відомим числом повторень

Оператор циклуfor– оператор циклу з параметром та передумовою. Використовується, якщо відомо кількість повторень тіла циклу, початкові значення параметрів циклу, умова повторення циклу, як змінюються параметри циклу. Загальний вигляд оператора циклуfor:

S– простий чи складовий оператор мови Сі – тіло чи робоча частина циклу;

p1– список операторів, розділених комою, що ініціюють початкові значення (як правило) параметрів циклу. Ці оператори виконуються один раз на початок виконання робочої частини циклу. Областью дії змінних, оголошених у цій частині циклу, є цикл;

p2– список операторів та виразів, що визначають умову повторення циклу. Виконується перед кожним виконанням тіла циклу. При цьому, якщо значення останнього виразу спискуp2істинно (!=0), тіло циклу виконується, а якщо помилково (==0), відбувається вихід з циклу до наступного оператора програми;

p3– список операторів та виразів зміни параметрів циклу (підготовка даних для чергового кроку циклу). Виконується після кожного виконання тіла циклу.

Приклад(обчислення та виведення квадратів чисел від 1 до 10).

for ( i=1; in для n=1, 2, …, k (k>1).

Рішення. Нехайx- значення, що шукаються. Покладемоx=1. Тоді перший ступінь двійкиxдорівнюєх2, що дорівнює21 . Якщо покластих=х*2, то другий ступінь двійки єх2, що дорівнює22. І так далі. Т. о., ступеня двійки від першої док-ої можна обчислити, виконавшикразів рекурентне співвідношеннях=х2, Поклавши попередньох=1. Реалізувати такий алгоритм можна з використанням циклу з параметром та передумовою. Графічна схема алгоритму, програма мовою Сі, результати виконання програми прик=15 зображені на рис. 2.1. Параметр циклуi(ступінь двійки) приймає значення1,2, …,к, отже, є лічильником.