1 – dars. C++ Dasturlash tilining kelib chiqishi xaqida ma’lumot


- DARS. G’AYRI ODDIY HOLATLARNI DASTURLASH



Download 4,47 Mb.
bet86/89
Sana15.04.2022
Hajmi4,47 Mb.
#553102
1   ...   81   82   83   84   85   86   87   88   89
Bog'liq
C kitob TAYYOR

83 - DARS. G’AYRI ODDIY HOLATLARNI DASTURLASH.

G’ayri oddiy holatlarga nol'ga bo’lish, fayl ohiri kabi holatlar kiradi. G’ayri oddiy holatlarni dasturlash uchun C++ tilida Quyidagi uchta hizmatchi so’z ishlatiladi:


try (nazorat qilish)
catch ( ilib olish)
throw ( otli, hosil qilish, generatsiya qilish)
try – hizmatchi so’zi dastur matni ihtiyoriy qismida nazorat qiluvchi blok tashkil qilishga imkon beradi;
try generatorlar
try generatorlar ichida ta'riflar e'lonlar va oddiy generatorlardan tashkil topadi. G’ayri oddiy hodisalar hosil qiluvchi qo’yidagi operator ham ishlatiladi:
throw ifoda.
Bunday operator bajarilganda mahsus chetlanish deb ataluvchi statik ob'ekt hosil qilinadi. Bu obekt tili ifoda tili orqali aniqlanadi.
chetlanishli qayta ishlovchilar quyidagi ko’rinishga ega bo’ladi.

catch (chetlanish tip nomi )


{dasturlar}


Figurali qavs ichidagi operatorlar chetlanishlarni qayta ishlash bloki deb ataladi. Chetlanishliklarni qayta ishlovchi tashqi tomondan va ma'no jihatdan qiymat qaytarmaydigan bitta parametrli funktsiyaga yaqindir. Agar qayta ishlovchilar bir nechta bo’lsa, ular chetlanish tillari farq qilishlari lozimdir. Chetlanishlarni dasturlashni Evklid algoritm misolida ko’rib chiqamiz. Bu algoritm ikki butun manfiy bo’lmagan sonlarning EKUBini topishga mo’ljallangandir. Algoritm har bir qadamida quyidagi amallar bajariladi.


Agar x>=y bo’lsa javob topilgan
Agar xAgar x>y bo’lsa x=x-y
Quyidagi dastur GCM ( ) funktsiyasini o’z ichiga olib, bu funktsiya nazorat qiluvchi blokni o’z ichiga oladi:

#include


int GCM ( int x, int y )
{
try { if (x==0)(y==0)
throw “ \ n zero!”;
if (x<0) throw “ \ negative parameter1”;
If (y<0) throw “ \ negative parameter 2”;
While (x:=y);
else
y=y-x
}
return x;
}
catch ( count char* report)
{cer2 << report << “x= “<return 0
}
}
void main ( )
{
count << “ \ n GCM (66,44)= ”” “ \ n GCM (66,44);
count << “ \ n GCM (0,7)= ”” “ \ n GCM (0,7);
catch (con 2t char * report)
{cer2<}

Natija:

GCM_New (66,44)=22 GCM (0,7)=0
zero: x=0, y=7 GCM negdtive parametr1. x=-12, y=8
GCM (-12,8)=0

Bu dastur birinchi chetlashishni qayta ishlagandan so’ng ishni to’htadi. Chetlanish funktsiya tanasidan tashqaridan qayta ishlagani uchun, qayta ishlovchi funktsiya parametriga murojat qila olmaydi. Bu kamchilikdan halos bo’lish uchun cheklanishni mahsus sinov ob'ekti sifatida hosil qilish mumkindir.


Quyidagi misolda DATA sinfi kiritilgandir.
# include
struct DATA
{ int n,m;
char*S;
DATA (int x, int y, char*c)
{n=x; m=y; s=c;)
};
int GCM_ONE (int n, int y);
{if (x==0||y==0) throw DATA (x,y,”\nZERO!”);
if(x<0) throw DATA (x,y “\n Negative parametr1”);
if(y<0) throw DATA (x,y “\n Negative parametr2”);
while (n!=y)
{if(n>y) x=n-y;
else y=y-x;
}
return x;
}
void main ( )
{ try
{countcountcount}
catch (DATA d);
{cerr<}
Natija
GCM_ONE(66,44)=22
ZERO!x=0,y=7

DATA ishora ob'ekti bu misolda funktsiya tanasida sinf bajarilganda yaratiladi. Bu ob'ekt cheklanish bo’lmaganida chaqirish nuqtasida bo’lar edi. Shunday qilib chegaranishlar sinf ob'ekti bo’lishi lozimdir. Bu sinflarni global ta'riflash shart emas. Asosiy talab tallanish nuqtasida ma'lum


(catch)
misolida DATA sinfi ichida GCM_TWO ( ) funktsyasi. Lekin cheklanishlarni qayta ishlash to’g’ri amalga oshiriladi.
# include
int GCM_ONE (int x, int y)
{struct DATA
{int n, m;
char8S;
DATA (int x, int y, char*c)
{n=x; m=y; s=c;}
};
if (x==0||y=0) throw DATA (x,y “\ZERO!”);
if (x<0) throw DATA (x,y, “\n Negative parametr1”);
if (y<0) throw DATA (x,y, “\n Negative parametr2”);
while (x!=y)
{if (x>y) x=x-y;
else y=y-x;
}
return x;
}
void main ( )
{struct DATA
{int n, m;
char*S;
DATA (int n, int y, char*c)
{n=x; m=y; S=c;)
};
try
{count<cont GCM_ONE (-12,8);
Cont }
catch (DATA d)
{cerr <” <<}
Dastur natijasi:
GCM_TWO (66,44)=22
Negative parametr1
X=12, y=8



Download 4,47 Mb.

Do'stlaringiz bilan baham:
1   ...   81   82   83   84   85   86   87   88   89




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish