
- •Операції відношення
- •Цикл for
- •Ініціалізуючий вираз
- •Умова виконання циклу
- •Інкрементуючий вираз
- •Число виконань циклу
- •Кілька операторів в тілі циклу
- •Блоки і області видимості змінних
- •Виявлення помилок
- •Варіанти циклу for
- •Кілька ініціалізуючих виразів та умов циклу
- •Цикл while
- •Кілька операторів в циклі while
- •Пріоритети арифметичних операцій і операцій відношення
- •Цикл do
- •Вибір типу циклу
- •Розгалуження
- •Умовний оператор if
- •Кілька операторів в тілі if
- •If всередині циклів
- •Оператор if...Else
- •Функція getche()
- •Умова з присвоюванням
- •Вкладені розгалуження if...Else
- •Оператор switch
- •Оператор break
- •Інший варіант програми з використання switch і ключового слова default
- •Порівняння switch I if...Else
- •Умовна операція
- •Логічні операції
- •Операція логічного і
- •Цілі величини в якості булевих
- •Інші оператори переходу
- •Оператор break
- •Оператор continue
- •Оператор goto
- •Підсумок
- •Питання
Виявлення помилок
За допомогою засобів компілятора, які дозволяють полегшити процес виявлення помилок у програмі, можна створити динамічну модель, яка ілюструє процес виконання циклу. Головним таким засобом є покрокове виконання. Деталі роботи залежать від конкретного компілятора (для Турбо-С достатньо натискати на клавішу F7). В комплексі з покроковим виконанням можна використовувати вікно спостережень Watch, до якого можна додавати значення окремих змінних і слідкувати за ним в процесі виконання кроків програми. Такий засіб дозволяє нам вчасно виявити можливість зациклювання.
Варіанти циклу for
Інкрементуючий оператор не обов’язково повинен здійснювати операцію інкрементування лічильника циклу; замість інкрементування може використовуватися будь-яка інша операція. В далі приведеній програмі в операторі циклу використовується декрементування лічильника циклу. Програма запитує значення в користувача, а потім підраховує факторіал цього числа:
#include <iostrem>
using namespace std;
int main()
{ unsigned int numb;
unsigned long fact=1;
cout<<”vvedit cile chyslo: “;
cin>>numb;
for(int j=numb;j>0;j--)
fact*=j;
cout<<numb<<”!=”<<fact<<endl;
return 0;
}
В цьому прикладі ініціалізуючий оператор присвоює змінній j значення, введене користувачем. Умовою продовження циклу є додатність значень j. Інкрементуючий вираз після кожної ітерації зменшує значення j на одиницю.
Звернемо увагу на те, що змінна j описана всередині оператору циклу:
for(int j=numb;j>0;j--)
fact*=j;
Подібна конструкція є характерною для С++ і, як правило, найзручнішою для роботи з лічильником циклу. Таке визначення змінної є найближчим до місця її використання. Змінна, описана в операторі циклу, видима лише всередині цього циклу.
Кілька ініціалізуючих виразів та умов циклу
Замість одного ініціалізуючого виразу в операторі циклу for можна використати кілька виразів, розділених комами. Подібним чином можна використовувати більше одного інкрементуючого виразу. Тільки умова продовження циклу завжди повинна бути одна. Приведемо приклад:
for(j=0,alpha=100;j<50;j++,beta--)
{//тіло циклу
}
У даного циклу є звичайний лічильник у вигляді змінної j, але в операторі циклу, крім j, також ініціалізується змінна alpha і декрементується змінна beta. Змінні alpha i beta ніяк не зв’язані одна з одною чи зі змінною j. При використанні кількох ініціалізуючих чи чи інкрементуючих виразів необхідно розділяти їх комами.
З трьох виразів, що використовуються при заданні циклу, жоден не є обов’язковим. Допустима навіть така конструкція
for(; ; )
(так званий вічний цикл, еквівалентний циклу while з умовою продовження true).
Однак надалі ми не будемо використовувати ні множинні вирази в операторі ціклу, ні їх відсутність. Хоча подібні конструкції скорочують лістинг програми, але знижують її читабельність.
Цикл while
Цикл for виконує послідовність дій визначене число раз. Для випадку, коли це число зарані невідоме, використовується інший цикл – while.
Далі приведено приклад програми, де користувачу пропонується ввести серію значень. В тому випадку, коли введене значення рівне 0, відбувається вихід з циклу. очевидно, в цьому випадку число повторень циклу зарані невідоме.
#include <iostream>
using namespace std;
int main()
{
int n=99;
while (n!=0)
cin>>n;
cout<<endl;
return 0;
}
Зовні цикл while нагадує спрощений варіант циклу for. Він містить умову для продовження циклу, але не містить ні ініціалізуючих, ні інкрементуючих виразів. Тому змінну циклу слід ініціалізувати до початку виконання тіла циклу. Тіло циклу повинне містити оператор, що змінює значення змінної циклу, інакше цикл буде безконечним.
Тіло циклу повторюється доти, доки залишається істинним умова циклу.