Switch instruksiyasi
Ikkinchi tanlash instruksiyasi bulib xisoblanadi. Switch isntruksiyasi kup yunaltirilgan tarmoklanishni ta’minlaydi. U kupchilik alternativadan bittasini tanlashga yordam beradi. Kupyunaltirilgan testdan utkazishda ustma-ust if- instrksiyasida xam bajarsa xam bular edi, lekin switch instruksiyasi yordaminda kupchilik xolatlarda instruksiyasi effektiv yechimi buladi. Bu esa kuyidagicha ishlaydi. Ifoda ma’nosi ketma-ket konstantalar bilan solishtiriladi. Agarda, solishtirishda shartlardan bittasi tugri kelsa shu shart bilan boglik ketma-kteligi bajariladi. Switch instruksiyasining umumiy yozilish formati kuyidagicha:
Shwitch (ifoda) {
Case konstanta ! :
instruksiya ketma - ketligi
break ; case konstanta 2:
instruksiya ketma - ketligi
break ;
case konstanta 3: instruksiya
ketma - ketligi break;
default:
instruksiya ketma - ketligi break;
}
Switch isntruksiyasining ifoda elementi butunsonli tipda bulishi kerak ( masalan, Char, byte, short, yoki int) yoki string ( keyinda bu tugrisida so’z yuritamiz). Suzuvchi nukta Bilan ifodalar foydalanilmaydi. Kupincha Switch ifodasi boshkarish uchun uzgaruvchi foydaliniladi, case – konstantalar literlar bulishi shart, va ularding tiplari berilgan ifodalarning tiplari bilan tugri kelishi kerak. Va shu inobatda ikkita case- konstantalari bir Switch-isntruksiyasi bir xil ma’noga ega bulmaydi.
Default-tarmoklari instruksiyasi ketma- ket bajariladi, agarda berilgan case-konstantalarining bittayam natiyjalari switch-ifodasining ma’nolari tugri kelmasa.
Default -tarmogi shart emas. Agarda, ifodaning natiyjalari tugri kelmasa case-konstantalari ma’nosi bilan unda xech bir amal bajarilmaydi. Agarda, shunaka ma’nosi tugri kelsa, unda case –instruksiyasi tarmokiga mos instruksiyasi bajariladi, break- instruksiya uchratilmagancha.
Switch isntruksiyasi foydalanilishi kuyidagi dasturda kursatiladi.
G’G’ Switch isntruksiyasi foydalanilishi kursatamiz.
Using System;
class ShwitchDemo { public static void
Main( ) { int i;
for ( iq0 ; i<10 iQ Q )
switch ( i ) { case 0:
Console. WriteLine (( “ i “ nulga teng “ );
Break;
Case 1:
Console. WriteLine (( “ i “ nulga teng “ );
Case 2 :
Console. WriteLine (( “ i “ ikkiga teng “ );
Case 3:
Console. WriteLine (( “ i “ uchga teng “ );
Case 4:
Console. WriteLine (( “ i “ turtga teng “ );
Break;
default:
Console. WriteLine (( “ i “ teng yoki beshtan ulkan “ );
Dasturning natiyjasi kuyidagi kurinishda buladi.
Console. WriteLine (( “ i “ nulga teng “ );
Dasturning natiyjasi kuyidagi kurinishda buladi.
i nulga teng.
i ikkiga teng.
i uchga teng.
i turtga teng.
i teng yoki beshtan ulkan.
i teng yoki beshtan ulkan.
i teng yoki beshtan ulkan.
i teng yoki beshtan ulkan.
i teng yoki beshtan ulkan.
Kurib turganingizdek siklning xar bir iteratsiyasida instruksiyalar bajariladi, sase-konstantalarga mos ravishda va u i- uzgaruvchisisning ma’nosi bilan tugri keladi. Shu inobatda kolgan barcha isntruksiyalar koldiriladi. Agarda 1ga yoki beshtan ulkan bulsa, default- instruksiyalari bajariladi.
Oldingi misolda switch – instruksiyasi int tipidagi uzgaruvchi bilan boshkarilsa. Kurib turganingizdek switch – instruksiyasini bosharish uchun xoxlagan butunsonli tipdagi uzgaruvchini foydalansa buladi, va char tipindagi uzgaruchini xam.
Misol case – tarmoklarida shar- ifodani va char- konstantani foydlanilishi.
G’G’ Char tipining switch – instruksiyasini
boshkarishda foydalanilishi.
Using System;
class ShwitchDemo2 { public static void
Main( ) { char ch;
for ( ch q ‘A “; ch switch ( ch ) { case ‘A’:
Console. WriteLine ( “ch A dan iborat “ );
break;
case ‘ B ’ :
Console. WriteLine ( “ ch B dan iborat “ );
Break;
case ‘ C:
Console. WriteLine ( “ ch S dan iborat“ );
Break;
case ‘ D:
Console. WriteLine ( “ ch D dan iborat“ );
Break;
case ‘ E:
Console. WriteLine ( “ ch E dan iborat“ );
Break;
Dasturning natiyjasi kuyidagi kurinishda buladi.
Ch A dan iborat
ch B dan iborat
ch S dan iborat
ch D dan iborat
ch E dan iborat
Itibor beringki, bu misolda default-instruksiyasi yuk. Va shart emasligini unutmang. Agarda, bunga zarurot bulmasa uni koldirib ketsada buladi.
C # da xato bulibxisoblanar edi agarda, case-tarmogining bittasiga kiradigan bulsa, keyingi ketma - ketlik instruksiyasiga utadi. Bu yerda boshkarishni pastga kuchishi man etilgan koydasi bor bulishi kerak, dasturchilar aytishi buyicha. Shuning uchunda sase-ketma-ketligi break instruksiyasi bilan tugaydi.( «Yukotish» boshka chora bilan kursa xam buladi, masalan goto – instruksiyasi bilan xam, lekin eng kupincha break foydalaniladi).
Break- instruksiyasi sase- instruksiyasini yakunlavchi ketma ketlik, switch kostruksiyasida- gilarni chikishga olib keladigan, va boshkarish instruksiyasini keyingi instruksiyasiga uzatuvchi, switch konstruksiyasidan tashkarisida joylashuvchi. Default- tarmogi instruksiyasining ketma-ketligi «yukolib » ketmasligi kerak va break- instruksyasi bilan yakunlashi kerak.
Boshkarishning pastga uzatish « Yukotish» man etilgan koydasi bu S # tilining bir uzgachiligi, boshka tillarga karaganda S, SQ Q va Java. Shu aytilgan uch tillarda « sekin» keiyngi instruksiyaga utish xukkiga ega keingi case-tarmogi instruksiyasiga mos, S # tilini yaratuvchilar « yukotish» chek kuygan ikii sababiga kura. Birinchidan bu kompilyatorga optimizatsiya maksadida case-tarmogining utish tartibini bemalol uzgartsa buladi, agarda, bitta case-ketma-ketligi xech kanak tusiksiz keyingiga utishish mumki n emas. Ikkinchidan, case-ktema- ketligining anik tugatilishi talabi maxsus instruksiyasi bilan tusatdan « yukotish» imkoniyatini yukotadi dasturchining bilmasdan yaratganligidan.
« Yukotish » mann etilaginiga karamasdan boshkarishni case- ketma- ketligidan keiygiga uzatilishi mumkin, keyingi misolda kursatilagandek dasturiy kod tashkil etsak buladi, iikita yoki undan kuprok case- instruksiyalari shu tashkil etilgan kodga yunaltirilsa buladi.
G’G’ «Bush » case-instruksiyalari « yukolishi» mumkin .
Using System;
class EmptyCasesCanFall { t public
static void Main( ) {
int i;
for ( i-1; i<5; iQQ ) switch ( i ) { case 1: case 2 : case 3 :
Console. WriteLine ( “ i teng 1, 2 yoki 3“ );
break; case 4 : Console. WriteLine ( “ i teng 4 “ );
break; );
)
}
Shu dasturning natiyjasi kuyidagi kurinishda buladi.
i teng 1, 2 yoki 3
i teng 1, 2 yoki 3
i teng 1, 2 yoki 3
i teng 4
Agarda, bu misolda i uzgaruvchisi 1,2 yoki 3 teng bulsa, unda WriteLine chakirish
usuilining birinchi instruksiyasi bajariladi ( >, agarda i ma’nosi 4 ga teng bulsa, unda ikkinchi instruksiyasi bajariladi. Bu yerda kursatilgan case-tarmogi paketlashtirish
« yukotish» koydasini yukotmaydi, sababi, xamma case – instruksiyalari bita kodlik ketma – ketligini foydalanadi.
Shunday case-paketlashtirish -eng tarkalgan uslub, kodlarni birgalikda foydalanish bir
nechcha case – tarmogi bilan, kerak emas kodlangan ketma- ketlikni olib tashlash
imkoniyatiga ega.
10>
Do'stlaringiz bilan baham: |