If – else operatori - Alamiy matematika

- shart bloki (romb) va 1
> blokning «ha» shoxiga, 2
> esa blokning «yo‘q» shoxiga mos keluvchi
amallar bloklari deb qarash mumkin .
8-rasm. if(), else shart operatorining blok sxemasi
Misol tariqasida diskriminantni hisoblash usuli yordamida ax
2
+bx+c=0
ko‘rinishidagi kvadrat tenglama ildizlarini topish masalasini ko‘raylik:
#include
#include
int main()
shart-ifoda
operator
1
ha (true)
yo’q (false)
operator
2
{
float a,b,c;
float D,x1,x2;
cout<<’’ax^2+bx+c=0; tenglama ildizini topish .’’;
cout<<’’\n a- koiffitsiyentni kiriting: ‘’;
cin>>a;
cout<<’’\n b- koeffitsientni kiriting: ‘’;
cin>>b;
cout<<’’\n c- koeffitsientni kiriting: ‘’;
cin>>c;
D=b*b-4*a*c;
If(D<0)
{cout<<’’tenglama haqiqiy ildizga ega emas!’’;
return 0;
}
if (D==0)
{cout<<’’tenglama yagona ildizga ega:’’;
x1=-b/(2*a);
cout<<’’\nx=’’<
return o;
}
else
{cout<<’’tenglama yagona ildizga ega:’’;
x1=(-b+sqrt(D))/(2*a);
x1=(-b-sqrt(D))/(2*a);
cout<<’’\nx1=’’<
cout<<’’\nx1=’’<
}
return 0;
}
Programma bajarilganda, birinchi navbatda tenglama koeffitsientlari – a, b, s
o‘zgaruvchilar qiymatlari kiritiladi, keyin diskriminant – D o‘zgaruvchi qiymati
hisoblanadi. Keyin D qiymatining manfiy ekanligi tekshiriladi. Agar shart o‘rinli
bo‘lsa, yaxlit operator sifatida keluvchi ‘{‘ va ‘}’ belgilari orasidagi operatorlar
bajariladi va ekranga “Tenglama haqiqiy ildizlarga ega emas” xabari chiqadi va
programma o‘z ishini tugatadi (“return 0;” operatorini bajarish orqali). Diskriminant
noldan kichik bo‘lmasa, navbatdagi shart operatori uni nolga tengligini tekshiradi.
Agar shart o‘rinli bo’lsa, keyingi qatorlardagi operatorlar bloki bajariladi – ekranga
“ Tenglama yagona ildizga ega:” xabari, hamda x1 o‘zgaruvchi qiymati chop
qilinadi va programma shu yerda o‘z ishini tugatadi, aks holda, ya’ni D qiymatni
noldan katta holati uchun else kalit so‘zidan keyingi operatorlar bloki bajariladi va
ekranga “Tenglama ikkita ildizga ega: “ xabari, hamda x1 va x2 o‘zgaruvchilar
qiymatlari chop etiladi. Shu bilan shart operatoridan chiqiladi va asosiy funksiyaning
return ko’rsatmasini bajarish orqali programma o‘z ishini tugatadi.
O‘z navbatida 1
> va 2
> ham shartli operator bo’lishi
mumkin. Ifodadagi har bir else kalit so‘zi, oldindagi eng yaqin if kalit so‘ziga
tegishli hisoblanadi (xuddi ochiluvchi va yopiluvchi qavslardek). Buni inobatga
olmaslik mazmunan xatoliklarga olib kelishi mumkin.
Masalan:
if (x==1)
if (y==1) cout«”x=1 va y=1’’;
else cout <<’’x<>1’’;
Bu misolda «x<>1 » xabari x qiymatini 1 ga teng va u qiymatini 1 ga teng
bo‘lmagan holda ham chop etiladi. Quyidagi variantda ushbu mazmunan xatolik
bartaraf etilgan:
If (x==1)
{
If (y==1) cout<<”x=1 va y=1”;
}
else cout«”x<>1”;
Ikkinchi misol tariqasida uchta butun sonning maksimal qiymatini topadigan
programma bo‘lagini keltirishimiz mumkin:
…
int x,y,z,max;
cin »x»y»z;
if (x>y)
if (y
else max=y;
else
if (x
else max=x;
…
Shart operatorida e’lon qilish operatorlarini ishlatish man etiladi, lekin undagi
bloklarda o‘zgaruvchilarni e’lon qilish mumkin va bu o‘zgaruvchilar faqat blok
ichida amal qiladi. Quyidagi misolda bu holat bilan bog‘liq xatolik ko‘rsatilgan:
If (j>0) {int i; i=2*j;}
Else i=-j;//xato, chunki I blokdan tashqarida ko‘rinmaydi
Masala. Berilgan to‘rt xonali ishorasiz sonning boshidagi ikkita raqamining
yig‘indisi qolgan raqamlar yig‘indisiga teng yoki yo‘qligi aniqlansin (raqamlar
yig‘indisi deganda ularga mos son qiymatlarining yig‘indisi tushuniladi). Sonning
raqamlarini ajratib olish uchun butun sonlar arifmetikasi amallaridan foydalaniladi:
#include
Int main()
{
Unsigned int n,a3,a2,a1,aO;//n=a
3
a
2
a
1
a
0
ko’rinishida
cout<<’’\nn-qiymatini kiriting:’’;
cin>>n;
If(n<1000| n>9999)
{
cout<<’’kiritilgan son 4 xonali emas!’’;
return1;
}
a3=n/1000;
a2=n%1000/100;
a1=n%100/10;
a0=n%10;
if(a3+a2==a1+a0) cout<<’’a3+a2=a1+a0’’;
else cout<<’’a3+a2<>a1+a0’’;
return 0;
}
Programma ishorasiz butun son kiritishni taklif qiladi. Agar kiritilgan son 4
xonali bo‘lmasa (n<1000 yoki n>9999), bu haqda xabar beriladi va programma o‘z
ishini tugatadi. Aks holda n sonining raqamlari ajratib olinadi, hamda boshidagi
ikkita raqamning yig’indisi – (a3+a2) qolgan ikkita raqamlar yig‘indisi – (a1+a0)
bilan solishtiriladi va ularning teng yoki yo‘qligiga qarab mos javob chop qilinadi.
1000>