Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 21-24.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
181.25 Кб
Скачать

Вкладені розгалуження 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 використовувати не обов’язково.