• Savolingiz bormi?
  • +998 97 534 03 20
  • turayev.ruziboy@bk.ru
 C++ tilida shartli va shartsiz o’tish operatorlari. Tanlash operatori

C++ tilida shartli va shartsiz o’tish operatorlari. Tanlash operatori

C++ / 2022-11-24

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

  1. x va y haqiqiy son berilgan. Xisoblang: max(x, y) va min(x, y)
  2. x, y va z haqiqiy son berilgan. Xisoblang: max(x, y, z) va min(x, y, z)
  3. x, yva z haqiqiy son berilgan. Xisoblang: max(x+y+z, x, y, z) va min2(x+y/2, x, y, z)
  4. a, b va c haqiqiy son berilgan. Tekshiring: a<b
  5. a, b va c haqiqiy son berilgan. Agar a b c tengsizlik bajarilsa, u xolda haqiqiy sonlarni ikkilantiring, aks xolda ularni modullari bilan almashtiring.
  6. Ikkita haqiqiy son berilgan. Birinchi sonni chiqaring, agar u ikkinchisidan katta bo`lsa, aks xolda ikkalasini ham chiqaring.
  7. Ikkita haqiqiy son berilgan. Birinchi sonni no`l bilan almashtiring, agar u ikkinchisidan kichik yoki teng bo`lsa, aks xolda o`zgartirishsiz koldiring.
  8. Uchta haqiqiy son berilgan. Ulardan [1,3] intervalga tegishlilarini tanlang.
  9. x, y(x va y teng emas) haqiqiy son berilgan. Ularning kichigini ularning yarim yig’indisi bilan, kattasini ularning ikkilangan ko`paytmasi bilan almashtiring.
  10. Uchta haqiqiy son berilgan. Ularning musbatini kvadrati bilan almashtiring.
  11. Agar uzaro farqli x, y ,z haqiqiy sonlar birdan kichik bo`lsa, u xolda bu uchta sondan eng kichigini boshka ikkitasining yarim yig’indisi bilan almashtiring. Aks xolda o`zgarishsiz qoldiring.
  12. a, b, c va d haqiqiy sonlar berilgan. Agar a b c d tengsizlik bajarilsa, u xolda ularning har birini ularning kattasi bilan almashtiring.
  13. x, yhaqiqiy sonlar berilgan. Agar x va y manfiy bo`lsa, ularning har birini modullari bilan almashtiring; agar fakat bittasi manfiy bo`lsa ikkala sonning har birini 0.5 ga oshiring.
  14. x, y , z haqiqiy musbat sonlar berilgan. x, y, z uzunlikka ega tomonli uchburchak mavjudmi?
  15. a, b, c haqiqiy sonlar berilgan (a 0). Aniqlanki, ax2+bx+c=0 kvadrat tenglama haqiqiy echimga egami. Agar haqiqiy echimlari mavjud bo`lsa, u xolda ularni toping. Aks xolda haqiqiy echimlar mavjud emasligi xaqida xabar bering.

Izoh qoldirish