Печать
Категория: C++
Просмотров: 855

Дар ҳолати бисёркарата истифода шудани оператори if-else, иваз намудани он бо оператори switch-case қулайтар аст. Сохтори умумии ин оператор чунин аст:

switch(тағйирёбанда ё ифода) {
case варианти1:
оператори1;
break;
case варианти2:
оператори2;
break;
..................
case вариантиn:
операториn;
break;
default:
оператор;
}

Вақти расидани навбати коркард ба оператори switch-case қимати тағйирёбанда ё ифода муайян карда мешавад ва агар он ба варианти1 баробар бошад, қисми баъди дунуқта (:) буда, яъне оператори1 иҷро карда мешавад. Калимаи махсуси break барои аз switch-case баромадан ва гузаштан ба иҷрои оператори минбаъда зарур аст. Агар қимати тағйирёбанда ё ифода ба варианти1 баробар набошад, он бо варианти2 муқоиса карда мешавад. Агар он ба варианти2 баробар бошад, қисми баъди дунуқта (:) буда, яъне оператори2 иҷро карда мешавад. Калимаи махсуси break барои аз switch-case баромадан ва гузаштан ба иҷрои оператори минбаъда зарур аст. Яъне break аз иҷрои қисми боқимондаи оператори switch-case эмин медорад. Дар ҳолати қимати тағйирёбанда ё ифода ба ягонтои вариантҳо баробар набуданаш, қисми баъди default иҷро карда мешавад.

Тасвири сохтори идоракунандаи switch:
(интихоби маҷмӯӣ)

Ҳамчун мисол ҳисобкунаки дар namuna12.cpp сохтаамонро дигаргун мекунем:

//namuna15.cpp
#include <iostream>
#include <math>
using namespace std;
int main() {
double x,y,z;
char t,amal;
do {
cout<<"Adadi yakum: ";
cin>>x;
cout<<"Adadi duyum: ";
cin>>y;
cout<<"Amal(+,-,*,/,^,%): ";
cin>>amal;
switch(amal) {
case '+':
z=x+y;
break;
case '-':
z=x-y;
break;
case '*':
z=x*y;
break;
case '/':
if(y!=0)
z=x/y;
else
cout<<"Taksim ba nul ma'no nadorad!"<<endl;
break;
case '^':
z=pow(x,y);
break;
case '%':
z=x/100*y;
break;
}
if(y!=0 || amal!='/')
cout<<x<<amal<<y<<"="<<z<<endl;
cout<<"Boz hisob kardan mekhohed?(y-ha,n-ne) ";
cin>>t;
}while(t=='y');
return 0;
}

Дар ин мисол дар қисми case '/' пеш аз амали тақсимро иҷро кардан, ба нул баробар будани тақсимшаванда санҷида мешавад. Агар тақсимшаванда 0 бошад, азбаски тақсим ба 0 маъно надорад, амали тақсим иҷро намешавад. Дар қисми case '^' барои x-ро ба дараҷаи y бардоштан функсияи pow() аз файли сарлавҳавии -и компилятори Microsoft Visual C++ истифода шудааст, агар компилятори шумо дар ин қисми код аз хатогӣ хабар диҳад, хусусиятҳои компилятори худро омӯхта, ивази функсияи pow()-ро ёбед.

САВОЛҲО БАРОИ МУСТАҲКАМКУНӢ
1. Фарқи байни операторҳои if-else ва switch-case дар чист?
2. Оператори break кадом вазифаро иҷро мекунад?
3. Калимаи махсуси double барои чӣ лозим аст?
4. Калимаҳои инглисии if, else, switch, case, for, while, do ва break-ро ба тоҷикӣ тарҷума кунед.