Agar algoritm qadamlari ketma-ket bajarilish jarayonida qandaydir shartga bo’gliq ravishda o’zgarsa, bunday algoritm tarmoqlanuvchi algoritm deb nomlanadi. Shart bu mantiqiy ifoda bo’lib, faqat rost yoki yolg’on qiymatni qabul qiladi. Agar shart rost bo’lsa Xa, yolg’on bo’lsa Yo’q tarmog’i bo’yicha algoritm qadami davom etadi.
Tarmoqlanuvchi algoritm to’liq tarmoqlanuvchi va to’liqmas tarmoqlanuvchi turlariga bo’linadi.
To’liq tarmoqlanuvchi algoritmda shart bajarilganda va bajarilmaganda ikkalasida ham amallar bajariladi.

Agar shart bajarilsa Operatorlar1 bajariladi, aks holda Operatorlar2 bajariladi.
Tarmoqlanish shart asosida bo’ladi. Shart manitiq ifoda bo’ladi. Mantiqiy ifoda mantiqiy o’zgaruvchi, taqqoslash amallari yoki ularning inkor, konyuksiya, dizyunksiya amallaridan iborat bo’lsihi mumkin. Shart operatori C++ da shart operatori quyidagicha yoziladi:
if (shart) {
Operatorlar1;
}
else {
Operatorlar2;
}
C++ da taqqoslash amallari:
|
№ |
Matematika |
C++ |
|
1 |
> |
> |
|
2 |
< |
< |
|
3 |
≥ |
>= |
|
4 |
≤ |
<= |
|
5 |
= |
== |
|
6 |
≠ |
!= |

Yechimi: y ning qiymati x ga bog’liq ravishda yoki x2 formula, yoki 2x formula bo’yicha hisoblanadi. Tekshirilishi kerak bo’lgan shart x≥0.
#include
using namespace std;
int main() {
double x, y;
cout<<"x=";
cin>>x;
if (x >= 0) {
y = x * x;
}
else {
y = 2 * x;
}
cout<<"y="<<y;
}
To’liqmas tarmoqlanuvchi algoritmda shart bajarilganda bu shartga bog’liq amallar bajariladi, bajarilmagan holatda hech qanday amal bajarish shart emas.
C++ da to’liqmas tarmoqlanuvchida faqat if operatori ishlatiladi, else ishlatilmaydi.

Misol2. a va b sonlari berilgan. Ulardan kattasini topuvchi dastur tuzing.
Yechimi: Dastavval a sonni maksimal deb tasavvur qilamiz. Agar b soni undan katta bo’lsa u holda b soni maksimal bo’ladi.
#include
using namespace std;
int main() {
double a, b;
cout<<"Birinchi sonni kiriting: ";
cin>>a;
cout<<"Ikkinchi sonni kiriting: ";
cin>>b;
double max = a;
if (b > max)
max = b;
cout<<a<<" va "<<b<<" sonlarining maksimali "<<max<<" ga teng";
}
if else ning boshqacha shaklda yozilishi.
if va else operatorlarini qisqacha shaklda ? va : belgilari orqali yozish mumkin.
Misol3. n natural soni berilgan. Agar u toq bo’lsa "odd", juft bo’lsa "even" so’zini chiqaruvchi dastur tuzing.
Yechimi: n natural soni toq bo’lishi uchun uni ikkiga bo’lganda qoldiq 1 ga teng bo’lishi kerak, aks holda juft bo’ladi.
#include
using namespace std;
int main() {
int n;
cin >> n;
n % 2==1 ? cout<<"odd" : cout<<"even";
}
Murakkab tarmoqlanuvchi.
Agar biror shart asosida tarmoqlangandan so’ng yana shart asosida tarmoqlansa(ya’ni else if), bunday tarmoqlanish murakkab tarmoqlanish deyiladi.
Misol4. Markazi koordinatalar boshida va radiyusi R ga teng bo’lgan aylana berilgan. Tekislikdagi (x,y) nuqta bu aylanaga tegishliligini aniqlang. Agar aylana tashqarisida yotsa "out", chizig’ida yotsa "line", ichida yotsa "in" so’zini chiqaring.

Yechimi: Berilgan nuqatdan koordinata boshigacha masofani topamiz. Qaysi holat bo’lishi bu masofaga bo’g’liq. Masofa d= ga teng. Agar d>R bo’lsa u holda nuqta aylanadan tashqarda, aks holda agar d=R bo’lsa u holda nuqta aylanaga tegishli, aks holda(ya’ni bu holatda faqat d
#include
using namespace std;
int main() {
int x, y, R;
cout<<"x=";
cin>>x;
cout<<"y=";
cin>>y;
cout<<"R=";
cin>>R;
if (x*x+y*y > R*R) {
cout<<"out";
}
else if (x*x+y*y==R*R) {
cout<<"line";
}
else {
cout<<"in";
}
}
C++ da murakkabroq shartlarni yozish.
Murakkab shart sodda shartlarning konyuksiya, dizyunksiya va inkorlaridan tashkil topadi.
Berilgan sonning [a, b] intervalga tegishli ekanligini aniqlash uchun, x≥a va x≤b shartlari bir vaqtning o’zida o’rinli bo’lishi kerak. Shartlarning ikkalasi ham bajarilish shartini && (va - and) amali orqali yozamiz:
if (x >= a && x <= b)
cout<<"Tegishli";
else
cout<<"Tegishli emas";
Berilgan sonning [a, b] intervalga tegishli emas ekanligini aniqlash uchun, x<a yoki x>b shartlari istalgan biri bajarilishi kerak. Shartlarning istalgan biri bajarilishi yetarliligi shartini || (yoki - or) amali orqali yozamiz:
if (x < a || x > b)
cout<<"Tegishli emas";
else
cout<<"Tegishli";
Tanlash operatori.
Tanlash opratori switch tanlanuvchi ifoda qiymatini birnechtakonstantalar bilan taqqoslab chiqadi. switch case ko’plik tanlov operatori hisoblanadi. switch da ko’rsatilgan ifosa qiymati case so’zidan keyin yozilgan har bir qiymat bilan taqqoslab chiqiladi. Taqqoslanuvchi qiymat qaysidir qatordagi case operatoridan yozilgan qiymatga teng u holda uning davomida yozilgan amallar bajariladi.
Misol5. Hafta kuni raqamda barilgan. Uni so’zda chiqaruvchi dastur tuzing.
Yechimi:
#include
using namespace std;
int main() {
int n;
cout<<"Hafta kunini raqamda kiriting: ";
cin>>n;
switch (n) {
case 1: cout<<"Dushanba"; break;
case 2: cout<<"Seshanba"; break;
case 3: cout<<"Chorshanba"; break;
case 4: cout<<"Payshanba"; break;
case 5: cout<<"Juma"; break;
case 6: cout<<"Shanba"; break;
case 7: cout<<"Yakshanba"; break;
default: cout<<"Hato kiritildi"; break;
}
}
Agar har bir qatordan so’ng break yozilmasa u holda qaysidir shart bajarililadigan bo’lsa keying break operatori kelgunga qadar barcha holatdagi amallar bajariladi.
Masalan quyidagi dasturda
switch (n) {
case 1: cout<<"Dushanba";
case 2: cout<<"Seshanba";
case 3: cout<<"Chorshanba";
case 4: cout<<"Payshanba";
case 5: cout<<"Juma"; break;
case 6: cout<<"Shanba"; break;
case 7: cout<<"Yakshanba"; break;
default: cout<<"Hato kiritildi"; break;
}
}
agar n=2 bo’lsa u holda ekranga SeshanbaChorshanbaPayshanbaJuma lar chiqadi.
1-topshiriq
