Агар текширилаётган шарт нисбатан содда бўлса, шарт операторининг ?: қўринишини ишлатиш мумкин. Бу қурилма қуйидаги кўринишга эга:
<шарт ифода> ? <ифода>1 : <ифода>2;
if шарт операторига ўхшаш ҳолда бу шарт оператори қуйидагича амал қилади: агар <шарт ифода> рост (true) бўлса <ифода>1 бажарилади, акс ҳолда <ифода>2. Одатда ифодалар қийматлари бирорта ўзгарувчига ўзлаштирилади.
Мисол тариқасида иккита бутун сон максимумини топиш масаласини кўрайлик.
#include
using namespace std;
int main()
{
int a,b,c;
cout <<"a va b sonlar maksimumini topish dasturi! ";
cout<<"\n a - qiymatini kiriting: ";
cin>>a;
cout<<"\n b - qiymatini kiriting: ";
cin>>b;
c = (a>b) ? a : b;
cout <<"\n sonlar maksimumi: "<
return 0;
}
Программадаги шарт оператори қиймат бериш операторининг таркибига кирган бўлиб, a ўзгарувчи қийматини b ўзгарувчи қийматидан катталиги текширилади, агар шарт рост бўлса с ўзгарувчисига а ўзгарувчи қийматини, акс ҳолда b ўзгарувчи қийматини ўзлаштиради ва с қиймати чоп этилади.
?: операторининг қиймат қайтариш хоссасидан фойдаланган ҳолда, уни бевосита cout кўрсатмасига қўйиш орқали ҳам қўйилган масалани ечиш мумкин:
#include
using namespace std;
int main()
{
int a,b;
cout <<"a va b sonlar maksimumini topish dasturi! ";
cout<<"\n a - qiymatini kiriting: ";
cin>>a;
cout<<"\n b - qiymatini kiriting: ";
cin>>b;
cout <<"\n sonlar maksimumi "; cout << ((a>b) ? a : b);
return 0;
}
switch оператори
Шарт операторининг яна бир кўриниши switch тармоқланиш оператори бўлиб, унинг синтаксиси қуйидагича:
switch (<ифода>)
{
case <константа ифода> :
<операторлар гуруҳи>;
break;
case <константа ифода> :
<операторлар гуруҳи>;
break;
…
default :
<операторлар гуруҳи>;
}
Бу оператор қуйидагича амал қилади: биринчи навбатда <ифода> қиймати ҳисобланади, кейин бу қиймат case калит сўзи билан ажратилган <константа ифода> билан солиштирилади. Агар улар устма-уст тушса, ‘:’ белгисидан кейинги break калит сўзигача бўлган <операторлар гуруҳи> бажарилади ва бошқарув тармоқланувчи оператордан кейинги операторга ўтади. Агар <ифода> бирорта ҳам <константа ифода> ифода билан мос келмаса, қурилманинг default қномидаги операторлар гуруҳи бажарилади.
Мисол учун, кириш оқимидан “Жараён давом этилсинми? ” сўровига фойдаланувчи томонидан жавоб олинади. Агар ижобий жавоб олинса, экранга “Жараён давом этади!” хабари чоп этилади ва программа ўз ишини тармоқланувчи оператордан кейин давом эттиради, акс ҳолда “Жараён тугади!” жавоби берилади ва програма ўз ишини тугатади. Бунда, фойдаланувчининг ‘у’,’У’,’h’,’H’ жавоблари жараённи давом эттиришни билдиради, бошқа белгилар эса жараённи тугатишни англатади.
#include
int main()
{
char Javob =’ ’;
cout<<”Jarayon davom etsinmi? (‘y’,’Y’,’h’,’H’): ”
cin>> Javob;
switch (Javob)
{
case ‘Y’ :
case ‘y’ :
case ‘h’ :
case ‘H’ :
cout<<”Jarayon davom etadi!\n”;
break;
default :
cout <<”Jarayon tygadi!\n”;
return 0;
}
…. // Жараён
return 0;
}
Умуман олганда, тармоқланувчи операторда break ва default калит сщзларини ишлатиш шарт эмас. Лекин бу ҳолда операторнинг мазмуни бузилиши мумкин. Масалан, default қноми бўлмаганда, агар <ифода> бирорта <константа ифода> билан устма-уст тушмаса, оператор ҳеч қандай амал бажармасдан бошқарув навбатдаги операторга ўтиб кетади. Агар break бўлмаса программа “тўхтамасдан” кейинги қатордаги операторларни бажаришга ўтиб кетади. Масалан, юқоридаги мисолда break оператори бўлмаса ва жараённи давом эттириш ҳақида ижобий жавоб бўлган тақдирда экранга
Jarayon davom etadi!
Jarayon tygadi!
хабарлари чиқади ва программа ўз ишини тугатади (return 0 операторини бажариш натижасида).
Тармоқланувчи оператор санаб ўтилувчи турдаги константалар билан биргаликда ишлатилганда самарали бўлади. Қуйидаги программада ранглар гаммасини тоифалаш масаласи ечилган.
#include
int main()
{
enum Ranglar {Qizil, Tuq_sariq, Sariq, Yashil, Kuk, Zangori, Binafsha};
Ranglar Rang;
…
switch (Rang)
{
case Qizil:
case Tuq_sariq :
case Sariq :
cout << “Issiq gamma tanlandi.\n”;
break;
case Yashil :
case Kuk :
case Zangori:
case Binafsha :
cout << “Sovuq gamma tanlandi.\n”;
break;
default :
cout <<”Kamalak bunday rangga ega emas.\n”;
}
return 0;
}
Программа бажарилишида бошқарув тармоқланувчи операторга келганда, Rang қиймати Qizil ёки Tuq_sariq ёки Sariq бўлса, ‘Issiq gamma tanlandi’ хабари, агар Rang қиймати Yashil ёки Kuk ёки Zangori ёки Binafsha бўлса, экранга ‘Sovuq gamma tanlandi’ хабари, агар Rang қиймати санаб ўтилган қийматлардан фарқли бўлса, экранга ‘Kamalak bunday rangga ega emas” хабари чоп этилади ва программа ўз ишини тугатади.
Do'stlaringiz bilan baham: |