62
5-§. Tarmoqlanuvchi jarayonlarni dasturlash. Shart operatori va tanlash
operatori
5.1. Shart operatori
Shart operatori. Oldingi mavzularda misol tariqasida keltirilgan dasturlarda
amallar yozilish tartibida ketma-ket va faqat bir marta bajariladigan holatlar, ya’ni
chiziqli algoritmlar keltirilgan. Amalda esa kamdan-kam masalalar shu tariqa
yechilishi mumkin. Aksariyat masalalar yuzaga keladigan turli holatlarga
bogʻliq ravishda mos qaror qabul qilishni (yechimni) talab etadi. C++ tili
programmaning alohida boʻlaklarining bajarilish tartibini boshqarishga imkon
beruvchi qurilmalarning yetarlicha katta majmuasiga
ega. Masalan, programma
bajarilishining
birorta qadamida qandaydir shartni tekshirish natijasiga koʻra
boshqaruvni programmaning
u
yoki
bu
boʻlagiga
uzatish
mumkin
(tarmoqlanuvchi algoritm). Tarmoqlanishni amalga oshirish uchun shartli
operatordan foydalaniladi.
Ushbu mashgʻulotdan oldingi darslarda, dasturlash asoslarini oʻrganishga
kirish qismi sifatida qabul qilishingiz mumkin, chunki oldingi darslarda juda sodda
dasturlarni yozdik, ushbu dasturlar qandaydir tarzda ishladi, biror sodda vazifani
bajardi, lekin qanday qilib rivojlanishni tanlash qobiliyatidan mahrum edi ushbu
dasturlar. Bunday dasturlar chiziqli dasturlar deb ataladi.
Ularni tramvaylarga oʻxshatish mumkin: agar yoʻl toʻsib qoʻyilgan boʻlsa,
toʻxtab turadi. Siz oʻngga yoki chapga burila olmaysiz.
Endi, bugungi mashgʻulotdan boshlab dasturlarimiz yanada qiziqarli boʻladi.
Agar dastur kodimizda mantiqiy tanlov operatorlarini qanday ishlatishni bilib olsak
va dasturlar qandaydir savollarga ega boʻlsa, "oʻylash", tahlil qilish va qanday
harakat qilish kerakligini va qaysi "yoʻl" ni tanlashga qaror qilish imkoniyatiga ega
boʻlamiz. Ya’ni, endi dastur endi tramvay emas, balki sizning mashinangizga
aylanadi. Agar yoʻl toʻsib qoʻyilgan boʻlsa, siz toʻsiqni osongina aylanib, qayerga
borishni hal qilishingiz mumkin.
Shartli konstruksiyalar dastur oqimini shartga qarab mumkin boʻlgan
yoʻllardan biri boʻylab yoʻnaltiradi.
if konstruksiyasi. if ifodasi shartning toʻgʻriligini tekshiradi va agar u toʻgʻri
boʻlsa, u operatorlar blokini bajaradi. Ushbu operator quyidagi qisqa shaklga ega:
if (shart)
{
koʻrsatmalar;
}
Rost yoki yolgʻonni qaytaradigan shartli ifoda shart sifatida ishlatiladi. Agar
shart rost boʻlsa, unda if blokiga kiritilgan keyingi bayonotlar bajariladi. Agar shart
63
yolgʻon boʻlsa, unda keyingi bayonotlar bajarilmaydi. Koʻrsatmalar bloki figurali
qavslar ({ }) ichiga kiritilgan.
Masalan:
#include
using namespace std;
int main()
{
int x = 60;
if(x > 50)
{
cout << "x 50 dan katta\n";
}
if(x < 30)
{
cout << "x 30 dan kichik\n";
}
cout<<"Dastur oxiri"< return 0;
}
Bu yerda ikkita ifoda berilgan. Ular x ning belgilangan qiymatdan katta yoki
kichikligini tekshiradilar. Koʻrsatma sifatida ikkala holatda ham konsolga satr
chiqariladi.
Birinchi holda, x>50, shart toʻgʻri boʻladi, chunki x oʻzgaruvchining qiymati
haqiqatan ham 50 dan katta, shuning uchun bu shart haqiqiy boʻladi va shuning
uchun if blokiga kiradigan koʻrsatma bajariladi.
Ikkinchi holda, x<30 munosabat operatsiyasi yolgʻon qaytadi, chunki shart
yolgʻon, shuning uchun keyingi koʻrsatmalar bloki bajarilmaydi. Natijada, dastur
ishga tushganda, konsol chiqishi quyidagicha boʻladi:
else operatorini oʻz ichiga olgan if ifodasining toʻliq shaklidan foydalanishimiz
mumkin:
if (shart)
koʻrsatma_1
64
else
koʻrsatma_2
if operatoridagi shart yolgʻon boʻlsa else operatoridan soʻng, bajariladigan
mulohazalar toʻplamini aniqlashimiz mumkin. Ya’ni, agar shart rost boʻlsa, if
ifodasidan keyingi koʻrsatmalar bajariladi va agar bu ifoda yolgʻon boʻlsa, else
operatoridan keyingi koʻrsatmalar bajariladi.
if(x > 60)
cout << "x 60 dan katta\n";
else
cout << "x 60 dan kichik \n";
Bunday holda, x> 60 sharti yolgʻon, ya’ni "false" qiymatini qaytaradi, shuning
uchun else bloki bajariladi. Natijada konsolda "x 60 dan kichik" qatori koʻrsatiladi.
Biroq koʻp hollarda ikkita emas balki bir nechta variantlardan birini tanlash
kerak boʻlib qolishi mumkin. Bu holda bir nechta if else konstruksiyasini ishlatish
mumkin.
Masalan, yuqoridagi holatda siz uchta shartni hisoblashingiz mumkin: x
oʻzgaruvchisi 60 dan katta, 60 dan kichik va 60 ga teng boʻlishi mumkin.
if (x > 60)
{
cout << "x 60 dan katta \n";
}
else if (x < 60)
{
cout << "x 60 dan kichik \n";
}
else
{
cout << "x 60 ga teng \n";
}
Ya’ni, bu holda biz dasturda voqealar rivojlanishining uchta tarmogʻini olamiz.
Agar if yoki else yoki else-if blokida faqat bitta konstruksiyani bajarish kerak
boʻlsa, u holda figurali qavslar chiqarib tashlanishi mumkin. Yuqoridagi kodni
quyidagicha yozish mumkin:
int x = 60;
if (x > 60)
cout << "x 60 dan katta \n";
else if (x < 60)
65
cout << "x 60 dan kichik \n";
else
cout << "x 60 ga teng \n";
Misol. Foydalanuvchi ikkita raqamni kiritadi va dastur bu ikki raqamning qaysi
biri kattaroqligini aniqlaydi.
#include
using namespace std;
int main()
{
int var1 = 0;
int var2 = 0;
cout << "Birinchi sonni kiriting: ";
cin >> var1;
cout << "Ikkinchi sonni kiriting: ";
cin >> var2;
if (var1 > var2)
{
cout << "\n Taqqoslash natijasi: Birinchi son ikkinchisidan
katta\n";
}
if (var1 < var2)
{
cout << "\n Taqqoslash natijasi: Ikkinchi son birinchisidan
katta\n";
}
if (var1 == var2)
{
cout << "\nTaqqoslash natijasi: Sonlar teng\n";
}
return 0;
}
14-qatorga qadar hamma narsa aniq - foydalanuvchi ikkita raqam kiritdi, ular
mos keladigan oʻzgaruvchilarga yozildi. Qanday qilib endi ular solishtirishlari va
taqqoslash natijalarini koʻrsatishlari mumkin? Buning uchun if operatoridan
66
foydalanamiz. if yozsak, unda qavs ichida ( ) (qavs) lar ichida shartni yozamiz -
oʻzgaruvchilar qiymatlarini taqqoslash (var1> var2).
Agar var1 haqiqatan ham var2 dan katta boʻlsa, bu shart natijasi rost boʻladi.
Keyin dasturning bajarilishi figurali qavslar ichida joylashtirilgan kodga oʻtadi { } -
17 - 19-qatorlar. Ya’ni ekranda biz birinchi raqam ikkinchisidan kattaroq degan
xabarni koʻramiz.
Agar qavs ichidagi shart bajarilmasa (yolgʻon boʻlsa), u holda { } figurali
qavslaridagi kod e'tiborga olinmaydi va dasturning bajarilishi keyingi blok satridan
if blok ostida – 21-satrdan davom etadi. Bu yerda yana oʻzgaruvchilarning oʻzaro
bogʻliqligini tekshiramiz.
Ikkalasi tengligi sharti rost boʻlsa uning pastidagi blok bajariladi, buning kodi,
agar yolgʻon boʻlsa pastga oʻtadi. 25-qatorda oxirgi mumkin boʻlgan sinov aynan
tenglik operatoridir. = (ta’minlash) emas, balki == (teng) operatoridan
foydalanganingizga ishonch hosil qiling. Aks holda, bu if kodi xato bilan ishlaydi.
Masalan, variable1 = 3, va variable2 = 4, agar biz xato (agar var1 = var2) yozsak, 4
qiymati oʻzgaruvchiga yoziladi.
Ushbu kodni qisqartirishimiz ham mumkin.
#include
using namespace std;
int main()
{
int var1 = 0;
int var2 = 0;
cout << "Birinchi sonni kiriting: ";
cin >> var1;
cout << "Ikkinchi sonni kiriting: ";
cin >> var2;
if (var1> var2)
cout << "\nTaqqoslash natijasi: Birinchi son ikkinchisidan
katta\n";
else if (var1< var2)
cout << "\nTaqqoslash natijasi: Ikkinchi son birinchisidan
katta\n";
else
cout << "\nnTaqqoslash natijasi: Sonlar teng\n";
return 0;
}
67
Ushbu misolda biz endi figurali qavslardan foydalanmayotganimizni
koʻrishingiz mumkin. Yana bir ortiqcha narsa shundaki, agar birinchi shart bajarilsa,
qolgan if else va else bloklari endi tekshirilmaydi (ya’ni dasturning bajarilish vaqti
kamayadi). Xoʻsh, agar birinchi shart yolgʻon boʻlsa, dastur keyingi blokka oʻtadi,
if va uning holatini tekshiradi - (variable1
boʻlsa, unda shart endi boʻlishi mumkin boʻlmagan oxirgi else bloki bajarilishini
tekshiramiz, chunki bundan oldin biz ikkita qiymatning nisbati uchun barcha
mumkin boʻlgan variantlarni ajratdik va faqat ularning tengligi qoladi.
Ushbu dasturlarning natijasi bir xil. Ammo ikkinchi holda, kod yanada ixcham
va kompilyator kamroq ishlaydi.
Shart operatorida e’tibor qilish kerak boʻlgan jihatlar:
1) if sintaksisi:
30>
Do'stlaringiz bilan baham: |