Matematikadagi taqqoslash amali C++ dasturlash tilida yozilishi

55
Bunda a va b lar mantiqiy ifodalar yoki mantiqiy o‗zgaruvchilar bo‗lib, amal
natijasi faqata va b larning har ikkalasi rost bo‗lgandagina rost, qolgan barcha
hollarda yolg‗on bo‗ladi. Bu amal matematikadagi
konyunksiya mantiqiy amali
bilan teng kuchli, ya‘ni ikkita ampersant (&&) belgisi ―va‖ so‗zini almashtiradi.
Misollar:
(37-21)!=13&&49/7==4+3 ifodaning qiymati rost.
x=15; x>20 && x!=16 ifoda qiymati yolg‗ondir.
Mantiqiy qo„shish amali
Amalning umumiy ko‗rinishi quyidagicha: a ||b
Bunda ava b lar mantiqiy ifodalar yoki mantiqiy o‗zgaruvchilar. Amal
natijasi a va b larning har ikkilasi yolg‗on bo‗lgandagina yolg‗on, boshqa barcha
hollarda rost bo‗ladi. Bu amal matematikadagi dizyunksiya
amaliga teng kuchli,
ya‘ni || belgilari ―yoki‖ so‗ziga mos keladi.
Masalan,
a=-16; b=32;2*a-b<0||b+a<1; (52+a>5+b)||true ifodalarning qiymatlari rost
0||a-b>0 ifodaning qiymati esa yolg‗ondir.
Mantiqiy inkor amali
Amalning umumiy ko‗rinishi qo‗yidagicha: !a
Bunda a mantiqiy ifoda yoki mantiqiy o‗zgaruvchi bo‗lib, agar a ning
qiymati true bo‗lsa, amal natijasi false, amal natijasi false bo‗lsa, true bo‗ladi.
Masalan,
!true; ! (48/4+6==3*6); !3
ifodalar qiymatlari false
! (9*8==64); !(3*8==20 && 100%4==2); 0! ifodalarning qiymatlari esa
true bo‗ladi.
C++ dasturlash tili mantiqiy ifoda o‗rnida 0 soni
yoki qiymati nolga teng
bo‗lgan ifoda bo‗sa, uni false deb, 0 dan farqli ixtiyoriy sonni yoki qiymati noldan
farqli ifodani true deb qabul qiladi.
Mantiqiy ifodani mantiqiy o‗zgaruvchiga qiymat sifatida berish ham
mumkin.
Mantiqiy o`zgaruvchilar bool kalit so`z bilan e`lon qilinadi. Bu kalit so`z
matematik mantiq ilmiga asos solgan ingliz matematigi Jorj Bul sharafiga shunday
tanlangan.
Misol tariqasida quyidagi dasturni tahlil qiling.
#include
using namespace std;
int main( )
{
56
int x, y, z, x1, y1, z1;
float a, b, c;
bool n, m, k, p, q;
x=16; y=30; z=21;a=19.25; b=0.75; c=40.16;
x1=3*z-(y+2); y1=c; n=a-b>b-c; m=(x+y)/2!=z+x1;k=y1-x==z+13;
p=k||39-z&&n||x&&!m;
q=!p&&!0||c-a>=0||!false&&!(n||m);
cout <<"n="<
system ("pause");
return 0;
}
Bu dasturda n, m, k, p, q o‗zgaruvchilarning turi mantiqiy tur bo‗lib,
ular mantiqiy ifodalarni qiymat sifatida olmoqda.
Dastur javobi quyidagicha bo`ladi.
n=1
m=1
k=0
p=1
q=1
Murakkab mantiqiy ifodalarni yozishda
amalning ikki tarafidan joy
qoldirmasa ham bo`ladi. Shuningdek, amalning ikki tarafidagi mantiqiy ifodalarni
qavsga olish yoki olmaslikning ham ahamiyati yo`q. Lekin dastur tushunarli
bo‗lishi uchun mantiqiy amallarning har ikkala tarafidan bittadan (agar
kerak
bo`lsa
xohlagancha)
bo`sh
joy
qoldirish,
zarurat
bo`lganda
oddiy
mantiqiyifodalarni qavsga olish maqsadga muvofiq.
Masalan, quyidagi to‗rtta mantiqiy ifodani ham kompilyator xato demaydi.
p=k+3>0||x+y-1<=16 && 1;
p=k+3>0 || x+y-1 <= 16&& 1;
p=(k+3>0)||(x+y-1<=16) && 1;
p=(k+3>0) || (x+y-1<=16) && 1;
Eslatma: hatto arifmetik amallarning ikkala tarafidan bittadan bo`sh joy
(probel) qoldirilsa, dasturni tushunish yengil bo`ladi. Lekin bu aytilganlar qat‘iy
talab emas.
Masalan, x+3*y+11/3nix + 3 * y + 11/3 kabi yozish ma`qulroq.
Biz hozirgacha tanishgan amallarning bir-birlariga nisbatan ustunlik darajasi
va bosqichlarga bo`linishi quyida keltirilgan.
(i++,i--), (++i,--i), !, (*,/,%),(+,-), (<,<=,>,>=), (==,!=), &&, ||, ?:,
(=,*=, /=,+=,-=,%=)
57
Bunda qavsga olingan amallar bir bosqich amallari hisoblanadi. Bir bosqich
amallari o`rtasida ustunlik daraja bo`lmaydi. Demak,
bu amallar ifodada aralash
holda kelsa, eng birinchi i++, i-- amallar, eng oxirida =, *=, /=, +=, -=, %=
amallar bajariladi.
Misollar: Quyidagi
shartlar bajarilsa true, aks holda false qiymat oladigan
mantiqiy ifodalarni tuzing.
a-juft, b esa toq son.
a,b,c sonlarning hech bo`lmaganda bittasi musbat.
a,b,c mantiqiy o`zgaruvchilardan hech bo`lmaganda bittasi chin.
Javoblar:
a%2==0&& b%2==1;
2. a>o || b>0 || c>0
3. a || b || c = true
50>50>