Shart Operatori (?:) yoki Uchlik Operator
C++ agar-bo‘lsa-aks holda shaklidagi ma’lum ifodalarni qayta ishlovchi juda kuchli va qulay operatorga ega. Shart operatori so‘roq (?) va ikki nuqta (:) belgilaridan iborat. U shuningdek, uchta qiymat bilan ishlagani uchun uchlik operator ham deb nom olgan. Shart operatorining umumiy ko‘rinishi quyidagicha:
? : ;
yoki
1-ifoda ? 2-ifoda : 3-ifoda;
Bu yerda 1-ifoda hisoblanadi. Agar u rost bo‘lsa, shartli ifoda 2-ifoda qiymatini qabul qiladi va yolg’on bo‘lsa, shartli ifoda qiymati sifatida 3-ifoda olinadi. Bu 8.1-rasmda tasvirlangan:
Masalan,
int x,y,max;
cout << "Ikkita butun son kiriting\n";
cin>>x>>y;
max = (x>y) ? x : y;44
Dastlab x > y ifodasi hisoblanadi. Agar x ning qiymati y ning qiymatidan katta bo‘lsa, u holda x ning, aks holda y ning qiymati max ga o‘zlashtiriladi. Shart operatoridan foydalanishda yagona cheklov shuki, so‘roq (?) va ikki nuqta (:) belgilaridan so‘ng faqat bittadan ifoda ishlatishingiz mumkin.
Masalan,
int yosh;
cout << "Yoshingizni kiriting\n";
cin >>yosh;
(yosh> = 18) ? cout<< "\nSiz ovoz berishingiz kerak\n" : cout << "\nSiz ovoz bera olmaysiz\n";
Shuni esda tutish lozimki, shartli operator boshqa operatorlarga nisbatan quyi ustunlik darajasiga ega va u ba’zi holatlarda kutilmagan natijalarga olib kelishi mumkin.
Masalan,
int a,b,c;
cout << "Ikkita butun son kiriting\n";
cin>>a>>b;
c = a - b > 0 ? 10 : 5;
Bu kodda biz a dan b>0 ning rost yoki yolg’on qiymatiga qarab 10 yoki 5 qiymatni ayirishga harakat qildik. Ammo u biz hohlagan usul bilan bajarilmaydi. U quyidagicha tushuniladi:
c = (a - b) > 0 ? 10 : 5;
chunki '–' arifmetik operatori > va ? : lardan yuqori ustunlik darajasiga ega.
Shunday ekan, biz kodni quyidagicha yozishimiz kerak:
c = a - (b>0 ? 10 : 5);
Shart operatorini shuningdek, quyidagicha tushunish mumkin:
kattasi = (x >y ? (x > z ? x : z): (y > z ? y : z));
Bu yerda x>y shartning rost qiymatida (x > z ? x : z) ifoda hisoblanadi; aks holda (y > z ? y : z)) ifoda hisoblanadi.45
Shartli operator ifodaning chap tomonini ifodalaydi. ?: shartli operatorning natijasi lvalue bo‘lib, shu turdagi ikki variant (variantning rost qismi va variantning yolg’on qismi) qiymatidan birini oladi. Yuqorida aytib o‘tilganidek, lvalue qiymat o‘zlashtirishi mumkin bo‘lgan ifodadir. Bunda o‘zlashtirish operatorining chap tomoni mavjud bo‘lishi kerak. Bu qiymatning shartli ifodaga o‘zlashtirilishi mumkinligini bildiradi. Masalan,
int a,b;
float num;
cout<<"Son kiriting\n";
cin >> num;
num < 100 ? a : b = 25;
Bu yerda a yoki b o‘zgaruvchi num<100 shartiga ko‘ra initsalizatsiya qilinadi, ya’ni qiymat oladi. Agar num<100 bo‘lsa, a ga 25, aks holda b ga 25 soni o‘zlashtiriladi.
Yuqorida ta’kidlanganidek, o‘zgarmas qiymatlar va o‘zgarmas identifikatorlar lvaluega ega bo‘lmaydi va faqatgina o‘zlashtirish operatorining o‘ng tomonida hosil bo‘ladi. Quyidagi dastur kodi boshqalaridek ishlamaydi.
int a;
const int b = 10; // b lvalue emasligiga e’tibor bering
float num;
cout<<"Son kiriting\n";
cin >> num;
num<100 ? a : b=25; // = ning chap tomonida b ning ishtirok etishi noto‘g’ri
Ba’zi rost yoki yolg’on shartlarga asoslangan dastur qismlarini bajarish zarurati tug’iladi. Yuqorida eslatilganidek, C++ da ixtiyoriy nolga teng bo‘lmagan rost qiymat manfiy sonlarni o‘z ichiga oladi. 0 (nol) doimo yolg’on hisoblanadi. C++ da if va switch ifodalari tanlov asosida bajariladigan dastur qismida foydalaniladi. Shart operatori (?:) maxsus vaziyatlarda if … else ifodasi o‘rnida ishlatiladi.
100>100>
Do'stlaringiz bilan baham: |