if (shart)
{
koʻrsatmalar
}
2) if-else sintaksisi:
if (shart)
{
koʻrsatma 1
}
else
{
koʻrsatma 2
}
yoki koʻproq shartlar kerak boʻlsa:
if (shart)
{
koʻrsatma 1
}
else
if
{
koʻrsatma 2
}
else
{
68
koʻrsatma 3
}
…
3) if-else bloklarini qurish ajralmas. Agar u kodda boʻlsa, uni boshqa kod bilan
ajratib boʻlmaydi.
Misol uchun:
if (shart)
{
koʻrsatma
}
cout << “Salom!”; //Xatolik
else
{
koʻrsatmalar
}
4) if shart operatorining ishlash prinsipi - qavs ichidagi shart rost boʻlsa, u holda
blok kodi bajariladi. Agar yolgʻon boʻlsa, unga e'tibor berilmaydi va dasturning
bajarilishi if bloki ostidagi kod satridan boshlanadi.
5) qavs ichidagi tanlov operatorining holati normal boʻlishi mumkin: if
(variable > 0) yoki birlashtirilgan: if (variable > 0 && variable < 100). Ikkala shart
ham rost boʻlsa, birlashtirilgan shart rost boʻladi.
6) Shart operatorining sharti arifmetik ifoda boʻlishi mumkin: if (variable1 -
variable2). if blokining kodi, agar hisoblash natijasi 0 boʻlmasa bajariladi. Masalan:
if (5 - 7), if (2 + 5). Ammo agar (2 -2) boʻlsa - blok kodi e'tiborga olinmaydi.
7) agar if, else if, yoki else bloklarida faqat bitta kod satri boʻlsa, figurali
qavslardan foydalanishga hojat yoʻq. Ammo yangi boshlovchilar uchun, har doim
figurali qavslardan foydalanish maqsadga muvofiq.
Ternar operatori. Odatda, ternar operatori shart va shartni tekshirish
natijasida bajariladigan kod juda oddiy boʻlgan hollarda qoʻllaniladi. Masalan,
foydalanuvchidan dasturda ishlashni davom ettirishni xohlaysizmi yoki undan
chiqishni xohlaysizmi deb soʻrashimiz kerak boʻlsa. Ternar operatorining sintaksisi
quyidagi shaklda boʻladi:
shart ? buyruq_1 : buyruq_2;
Birinchidan, biz kerakli shartni yozib, ortiga soʻroq belgisini ? qoʻyishimiz
kerak. Soʻngra, xuddi shu qatorda, savol belgisidan keyin, agar shart toʻgʻri boʻlsa,
bajariladigan birinchi oddiy buyruqni (kodni) yozamiz. Ushbu buyruqdan keyin ikki
nuqta (:) qoʻying va ikkinchi buyruqni (kodni) yozing. Ushbu ikkinchi buyruq, ikki
nuqta qoʻyilgandan keyingina, shart yolgʻon boʻlsa bajariladi.
69
Misol. Aytaylik, foydalanuvchi bankomatdan pul oladi. U ushbu
operatsiyani amalga oshirdi va ekranda savol paydo boʻlishi kerak: "Boshqa
operatsiyani bajarishni xohlaysizmi?" Foydalanuvchiga tanlov qilish kerak (ha
yoki yoʻq) va tegishli tugmani bosing.
Ushbu tanlovni quyidagi dasturda tashkil etamiz:
#include
using namespace std;
int main()
{
bool variable = true;
cout << "Karta hisob varagʻida ba’zi operatsiyalarni amalga oshirish
...\n";
cout << "Boshqa operatsiyani bajarishni xohlaysizmi (1 - ha, 0 - yoʻq)?";
cin >> variable;
variable == 1 ? cout << "Operatsiyani tanlang!\n..........\n\n" : cout <<
"Xayr! Chekingizni olishni unutmang!\n\n";
return 0;
}
3-misol. Foydalanuvchi kiritgan ikkita qiymatning minimal va maksimal sonini
aniqlash uchun ternar operatoridan foydalanish.
#include
using namespace std;
int main()
{
int firstDigit = 0;
int secondDigit = 0;
int max = 0;
int min = 0;
cout << "Kiriting firstDigit - birinchi son:";
cin >> firstDigit;
cout << "Kiriting secondDigit - ikkinchi son:";
cin >> secondDigit;
70
max = (firstDigit > secondDigit) ? firstDigit : secondDigit;
min = (firstDigit < secondDigit) ? firstDigit : secondDigit;
cout << "Maksimum = " << max << endl;
cout << "Minimum = " << min<< endl;
return 0;
}
Dastur natijasi:
Shart operatorini ichma-ich qoʻllash. Hayotda boʻlgani kabi, kompyuter
dasturlarida ham ba’zan ikkitadan ortiq variantni tanlashingiz kerak. Bunday
ehtiyojlarni qondirish uchun C++da if else kengaytirilishi mumkin. Yuqorida aytib
oʻtilganidek, boshqasidan keyin bitta bayonot boʻlishi kerak, bu ham bayonot bloki
boʻlishi mumkin. Agar else oʻzi bitta bayonot boʻlsa, u yana quyidagilarni bajarishi
mumkin:
if (ch == 'А')
a++;
else
if (ch == 'В')
b++;
else
s++;
Agar ch oʻzgaruvchisi 'A’ ga teng boʻlmasa, dastur boshqa satrga oʻtadi. U
yerda ikkinchi if-else buyrugʻi ushbu alternativani yana ikkita variantga ajratadi.
C++ning erkin formatlash xususiyati ushbu elementlarni oʻqilishi mumkin boʻlgan
tartibda joylashtirishga imkon beradi:
if (ch == 'A’)
a++;
else if (ch == 'В')
b++;
else
71
s++;
Bu butunlay yangi boshqaruv tuzilmasiga oʻxshaydi – if else if else. Ammo
bu aslida bitta if else operatori boshqasining tarkibiga joylashtirilgan. Qayta koʻrib
chiqilgan format yanada aniqroq koʻrinadi va hatto barcha muqobil variantlarni
baholashga imkon beradi. Ushbu qurilish hali ham bitta operator sifatida koʻrib
chiqilmoqda.
5.2. Tanlash operatori. switch operatori
Shart operatorining yana bir koʻrinishi switch tarmoqlanish operatori
boʻlib, uning sintaksisi quyidagicha:
switch () {
case : ; break;
case : ; break;
…
case : ; break;
default : ;
}
Birinchi navbatda switch kalit soʻzini va undan keyin tekshiriluvchi ifodani
yozamiz. Odatda bu ifoda faqat bitta oʻzgaruvchini aks ettiradi, lekin u murakkabroq
boʻlishi mumkin, masalan, nX + 2 yoki nX – nY koʻrinishida. Ushbu ifodaning
yagona cheklovi shundaki, u bir turdagi ma’lumotlar turi boʻlishi kerak (ya’ni, char,
short, int, long, long long). Haqiqiy sonlardan yoki bir turda boʻlmagan ma’lumot
turidagi oʻzgaruvchilaridan foydalanish mumkin emas.
Switch bayonotidan keyin blok e'lon qilamiz. Blok ichida ifoda boʻyicha
tekshirmoqchi boʻlgan barcha qiymatlarni aniqlash uchun nishonlardan
foydalanamiz.
Birinchi turdagi nishon bu case kalit soʻzi yordamida e'lon qilingan va doimiy
ifodaga ega boʻlgan case (yoki shunchaki "keys").
Case kalit soʻzidan keyingi doimiy ifoda switch kalit soʻzi yonidagi ifoda bilan
tengligi tekshiriladi. Agar ular mos keladigan boʻlsa, unda tegishli holatdagi kod
bajariladi.
Shunisi e'tiborga loyiqki, barcha ifodalar noyob qiymatlarni qabul qilishi kerak.
Ya’ni quyidagicha kod yoz olmaymiz:
switch(a)
{
case 1: cout<
case 1: cout<
72
}
Nishonning ikkinchi turi default kalit soʻz yordamida e'lon qilingan jimlik
boʻyicha yorliq („default case" deb nomlanadi). Ushbu nishon ostidagi kod
bajarilgan boʻlsa, agar biron-bir holat switch ifodasiga mos kelmasa bundagi
operatorlar bajariladi. Bitta kalitda bitta default boʻlishi mumkin. Odatda bu kalit
blokida eng oxirgisi deb e'lon qilinadi.
Umuman olganda, switch operatorida break va default kalit soʻzlarini ishlatish
majburiy emas. Lekin bu holatda operator mazmuni buzilishi mumkin. Masalan,
default qismi boʻlmagan holda, agar birorta
i
> bilan
ustma-ust tushmasa, operator hech qanday amal bajarmasdan boshqaruv switch
operatordan keyingi operatorga oʻtadi. Agar break boʻlmasa, birorta
i
> bilan ustma-ust tushgan holda, unga mos keluvchi operatorlar
guruhini bajaradi va «toʻxtamasdan» keyingi qatordagi operatorlar guruhini ham
bajarishda davom etadi.
Case nishonlari tarkibida bir nechta operatorlar guruhini bir vaqtda bajarish
mumkin.
#include
using namespace std;
int main()
{
int a;
a=1;
switch(a)
{
case 1:
cout<
cout<<2*a<
cout<<3*a<
break;
case 2:
cout<
cout<
cout<
break;
default : cout<<"Boshqa son";
}
return 0;
}
73
case tarkibida oʻzgaruvchini e’lon qilish va uni initsializatsiyalash. case
nishoni tarkibida oʻzgaruvchini e’lon qilish mumkin, lekin oʻzgaruvchiga
boshlangʻich qiymat berish (initsializatsiyalash) mumkin emas.
Bunday qiymat berish taqiqlanadi.
#include
using namespace std;
int main()
{
int a;
a=1;
switch(x)
{
case 1:
int z; //Mumkin
z=5; //Mumkin
break;
case 2:
z=6; //z tepada e'lon qilingan
break;
case 3:
int c=4; //Mumkin emas
break;
default:
cout<<"default case"<
break;
}
return 0;
}
Misol. Uchburchakning uch xil holati berilgan. 1-holat: uchta tomon. 2-holat:
ikkita tomon va ular orasidagi burchak. 3-holat: asos va balandlik. Foydalanuvchi
kiritgan holatga qarab uchburchak yuzini topish dasturini tuzing.
#include
using namespace std;
int main()
{
float a, b, c, h, alfa;
float p;
74
float S;
int k;
cout << "Holatni kiriting: ";
cin >> k;
switch (k)
{
case 1: {
cout << "Uchburchakning uchta tomonini kiriting:" << endl;
cout << "===============================" << endl;
cout << "a="; cin >> a;
cout << "b="; cin >> b;
cout << "c="; cin >> c;
if ((a + b > c) && (a + c > b) && (b + c > a))
{
p = (a + b + c) / 2;
S = sqrt(p * (p - a) * (p - b) * (p - c));
cout << "Uchburchak yuzasi: S=" << S;
}
else
cout << "Bunday tomonli uchburchak mavjud emas!" <<
endl;
}
break;
case 2: {
cout << "Uchburchakning ikki tomoni va ular orasidagi
burchakni kiriting:" << endl;
cout << "===============================" << endl;
cout << "a="; cin >> a;
cout << "b="; cin >> b;
cout << "alfa="; cin >> alfa;
if ((a > 0) && (b > 0) && (alfa != 0))
{
S = a * b * sin(alfa * 3.14 / 180) / 2;
cout << "Uchburchak yuzasi: S=" << S;
}
else
cout << "Uchburchak tomonlari va ular orasidagi burchak
bunday qiymatga ega bo'lmaydi";
}
break;
case 3: {
cout << "Uchburchakning asosi va balandligini kiriting:" <<
endl;
cout << "===============================" << endl;
75
cout << "a="; cin >> a;
cout << "h="; cin >> h;
if ((a > 0) && (h > 0))
{
S = a * h / 2;
cout << "Uchburchak yuzasi: S=" << S;
}
else
cout << "Uchburchak asosi va balandligi bunday
qiymatga ega bo'lmaydi!";
}
break;
default:
{
cout << "Siz boshqa raqam kiritdingiz. 1,2,3-raqamlarini
kiriting";
}
break;
}
return 0;
}
5.3. Shartsiz oʻtish operatori va uning ishlash prinsipi
Nishon - bu davomida ikkita nuqta (‘:’) qoʻyilgan identifikator.
Nishon bilan qandaydir operator belgilanadi va keyinchalik, programmaning
boshqa bir qismidan unga shartsiz oʻtish amalga oshiriladi. Nishon bilan
har qanday operator belgilanishi mumkin, shu jumladan e’lon operatori va
boʻsh operatori ham. Nishon faqat funksiyalar ichida amal qiladi.
Nishonga shartsiz oʻtish goto operatori yordamida bajariladi. goto
operatori orqali faqat uning oʻzi joylashgan funksiya ichidagi operatorlarga
oʻtish mumkin. goto operatorining sintaksisi quyidagicha:
goto ;
Ayrim hollarda, goto operatorining «sakrab oʻtishi» hisobiga xatoliklar
yuzaga kelishi mumkin. Masalan,
int i=0;
i++; if(i)goto m; int j;
m:j+=i;
operatorlarining bajarilishi xatolikka olib keladi, chunki j e’lon qilinmay
qoladi.
Shartsiz oʻtish operatori programmani tuzishdagi kuchli va shu bilan
birgalikda xavfli vositalardan biri hisoblanadi. Kuchliligi shundaki, uning
76
yordamida algoritmning «boshi berk» joylaridan chiqib ketish mumkin.
Ikkinchi tomondan, bloklarning ichiga oʻtish, masalan, takrorlash
operatorlarini ichiga «sakrab» kirish kutilmagan holatlarni yuzaga keltirishi
mumkin. Shu sababli, imkon qadar goto operatoridan foydalanmaslik kerak,
ishlatilgan taqdirda ham quyidagi qoidaga amal qilish zarur: «blok ichiga,
Do'stlaringiz bilan baham: |