Kirish Roʻyxatdan oʻtish

Docx

  • Referatlar
  • Diplom ishlar
  • Boshqa
    • Slaydlar
    • Referatlar
    • Kurs ishlari
    • Diplom ishlar
    • Dissertatsiyalar
    • Dars ishlanmalar
    • Infografika
    • Kitoblar
    • Testlar

Dokument ma'lumotlari

Narxi 50000UZS
Hajmi 787.5KB
Xaridlar 0
Yuklab olingan sana 30 Mart 2026
Kengaytma doc
Bo'lim Diplom ishlar
Fan Informatika va AT

Sotuvchi

Rajabov Yorbek

Ro'yxatga olish sanasi 19 Mart 2026

0 Sotish

C++ tilida aralash tipli ma’lumotlar bilan ishlash

Sotib olish
C ++ tilida aralash tipli ma lumotlar bilan ishlash’
mavzusida 
       
M U N D A R I J A
KIRISH... ..	
……………………………………………………………
1-BOB.   C++   TILIDA   MA LUMOTLARNING   ASOSIY   VA	
’
HOSILAVIY TURLARI ..................................................................
1.1 .  Algoritmik tillar va ularning imkoniyatlari ........................
1.2.   C++  о‘zgarmaslar   ..........................................................................
1.3.  C++  о‘zgar uvchi lar   ....................................................................... .
1.4.  Kо‘rsatkichl i  tiplar va ular bilan ishlash ………………… ....
2-BOB. C++   TILIDA     STRUKTURALAR  ................. ......... ........
2.1. Oddiy strukturalar .……………………………………………
2. 2.   Birlashmalar  ............................................ .................................... .
2.3. Foydalanuvchi    tomonidan    ani qlangan     tip 	
………… ................
2.4. Dasturlar 	
……………………………………………………… ..
3 -BOB.   C ++  TILIDA  BERILGANLAR  STRUKTURALARI   ........
3.1 . Dinamik strukturalar  ................ ................................................. 3.2. Chiziqli rо‘yxatlar, steklar    va    navbatlar..................................
XULOSA………………………………………………………… .......
FOYDALANILGAN ADABIYOTLAR    R О‘ Y X ATI 
…………… .......
KIRISH
Mavzuning   dolzarbligi.   Hozirgi   paytda   elektron   hisoblash
mashinalarning   juda   tez   rivojlanishi,   uning   barcha   parametrlarning
yaxshilanishi,   ya’ni   operativ   va   tashqi   xotiraning   kengligi,   ishlashning
ishonchliligi,   hisoblash   tezligining   yuqoriligi   va   ixchamligi   fan-texnikaning
kо‘p   sohalarining   murakkab   va   dolzarb     muammolarining   yechimini   olishga
imkon  bermoqda.
Hozirgi   vaqtda   elektron   hisoblash   mashinalari   zamonaviy   fanlar
taraqqiyoti   va   xalq   hо‘jaligining   barcha   sohalarida   eng   muhim   omillardan   biri
bо‘lib   shakllanib   bormoqda.   EHMning   inson   intelektual   faoliyatining   turli
sohalariga   kirib   kelishi,   ularning   keng   qо‘llanilishi   va   shuningdek,   fan   va
texnikaning   turli   sohalariga   tegishli   bо‘lgan   kо‘pgina   eng   muhim   (aktual)
masalalarni yechishda foydalanishni ta’minlamoqda. Sо‘nggi о‘n yilda vujudga
kelgan kompyuterlarning yangi  tiplari – noutbuk, netbuklar, har  bir ish о‘rniga
tom   ma’noda   hisoblash   texnikalarini   joriy   qilinishini   ta’minlamoqda.   Shunga
bog‘liq holda о‘zining ishida EHM yordamiga murojaat qiladigan odamlar soni
(miqdori) jiddiy ravishda о‘sib bormoqda.
Hozirgi   kunda   inson   faoliyatining   biror   sohasidagi   erishilgan
muvaffaqiyat (yutuq)larini EHMlarning  ishtirokisiz  tasavvur etish qiyin.
2 Jumladan, hozirda matematika, fizika, informatika va boshqa sohalaridagi
hech   bir   yirik   tajribalarni   EHMlarsiz   amalga   oshirib   bо‘lmaydi.   Zamonaviy
texnologik majmualarni boshqarish EHMlarsiz mumkin bо‘lmay qoldi.
EHM   shunday   inson   faoliyatining   barcha   sohalarida   qо‘llanilishi   inson
ishtirokisiz murakkab ketma ket  jarayonlarni bajarish va katta tezlik bilan aniq
va   ishonchli   natijalarni   olish   katta   hajmli   axborotlarni   saqlash   mashinaning
imkoniyati   bilan   aniqlanadi.   EHMning   eng   muhim   xarakteristikalaridan   biri
uning   dasturiy   ta minotidir.   Matematik   dasturiy   ta minoti   deb,   EHMni’ ’
dasturlar   majmuasi   bilan   hisoblash   qabul   qilingan,   jumladan,   ba zi   bir	
’
masalalarni dasturlashsiz yechish imkonini beradi, dasturlashda bir qator ishlarni
bajaradi, hamda mashinaning foydali rejimda ishlashni ta minlaydi.	
’
Hozirgi   vaqtda   kompyuter   va   unga   mos   dasturiy   ta minot   bazasi	
’
imkoniyatlari   bu   fanni   о‘qitishda   har   bir   soha   mutaxassislariga   muayyan   bilim
va   kо‘nikmalar   majmuasini   belgilash   imkonini   beradi   va   taqozo   qiladi.   Bu
yо‘sindagi majburiylik kompyuter unga ulanadigan qurilmalar majmuasi hamda
mavjud   amaliy   dastur   katta   bо‘lgani   uchun   bir   kishi   tomonidan   tо‘laqonli
о‘zlashtirishi     nihoyatda   mos   bilimlar   jonli   mushkul   masala   ekanligidan   kelib
chiqadi.
Jumladan,   informatika   -   bu   insoniyat   faoliyatining   bir   sohasi   bо‘lib,   u
axborotni hosil qilish, saqlash va kompyuter yordamida ularni qayta ishlash, shu
bilan   bir   qatorda   tadbiq   muhiti   bilan   о‘zaro   bog‘liq   bо‘lgan   jarayonlarning
aloqadorliklarini о‘z ichiga oladigan kо‘nikma va vositalar tizimidir.
Umuman   olganda,   informatika   keng   ma’noda   insoniyat   faoliyatining
barcha   sohalarida   axborotni   kompyuter   va   telekommunikatsiyalar   yordamida
qayta ishlash, saqlash, uzatish bilan bog‘liq bо‘lgan sohadir.
Shuni   aytib   о‘tish   lozimki,   Respublikamiz   kadrlar   tayyorlash   Milliy
dasturida informatika va axborot texnologiyalarini о‘quv jarayoniga keng tadbiq
qilish masalasi kо‘ndalang qо‘yilgan.
Shu   sababli,   algoritmik   tillarning,   jumladan,   C++   tilining   turli   tiplarga
tegishli   ma’lumotlar   jamlanmasi   bilan   ishlash   imkoniyatlarni   о‘rganish   va
3 ulardan   samarali   foydalanish   matematik   programmistlar   uchun   muhim
ahamiyatga   ega   va   dolzarbdir ,   chunki   ta’lim   sohasida   talabalarning   bilim
darajasini   oshirishda   hamda   inson   faoliyatining   turli   sohalarida   algoritmik
tillarning aralash tipli ma’lumotlar bilan ishlovchi dasturlar о‘z tadbiqiga egadir.
Bitiruv malakaviy ishning   asosiy maqsadi  va vazifasi   C++ tilining turli
tiplarga   tegishli   ma’lumotlarining   jamlanmasi   bilan   ishlash   imkoniyatlaridan
foydalanib,   murakkab   dasturlar   yaratish   va   ularni   tuzishni   о‘rganish   hamda
о‘rgatishdir.
Bitiruv malakaviy  ishning   i lmiy  va amaliy ahamiyati   shundan  iboratki,
ishni   bajarish   davomida   olingan   natijalarni,   ya’ni   yaratilgan   dasturlarni   C++
algoritmik   tilining   turli   tiplarga   tegishli   ma’lumotlarining   jamlanmasi   bilan
ishlash   imkoniyatilarini   о‘qitishda   foydalanish   hamda   matematika,   fizika   va
boshqa fanlarning amaliy masalalarni yechishda, masalan, kompleks sonlar bilan
ishlashda qо‘llash mumkin.
Bitiruv   malakaviy   ish   kirish,   uch   bob,   xulosa   va   foydalanilgan   ada-
biyotlar   rо‘yxatidan   iborat   bо‘lib,   kirish   qismida   bitiruv   malakaviy   ish
mavzusining   dolzarbligi   asoslangan,   uning   asosiy   maqsadi   aniqlangan   hamda
ishning ilmiy va amaliy ahamiyati keltirilgan.
Birinchi   bob   algoritmik   tillar   va   ularning   imkoniyatlari,   C++   dasturlash
tilida   ma’lumotlarning   turlari:   о‘zgarmaslar,   о‘zgaruvchilar   hamda   ularni
tasvirlash keltirilgan.
Ikkinchi bob  C++ algoritmik tilida aralash tipli ma lumotlarni tasvirlash,’
ular   bilan   ishlash:   o ddiy   strukturalar,   birlashmalar,   foydalanuvchi   tomonidan
aniqlangan tiplari hamda ular bilan ishlovchi dasturlar  keltirilgan.
Uchinchi  bob C++ algoritmik tilida turli tipli  ma lumotlar strukturalari:
’
d inamik   strukturalar,   rо‘yxatlar,   steklar,   navbatlar   va   daraxtlar   bilan   ishlashga
bag‘ishlangan.
Xulosa   qismida   bitiruv   malakaviy   ishni   bajarish   davomida   olingan
natijalar i   ifodalangan.
4 1-BOB.  C ++ TILIDA MA’LUMOTLARNING ASOSIY VA HOSILAVIY
TURLARI
Bitiruv malakaviy ishning birinchi bobida hozirgi zamon algoritmik tillari
va   ularning   imkoniyatlari,   jumladan,   C++   tilining   imkoniyatlari,   unda
ma lumotlarning  turlari va ularni tasvirlash haqida ma lumotlar keltirilgan. ’ ’
§1.1 . Algoritmik tillar va ularning imkoniyatlari
Hisoblash   texnikasining   jadal   rivoji   turli   dasturlash   tillarining   paydo
bо‘lishiga   (yuzaga   kelishiga)   sabab   bо‘ldi.   Bu   tilning   tayinlanishi   –   hisoblash
formulalari   jamlanmasi   (mujmuasi)ning   qо‘shimcha   axborotlar   bilan
boyitilishidir.   Ular   bu   majmuani   algoritmga   aylantiradi.   Hozirgi   kunda
dasturlash   tili   deganda   dastur   tuzish   tili   tushuniladi,   ya’ni   EHMda   masalalar
yechish uchun algoritm yoziladigan til.
Dastlab,   EHMning   birinchi   davrida   dasturlash   mashina   tilida   olib
borilardi. Mashina tili aniq harakatlarni sonlar kо‘rinishidagi kodlash qoidalarini
о‘zida   tasvirlaydi(asosan   arifmetik).   Barcha   mashinalar   uchun   faqat   ikkilik
sanoq sistemasi tushunarli, ammo yozuvlarni qisqartirish uchun dasturchilar uni
sakkizlik bilan almashtirishgan.
5 Dasturchilar   dasturlarni   mashina   tilida   yozishda   tez-tez   xatolarga   yо‘l
qо‘yilar edi, eng ustiga ularni tuzilmalashtirish imkoni bо‘lmagani tufayli, kodni
kuzatib   borish   amalda   deyarli   mumkin   bо‘lmagan   hol   edi.   Bundan   tashqari,
mashina kodlaridagi dastur tushunish uchun g‘oyat murakkab edi.
Dasturlash   protsesslarining   rivoji   simvolik   (belgili)   dasturlash   tilllarini
yaratilishiga   sabab   bо‘ldi,   yoki   boshqacha   aytganda   avtokodlarning
yaratilishiga.   Bunday   til   mashina   tilidan   shu   bilan   farqlanadiki,   buyruq
operatsiyalarini   sonlar   bilan   belgilash   о‘rnida   simvolik     (harfli)     belgilashlar
foydalanildi.
Shu turdagi birinchi va eng omadli tillardan biri Fortran tili, IBM firmasi
tomonidan   ishlab   chiqilgan.   1954 - yil   bir   guruh   amerikalik   mutaxassislar
dasturlash   sohasidagi   til   haqida   x abar   e’lon   qilishdi.   Til   nomi   FORmulae
TRANslation   degan   sо‘z   birikmasidan   ishlab   chiqilgan.   Bu   birikma
formulalarning qayta  shakllanishi  degan  ma’noni  anglatadi.  Bu  til  ilmiy texnik
masalalar yechishga mо‘ljallangan.
Fortran yaratilgandan keyin kо‘p о‘tmay Algol (ALGOritmic Language –
algoritmik   til)   tili   paydo   bо‘ldi.   U   1960-yil   keng   xalqaro   hamkorlik   asosida
yaratildi.   Hozigi   vaqtda   bu   algoritmik   tilning   kо‘pgina   versiyalari   bor.   Lekin
algoritmik   til   grafik   operatorlarga   ega   emas.   Biroq   juda   kо‘p   hisoblash
metodlarining    tayyor    paketlariga ega.
Keyingi yaratilgan tillarni quyida    birma-bir    sanab о‘tamiz:
1. Kobol (Common Business Oriented Language) algoritmik tili 1960
yilda   AQShda   iqtisodiy   ma’lumotlar(informatsiyalar)ni   qayta   ishlash   uchun
mо‘ljallangan;
2. Lisp   algoritmik   tili   1960 - yilda   AQShda   J.Makkarti   tomonidan
yaratilagan.   Bunda   rо‘yxatlar   qayta   ishlanadi.   Bu   tilda   rekursiya   bor,
о‘zgaruvchilar e’lon qilinmaydi, faqat – funksiya;
3. Snobol tili – asosan  matnlarni  (tekstlarni) mashinaviy analiz qilish
uchun qо‘llaniladi. Bu til о‘rganish uchun juda sodda;
6 4. APL   tili   1962-yilda   AQShda   K.Iverson   tomonidan   dialogli   qayta
ishlash   uchun   yaratildi.   Bu   tilda   interpretator,   rekusiya   bor,   о‘zgaruvchilar
tasvirlanmaydi;
5. Beysik   tili   1965-yilda   AQShda   J.Kelini   tomonidan   shaxsiy
kompyuterlar   uchun   yaratilgan.   Bu   tilda   interpretator,   rekursiya   yо‘q,
о‘zgaruvchidar qisman tasvirlanadi, hamda qism-programma ham mavjud;
6. PL/1   (Programming   Language   /   1   –   dasturlash   tili   bir)   tili   1966   –
yilda AQShda  keng sohada qо‘llash uchun yaratilgan;
7. Paskal   algoritmik   tili   1971 - yil   XVII   asrda   yashab   о‘tgan   buyuk
fransuz olimi nomiga nomlangan. Ta’lim yо‘nalishiga mо‘ljallangan; dastlabki,
standart   turi   grafik   operatorlarga   ega   emasdi,   lekin   hozirgi   yangi   versiyalari
mukammal grafik protseduralariga ega.
8. Ada   tili   1979 - yilda   Fransiyada   J.Ishbia   tomonidan   yaratilgan.
Birinchi ayol-dasturchi Ada Lavlays nomiga atab qо‘yilgan;
9. Prolog   tili   1972 - yilda   Fransiyada   A.   Kolmerauer   tomonidan
yaratilgan. Bu tilda interpretator, rekursiya bor, о‘zgaruvchilar tasvirlanmaydi;
10. Si   algoritmik   tili   1972-yil   AQShda   D.Richi   tomonidan   ishlab
chiqilgan.  Tizimli   dasturlashda   ishlatiladi.  Bu   tilda   kompilyator,   rekursiya   bor,
о‘zgaruvchidar   e’lon   qilinmaydi   hamda   funksiya   –   qism-programmma.   Bu
algoritmik   tilning   ham   dastlabki   standarti   grafik   operatorga   ega   emas   edi.
Hozirgi vaqtda bu tilning yangi variantlari grafik operatorlarga ega.
Translyator   –   bu   inglizcha   translator   sо‘zidan   olingan   bо‘lib   tarjimon
degan ma’noni anglatadi. Uning asosiy vazifasi -  biror bir matnni dasturiy yо‘l
bilan   boshqa   matnga   translyatsiya   (tarjimaga   о‘girish)   qilishdan   iborat.
Algoritmning tarjima (translyatsiya) jarayoni va uni mashina tomonidan amalga
oshirilishi 2 usulni qamrab oladi. Birinchi usul kompilyatsiya deyiladi.
Shunday   qilib,   avval   barcha   dastur   translyatsiya   qilinadi,   sо‘ngra
bajariladi.   Bunday   jarayonga   kompilyatsiyalash   jarayoni   deyiladi   va   bunday
rejimda ishlaydigan translyator esa kompilyator deb ataladi. Qisqacha aytganda,
kompilyatsiyalash natijasida hosil qilingan dastur odatda mashina tilidagi dastur
7 bо‘lib   hisoblanadi.   Ikkinchi   usul   tarjima   protsessi   va   algoritmning   bajarilish
protsessini   о‘zida   jamalaydigan   –   interpretatsiya   jarayoni.   Bu   jarayonda   joriy
dasturning   matnninin   о‘qiydi,   uni   analiz   qiladi   va   shu   ondayoq   bajaradi.
Kompilyatordan   farqli   ravishda   dastlabki   dastur   matnnini   mashinaga   kiritish
chog‘ida   uning   har   bir   operatorini   о‘zgartirib   boradigan   va   dusturning
bajarilishini qadamba-qadam amalga oshirib boradigan jarayonga interpretatsiya
jarayoni deyiladi, dasturni hosil qilish jarayonida tarjima qilishga mо‘ljallangan
translyator esa intepretator deyiladi.
Intepretatorlar   bilan   ishlash   osonroq,   chunki   dastur   komandalari   qanday
ketma-ketlikda   yozilgan   bо‘lsa,   shu   tarzda   bajaradi.   Bu   esa   dastur   bajarilishini
nazorat   qilinishini   osonlashtiradi.   Kompilyator   esa   kompilyatsiya   va
kompanovka   kabi   qо‘shimcha   bosqichlardan   iborat   bо‘lganligi   uchun,   ulardan
hosil   bо‘ladigan   bajariluvchi   faylni   tahlil   qilish   va   о‘zgartirish   imkoniyati
mavjud   emas.   Faqatgina   kompilyatsiya   qilingan   fayl   tezroq   bajariladi,   chunki
bundagi   komandalar   kompilyatsiya   jarayonida   mashina   tiliga   о‘tkazilgan
bо‘ladi.
§1.2.  C ++ о‘zgarmaslar
Programma bajarilishi paytida qandaydir berilganlarni saqlab turish uchun
о‘zgaruvchilar va о‘zgarmaslardan foydalaniladi.
О‘zgarmas   (literal)   –  bu   fiksirlangan   sonni,   satrni   va   belgini   ifodalovchi
leksemadir.   О‘zgarmaslar   beshta   guruhga   bо‘linadi   –   butun,   haqiqiy   (suzuvchi
nuqtali), sanab о‘tiluvchi, belgi (literli) va satr («string», literli  satr).
Kompilyator о‘zgarmasni leksema sifatida aniqlaydi, unga xotira-dan joy
ajratadi, kо‘rinishi va qiymatiga (turiga) qarab mos guruhlarga bо‘ladi.
Butun о‘zgarmaslar quyidagi formatlarda bо‘ladi:
-  о ‘nlik son; 
- sakkizlik son;
-  о ‘n oltilik son.
8 О ‘nlik   о ‘zgarmas   0   raqamidan   farqli   raqamdan   boshlanuvchi   raqamlar
ketma-ketligi va 0 hisoblanadi: 0; 123; 7987; 11.
Manfiy   о ‘zgarmas   –   bu   ishorasiz   о ‘zgarmas   b о ‘lib,   unga   faqat   ishorani
о ‘zgartirish amali q о ‘llanilgan deb hisoblanadi.
Sakkizlik   о ‘zgarmas 0 raqamidan boshlanuvchi sakkizlik sanoq sistemasi
(0,1,..,7) raqamlaridan tashkil topgan raqamlar ketma-ketligi:
023;   0777;   0.
О ‘n oltilik  о ‘zgarmas Ox yoki OX belgilaridan boshlanadigan   о ‘n; oltilik
sanoq sistemasi raqamlaridan iborat ketma-ketlik hisoblanadi:
Ox1A; OX9F2D; 0x23.
Harf belgilar ixtiyoriy registrlarda berilishi mumkin.
Kompilyator   sonning   qiymatiga   qarab   unga   mos   turni   belgilaydi.   Agar
tilda   belgilangan   turlar   programma   tuzuvchini   qanoatlantirmasa,   u   oshkor
ravishda   turni   k о ‘rsatishi   mumkin.   Buning   uchun   butun   о ‘zgarmas   raqamlari
oxiriga, probelsiz l yoki L (Long), u yoki U (unsigned) yoziladi. Zarur hollarda
bitta  о ‘zgarmas uchun bu belgilarning ikkitasini ham ishlatish mumkin:
45 l u,   012U1,   OxA2L.
Haqiqiy   о ‘zgarmaslar   –   suzuvchi   nuqtali   son   b о ‘lib,   u   ikki   xil   formatda
berilishi mumkin: 
-   о ‘nlik   fiksirlangan   nuqtali   formatda.   Bu   k о ‘rinishda   son   nuqta   orqali
ajratilgan   butun   va   kasr   qismlar   k о ‘rinishida   b о ‘ladi.   Sonning   butun   yoki   kasr
qismi   b о ‘lmasligi   mumkin,   lekin   nuqta   albatta   b о ‘lishi   kerak.   Fikserlangan
nuqtali  о ‘zgarmaslarga misollar: 24.56; 13.0; 66.; .87;
- eksponensial shaklda haqiqiy  о ‘zgarmas 6 qismdan iborat b о ‘ladi:
1) butun qismi ( о ‘nli butun son);
2)  о ‘nli kasr nuqta belgisi;
3) kasr qismi ( о ‘nlik ishorasiz  о ‘zgarmas);
4) eksponenta belgisi ‘e’ yoki ‘E’;
5)  о ‘n darajasi k о ‘rsatkichi ( о ‘nli butun son); 
6) q о ‘shimcha belgisi (‘F’ yoki f , ‘L’ yoki ‘l’ ). 
9 Eksponensial shakldagi  о ‘zgarmas sonlarga misollar: 
1e2;   5e+3;   .25e4;   31.4e-1  .
Belgi   о ‘zgarmaslar   q о ‘shtirnoq   (‘,’-apostroflar)   ichiga   olingan   alohida
belgilardan tashkil topadi va u char kalit s о ‘zi bilan aniqlanadi. Belgi  о ‘zgarmas
uchun xotirada bir bayt joy ajratiladi va unda butun son k о ‘rinishidagi belgining
ASCII   kodi   joylashadi.   Quyidagilar   belgi   о ‘zgarmaslarga   misol   b о ‘ladi:   ‘e’,
‘@’, ‘7’, ‘z’, ‘w’, ‘+’,  ‘sh’, ‘*’,  ‘a’, ‘s’.
Ayrim belgi о‘zgarmaslar ‘\’ belgisidan boshlanadi, bu belgi birinchidan, grafik
kо‘rinishga   ega   bо‘lmagan   о‘zgarmaslarni   belgilaydi,   ikkinchidan,   maxsus
vazifalar   yuklangan   belgilar   –   apostrof   belgisi,   savol   belgisini   (?),   teskari   yon
chiziq   belgisini   (\)   va   ikkita   kо‘shtirnoq   belgisini   (“)   chop   qilish   uchun
ishlatiladi.   Undan   tashqari,   bu   belgi   orqali   belgini   kо‘rinishini   emas,   balki
oshkor   ravishda   uning   ASCII   kodi   sakkizlik   yoki   о‘n   oltilik   shaklda   yozish
mumkin. Bunday belgidan boshlangan belgilar escape ketma-ketliklar deyiladi.
C++   tilida   qо‘shimcha   ravishda   wide   harfli   о‘zgarmaslar   va   kо‘p   belgili
о‘zgarmaslar aniqlangan. Wide harfli о‘zgarmaslar turi milliy kodlarni belgilash
uchun kiritilgan bо‘lib, u shart kalit sо‘zi bilan beriladi, hamda xotirada 2 bayt
joy egallaydi. Bu о‘zgarmas L belgisidan boshlanadi: L’\013\022’ ,  L/cc’.
Kо‘p   belgili   о‘zgarmas   turi   int   bо‘lib,   u   tо‘rtta   belgidan   iborat   bо‘lishi
mumkin: ‘ abs’ , ‘ \001\002\003\004’.
Ikkita   qо‘shtirnoq   (“,”)   ichiga   olingan   belgilar   ketma-ketligi   satr
о‘zgarmas deyiladi:  “bu satr о‘zgarmas va uning nomi string\n”
Satr ichida escape ketma-ketligi ham ishlatilishi mumkin, faqat bu ketma-
ketlik apostrofsiz yoziladi.
Probel bilan ajratib yozilgan satrlar kompilyator tomonidan yagona satrga
ulanadi:
“satr –bu belgilar massivi”   /* bu   satr  keyingi   satrga qо‘shiladi */   “,
uning turi char[]”;
10 Bu   yozuvga   “   satr   –bu   belgilar   massivi,   uning   turi   char[]”;   yozuvi   bilan
ekvivalent hisoblanadi. Uzun satrni bir nechta qatorga yozish mumkin va buning
uchun qator oxirida ‘\’ belgisi qо‘yiladi.
Kо‘p   miqdordagi,   mantiqan   bog‘langan   о‘zgarmaslardan   foydalanganda
sanab   о‘tiluvchi   turdan   foydalanilgani   ma’qul.   Sanab   о‘tiluvchi   о‘zgarmaslar
enum   kalit   sо‘zi   bilan   aniqlanadi.   Mazmuni   bо‘yicha   bu   о‘zgarmaslar   oddiy
butun   sonlardir.   Sanab   о‘tiluvchi   о‘zgarmaslar   C++   standarti   bо‘yicha   butun
turdagi   о‘zgarmaslar   hisoblanadi.   Har   bir   о‘zgarmasga   (songa)   mazmunli   nom
beriladi   va   bu   identifikatorni   programmaning   boshqa   joylarida   nomlash   uchun
ishlatilishi mumkin emas. Sanab о‘tiluvchi tur qо‘yidagi kо‘rinishga ega:
enum   <Sanab   о‘tiladigan   tur   nomi>   {<nom >   =<qiymat >,   <nom
iymat >, …  <nom > =<qiymat > };
Bu   yerda   enum   –   kalit   sо‘z   (inglizcha   enumerate   –   sanamoq);   <Sanab
О‘tiladigan tur nomi>- о‘zgarmaslar rо‘yxatining nomi; <nom> - butun qiymatli
konstantalarning   nomlari;   <qiymat>   shart   bо‘lmagan   inisializatsiya   qiymati
(ifoda).
Misol   uchun   hafta   kunlari   bilan   bog‘liq   masala   yechishda   hafta   kunlari
dush  (dushanba),  sesh   (seshanba),  chor  (chorshanba),  paysh  (payshanba),  juma
(juma),   shanba   (shanba),   yaksh   (yakshanba)   о‘zgarmaslarini   ishlatish   mumkin
va  ular   sanab   о‘tiluvchi   tur   yordamida   bitta   satrda  yoziladi:   enum   Hafta{dush,
sesh chor, paysh, juma, shanba,yaksh};
Sanab   о‘tiluvchi   о‘zgarmaslar   quyidagi   xossaga   ega:   agar   о‘zgarmas
qiymati   kо‘rsatilmagan   bо‘lsa,   u   oldingi   о‘zgarmas   qiymatidan   bittaga   ortiq
bо‘ladi. Kelishuv bо‘yicha birinchi о‘zgarmas qiymati 0 bо‘ladi.
§1.3.  C ++ о‘zgaruvchilar
11 О‘zgaruvchi-programma   obyekti   bо‘lib,   xotiradagi   bir   nechta   yacheyka-
larni   egallaydi   va   berilganlarni   saqlash   uchun   xizmat   qiladi.   О‘zgaruvchi
nomga, о‘lchamga va boshqa atributlarga – kо‘rinish sohasi, amal qilish vaqti va
boshqa xususiyatlarga ega bо‘ladi. О‘zgaruvchilarni ishlatish uchun ular albatta
e’lon   qilinishi   kerak.   E’lon   natijasida   о‘zgaruvchi   uchun   xotiradan   qandaydir
soha   zahiralanadi,   soha   о‘lchami   esa   о‘zgaruvchining   konkret   turiga   bog‘liq
bо‘ladi. Shuni qayd etish zarurki, bitta turga turli apparat platformalarda turlicha
joy ajratilishi mumkin.
О‘zgaruvchi e’loni uning turini aniqlovchi kalit sо‘zi bilan boshlanadi va
‘=’ belgisi orqali boshlang‘ich qiymat beriladi (shart emas). Bitta kalit sо‘z bilan
bir   nechta   о‘zgaruvchilarni   e’lon   qilish   mumkin.   Buning   uchun   о‘zgaruvchilar
bir-biridan   ’,’   belgisi   bilan   ajratiladi.   E’lonlar   ’;’   belgisi   bilan   tugaydi.
О‘zgaruvchi nomi 255 belgidan oshmasligi kerak.
C++ tilida о‘zgaruvchilarning tayanch turlari
Tur nomi Baytlardagi о‘lchami Qiymat chegarasi
B oo l 1 True  yoki  false
Unsigned short int 2 0.. 6 5535
Short int 2 -32768..32767
Unsigned long int 4 0..42949667295
Long int 4 - 2147483648..2147483647
Int(16 razryadli) 2 -32768.. 32767
Int (32 razryadli) 4 -2147483648..2147483647
Unsigned int (16  razryadli ) 2 0..65535
Unsigned int (32  razryadli ) 4 0..42949667295
Unsigned   char 1 0..255
Sha r 1 -128.. 127
Fl oa t 4 1.2YE-38..3.4YE38
Double 8 2.2YE-308..1.8YE308
Long double(32  razryadli ) 10 3.4ye-4932..- 3.4e4932
Void 2 yoki 4 -
12 Butun   son   qiymatlarni   qabul   qiladigan   о‘zgaruvchilar   int   (butun),   short:
(qisqa)   va   1ong   (uzun)   kalit   sо‘zlar   bilan   aniqlanadi.   О‘zgaruvchi   qiymatlari
ishorali   bо‘lishi   yoki   unsigned   kalit   sо‘zi   bilan   ishorasiz       son       sifatida
qaralishi   mumkin.
Belgi turidagi о‘zgaruvchilar char kalit sо‘zi bilan beriladi va ular о‘zida
belgining   ASCII   kodini   saqlaydi.   Belgi   turidagi   qiymatlar   nisbatan   murakkab
bо‘lgan   tuzilmalar   –   satrlar,   belgilar   massivlari   va   hakozalarni   hosil   qilishda
ishlatiladi.
Haqiqiy   sonlar   float   kalit   sо‘zi   bilan   e’lon   qilinadi.   Bu   turdagi
о‘zgaruvchi   uchun   xotirada   4   bayt   joy   ajratiladi   va     <ishora>   <tartib>
<mantissa>   qolipida   sonni   saqlaydi.   Agar   kasrli   son   juda   katta   (kichik)
qiymatlarni   qabul   qiladigan   b о ‘lsa,   u   xotirada   8   yoki   10   baytda   ikkilangan
aniqlik kо‘rinishida saqlanadi va mos Double va long double kalit sо‘zlari bilan
e’lon qilinadi. Oxirgi holat 32 razryadli   platformalar   uchun   о‘rinli.
Bu   turdagi   о‘zgaruvchi   bool   kalit   sо‘zi   bilan   e’lon   qilinadi.   U   turdagi
о‘zgaruvchi 1 bayt joy egallaydi va 0 (false, yolg‘on) qiymatidan farqli qiymat
(true,   rost)   qabul   qiladi.   Mantiqiy   tur   о‘zgaruvchilar   qiymatlar   о‘rtasidagi
munosabatlarni   ifodalaydigan   mulohazalarni   rost   (true)   yoki   yolg‘on   (false)
ekanligini tavsifida  qо‘llaniladi  va ular  qabul qiladigan  qiymatlar  matematik
mantiq qonuniyatlariga asoslanadi.
Programma   matnida   о‘zgaruvchi   e’lon   qilinganda,   kompilyator
о‘zgaruvchiga   xotiradan   joy   ajratadi.   Boshqacha   aytganda,   programma   kodi
xotiraga   yuklanganda   berilganlar   uchun,   ular   joylashadigan   segmentning
boshiga   nisbatan   siljishini,   ya’ni   nisbiy   adresini   aniqlaydi   va   obyekt   kod   hosil
qilishda о‘zgaruvchilar uchragan joyga ularning adresini joylashtiradi.
§1.4. Kо‘rsatkichli tiplar va ular bilan ishlash
Umuman   olganda,   programmadagi   о‘zgarmaslar,   о‘zgaruvchilar,   funk-
siyalar   va   sinf   obyektlar   adreslarini   xotiraning   alohida   joyida     saqlash   va   ular
13 ustidan   amallar   bajarish   mumkin.   Qiymatlari   adres   bо‘lgan   о‘zgaruvchilarga
kо‘rsatkich о‘zgaruvchilar deyiladi.
Kо‘rsatkich uch xil turda bо‘lishi mumkin:
-   birorta obyektga, xususan о‘zgaruvchiga kо‘rsatkich;
-   funksiyaga kо‘rsatkich;
-   void kо‘rsatkich.
Kо‘rsatkichlarining bu xususiyatlari uning qabul qilishi mumkin   bо‘lgan
qiymatlarida farqlanadi.
Kо‘rsatkichlar   kо‘pincha   dinamik   xotira   (boshqacha   nomi   «uyum»   yoki
«heap»)   bilan   bog‘liq   holda   ishlatiladi.   Xotiraning   dinamik   deyilishiga     sabab,
bu sohadagi  bо‘sh  xotira programma  ishlash  jarayonida, kerakli  paytida ajratib
olinadi va zarurat qolmaganida qaytariladi (bо‘shatiladi). Keyinchalik,  bu xotira
bо‘lagi   programma   tomonidan   boshqa   maqsadda   yana   ishlatilishi   mumkin.
Dinamik   xotiraga   faqat   kо‘rsatkichlar   yordamida   murojaat   qilish   mumkin.
Bunday о‘zgaruvchilar dinamik о‘zgaruvchilar     deyiladi     va     ularni   yashash
vaqti   yaratilgan nuqtadan boshlab programma oxirigacha yoki oshkor ravishda
yо‘qotilgan (bog‘langan xotira bо‘shatilgan) joyigacha bо‘ladi.
Kо‘rsatkichlarni   e’lon   qilishda   unga   boshlang‘ich   qiymatlar   berish
mumkin.   Boshlang‘ich   qiymat   (initsializator)   kо‘rsatkich   nomidan   sо‘ng   yoki
qavs   ichida   yoki   ‘=’   belgidan   keyin   beriladi.   Boshlang‘ich   qiymatlar   quyidagi
usullar bilan berilishi mumkin:
I. Kо‘rsatkichga mavjud bо‘lgan obyektning adresini berish:
a) adresni olish amal orqali:
int i =5, k =4; // butun  о ‘zgaruvchilar
int  * p =& i ;   / / p  k о ‘rsatkichga I  о ‘zgaruvchining adresi yoziladi
int *p1(&k) ; // p1 k о ‘rsatkichga k  о ‘zgaruvchining adresi yoziladi
b) boshqa initsializatsiyalangan k о ‘rsatkichni qiymatini berish:
int *r=p;  // p oldin e’lon qilingan va qiymatga ega b о ‘lgan k о ‘rsatkich
v) massiv yoki funksiya nomini berish:
int b [10];  // massivni e’lon qilish
14 int *t=b;   // massivning boshlang‘ich adresini berish
void f(int a) {/* ... */}  // funksiyani aniqlash
void (*pf) (int); // funksiyaga kо‘rsatkichni e’lon qilish 
pf=f; // funksiya adresini kо‘rsatkichga berish
II. Oshkor ravishda xotiraning absolyut adresini berish: 
Char *vp = (char*)0xB8000000;
Bunda 0xB8000000- о‘n oltilik о‘zgarmas son va (char*) - turga keltirish amali
bо‘lib, u vp о‘zgaruvchini xotiraning absolyut adresidagi baytlarni char sifatida
qayta ishlovchi kо‘rsatkich turiga aylantirilishini anglatadi.
III. Bо‘sh qiymat berish:
int *suxx=NULL;
int *r=0;
Birinchi   satrda   maxsus   NULL   о‘zgarmasi   ishlatilgan,   ikkinchi   satrda   0
qiymat ishlatilgan. Ikkala holda ham kо‘rsatkich hech qanday obyektga murojaat
qilmaydi.   Bо‘sh   kо‘rsatkich   asosan   kо‘rsatkichni   aniq   bir   obyektga
kо‘rsatayotgan yoki yо‘qligini aniqlash uchun ishlatiladi.
IV.   Dinamik   xotirada   new   amali   bilan   joy   ajratish   va   uni   adresini
kо‘rsatkichga berish:
Xotiraning   obyektlar   о‘rtasidan   dinamik   taqsimlanuvchi   sohasidan   joy
ajratish   uchun   new   operatori   ishlatiladi.   new   operatoridan   keyin   xotiraga
joylashtiriladigan   obyekt   tipini   kо‘rsatish   lozim.   Bu   obyektni   saqlash   uchun
talab etiladigan xotira sohasi о‘lchovini aniqlash uchun kerak bо‘ladi. Masalan,
new unsigned short int deb yozish orqali biz dinamik taqsimlanuvchi xotiradan
ikki   bayt   joy  ajratamiz.   Xuddi   shuningdek,  new  long  satri  orqali   tо‘rt   bayt  joy
obyektlar о‘trasida dinamik taqsimlanuvchi sohadan ajratiladi.
Int *n=new int; // birinchi operator
Int *m=new int(10); // ikkinchi operator
Int *q=new int[10]; // uchinchi operator
15 Birinchi   operatorda   new   amali   yordamida   dinamik   xotirada   int   uchun
yetarli   joy   ajratib   olinib,   uning   adresi   n   kо‘rsatkichga   yuklanadi.
Kо‘rsatkichning о‘zi uchun joy kompilyatsiya vaqtida ajratiladi.
Umuman   olganda,   kо‘rsatkichlar   -   bu   C ++   tilida   dasturlashning   juda
kuchli instumentdir.
#inslude < iostheam.h >
i nt   main()  
{unsigned short shortVar = 5;
unsigned long IongVar = 65535; long sVar = - 65535;
cout « "shortVar :\t" << shortVar ;
cout « "Address of shortVar:\t" ;
cout«&shortVar« "\n";
cout << "IongVar :\ t" << IongVar ;
cout << " Address of LongVar: \ t" ;
cout« &longVar« "\n";
cout « " sVar :\t" « sVar;
cout « "Address of sVar:\t";
cout « SsVar «"\n" ;
return   0; }
delete   operatori .   Agarda   о ‘zgaruvchi   uchun   ajratilgan   xotira   kerak
b о ‘lmasa   uni   b о ‘shatish   zarur.   Bu   о ‘zidan   keyin   k о ‘rsatkich   nomi   yoziladigan
delete operatori yordamida amalga oshiriladi. delete operatori k о ‘rsatkich orqali
aniqlangan   xotira   sohasini   b о ‘shatadi.   Shuni   esda   saqlash   lozimki,   dinamik
xotira sohasidagi adresni  о ‘zida saqlovchi k о ‘rsatkich lokal  о ‘zgaruvchi b о ‘lishi
mumkin. Shuning uchun bu k о ‘rsatkich e’lon qilingan funksiyadan chiqishimiz
bilan   k о ‘rsatkich   ham   xotiradan   о ‘chiriladi.   Lekin   new   operatori   orqali   bu
k о ‘rsatkichga   dinamik   xotiradan   ajratilgan   joy   b о ‘shatilmaydi.   Natijada
xotiraning   bu   qismi   kirishga   imkonsiz   b о ‘lib   qoladi.   Dasturchilar   bu   holatni
xotiraning sirqib ketishi, yoki y о ‘qolishi deb tavsiflaydilar. Bu tavsif haqiqatga
16 butunlay   mos   keladi,   chunki   dastur   ishini   yakunlaguncha   xotirani   bu   qismidan
foydalanib b о ‘lmaydi.
New va delete operatorlarining oddiy foydalanilishiga doir dastur:
#include <iostream.h>
Main (void)
{ int *p;
p=new int;
if(!p){
cout<<”xotira yetarli emas\n”;
return 1;
}
*p=20;
cout <<p<<”\n”;
delete p;
return 0;
}
Massiv uchun xotiradan dinamik joy ajratilishi uchun dastur:
#include <iostream.h>
Main (void)
{ int *p;
unsigned int size;
cout<< “Massiv  о‘lchovini kiriting ”;
cin >>size;
p=new int[size];
if(!p){
cout<<”[xotira yetarli emas\n ;”
return 1;
}
for (int i=0; i<size; i++) p[i]=i*I;
inr *q=p;
17 for (i=0; i<size; i++) 
cout << \n ;” ”
delete p;
return 0; }
2-BOB. C++  TILIDA  STRUKTURALAR
Bitiruv malakaviy ishning i kkinchi bob  C++  algoritmik tilida  aralash tipli
ma lumotlarning tasvirlash, ular bilan ishlash: o	
’ ddiy strukturalar, birlashmalar,
foydalanuvchi tomonidan ani qlangan  tiplari  h amda  ular bilan ishlovchi d asturlar
keltirilgai.
§2.1. Oddiy strukturalar
Dastlab,   aralash   tipli   ma lumotlar   va   ularning   jamlanmasi  	
’ haqidagi
tushunchaga oydinlik kiritaylik. Masalan,  inson faoliyatining har xil  sohalarida
obyektlar   turli   tipga   tegishli   ma’lumotlar   bilan   aniqlanadi.   Har   qanday   kishi
18 о‘zining ismi, familiyasi, yashash manzili, tug‘ilgan sanasi, ish sohasi va boshqa
ma’lumotlar bilan xarakterlanadi.
Aytaylik, Talaba haqidagi ma’lumotlar: satr turidagi talaba familiya, ismi
va sharifi, mutaxassislik yо‘nalish, talaba yashash adresi, butun turdagi tug‘ilgan
yili,   о‘quv   bosqichi,   haqiqiy   turdagi   reyting   bali,   mantiqiy   turdagi   talaba   jinsi
haqidagi ma’lumot va boshqalardan shakllanadi. Bu ma’lumotlarni biror jadval
shaklida tasvirlasak, aralash tipli ma’lumotlar tushunchasi haqida aniq oshadi.
№ Talabaning
F.I.SH Yо‘nalish Adresi  Tug‘ilgan
yili о‘quv
bosqichi reyting
bali Jinsi
1 Hakimov
O.T. Tarix G uzor‘
t.,
Botosh q. 1990 3 123.2 Erkak
2 Ravshanov
G .Z	
‘ Fizika Qamashi
t.   Chim
q. 1992 2 122.0 Erkak
3 Tolipova
N.R Musiqa G uzor	
‘
t.,
Botosh q. 1990 4 120.6 Ayol
4 G iyosova	
‘
SH.V Tarix Qamashi
t.   Chim
q. 1989 3 119.8 Ayol
5 Davronov
CH.K Musiqa Qarshi
sh.  1994 1 115.7 erkak
Jadvalning   har   bir   ustun   о‘z   nomiga   ega.   Bular   aralash   tipli
ma’lumotlarda maydon nomlarini bildiradi.
Jadvalning   har   bir   satrida   biror   talabaga   tegishli   turli   tipli   ma’lumotlar
keltirilgan.   Agar   jadvalda   biror   guruhga   tegishli   talabalarning   barcha   haqida
ma’lumotlar tо‘plansa, u holda bu jadval guruh talabalari haqidagi ma lumotlar	
’
jamlanmasini tashkil etadi.
Jumladan, biror predmet sohasidagi masalani yechishda undagi obyekt-lar
bir   nechta,   har   xil   turdaga   parametrlar   bilan   aniqlanishi   mumkin.   Masalan,
tekislikdagi   nuqta   haqiqiy   turdagi   x-absissa   va   y-ordinata   juftligi   -   (x,y)
kо‘rinishida beriladi. 
19 Programmada   holat   yoki   tushunchani   tavsiflovchi   har   bir   berilganlar
uchun   alohida   о‘zgaruvchi   aniqlab   masalani   yechish   mumkin.   Lekin   bu   holda
obyekt   haqidagi   ma’lumotlar   «tarqoq»   bо‘ladi,   ularni   qayta   ishlash
murakkablashadi,   obyekt   haqidagi   berilganlarni   yaxlit   holda   kо‘rish
qiyinlashadi.
C++ tilida bir yoki har xil turdagi berilganlarni jamlanmasi struktura deb
nomlanadi.   Struktura   foydalanuvchi   tomonidan   aniqlangan   berilganlarning
yangi turi hisoblanadi, Struktura quyidagicha aniqlanadi:
                                struct <struktura nomi>
                               { 
                                <tur
1  > <nom
1 >;
                                <tur
2  > <nom
2 >;
                                …
                                 <tur
n  > <nom
n >;
                                };     
Bu   yerda   <struktura   nomi>   -   struktura   kо‘rinishida   yaratilayotgan   yangi
turning nomi, "<tur
i > <nom
i >;” – strukturaning    i-maydonining (nomi) e’loni.
Boshqacha   aytganda,   struktura   e’lon   qilingan   о‘zgaruvchilardan
(maydonlardan)   tashkil   topadi.   Unga   har   xil   turdagi   berilganlarni   о‘z   ichiga
oluvchi   qobiq   deb   qarash   mumkin.   Qobiqdagi   berilganlarni   yaxlit   holda
kо‘chirish, tashqi qurilmalar (binar fayllarga) yozish, о‘qish mumkin bо‘ladi.
Talaba   haqidagi   berilganlarni   о‘z   ichiga   oluvchi   struktura   turining   e’lon
qilinishini kо‘raylik.
struct Talaba
{
char FISH[30];
  unsigned int Tug_yil;
  unsigned int Kurs;
  char Yunalish[50];
  float Reyting;
20   unsigned char Jinsi[5];
  char Manzil[50];
  bool status;            
};
Programmada   strukturalardan   foydalanish,   shu   turdagi   о‘zgaruvchilar
e’lon qilish va ularni qayta ishlash orqali amalga oshiriladi:
Talaba talaba;
Struktura turini e’lonida turning nomi b о ‘lmasligi mumkin, lekin bu holda
struktura aniqlanishidan keyin albatta  о ‘zgaruvchilar nomlari yozilishi kerak:
struct
{
unsigned int x,y;
unsigned char Rang;
} Nuqta1,Nuqta2;
Keltirilgan misolda struktura turidagi Nuqta1, Nuqta2 о‘zgaruvchilari e’lon
qilingan.
Struktura   turidagi   о ‘zgaruvchilar   bilan   ishlash,   uning   maydonlari   bilan
ishlashni   anglatadi.   Struktura   maydoniga   murojaat   qilish   ‘.’   (nuqta)   orqali
amalga   oshiriladi.   Bunda   struktura   turidagi   о ‘zgaruvchi   nomi,   undan   keyin
nuqta   q о ‘yiladi   va   maydon   о ‘zgaruvchisining   nomi   yoziladi.   Masalan,   talaba
haqidagi struktura maydonlariga murojaat quyidagicha bо‘ladi:
talaba.Kurs=2;
talaba.Tug_yil_1988;
strcpy(talaba.FISH, Abdullayev A.A. );” ”
strcpy(talaba.Yunalish,
21   Amaliy matematika va informatika );“ ”
strcpy(talaba.Jinsi, Erk );	
” ”
strcpy(talaba.Manzil,
Toshkent,Yunusobod 6-3-8,tel: 224-45-78 );	
“ ”
talaba.Reyting=123.52;
Keltirilgan   misolda   talaba   strukturasining   son   turidagi   maydonlariga
oddiy   k о ‘rinishda   qiymatlar   berilgan,   satr   turidagi   maydonlar   uchun   strcpy
funksiyasi orqali qiymat berish amalga oshirilgan.
Struktura   turidagi   obyektning   xotiradan   qancha   joy   egallaganligini   sizeof
funksiyasi (operatori) orqali aniqlash mumkin: 
int i=sizeof(Talaba);
Ayrim   hollarda   struktura   maydonlari   о‘lchamini   bitlarda   aniqlash   orqali
egallanadigan   xotirani   kamaytirish   mumkin.   Buning   uchun   struktura   maydoni
quyidagicha e’lon qilinadi:
<maydon nomi> : < о ‘zgarmas ifoda>
Bu   yerda   <maydon   nomi>   -   maydon   turi   va   nomi,   < о ‘zgarmas   ifoda>   -
maydonning   bitlardagi   uzunligi.   Maydon   turi   butun   turlar   b о ‘lishi   kerak   (int,
long, unsigned, char).
Agar   foydalanuvchi   strukturaning   maydoni   faqat   0   va   1  qiymatini   qabul
qilishini bilsa, bu maydon uchun bir bit joy ajratishi mumkin (bir bayt yoki ikki
bayt   о ‘rniga).  Xotirani   tejash   evaziga   maydon   ustida   amal   bajarishda   razryadli
arifmetikani q о ‘llash zarur b о ‘ladi.
Misol   uchun     sana-vaqt     bilan     bog‘liq   strukturani   yaratishning   ikkita
variantini k о ‘raylik. Struktura yil, oy, kun, soat, daqiqa va soniya maydonlaridan
iborat  b о ‘lsin va uni  quyidagicha aniqlash mumkin:
22 struct Sana_vaqt
{
unsigned short YIL;
   unsigned short Oy;
  unsigned short Kun;
  unsigned short Soat;
   unsigned short Minut;
  unsigned short Sekund;
};
Bunday   aniqlashda   Sana-vaqt   strukturasi   xotirada   6   maydon*2   bayt=12
bayt   joy   egallaydi.   Agar   e’tibor   berilsa   strukturada   ortiqcha   joy   egallangan
holatlar   mavjud.   Masalan,   yil   uchun   qiymati   0   sonidan   99   sonigacha   qiymat
bilan aniqlanishi yetarli (masalan, 2008-yilni 8 qiymati bilan ifodalash mumkin).
Shuning uchun unga 2 bayt emas, balki 7 bit ajratish yetarli. Xuddi shunday oy
uchun 1..12 qiymatlarini ifodalashga 4 bit joy yetarli va hakoza.
Yuqoridagi keltirilgan cheklovlardan keyin sana-vaqt strukturasini tejamli
variantini aniqlash mumkin:
struct Sana_vaqt2
{unsigned Yil: 7;
   unsigned Oy: 4;
unsigned Kun: 5;
unsigned Soat: 6;
   unsigned Minut: 6;
unsigned Sekund: 6;};
Bu struktura  xotiradan 5 bayt  joy egallaydi.
Strukturalar   funksiya   argumenti   sifatida   ishlatilishi   mumkin.   Buning
uchun   funksiya   prototipida   struktura   turi   k о ‘rsatilishi   kerak   b о ‘ladi.   Masalan,
23 talaba   haqidagi   berilganlarni   о ‘z   ichiga   oluvchi   Talaba   strukturasi   turidagi
berilganlarni   Talaba_Manzili()   funksiyasiga   parametr   sifatida   berish   uchun
funksiya prototipi quyidagi k о ‘rinishda b о ‘lishi kerak:
void Talaba_Manzili(Talaba);
Funksiyaga   strukturani   argument   sifatida   uzatishga   misol sifatidagi 
programmaning matni:
#include <iostream.h>
#include <string.h>
struct Talaba
{
  char FISh[30];
  unsigned int Tug_yil;
  unsigned int Kurs;
  char Yunalish[50];
  float Reyting;
  unsigned char Jinsi[5];
  char Manzil[50];
  bool status;
};
void Talaba_Manzili(Talaba);
int main(int argc,char* argv[])
{
  Talaba talaba;
  talaba.Kurs=2;
  talaba.tug_yil=1988;
  strcpy(talaba.FISh,”Abdullayev A.A.”);
24   strcpy(talaba.Yunalish,
  “Amaliy matematika va informatika”);
  strcpy(talaba.Jins,”Erk”);
  strcpy(talaba.Manzil,
  “Toshkent, Yunusobod 6-3-8, tel: 244-45-78”);
  talaba.Reyting=123.52;
  Talaba_Manzili(talaba);
  return 0;
}
void Talaba_Manzili(Talaba t);
{
  cout<<”Talaba FIO: “<<t.FIO<<end1;
  cout<<”Manzili: “<<t.Manzil<<end1;
}
Programma   bosh   funksiyasida   talaba   strukturasi   aniklanib,   uning
maydonlariga   qiymatlar   beriladi.   Keyin   talaba   strukturasi   Talaba_Manzili()
funksiyasiga argument sifatida uzatiladi. Programma ishlashi natijasida ekranga
quyidagi ma’lumotlar chop etiladi.
Talaba FIO: Abdullayev A.A.
Manzili: Toshkent, Yunusobod 6-3-8, tel: 244-45-78
О ‘z- о ‘zidan   ma’lumki,   struktura   turidagi   yagona   berilgan   bilan   yechish
mumkin   b о ‘lgan   masalalar   doirasi   juda   tor   va   aksariyat   holatlarda,   q о ‘yilgan
masala strukturalar majmuasi bilan ishlashni talab qiladi. Bu turdagi masalalarga
berilganlar bazasini qayta ishlash masalalari deb qarash mumkin.
Strukturalar   massivini   e’lon   qilish   xuddi   standart   massivlarni   e’lon
qilishdek,   farqi   massiv   turi   о ‘rnida   foydalanuvchi   tomonidan   aniqlangan
25 struktura   turining   nomi   yoziladi.   Masalan,   talabalar   xaqidagi   berilganlarni   о ‘z
ichiga olgan massiv yaratish e’loni quyidagicha b о ‘ladi:
const int n=25;
Talaba talabalar[n];
Strukturalar   massivining   elementlariga   murojaat   odatdagi   massiv
elementlariga   murojaat   usullari   orqali,   har   bir   elementning   maydonlariga
murojaat esa ‘.’ orqali amalga oshiriladi.
Quyidagi   misolda   talabalar   guruhidagi   har   bir   talaba   berilganlarini
klaviaturadan   kiritish   va   guruh   talabalarini   familiya,   ismi   va   sharifini   chop
qiladigan programma matni keltirilgan.
#include <iostream.h>
#include <conio.h>
const n=3;
struct Talaba
{
  char FISh[30];
  unsigned int Tug_yil;
  unsigned int Kurs;
  char Yunalish[50];
  float Reyting;
  unsigned char Jinsi[6];
  char Manzil[50];
  bool status;
};
void Talaba_Kiritish(Talaba t[]);
void Talaba_FISh(Talaba t[]);
int main(int argc,char* argv[])
26 {
  Talaba talabalar[n];
  Talaba.Kiritish(talabalar);
  Talabalar.FISh(talabalar);
  return 0;
}
void Talabalar_FISh(Talaba t[]);
{
  for(int i=0; i<n; i++);
  cout<<t[i].FISh<<end1;
}
void Talaba_Kiritish(Talaba t[]);
{
for(int i=0; i<n; i++);
  {
      cout<<i+1<<”- talaba ma’lumotlarini kiriting:”<<end1;
   cout<<” Talaba FISh :”;
   cin.getline(t[i].FISh,30);
   cout<<” Kurs:”;
   cin>>t[i].Kurs;
   cout<<” Reyting bali:”;
   cin>>t[i].Reyting;cout<<”tug’’ilgan yili:”;
   cin>>t[i].Tug_yil;
   cout<<”Ta’lim_yunalishi:”;
   cin.getline(t[i].Yunalsh,50);
   cout<<” Jinsi(erkak,ayol):”;
   cin.getline(t[i].Jinsi,6);
   cout<<” Yashash manzili:”;
   cin.getline(t[i].Manzil,50);
  }   
27 }
§2. 2.   Birlashmalar
Birlashmalar xotiraning bitta sohasida (bitta adres b о ‘yicha) har xil turdagi
bir nechta berilganlarni saqlash imkonini beradi.
Birlashma e’loni union kalit s о ‘zi, undan keyin identifikator va blok ichida
xar xil turdagi elementlar e’lonidan iborat b о ‘ladi, masalan:
union Birlashma
  {
  int n;
  unsigned long N;
  char Satr[10];
  };
Birlashmaning bu e’lonida kompilyator tomonidan Birlashma uchun uning
ichidagi eng kо‘p joy egallovchi elementning - Satr satrining о‘lchamida, ya’ni
10 bayt  joy ajratiladi. Vaqtning  har  bir  momentida birlashmada,  e’lon qilingan
maydonlarning   faqat   bittasining   turi dagi   berilgan   mavjud   deb   hisoblanadi.
Yuqoridagi misolda, Birlashma ustida amal bajarilishida uning uchun ajratilgan
xotirada   yoki   int   turidagi   n   yoki   unsigned   long   turidagi   N   yoki   Satr   qiymati
joylashgan deb hisoblanadi.
Birlashma maydonlariga xuddi struktura maydonlariga murojaat qilgandek
‘.’ orqali murojaat qilinadi.
Strukturalardan   farqli   ravishda   birlashma   e’lonida   faqat   uning   birinchi
elementiga boshlangich qiymat berish mumkin:
union Birlashma
{
28   int n;
  unsigned long N;
  char Satr[10];
  }
birlashma=[25];
Bu   misolda   birlashmasining     n   maydoni     boshlangich   qiymat   olgan
hisoblanadi.
Birlashma   elementi   sifatida   strukturalar   kelishi   mumkin   va   ular   odatda
yaxlit   berilganni   «bо‘laklarga»   bо‘lish   yoki   «bо‘laklardan»   yaxlit   berilganni
hosil   qilish   uchun   xizmat   kiladi.   Misol   uchun   sо‘zni   baytlarga,   baytlarni
tetradalarga (4 bitga) ajratish (birlashtirish) mumkin.
Quyida   baytni   katta   va   kichik   yarim   baytlarga   ajratishda   bir lashma   va
strukturadan foydalanilgan programmani matni keltirilgan.
#include <iostream.h>
union BCD
{unsigned char bayt;
  Struct
  {unsigned char lo:4;
   unsigned char hi:4;
   }bin
}bcd;
int main()
{
bcd.bayt=127;
cout<<”\n Katta yarim bayt : ”<<(int)bcd.bin.hi;
cout<<”\n Kichik yarim bayt : ”<<(int)bcd.bin.lo;
return 0;
}
29 Programma   bosh   funksiyasida   bcd   birlashmasining   bayt   о‘lchamida   bayt
maydoniga   127   qiymati   beriladi   va   uning   katta   va   kichik   yarim   baytlari   chop
etiladi.
Programma ishlashi natijasida ekranga quyidagi natijalar chiqadi:
Katta yarim bayt: 7
Kichik yarim bayt: 15
Masala.   Haqiqiy turdagi sonning kompyuter xotirasidagi ichki kо‘rinishini
chop   qilish.   Haqiqiy   son   float   turida   deb   hisoblanadi   va   u   xotirada   4   bayt   joy
egallaydi   (1   –   ilovaga   qarang).   Q о ‘yilgan   masalani   yechish   uchun   birlashma
xususiyatdan   foydalaniladi,   ya’ni   xotiraning   bitta   adresiga   haqiqiy   son   va
belgilar massivi joylashtiriladi. haqiqiy son xotiraga  о ‘qilib, belgilar massivining
har bir elementi-baytlarning ikkilik k о ‘rinishlari chop etiladi.
Programma matni:
#include <iostream.h>
const unsigned char bitlar_soni=7;
const unsigned char format=sizeof(float);
void Belgi_2kodi(unsigned char blg);
union Son_va_Belgi
{
  float son;
  unsigned char belgi[format];
};
int main()
{
Son_va_Belgi son_va_belgi
cin>> son_va_belgi.son;
30 for(int b=format-1;b>=0;b--);
  Belgi_2kodi(son_va_belgi.belgi[b]);
return 0;
}
void Belgi_2kodi(unsigned char blg);
{
unsigned char 10000000=128;
for(int i=0; i<bitlaR_soni; i++);
  {
  if(blg&10000000)cout<<’1’;
  else cout<<’0’;
   blg=blg<<1;
  }
cout<<’ ’;
}
Programmada   Son_va_Belgi   birlashmasini   e’lon   qilish   orkali   float
turidagi   x   о‘zgaruvchisi   va   4   ta   (float   turi   formatining   baytlardagi   uzunligi)
belgidan   iborat   belgi   massivini   xotiraning   bitta   joyiga   joylashuviga   erishiladi.
Bosh funksiyada birlashma turidagi,   son_va_belgi uzgaruvchisi e’lon qilinadi va
uning   x   maydoniga   klaviaturadan   haqiqiy   son   о‘qiladi.   Keyin   belgilar
massividagi   har   bir   elementning   ikkilik   kodi   chop   etiladi.   Ikkilik   kodni   chop
etish 8 marta baytni 7 razryadidagi sonni chop etish va bayt razryadlarini bittaga
chapga   surish   orqali   amalga   oshiriladi.   Shunga   e’tibor   berish   kerakki,   belgilar
massividagi elementlarning ikkilik kodlarini chop qilish   о ‘ngdan chap tomonga
bajarilgan. Bunga sabab, son ichki formatidagi baytlarning xotirada «kichik bayt
- kichik adresda» qoidasiga k о ‘ra joylashuvidir.
Programmaga  -8.5 soni kiritilsa, ekranda
11000001   00001000   00000000   00000000 
k о ‘rinishidagi ikkilik sonlari ketma-ketligi paydo b о ‘ladi.
31 C   ++   tilida   foydalanuvchi   tomonidan   nafaqat   struktura   yoki   birlashma
turlari,   balki   ayni   paytda   mavjud   (aniqlangan)   turlar   asosida   yangi   turlarni
yaratishi mumkin.
Foydalanuvchi   tomonidan   aniqlanadigan   tur   typedef   kalit   s о ‘zi   bilan
boshlanadi,   undan   keyin   mavjud   tur   k о ‘rsatiladi   va   identi fikator   yoziladi.
Oxirida yozilgan identifikator - yangi yaratilgan turning nomi hisoblanadi.
Masalan,
typedef  unsigned char byte;
ifodasi   byte   deb   nomlanuvchi   yangi   turni   yaratadi   va   о ‘z   mazmuniga   k о ‘ra
unsigned   char   turi   bilan   ekvivalent   b о ‘ladi.   Keyinchalik,   programmada
xotiradan   bir   bayt   joy   egallaydigan   va   [0..255]   oraliqdagi   qiymatlarni   qabul
qiladigan byte turidagi о‘zgaruvchi (о‘zgarmaslarni) e’lon qilish mumkin:
byte c=65
byte Byte=0xFF;
Massiv   k о ‘rinishidagi   foydalanuvchi   tomonidan   aniqlanuvchi   tur   e’loni
quyidagicha b о ‘ladi:
typedef char Ism[30];
Ism ism;
Ism turidagi ism   о ‘zgaruvchisi e’loni - bu 30 belgidan iborat massiv (satr)
e’lonidir.
Odatda   yechilayotgan   masalaning   predmet   sohasi   terminlarida   ishlash
uchun   strukturalar   qayta   nomlanadi.   Natijada   murakkab   tuzilishga   ega   b о ‘lgan
va   zarur   xususiyatlarni   о ‘ziga   jamlagan   yangi   turlarni   yaratishga   muvofiq,
b о ‘linadi.
Masalan, kompleks son haqidaga ma’lumotlarni  о ‘z ichiga oluvchi Compex
turi quyidagicha aniqlanadi:
typedef struct
32 {
  double re;
  double im;
} Complex;
Endi kompleks son e’lonini
  Complex KSon;
yozish mumkin va uning maydonlariga murojaat qilish mumkin:
KSon.re=5.64;
Kson.im=2.3;
3 -BOB.   C++  TILIDA  BERILGANLAR STRUKTURALARI
Bitiuv   malakaviy   ishining   oxirgi   u chinchi   bob da   C ++   algoritmik   tilida
turli   tipli   ma’lumotlar   strukturalari:   d inamik   strukturalar,   rо‘yxatlar,   steklar,
navbatlar va daraxtlar bilan ishlash  keltirilgan .
§3.1 . Dinamik strukturalar
Berilganlar   ustida   ishlashda   ularning   miqdori   qancha   b о ‘lishi   va   ularga
xotiradan   qancha   joy   ajratish   kerakligi   oldindan   noma’lum   b о ‘lishi   mumkin.
Programma   ishlash   paytida   berilganlar   uchun   zarurat   b о ‘yicha   xotiradan   joy
ajratish   va   ularni   k о ‘rsatkichlar   bilan   bog‘lash   orqali   yagona   struktura   hosil
33 qilish   jarayoni   xotiraning   dinamik   taqsimoti   deyiladi.   Bu   usulda   hosil   b о ‘lgan
berilganlar   majmuasiga   berilganlarning   dinamik   strukturasi   deyiladi,   chunki
ularning   о ‘lchami   programma   bajarilishida   о ‘zgarib   turadi.   Programmalashda
dinamik   strukturalardan   chiziqli   r о ‘yxatlar   (zanjirlar),   styoklar,   navbatlar   va
binar  daraxtlar   nisbatan   k о ‘p  ishlatiladi.   Ular  bir-biridan  elementlar   о ‘rtasidagi
bog‘lanishlari va ular ustida bajariladigan amallari bilan farqlanadi. Programma
ishlashida strukturaga yangi elementlar q о ‘shilishi yoki  о ‘chirilishi mumkin.
Har   qanday   berilganlarning   dinamik   strukturasi   maydonlardan   tashkil
topadi   va   ularning   ayrimlari   q о ‘shni   elementlar   bilan   bog‘lanish   uchun   xizmat
qiladi.
Masala.   Noldan farqli butun sonlardan iborat chiziqli r о ‘yxat yaratilsin va
undan k о ‘rsatilgan songa teng element  о ‘chirilsin.
Butun   sonlarning   chiziqli   r о ‘yxat   k о ‘rinishidagi   dinamik   strukturasi
quyidagi maydonlardan tashkil topadi:
struct Zanjir
{
  int element;
  Zanjir * keyingi;
};
Programma matni:
#include <iostream.h>
struct Zanjir
  {
   int element;
   Zanjir * keyingi;
  };
Zanjir * Element_Joylash(Zanjir * z, int yangi_elem);
34 {
  Zanjir * yangi=new Zanjir;
  yangi->element=yangi_elem;
  yangi->keyingi=0;
  if(z)             // r о ‘yxat b о ‘sh emas
  {
   Zanjir * temp=z;
   while(temp->keyingi)
    temp=temp->keyingi;//r о ‘yxat oxirgi elementini topish
   temp=temp->yangi;//elementni r о ‘yxat oxiriga q о ‘shish
  }
  else z=yangi;     //r о ‘yxat b о ‘sh
   return z;         // r о ‘yxat boshi adresini qaytarish
  }
  Zanjir * Element_Uchirish(Zanjir * z,int del_elem);
  {
   if(z)
   {
   Zanjir * temp=z;
   Zanjir * oldingi=0;      // joriy elementdan oldingi
                            // elementga k о ‘rsatkich
   while(temp)
   {
    if(temp->element=del_elem) 
    {
     if(oldingi)   //о‘chiriladigan element birinchi emas
    {
      // о‘chiriladigan elementdan oldingi elementni
      // keyingi elementga ulash
    oldingi->keyingi = temp->keyingi;
35     delete temp;      //elementni o’chirish
    temp=oldingi->keyingi;
   }
   else
   {
    //o’chiriladigan element ro’yxat boshida
   z=z->keyingi;
   delete temp;
   temp=z;
   }
   }
   else //element qiymati o’chiriladigan songa teng emas
   {
    oldingi=temp;
    temp=temp->keyingi;
   }
  } 
}
return z;
}
void Zanjir_Ekranga(Zanjir * z)
{
  cout<<”Zanjir elementlari:”<<end1;
  Zanjir * temp=z;
  while(temp)
  {
  cout<<temp->element<<’ ’;
  temp=temp->keyingi;
  }
cout<<end1;   
36 }
Zanjir * Zanjirni_Uchirish(Zanjir * z);
{
  Zanjir * temp=z;
  while(z)
  {
   z=z->keyingi;
   delete temp;
   }
   return z;
   }
   int main()
   { 
       Zanjir * zanjir=0;
      int son,del_element;
      do
      {
    cout<<”\n Sonni kiriting (0-jarayonni tugatish): ”;
    cin>>son;
   if(son)zanjir=Element_Joylash(zanjir,son);
   }while(son);
   Zanjir_Ekranga(zanjir);
   Cout<<”\n O’chiriladigan elementni kiriting: ”;
   Cin>>del_element;
   zanjir=Element_Uchirish(zanjir,del_element);
   Zanjir_Ekranga(zanjir);
   Zanjir = Zanjirni_Uchirish(zanjir);
   return 0;    
    }
37 Programmaning bosh funksiyasida chiziqli r о ‘yxat  h osil qilish uchun Zanjir
turidagi   zanjir   о ‘zgaruvchisi  aniqlangan  b о ‘lib,  unga 0  qiymati  berilgan (b о ‘sh
k о ‘rsatkich   qiymati,   uning   ekvivalenti   -   NULL).   Keyin   takrorlash   operatori
tanasida   klaviaturadan   butun   son   о ‘kiladi   va   Element_Joylash)   funksiyasini
chaqirish   orqali   bu   son   r о ‘yxatga   oxiriga   q о ‘shiladi.   Funksiya   yangi   h osil
b о ‘lgan r о ‘yxat  boshining  adresini  yana zanjir   о ‘zgaruvchisiga  qaytaradi. Agar
klaviaturadan   0   soni   kiritilsa   r о ‘yxatni   h osil   q ilish   jarayoni   tugaydi.   Faraz
qilaylik   quyidagi   sonlar   ketma-ketligi   kiritilgan   b о ‘lsin:   1,2,3,3,5,0,   U   h olda
h osil b о ‘lgan r о ‘yxat quyidagi k о ‘rinishda b о ‘ladi (1-rasm):
zanjir    1 2 3 3 5 0
1-rasm. Beshta sondan tashkil topgan chiziqli rо‘yxat
Hosil   bо‘lgan   rо‘yxatni   kо‘rish   uchun   Zanjir _ Ekranga ()   funksiyasi
chaqiriladi   va   ekranda   rо‘yxat   elementlari   chop   etiladi.   Rо‘yxat   ustida   amal
sifatida berilgan son bilan ustma-ust tushadigan elementlarni о‘chirish masalasi
qaralgan.   Buning   uchun   о‘chiriladigan   son   del_element   о‘zgaruvchiga   о‘qiladi
va   u   Element _ Uchirish ()   funksiyasi   chaqirilishida   argument   sifatida   uzatiladi.
Funksiya bu son bilan ustma-ust tusha digan rо‘yxat elementlarini о‘chiradi (agar
bunday   element   mavjud   bо‘lsa)   va   о‘zgargan   rо‘yxat   boshining   adresini   zanjir
о‘zgaruvchisiga   qaytarib   beradi.   Masalan,   rо‘yxatdan   3   soni   bilan   ustma-ust
tusha digan   elementlar   о‘chirilgandan   keyin   u   quyidagi   kо‘rinishga   ega   bо‘ladi
(2-rasm):
zanjir 1 2 5
2- rasm . Rо‘yxatdan 3 sonini о‘chirilgandan keyingi kо‘rinish
38 О‘zgargan   rо‘xat   elementlari   ekranga   chop   etiladi.   Programma   oxirida,
Zanjirni _ Uchirish ()   funksiyasini   chaqirish   orqali   rо‘yxat   uchun   dinamik
ravishda   ajratilgan   xotira   bо‘shatiladi   (garchi   bu   ishning   programma   tugashi
paytida bajarilishining ma’nosi yо‘ q ).
Dinamik   strukturalarda   о‘ zgartirishlar   ( r о‘ yxatga   element   q о‘ shish   yoki
о‘ chirish )   nisbatan   kam   amallarda   bajarilishi ,   ular   vositasida   masalalarni
samarali   yechishning   asoslaridan   biri   hisoblanadi .
§3.2. Rо‘yxatlar, steklar va navbatlar
Ma’lumotlarning   rо‘yxatli   strukturasi     bu   о‘zaro   kо‘rsatkichlar   bilan
bog‘langan   о‘zgaruvchilarning   tо‘plamidir.   Rо‘yxatli   strukturaning   har   bir
elementi bir yoki bir nechta kо‘rsatkichlarni о‘z tarkibiga oladi.
Dastlab,   dasturda   ma’lumotlarning   tipini   aniqlash   zarur,   ya’ni   rо‘yxatli
strukturaning elementini keltirish kerak.
Struct elem //struktura tipini aniilanishi
{ int value; //element qiymati
Elem *next; //yagona kо‘rsatkich yoki
Elem *next, *pred; //ikki kо‘rsatkich yoki
Elem *links[10]; // kо‘rsatkichning chekli soni yoki
Elem *plinks; //kо‘rsatkichlarning ixtiyoriy soni
};
Bundan   tipli   о‘zgaruvchining   bir,   ikki,   10   dan   kо‘p   emas   va   ixtiyoriy
(dinamik massiv) sondagi kо‘rsatkichlarni о‘z  ichiga olishi mumkin. Lekin ...
Shunday   qilib,   ma’lumotlar   (chiziqli   rо‘yxat,   daraxt,   graf)   bular   bilan
ishlovchi funksiyaga bog‘liq.
Demak,  ma’lumotlar  strukturasi  na  faqat  uning  elementlari  aniqlanishida
“himoya”, balki ularni qayta ishlash algoritmida ham.
Ma’lumotlarning rо‘yxatli strkuturalari odatda dinamikdir. Buning uchun
ikki sabab bor.
39 Bunday   strukturalarning   о‘zgaruvchilarining   о‘zlari   dinamik   о‘zgaruvchi
sifatida yaratiladi, u holda uning soni ixtiyoriy bо‘lishi mumkin.
О‘zgaruvchilar orasidagi bog‘lanish soni va ularning xarakteri ham dastur
ishlash jarayonida dinamik aniqlanadi. 
Dasturda   ma’lumotlarning   rо‘yxatli   strukturalarining   biror   elementiga
kо‘rsatkichlar orqali mumkin, Bu element bosh element deb ataladi.
Ma’lumotlarning   rо‘yxatli   strukturasi   dasturda   kо‘rsatkich   orqali   uning
qaysidir elementiga kirish mumkin, ular sarlavha deyiladi.
Chiziqli   rо‘yxat   о‘zgaruvchilarning   chiziqli   ketma   ketligini   о‘zida
ifodalaydi,   ularning   har   biri   о‘zining   qо‘shnilari   bilan   kо‘rsatkichlar   bilan
bog‘langan. Rо‘yxatlar kuyidagi kо‘rinishlarda bо‘ladi:
-   bir   bog‘lamli   rо‘yxatlarning   har   bir   elementi   keyingisiga   kо‘rsatkichga
ega.
-   ikki   bog‘lamli   rо‘yxatning   har   bir   elementi   oldingi   va   keyingi
elementiga kо‘rsatkichga ega.
-   sikllik   rо‘yxatning   birinchi   va   oxirgi   elementi   bir   biriga   hovalanadi   va
bu eanjir о‘zida xalqani ifodalaydi.
         Sarlavha
0 1     2         3     mantiqiy
nomer
      NULL
  joriy
Bir bog‘lamli rо‘yxat
40 Sarlavha
  joriy
Ikki bog‘lamli rо‘yxat
Ma’lumotlarning   strukturasi   sifatida   chiziqli   rо‘yxatning   ketma-ketligi
rо‘yxat   elementlarining   xotirada   fizik   joylashuviga   bog‘liq   emas,   ularning
kо‘rsatkichlar bilan bog‘lanish ketma- ketligiga bog‘liq. Xuddi shunday rо‘yxat
elementlarining   nomeratsiyasi   (ravamlanishi)   aniqlanadi.   Ruyxatdagi   element
mantiqiy raqami – rо‘yxat tayyorlanish jarayonida u ega bо‘ladigan raqam. 
Ketma   ket   kirishli   ma’lumotlarning   strukturali   rо‘yxati.   Rо‘yxatlar   bilan
ishlash faqatgina kо‘rsatkichlar bilan amalga oshiriladi. Ularning har biri rо‘yxat
bо‘yicha   joylashadi   (element   elementga   qayta   о‘rnatiladi),   unda   interpretatsiya
kо‘rsatkichi ma’nolaridan biriga ega bо‘ladi, rо‘yxatning  birinchi,   oxirgi,   joriy,
oldingi ,  yangi  va boshqa elementlariga. Bunda massiv va undagi indekslar bilan
analogiya   о‘rinli,   biroq   bir   shart   asosida,   indeks   chiziqli   о‘zgaradi,   ixtiyoriy
emas,   massivdagi   tо‘ldirilgan   elementlarning   joriy   miqdori   esa   alohida
о‘zgaruvchiday berilgan.
Tasvirlanishi
amallar Rо‘yxat Massiv
aniqlanish Struct list {int val, 
list *next, *pred;}; Int A[100];
Int n;
Ma’lumotlarning   bо‘sh
strukrura List *ph=NULL N=0;
Birinchi List *p;  p=ph; Int i=0;
Keyingi p->next I+1
Oldingi p->pred I-1
Keyingiga p=p->next I++
oldingiga p=p->pred i--
41 Kо‘zdan kechirish for (p=ph; p!= NULL;
p=p->next)
…   p->val… for (i=0;i<n;i++)
…   A[i]…
Oxirgi p->next=NULL I=n-1
Oxirgiga for (p=ph; p ->next!=NULL;
p=p->next); I=n-1
Yangi List *q=new list;
q->val=v; int v;
Oxirgi bо‘lib kiritish for (p=ph; p ->next!=NULL;
p=p->next);
q->next=NULL; p->next=q; A[n++]=v
Birinchi bо‘lib kiritish q->next=ph; ph=q; for (i=n;i>0;i--) 
A[i]=A[i-1];
A[0]=v; n++;
Rо‘yxatlarni   shakllantirish   usullari.   Statik   rо‘yxat   о‘zida   oddiy
о‘zgaruvchilarni   ifodalaydi   –   elementlar   rо‘yxati,   ular   orasidagi   bog‘lanish
translyator   bilan   initsializatsiyalanadi.   Ma’lumotlarning   barcha   strukturasi
dastur kodiga “tikiladi”. 
Struct list
{ 
Int val;
List *next;
}
a={0, NULL},  b={1, &a},  c={2, &b}, *ph=&c;
Sezamizki,   о‘zgaruvchilar   ta’rifining   shartiga   kо‘ra   rо‘yxat   “oxiridan
boshiga qarab” yaratiladi.
Rо‘yxat   massivdan   olingan   cheklangan   miqdordagi   elementga   ega   bо‘-
l ishi mumkin. Bog‘lanishlar dinmik о‘rnatiladi, ya’ni dastur tomonidan. Bunday
usul elementlarning fiksirlangan miqdori bir nechta turli dinamik strukturalarni
tashkil   qiladi.(masalan   navbatlar),   ularda   rо‘yxat   elementlari   bir   strukturadan
boshqasiga kо‘chiriladi.
List A[100], *ph;
for (i=0; i<99; i++) { 
A[i].next=A+i+1;
42 A[i].val=I;
A[99].next=NULL;
ph=&A[0];
Dinamik   rо‘yxatda   elementlar   dinamik   о‘zgaruvchilardir,   ularning
orasidagi bog‘lanish dasturiy о‘rnatiladi. 
List *ph=NULL;
For (int i=0; i<10; i++) {
List *q=new list;
q->val=I;
q->next=ph;
ph=q;}
Rо‘yxatning   sarlavhasi.   Dasturda   rо‘yxat   odatda   birinchi   elementga
kо‘rsatkich   –   sarlavha   bilan   beriladi.   Bо‘sh   rо‘yxatga   NULL   kо‘rsatkich   mos
keladi. Rо‘yxat bilan ishlovchi funksiya, zaruriy parametrga ega bо‘lishi kerak,
ya’ni, rо‘yxat sarlavhasiga.
Void F1(list *p) {
for ( ; p!=NULL; p=p->next) puts(p->val);
}
Shunday   faktni   hisobga   olish   kerakki,   Sida   parametr   qiymat   (nusha
kо‘rinishida)   bо‘yicha   uzatiladi,   bu   usul   shunday   holatda   о‘rinliki,   u   qachonki
rо‘yxatning   birinchi   (hisob   bо‘yicha)elementi   rо‘yxat   bilan   ishlash   jarayonida
shunday qolsa. Aks holda, kо‘rsatkichni (sarlavhani) о‘zini о‘zgartirish lozim, u
quyidagicha amalga oshirilishi mumkin:
- sarlavhaning   о‘zgargan   qiymatini   funksiya   natijasi   kо‘rinishida
qaytarish bilan;
- rо‘yxat   sarlavhasiga   kо‘rsatkich   uzatish   bilan   (kо‘rsatkichni   kо‘r-
satkichga);
- sarlavhaga   havola   uzatish   bilan.   Eslatib   о‘tamizki,   havola   yaqqol
bо‘lmagan   (mavhum)   kо‘rsatkich,   u   obyekt   sintaksisi   bilan   ishlashda   foyda-
laniladi, u unga mos faktik parametrda “tasvirlanadi”.  
43 Sarlavhani о‘zgartirish bilan rо‘yhat boshiga kiritish.
Variant 1.
List *ins1(list *ph, int v)
{ list *q=new list;
q->val=v; q->next=ph; ph=q;
return ph;}
Variant 2.
Void ins2(list **p, int v)
{ list *q=new list;
q->val; q->nest=*pp; *pp=q;}
Variant 3.
Void int3 ( list *&pp, int v)
{ list *q=new list;
q->val; q->next=pp; pp=q;}
Chaqirish uchun misol.
Void main(){
List *ph=NULL;
Ph=ins1(ph,5);
Ins2(&ph,66);
Ins3(ph,7);}
Bir   bog‘lamli   rо‘yxat.   Oddiy   holat   rо‘yxat   elementi   keyingisiga   yagona
kо‘rsatkichga   ega   bо‘ladi,   bu   rо‘yxat   bо‘yicha   bir   yо‘nalishda   harakatlanish
imkoniyatini     beradi.   Kо‘p   holatlarda   elementlarni   kiritish   va   chiqarishda
kо‘rsatkichni   oldingi   elementga   saо‘lash   talab   qilinadi.   Masalan,   rо‘yxatga
о‘sish   tartibini   saqlash   bilan   yangi   element   qо‘nish   joyi   birinchisidan   oldin,
rо‘yxatni   boshidan   qarab   chiqqanda   kiritilayotgan   kattadir.   Bu   rо‘yxatning
oldingi elementidagi kо‘rsatkichni qiymatini talab qiladi.
Tartibni saqlash bilan bir bog‘lamli rо‘yxatga kiritish.
Void insSort(list *&ph, int v)
{ list *q, *pr, *p;
44 q=new list; q->val=v;
for (p=ph, pr=NULL; p!=NULL && v>p->val; pr=p, p=p->next);
if (pr=NULL)
{q->next=ph; ph=q;}
else 
{q->next=p;
pr->next=q;}}
Bu yerda  pr  rо‘yxatning oldingi elementiga kо‘rsatkich.
“chetki”   vaziyatlarda   qо‘shimcha   tekshirish   shuni   kо‘rsatadiki,   qо‘shish
(qо‘yish)   joyini   izlayotgan   fragment   aniq   ishlaydi   rо‘yxat   bо‘sh   bо‘lgan   holda
ham (yaproq bо‘yicha ishlaydi- birinchisidan oldin qо‘yish).
Ikki bog‘lamli rо‘yxat elementlar zanjiri bо‘yicha ikkala yо‘nalishda ham,
keyingi   va   oldingi   elementlarga   kirib   harakatlanish   imkonini   beradi.  Bu   uchun
“tо‘lov”   kо‘rsatkichlar   ustida   operatsiyalar   miqdorini   kо‘payishi   bilan   amalga
oshadi.
Berilgan mantiqiy nomer bо‘yicha rо‘yxatdan elementni yо‘qotish.
Void Del(list *&pp, int n)
{ list *q;
for (q=pp; q!=NULL && n!=0; q=q->next, n--);
if (q=NULL) return;
if (q->pred=NULL)
pp=q->next;
else q->pred ->next=q->next;
if (q->next!=NULL)
q->next->pred=q->pred;
delete q;}
Siklik   rо‘yxat.   Chiziqli   elementlar   zanjirini   modellash   imkonini   beradi,
bunda doimiy tekshiruvlarni  “birinchisi” va “oxirgisiga” bо‘lishni istisno qiladi.
Bunday rо‘yxatning о‘ziga xos (imkoniyatlari) xususiyatlari:
45 - oxirgi   elementning   next   maydoni   birinchi   elementga   hovalanadi,
birinchi elementning pred maydoni esa rо‘yxatning oxirgi elementiga.
- Rо‘yxatning yagona elementi о‘z о‘ziga havolanadi. ( q->next=q   va
q-> pred=q) ;
- Rо‘yxatning   boshi   va   oxiriga   element   qо‘shish   jarayoni   о‘xshash,
biroq birinchi holda sarlavha о‘zgarmaydi.
Bunday   rо‘yxatni   qо‘rish   siklli   joriy   elementning   kо‘rsatkichini   sharti
keyin siklda rо‘yhat boshiga qaytarishni nazarda tutadi:
List *p=ph;
do {
p=p->next’
} while (p!=ph);
Barcha   sanab   о‘tilgan   xusuiyatlarni   kuyida   keltirilgan   tartibi   saqlangan
yangi elment qо‘shish msolida kshrish mumkin:
Tartibni saqlash bilan siklli rо‘yxatga kiritish.
List *InsSort(list *ph, int v)
{list *q=new list;
q->val=v; q->next=q->pred=q;
if (ph=NULL) return q;
list *p=ph;
do { if (v<p->val) break;
p=p->nest;
} while (p!=ph);
q->nest=p;
q->pred=p->pred;
p->pred->next=q;
p->pred=q;
if (ph->val>v) ph=q;
return ph;}
46 Qо‘shish   joyini   qidirish   birinchi   elementi   aniqlash   bilan   yakunlanadi,
beriligandan   katta,   yoki   rо‘yxat   boshiga   qaytish   bilan   yakunlanadi.   Ikkala
holatda   ham   joriy   elementdan   oldin   qо‘shish   joyi   aniq   (korrekt)   tanlanadi:
birinichidan oldin qо‘yish oxirigisidan keyin qо‘shish bilan tengdir.
Stek   va   iavbatni   bir   bog‘lamli   rо‘yxat   orqali   ifodalash.   Stekni   bir
bog‘lamli rо‘yxat yordamida modellashtirish mumkin, bunda birinchi elementni
chetlashtirsh   sifatida   POP,   rо‘yxat   boshiga   qо‘shish   sifatida   esa   Push
operatsiyalari   amalga   oshiriladi.   Navbatni   modellashtirish   uchun   rо‘yxatning
birinchi   va   oxirigi   elementlarining   ikki   kо‘rsatkichi   foydalaniladi.   (Rо‘yxat
oxiriga tо‘g‘ridan tо‘g‘ri о‘tish uchun)
Void infoFIFO(list *ph[], int v)
{
List *p=new list;
p->val=v;
p->next=NULL;
if (ph(0)=NULL)
ph(0)=ph[1]=p;
else {
ph[1]->nest=p
ph[1]=p;
}}
Int fromFIFO(list *ph[])
{
If(ph[0]=NULL) return -1;
List *q=ph[0];
Ph[0]=q->next;
if (ph[0]=NULL) ph[1]=NULL;
int v=q->val;
delete q; return v;}
47 Bir   bog‘lamli   rо‘yxatlarni   qо‘yilmalar   bilan   tartiblashni   amalaga
oshirishning   xususiyati   shundaki,   uning   elementlarini   “О‘zining   joylarida”
saqlashidir. Tartiblash  jarayonida elementlar  kiruvchi  rо‘yxatdan chiquvchisiga
kо‘rsatkichlarni   “sochib   tashlash”   yо‘li   bilan   kо‘chadi.   Qо‘yilmalar   holida
tashqi   sikl   kiruvchi   rо‘yxatdan   navbatma   navbat   elementlarni   tanlaydi,   ichkisi
esa   ularni   chiquvchi   rо‘yxatga   tartib   saqlagan   holda   kiritadi.   Sezamizki,
kuyidagi   dastur   juda   ham   rasmiy   tshzilgan,   rо‘yxatlar   bilan   sanab   о‘tilgan
amallar bilan.
Qо‘yishlar bilan bir bog‘lamli rо‘yxatni tartiblash.
List Sort(list *ph)
{list *q, *out, *p, *pr;
Out=NULL;
While (ph!=NULL)
{q=ph; ph=ph->nest;
for   (=out,   pr=NULL;   p!=NULL   &&   q->val>p->val;   pr=p,   p=p-
>next);
if (pr=NULL)
{q->next=out; out=q;}
else 
{q->next=p; pr->next=q; }
}
return out;}
Tartib saqlagan holda ikki bog‘lamli rо‘yxatga qо‘shish  q uyidagi dasturda
tо‘rtta   vaziyat   (holat)   ga   ham   adekvat   (bir   xil)   javob   qaytaradi:   bо‘sh   rо‘yxat,
rо‘yxat boshi, rо‘yxat oxiri va о‘rtasiga qо‘shish.
Tartibni saqlash bilan ikki bog‘lamli rо‘yxatga kiritish.
Void insSort(list *&ph, int v)
48 { list *q, *p=new list;
p->val=v;
p->pred=p->next=NULL;
if (ph=NULL)
ph=p; return ;
}
for (q=ph; q!=NULL && v>q->val; q=q->next);
if (q=NULL)
{
for (q=ph; q->next!=NULL; q=q->next);
p->pred=q;
q->next=p;
return ;
}
p->next=q;
p->pred=q->pred;
if (q->pred=NULL)
ph=p;
else
q->pred->next=p;
q->pred=p’}
  
XULOSA
Ushbu  “   C++  tilida   aralash  tipli   ma’lumotlar   bilan  ishlash”  mavzusidagi
bitiruv malakaviy ishni bajarish davomida kuyidagi natijalarga erishildi:
1. Bitiruv malakaiy ishning asosiy maqsadi va vazifasidan kelib, chiqqan
holda C++ algoritmik tilining turli tiplarga tegishli ma’lumotlarni qayta ishlash
49 imkoniyatlari   va   ularning   ma’lumotlar   jamlanmasi   ustida   turli   operatsiyalar
bajarish amalga oshirildi.
2.   C ++   algoritmik   tilida   turli   tipga   tegishli   ma’lumotlarning   dinamik
strukturalari bilan ishlash uchun dasturlar ishlab chiqildi.
3. C++ algoritmik tilida dinamik strukturalar yordamida ma’lumot-larning
har   xil   strukturalari:   chiziqli   rо‘yxat,   stek   va   navbatlarni   qayta   ishlash   uchun
dasturlar yaratildi.
4. Aralash tiplardan iborat bо‘lgan ma’lumotlar jamlanmasini tashkil etish
uchun dasturi ishlab chiqildi.
5.   Yuqorida   olingan   natijalarni   ta’lim   sohasida   aralash   tipga   oid
ma’lumotlarni   qayta   ishlash   uchun   dasturlar   yaratish   va   informatika   fanlarida
ma’lumotlar jamlanmasi  va ular bilan bog‘liq mavzularni о‘qitish va о‘qitishni
takomillashtirishda foydalanish mumkin.
6. Ishlab chiqilgan dasturlarni turli sohalarda:  matematika, iqtisodiyot va
boshqa fanlarning har xil tipga tegishli ma’lumotlarini qayta ishlaashda qо‘llash
mumkin. 
 
FOYDALANILGAN ADABIYOTLAR RО‘Y X ATI
1. Podbelskiy V.V. Yazik  C ++.- M.; Finansi i statistika- 2003 562s.
2. Alekseyev A.P.  Informatika .  2001. M., SOLON-R, 2001, 364 s
3.   Informatika.   Bazovoy   kurs.   Uchebnik   dlya   Vuzov.,   Sank-Peterburg,   2001.
pod redaksiyey S.V.Simonovicha.
50 4.   Madraximov   SH.F.,   Gaynazarov   S.M.   C ++   tilida   programmalash   asoslari.
Uslubiy qо‘llanma, О‘zMU, 2009-196 b.
5. Informatika va programmalsh.O’quv qo’llanma. Mualliflar: A.A.Xaldjigitov,
Sh.F.Madraximov, U.E.Adamboev, O’zMU, 2005 yil, 145 bet.
web saytlar
6.  http://www.edu.uz   
7.  http://dastur.uz  
8.  http://www.intuit.ru
9.  http://www.exponenta.ru
51
Sotib olish
  • O'xshash dokumentlar

  • Android tizimli telefonlar uchun skaner ilovasini yaratish
  • Web 2.0 servislar orqali oʻquv jarayonini tashkil etish
  • Elektron jadvalning vazifalari va imkoniyatlari mavzusini multimedia asosida o‘qitish
  • Adobe Muse dasturi yordamida A.Oripov hayoti va ijodi mavzusida multimediali elektron resurs yaratish
  • Informatika fanini o‘qitishda innovatsion ishlanmalar yaratish texnologiyasi

Xaridni tasdiqlang

Ha Yo'q

© Copyright 2019-2026. Created by Foreach.Soft

  • Balansdan chiqarish bo'yicha ko'rsatmalar
  • Biz bilan aloqa
  • Saytdan foydalanish yuriqnomasi
  • Fayl yuklash yuriqnomasi
  • Русский