- Шарт операторининг яна бир кўриниши switch тармоқланиш оператори бўлиб, унинг синтаксиси қуйидагича:
- switch (<ифода>)
- {
- case <ўзгармас ифода1> : <операторлар гуруҳи1>; break;
- case <ўзгармас ифода2> : <операторлар гуруҳи2>; break;
- …
- case <ўзгармас ифодаn> : <операторлар гуруҳи n>; break;
- default : <операторлар гуруҳи n+1>;
- }
Бу оператор қуйидагича амал қилади: - Бу оператор қуйидагича амал қилади:
- Биринчи навбатда <ифода> қиймати ҳисобланади, кейин бу қиймат case калит сўзи билан ажратилган <ўзгармас ифодаi> билан солиштирилади.
- Агар улар устма-уст тушса, шу қатордаги ‘:’ белгисидан бошлаб, токи break калит сўзигача бўлган <операторлар гуруҳи i> бажарилади ва бошқарув тармоқланувчи оператордан кейин жойлашган операторга ўтади.
- Агар <ифода> бирорта ҳам <ўзгармас ифодаi> билан мос келмаса, қурилманинг default қисмидаги <операторлар гуруҳиn+1> бажарилади.
- Шуни қайд этиш керакки, структурада default калит сўзи фақат бир марта учраши мумкин
Мисол келтирамиз - Мисол учун, кириш оқимидан
- “Jarayon davom etilsinmi?” сўровига фойдаланувчи томонидан жавоб олинади.
- Агар ижобий жавоб олинса, экранга
- “Jarayon davom etadi!”
- хабари чоп этилади ва программа ўз ишини тармоқланувчи оператордан кейинги операторларни бажариш билан давом эттиради, акс ҳолда
- “Jarayon tugadi!”
- жавоби берилади ва программа ўз ишини тугатади.
- Бунда, фойдаланувчининг ‘у’ ёки ’У’ жавоблари жараённи давом эттиришни билдиради, бошқа белгилар эса жараённи тугатишни англатади.
Мисол - #include
- int main()
- {
- char Javob=’ ’;
- cout<<”Jarayon davom etsinmi? (‘y’,’Y’): ”
- cin>>Javob;
- switch(Javob)
- {
- case ‘Y’:
- case ‘y’:
- cout<<”Jarayon davom etadi!\n”;
- break;
- default:
- cout<<”Jarayon tygadi!\n”;
- return 0;
- }
- ... // жараён
- return 0;
- }
Мисол тавсифи - Умуман олганда, тармоқланувчи операторда break ва default калит сўзларини ишлатиш мажбурий эмас. Лекин бу ҳолатда оператор мазмуни бузи-лиши мумкин.
- Масалан, default қисми бўлмаган ҳолда, агар <ифода> бирорта <ўзгармас ифодаi> билан устма-уст тушмаса, оператор ҳеч қандай амал бажармасдан бошқарув тармоқланувчи оператордан кейинги операторга ўтади.
- Агар break бўлмаса, <ифода> бирорта <ўзгармас ифода i> билан устма-уст тушган ҳолда, унга мос келувчи операторлар гуруҳини бажаради ва «тўхтамасдан» кейинги қатордаги операторлар гуруҳини ҳам бажаришда давом этади.
Мисол тавсифи - Масалан, юқоридаги мисолда break оператори бўлмаса ва жараённи давом эттиришни тасдиқловчи (‘Y’) жавоб бўлган тақдирда экранга
- Jarayon davom etadi!
- Jarayon tygadi!
- хабарлари чиқади ва программа ўз ишини тугатади (return операторининг бажарилиши натижасида).
Мисол келтирамиз - Тармоқланувчи оператор санаб ўтилувчи турдаги ўзгармаслар билан биргаликда ишлатилганда самара беради.
- Қуйидаги программада ранглар гаммасини тоифалаш масаласи ечилган.
- #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” хабари чоп этилади ва программа ўз ишини тугатади.
Масала берилиши - Бутун турдаги ихтиёрий иккита сонлар берилган.Бу сонлар устида танланган арифметик амалга (‘+’,‘-‘,‘*’,’/’) мос хисоблаш амалга оширилсин. Агар арифметик амаллардан фаркли белги киритилса,бу хакда хабар берилсин ва амални кайта киритиш таклиф килинсин.
Программа матни. - #include
- #include
- int main()
- {
- int a,b;
- float natija;
- char amal;
- cout<<"a=";cin>>a;
- cout<<"b=";cin>>b;
- nishon:
-
Программа давоми - cout<<"Arifmetik amallar:";
- cout<<"+: c=a+b";
- cout<<"-: c=a-b";
- cout<<"*: c=a*b";
- cout<<"/: c=a/b";
- cout<<"Amalni tanlang(+,-,*,/): ";
- cin>>amal;
Программа давоми - switch(amal)
- {
- case '+':natija=a+b;break;
- case '-':natija=a-b;break;
- case '*':natija=a*b;break;
- case '/':natija=a/b;break;
- default: cout<<"bunday amal yoq"; goto nishon;
- }
- cout<<”Hisoblash natijasi=”<
- return 0;
- }
Do'stlaringiz bilan baham: |