Програмування С, С++теорія та практика (частина 1)
1.6.5 Оператор циклу Тог
Оператор /ог забезпечує циклічне повторення деякого оператора певне число разів. Оператор, який повторюється називається тілом циклу. Повторення циклу звичайно здійснюється з використанням деякої змінної (лічильника), яка змінюється при кожному виконанні
40 Розділ 1. Мова програмування Сі
тіла циклу. Повторення завершується, коли лічильник досягає заданого значення.
Синтаксис оператора:
їог([ініціалізація];[перевірка_умови];[нове_значення]) оператор;
|
Рис. 1.9. Синтаксис оператора їог |
Звернемо увагу на те, що кожен з трьох виразів може бути відсутнім. Перший вираз служить для ініціалізації лічильника, другий
- для перевірки кінця циклу, а третій вираз - для зміни значення лічильника. Формально роботу циклу можна описати такими кроками:
1. якщо перший вираз (ініціалізація) присутній, то він
обчислюється;
2. обчислюється вираз умови (якщо він присутній). Якщо умова
виробляє значення 0, тобто вона невірна, цикл припиняється, у
протилежному випадку він буде продовжений;
3. виконується тіло циклу;
4. якщо присутній вираз зміни лічильника, то він обчислюється;
5. надалі перехід до пункту під номером 2.
Поява у будь-якому місці циклу оператора сопііпие призведе до негайного переходу до пункту 4.
Приклад використання циклу /ог :
/* друк парних чисел у проміжку від 500 до 0 */
#іпс1игі.е <з'Ьгііо.Ь>
Vоігі. таіп ^оігі.) {
Іопд і;
£ог(і=500;і>=0;і-=2) ргіп££ ("\п%1гі." ,і) ; ргіп-Ь£("\п") ;
}
Для того, щоб продемонструвати гнучкість даного різновиду циклу, розглянемо інші варіанти цієї ж програми. У першому випадку
представимо весь перелік обчислень лише в одному операторі /ог, за яким слідує порожній оператор:
#іпс1ийе <з,Ьгііо.Ь> іп£ таіп^оій.)
{
1опд і;
£ог(і=500;і>=0;ргіп'Ь£("\п%1й" ,і),і-=2) ;
}
Другий варіант використовує оператор сопґіпие:
#іпс1ийе <з,Ьгііо.Ь> іп£ таіп^оій.)
{
1опд і;
£ог(і=500;і>=0;і--) і£ (і%2 == 1) сопгіпие; еізе
ргіп££("\п %1гі", і ); ргіп££("\п");
}
Справа програміста, який з варіантів обрати - надати перевагу більш стислому викладанню або навіть взагалі скористатися іншим оператором. Цікаво, що різновид циклу /ог можна звести до циклу м>кіїе наступним чином:
£ог(виразі;вираз2;виразЗ) оператор;
/* далі - аналогічний цикл мЬіІе */ вираз1;
мЬіІе (вираз2)
{
оператор; виразЗ;
}
Інша справа - чи є в такій заміні необхідність? Не завжди гнучкість переважає стислість та навпаки. Справа за конкретною ситуацією. Зрештою, вибір циклу може бути й справою смаку конкретного програміста - саме йому вирішувати, які оператори застосувати для вірного запису того чи іншого алгоритму.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

