§ 4. Аператар галінавання

4.3. Аператар множнага выбару

 

Аператар if дазваляе выбіраць адзін з двух альтэрнатыўных варыянтаў. Калі патрабуецца выбар з трох і больш варыянтаў, то выкарыстанне некалькіх аператараў if можа пагаршаць чытальнасць кода праграмы.

У С++ яшчэ маецца аператар множнага выбару switch, які дазваляе выбраць адзін варыянт з некалькіх у залежнасці ад значэння выразу і забяспечвае множнае разгалінаванне ў праграме. Часта выкарыстанне аператара switch больш эфектыўнае, чым выкарыстанне некалькіх аператараў if. Фармат каманды:

switch ( <пераменная> ) 

{

  case канстанта: {

    каманда(ы)1

    break;

  }

  case канстанта: {

    каманда(ы)2

    break;

  }

...

  default: {

    каманда(ы)n

    break;

  }

}

Пераменная па чарзе параўноўваецца са значэннямі канстант, апісанымі пасля ключавога слова case. Пасля двукроп’я знаходзіцца код, які будзе выкананы ў выпадку, калі пераменная апынулася роўнай бягучаму значэнню. Каманда break неабходна для таго, каб перапыніць выкананне switch і не правяраць пераменную на супадзенне з астатнімі значэннямі.

У блоку default прапісваюцца каманды, якія будуць выконвацца ў тым выпадку, калі ніводнага супадзення пераменнай з пералічанымі значэннямі не было выяўлена. Гэты блок можа быць прапушчаны.

Фігурныя дужкі могуць быць прапушчаны, калі ў блоку выконваецца толькі адна каманда.

Прыклад 4.6. Дадзена значэнне n (1 ≤ n ≤ 7), якое з’яўляецца нумарам дня тыдня. Напісаць праграму, якая вызначыць па значэнні n, выхадны гэты дзень ці рабочы.

Этапы выканання задання

I.  Зыходныя даныя: n (нумар дня тыдня).

II. Вынік: паведамленні — «рабочы», «выхадны» або «памылковы нумар».

III. Алгарытм рашэння задачы.

1. Увод зыходнага ліку.
2. Выбар значэння n з 7 магчымых
:

2.1. Калі значэнні n роўны 1, 2, 3, 4, 5 — выводзіцца паведамленне «рабочы».
2.2. Калі значэнні n роўны 6, 7 — выводзіцца паведамленне «выхадны».
2.3. Для любога іншага ліку — выводзіць паведамленне «памылковы нумар»..

3. Вывад выніку.

VI. Апісанне пераменных: n – int.

Трэба памятаць пра некаторыя асаблівасці аператара switch:

  • switch адрозніваецца ад if тым, што ён можа выконваць толькі аперацыі праверкі строгай роўнасці, у той час як if можа вылічваць лагічныя выразы і адносіны;
  • у адным аператары switch не можа быць двух канстант, якія маюць аднолькавыя значэнні;
  • аператар switch, які ўключае ў сябе іншы аператар switch, можа змяшчаць аднолькавыя канстанты;
  • адно і тое ж дзеянне можа быць выканана для розных значэнняў канстант. Каманды запісваюцца пасля апошняга выбару. Для ўсіх папярэдніх спіс каманд пусты.

case канстанта1:

case канстанта2:{

  каманда(ы)1

  break;

}

З тэхнічнага пункту гледжання аператары break з’яўляюцца неабавязковымі ў аператары switch. Яны выкарыстоўваюцца для заканчэння работы паслядоўнасці каманд, якія належаць да аднаго блока, дзе адбылося супадзенне значэння пераменнай са значэннем канстанты. Калі аператар break адсутнічае, то пасля таго, як было выяўлена супадзенне, будуць выкананы ўсе астатнія каманды для кожнага выбару, апісанага пасля супадзення. Параўнанні не адбываюцца, а каманды выконваюцца паслядоўна

Прыклад 4.6.

V. Праграма:

#include <iostream>

 

using namespace std;

 

int main()

{

  setlocale(0,"");

  int n;

  cout << "Нумар дня n=";

  cin >> n;

  switch (n)

  {

    case 1:

    case 2:

    case 3:

    case 4:

    case 5:

  {

      cout << "рабочы" << endl;

      break;

  }

    case 6:

    case 7:

  {

      cout << "выхадны" << endl;

      break;

  }

    default:

    cout << "памылковы нумар" << endl;

  }

  return 0;

}

VI. Тэсціраванне:

Прыклад работы праграмы, у якой знялі аператар break: