
- •Операції відношення
- •Цикл for
- •Ініціалізуючий вираз
- •Умова виконання циклу
- •Інкрементуючий вираз
- •Число виконань циклу
- •Кілька операторів в тілі циклу
- •Блоки і області видимості змінних
- •Виявлення помилок
- •Варіанти циклу for
- •Кілька ініціалізуючих виразів та умов циклу
- •Цикл while
- •Кілька операторів в циклі while
- •Пріоритети арифметичних операцій і операцій відношення
- •Цикл do
- •Вибір типу циклу
- •Розгалуження
- •Умовний оператор if
- •Кілька операторів в тілі if
- •If всередині циклів
- •Оператор if...Else
- •Функція getche()
- •Умова з присвоюванням
- •Вкладені розгалуження if...Else
- •Оператор switch
- •Оператор break
- •Інший варіант програми з використання switch і ключового слова default
- •Порівняння switch I if...Else
- •Умовна операція
- •Логічні операції
- •Операція логічного і
- •Цілі величини в якості булевих
- •Інші оператори переходу
- •Оператор break
- •Оператор continue
- •Оператор goto
- •Підсумок
- •Питання
Вкладені розгалуження if...Else
Далі приведена програма, яка містить вкладені розгалуження if...else. Вона імітує частину «ігрового» алгоритму переміщення в різних напрямах – на північ, південь, захід, схід, починаючи рух з точки (10,10)
#include <iostream>
using namespace std;
#include <conio.h>
int main()
{char dir=’a’;
int x=10,y=10;
cout<<”Natysnit Enter dlia vyhodu \n”;
while (dir!=’\r’) // доки не натиснута клавіша Enter
{cout<<”\n Koordynaty “<<x<<” , “<<y;
cout<<”Vvedit napriamok (n,s,e,w) “;
dir =getche();
if (dir==’n’)
y--;
else
if (dir==’s’)
y++;
else
if (dir==’e’)
x++;
else
if (dir==’w’)
x--;
}
return 0;
}
Дана програма демонструє використання вкладених розгалужень. Так, оператор if знаходиться всередині оператора if...else, який в свою чергу теж є частиною розгалуження if...else. Якщо перша умова не виконується, то перевіряється друга умова аж доки не будуть перевірені всі умови.
Інколи виникають складності при встановленні відповідності між else та if – тобто плутанина в тому, до якого саме if відноситься даний блок else. Дотримуємося такого правила: else зв’язаний з останнім оператором if, який не має свого власного блоку else. Якщо ж потрібно зв’язати else з іншим if-ом, то з цією метою використовуються фігурні дужки.
Оператор switch
Якщо в нашій програмі присутнє велике дерево розгалужень і всі розгалуження залежать від значення якоїсь змінної, то можна замість східчатої послідовної конструкції if...else скористатися оператором switch. Далі приведено приклад такого розгалуження:
#include <iostream>
using namespace std;
int main()
{int speed;
cout<<”Vvedit chyslo 33, 45, 78 “;
cin>>speed;
switch(speed)
{case 33:
cout<<”Maxi single\n”;
break;
case 45:
cout<<”Single\n”;
break;
case 78:
cout<<”Old format\n”;
break;
}
return 0;
}
Програма друкує одне з повідомлень залежно від того, яке з трьох чисел - 33, 45, 78 введе користувач.
Перед входом в тіло switch програма повинна ініціалізувати змінну всередині лператора switch, оскільки це значення буде порівнюватися з константами в тілі розгалуження switch. Якщо якесь з порівнянь дасть істинний результат, то оператори після відповідного прівнянн6я будуть виконуватися, аж доки не зустрінеться ключове слово break.
Дана змінна може бути тільки цілого або символьного типу.
Оператор break
В кінці послідовності операторів кожної з case-секцій міститься оператор break. Цей оператор завершує виконання розгалуження switch. Управління в цьому випадку передається першому оператору після конструкції switch. При відсутності break управління буде передаватися операторам, що відносяться до інших гілок switch, що може привести до несподіваних. ефектів.
Інший варіант програми з використання switch і ключового слова default
Перепишемо програму вибору напрямку з використанням оператора switch
#include <iostream>
using namespace std;
#include <conio.h>
int main()
{char dir=’a’;
int x=10,y=10;
cout<<”Natysnit Enter dlia vyhodu \n”;
while (dir!=’\r’) // доки не натиснута клавіша Enter
{cout<<”\n Koordynaty “<<x<<” , “<<y;
cout<<”Vvedit napriamok (n,s,e,w) “;
dir =getche();
switch(dir)
{case ‘n’: y--; break;
case ’s’: y++; break;
case ’e’: x++; break;
case ’w’: x--; break;
case ‘\r’:cout<<”Vyhid...\n”;break;
default: cout<<”Repeat\n”;
}
}
return 0;
}
Остання вітка цієї програми починається не зі слова case, а з нового ключового слова default. Воно призначене для того, щоб програма могла виконати якусь послідовність дій в тому випадку, якщо ні одне зі значень констант не співпало зі значеннями switch-змінної. Оскільки ця секція є останньою, оператор break використовувати не обов’язково.