logo

Algoritmlarni murakkablik darajalasining tahlili, murakkablik darajasini baholash usullari

Загружено в:

12.08.2023

Скачано:

0

Размер:

262.7783203125 KB
REJA:
KIRISH
1. Ma’lumotlar   tuzilmasi,   tuzilmalar   ustida   bajariladigan   amallar.
Dasturlash texnalogiyalari
2. Algoritmlarni   murakkablik   darajalasining   tahlili,   murakkablik
darajasini baholash usullari.
3. Ma lumotlar tuzilmasida satrli va belgili turlarni dasturlashtirish‟
4. Dinamik   xotiradan   foydalanish,   dinamik   xotirani   ishlatishda
ko rsatkich turlari
‟
5. Murakkab   turlarni   algoritmlashtirish   va   dasturlash.   Vektorlar   va
massiv ma lumotlarini algoritmlashtirish	
‟
6. Struktura turi, struktura dasturlash va algoritmlash
7. Tartiblash   va   saralash   masalalarini   algoritmlashtirish.   Ma lumotlarni	
‟
tartibga solish turlari. Ma lumotlar tuzilmasini saralash usullari.	
‟
8. Qidiruv algoritmlari. Axborot  izlashning asosiy  tamoyillari. Kеtma-kеt
izlash. Izlashning tеzlashtiririlgan usullari.
9. Algoritmlashtirishda  graflar nazariyasi,  graflarni algoritmlashtirish.
10. Kombinatorika elementlarini dasturlash va algoritmlashtirish 
XULOSA
FOYDANILGAN ADABIYOTLAR KIRISH
Algoritm   ijrochiga   tushunarli   bolishi   uchun   ijrochining   imkoniyatlarini
bilish   lozim.   Agar   ijrochi   inson   bo’lsa,   u   holda   algoritm   insonning
imkoniyatlaridan   kelib   chiqib   tuzilishi   kerak.   Bunda   ko‘zlangan   maqsad   va
algoritmdan kelib chiqib inson tushunadigan til, insonning bilimi, hayotiy tajribasi,
kasbiy   malakasi,   yoshi,   qolaversa,   jismoniy   imkoniyatlari   hisobga   olinishi   zarur.
Agar ijrochi texnik vosita (masalan, kompyuter, elektron soat, dastgohlar) boMsa,
u   holda   algoritm   shu   texnik   vositaning   imkoniyatlaridan   kelib   chiqib   tuzilishi
kerak.
Inson hayoti davomida katta-kichik vazifalar yoki masalaiarni hal etishni o‘z
oldiga   maqsad   qilib   qo‘yadi.   Odatda,   u   o‘z   maqsadiga   erishishi   uchun   bajarishi
lozim   bo'lgan   amal   yoki   ishlarini   hayotiy   tajribasi   yoki   o'zlashtirgan   bilimiga
asoslanib   ma'lum   bir   tartibga   keltiradi.   Bunga   hayotimizdan   xilmaxil   misollar
keltirish mumkin.
1   -   misol   Ko‘chadan   o'tish   maqsad   qilib   qo‘yilgan   bo'lsin.   IJ   holda   ko‘chadan
o'tayotgan   kishi   hammamizga   odatiy   hol   bo‘lib   qolgan   quyidagi   harakatlarni
bajarishi lozim bo'ladi: 
1) chap tarafga qaralsin, agar transport vositasi yo‘q bo‘lsa, 2- bandga o'tilsin, aks
holda 1-bandga o'tilsin;
 2) o‘ng tarafga qaralsin, agar transport vositasi yo‘q bo‘lsa, 3- bandga o'tilsin, aks
holda 1-bandga o'tilsin; 
3) ko'chadan o'tilsin.
Yuqoridagi   misollarda   keltirilgan   amallar   ketma-ketligi,   boshqacha
aytganda,   ko'rsatmalar   yoki   buyruqlar   ketma-ketligi   biror   kishi   tomonidan
bajarilgach,   ko'zlangan   maqsadga   erishiladi.   Bunday   amallar   ketma-ketligi   yoki
hayotimizda   har   kuni   va   har   soatda   uchrab   turadigan   turli   qoidalar   ichida   biror
zaruriy   natijaga   erishishga   olib   keladigan   amallarni   ketma-ket   bajarishni   talab
etadigan qoidalar informatikaning asosiy tushunchalaridan biri algoritm so‘zi bilan
ifodalanadi. Algoritm so‘zi IX asrda yashab (783-yilda tug‘ilgan) o‘z ilmiy ishlari
xazinasi   bilan   dunyoga   tanilgan   vatandoshimiz   buyuk   astronom,   matematik   va
geograf Abu Abdullo Muhammad ibn Muso al-Xorazmiy nomidan kelib chiqqan.
Al-Xorazmiy   arifmetikaga   bag‘ishlangan   «Hind   hisobi   haqida   kitob»   risolasida to‘qqizta hind raqamining sonlarni ifodalashdagi afzalliklari va ular yordamida har
qanday   sonni   ham   qisqa   va   oson   yozish   mumkinligini   aytadi   va   hozirgi   kunda
hamma   o‘quvchilar   biladigan   sonlar   ustida,   yuqoridagi   3-misoldagi   kabi   ustun
ko'rinishida   amallar   bajarish   qoidalarini   yoritadi.   Ayniqsa,   nol   (0)   qo‘llashning
ahamiyati haqida tushuncha berib, nolni yozmaslik natijaning xato chiqishiga olib
keladi, degan. Bu risola XII asrda Ispaniyada lotin tiliga tarjima qilingan va butun
Yevropaga   tarqatilgan.   Bu   tarjimaning   XIV   asrda   ko'chirilgan   qoLyozmasi   ning
yagona   nusxasi   Kembrij   universitetining   kutubxonasida   saqlanmoqda.   Risola
«Dixit Alxhorithmi», ya’ni oDediki aiXorazmiy» iborasi bilan boshlanadi.
Algoritm   deganda,   biror   maqsadga   erishishga   qaratilgan   ijrochi   bajarishi
uchun   mo'ljallangan   ko‘rsatma   (buyruq)laming   aniq,   tushunarli   va   chekli   ketma-
ketligi   tushuniladi.   Bu   algoritm   tushunchasining   matematik   ta'rifi   boMmasa   ham
intuitiv   ma'noda   algoritmning   mazmunini   ochib   beruvchi   tavsifidir.   Algoritmni
intuitiv   ma’noda   bir   necha   misollarda   izohlaymiz.   Biror-bir   narsani   taqiqlovchi
qoidalar   algoritm   boMolmaydi,   masalan:   «Chekish   mumkin   emas»,
«Begonalarning kirishi taqiqlanadi», «Kirish», «Chekish  uchun joy» kabi  birorbir
narsaga ruxsat etuvchi qoidalar ham algoritmga xos emas. Lekin «Svetoforni yashil
rangida   o‘ting»   juda   sodda   bo'lsa   ham   algoritmdir.   Demak,   yuqorida   keltirilgan
misollardagi ko‘rsatmalar ketma-ketligi algoritm va bu algoritmlarni bajarayotgan
inson   —   ijrochi   boMar   ekan.   Algoritm   ijrochisi   faqat   insonmi,   degan   savol
berishingiz tabiiy. Bu savolga javob quyidagicha: Algoritm ijrochisi — algoritmda
ko'rsatilgan  buyruq  yoki  ko‘rsatmalarni  bajara  oladigan abstrakt  yoki  real   (texnik
yoki   biologik)   sistema.   Ijrochi   bajara   olishi   uchun   algoritm   unga   tushunarli
boMishi lozim. Algoritm ijrochi tushunadigan tilgagina emas, balki uning bilim va
malakasiga   ham   mos   boMishi   kerak.   Aks   holda   ijrochi   birorta   ham   ko'rsatmani
bajara   olmasligi   mumkin.   Ijrochi   bajara   olishi   mumkin   boMgan   ko‘rsatma   yoki
buyruqlar   to‘plami   ijrochining   ko‘rsatmalar   sistemasi   deyiladi.   Masalan,   «16
sonidan   kvadrat   ildiz   chiqarilsin»   ko'rsatmasi   2-sinf   o'quvchisining   ko'rsatmalar
sistemasiga   tegishli   boMmaydi,   lekin   8-sinf   o'quvchisining   ko‘rsatmalar
sistemasiga tegishli boMadi. 
1. Ma’lumotlar tuzilmasi, tuzilmalar ustida bajariladigan amallar.
Dasturlash texnalogiyalari
Ma’lumotlar   tuzilmasi   —   bu   ma’lumotlarni   samarali   o’qish   va   o’zgartirish
imkonini beruvchi, ma’lumotlarni saqlash va boshqarishning bir formatga solingan
shaklidir. Barcha   dastur   yoki   dasturiy   mahsulotning   asosida   ikkita   birlik   yotadi:
ma’lumotlar va ular ustida qandaydir amallar bajaradigan algoritmlar. Algoritmlar
ma’lumotlarni   biz   yoki   dastur   uchun   foydali   bo’lgan   axborot   ko’rinishiga   keltirib
beradi.   Algoritmlar   shu   ma’lumotlar   ustida   amallarni   (o’qish,   yozish,   yangilash,
o’chirish)   samarali   va   tez   bajara   olishi   uchun   biz   shu   ma’lumotlarni   ma’lum   bir
strukturaga solgan holda saqlashimiz kerak bo’ladi. Demak shunday qilib,
Quyida   keltirilgan   ma’lumotlar   tuzilmalari   dasturlashda   eng   ko’p
qo’llaniladigan tuzilmalardir. Ularga: 
1. Massiv (Array)
2. Bog’langan ro’yhat (Linked List)
3. Navbat (Queue)
4. Stek (Stack)
5. Hash jadvallar (Hash tables)
6. Daraxtlar (Trees)
7. Graflar (Graph) kiradi. 
Biz   bu   bo’limda   boshidagi   5   ta   tuzilma   bilan   yaqindan   tanishib,   ularning
kuchli va kuchsiz tomonlari va ularni qanday holatlarda ishlatish ma’qulligi haqida
gaplashib o’tamiz. Qolgan ikkita tuzilma murakkabroq bo’lib ular o’z ichida yana
ko’plab   turlarga   bo’linib   ketadi.   Shuning   uchun   ularni   keyinroqqa   qoldiramiz.
Bundan   tashqari   barcha   tuzilmalarning   hamma   joyda   ingliz   tilidagi   nomi ishlatilgani   va   ularning   nomi   odatda   tarjima   qilinmaganligi   sababli   keyingi
o’rinlarda   men   ularning   asosan   ingliz   tilidagi   nomlarini   ishlataman.   Turli   xildagi
ma’lumotlar   tuzilmalari   nima   uchun   kerak?   Ma’lumotlar   tuzilmalari   nimaligi
haqida   qisman   tasavvurga   ega   bo’ldingiz   va   ularning   asosiy   turlari   bilan   ham
tanishib oldingiz. Lekin, shu joyga kelib agar sizda “Nima uchun ma’lumotlarning
turli   xil   tuzilmalari   kerak?”   “Nima   uchun   bir   turdagi   universal   ma’lumotlar
tuzilmalaridan foydalanib qo’ya qolsa bo’lmaydi?” degan savol tug’ilmagan bo’lsa,
bu   yaxshi   emas.)   Keling   endi   shu   savolga   javob   topishga   harakat   qilamiz.   Undan
oldin   ma’lumotlar   tuzilmalari   ustida   asosiy   bajarilishi   mumkin   bo’lgan   amallarni
ko’rib chiqaylik. Bularga ma’lumotlarni  :
 Ko’rib chiqish (Traversing)
 O’qib olish (Retrieving)
 Kiritish (Insertion)
 O’chirish (Deletion)
 Qidirish (Search)
 Saralash (Sorting)
 Birlashtirish (Merging) lar kiradi.
Turli   xildagi   ma’lumotlar   tuzilmalarida   esa   yuqoridagi   amallar   turlicha
tezlikda   amalga   oshadi.   Masalan   oddiyroq   misol   olaylik,   array   uchun   ma’lumotni
o’qib olish  uchun O(1)  vaqt  sarflansa,  uni  kiritish yoki  o’chirish uchun  O(n)  vaqt
sarflanadi.   Linked   listda   esa   bular   aksincha.   Shuning   uchun,   masalan,   sizning
dasturingizda   ma’lumotlar   ko’p   kiritilib,   o’chirilsayu   lekin   kam   o’qilsa,   bunda
ma’lumotlarni   saqlashda   arraydan   foydalangandan   ko’ra   linked   list   qulayroq
hisoblanadi.   Lekin,   ko’pincha   holatda   bir   necha   ma’lumotlar   tuzilmalarini   o’zini
birlashtirgan gibrid ma’lumotlar tuzilmalaridan ham foydalaniladi.
2. Algoritmlarni murakkablik darajalasining tahlili, murakkablik
darajasini baholash usullari .
Dasturni   bajarish   vaqti   bajarilgan   amallar   soniga   proportsionaldir.   Albatta,
vaqtning   o'lchov   birliklarida   (sekundlar),   u   ham   protsessorning   tezligiga   (soat
chastotasiga)   bog'liq.   Algoritmning   vaqt   murakkabligi   ko'rsatkichi   nisbatan
o'zgarmas   bo'lishi   uchun   spetsifikatsiyalar   kompyuter,   u   nisbiy   birliklarda
o'lchanadi.   Odatda   vaqt   murakkabligi   bajarilgan   operatsiyalar   soniga   qarab
baholanadi.
An'anaga   ko'ra,   algoritmning   murakkablik   darajasini   u   foydalanadigan   asosiy
kompyuter   resurslari   miqdori   bo'yicha   baholash   odatiy   holdir:   protsessor   vaqti va   tasodifiy   kirish   xotirasi .   Shu   munosabat   bilan   algoritmning   vaqt   murakkabligi
va algoritmning hajm murakkabligi kabi tushunchalar kiritiladi.
Vaqtning   murakkabligi   parametri,   ayniqsa,   dasturning   interaktiv   rejimini   o'z
ichiga   olgan   vazifalar   yoki   real   vaqt   rejimini   boshqarish   vazifalari   uchun   muhim
bo'ladi.   Ko'pincha   ba'zilar   uchun   nazorat   dasturini   yozadigan   dasturchi   texnik
qurilma ,   biz   hisob-kitoblarning   aniqligi   va   dasturning   ishlash   muddati   o'rtasida
murosani   topishimiz   kerak.   Qoida   tariqasida,   aniqlikning   oshishi   vaqtni
ko'paytirishga olib keladi.
Dasturning   hajmli   murakkabligi,   qayta   ishlangan   ma'lumotlarning   miqdori
kompyuterning operativ xotirasi chegarasida bo'lganda muhim bo'ladi. Zamonaviy
kompyuterlarda bu muammoning jiddiyligi ham operativ xotira hajmining oshishi,
ham   qatlamli   saqlash   tizimidan   samarali   foydalanish   hisobiga   kamayadi.   Dastur
juda   katta,   deyarli   cheksiz   xotira   maydoniga   (virtual   xotira)   kirish   huquqiga   ega.
Asosiy  xotiraning etishmasligi  faqat  disk almashinuvi  tufayli  biroz sekinlashuvga
olib keladi. Bunday almashinuv vaqtida vaqt yo'qotilishini minimallashtirish uchun
texnikalar   qo'llaniladi.   Bu   kesh   xotirasidan   foydalanish   va   kerakli   miqdordagi
oldinga   siljish   uchun   dastur   ko'rsatmalarini   apparat   tomonidan   ko'rish,   bu   sizga
diskdan   asosiy   xotiraga   oldindan   o'tkazish   imkonini   beradi.   kerakli   qiymatlar .
Yuqorida aytilganlarga asoslanib, biz sig'imning murakkabligini minimallashtirish
eng   muhim   vazifa   emas   degan   xulosaga   kelishimiz   mumkin.   Shuning   uchun,
keyingi ishlarda bizni asosan algoritmlarning vaqt murakkabligi qiziqtiradi.
Qoida   tariqasida,   algoritmning   vaqt   murakkabligi   dastlabki   ma'lumotlarga
bog'liq. Bu dastlabki ma'lumotlarning hajmiga ham, ularning hajmiga ham bog'liq
bo'lishi  mumkin. Agar  algoritmning a vaqt  murakkabligi  parametrining qiymatini
Ta   belgisi   bilan   belgilasak,   V   harfi   esa   dastlabki   ma’lumotlarni   xarakterlovchi
ba’zi   sonli   parametrni   bildirsa,   vaqt   murakkabligini   Ta(V)   funksiyasi   sifatida
ifodalash   mumkin.   V   parametrni   tanlash   hal   qilinayotgan   masalaga   yoki   ushbu
masalani hal qilish uchun ishlatiladigan algoritm turiga bog'liq.
Misol   1.   Musbat   butun   son   faktorialini   hisoblash   algoritmining   vaqt
murakkabligini baholaylik.
Funktsiya faktorial(x:Integer): Integer;
Varm,i: Butun son;
i uchun:=2 To x Do m:=ro*i;
Qachonki   dastur   tomonidan   bajarilgan   operatsiyalarning   umumiy   sonini
hisoblaylik   berilgan   qiymat   x.   m:=1;   ifodasi   bir   marta   bajariladi;   halqa   tanasi
(bunda   ikkita   amal   mavjud:   ko'paytirish   va   tayinlash)   x   -   1   marta   bajariladi;
topshiriq bir marta bajariladi Faktorial:=m. Agar amallarning har biri murakkablik
birligi sifatida qabul qilinsa, u holda butun algoritmning vaqt murakkabligi 1 + 2 (x - 1)  + 1 = 2x bo'ladi  Bundan ma'lum bo'ladiki, x qiymati  parametr  sifatida qabul
qilinishi kerak. . Vaqt murakkabligi funktsiyasi quyidagicha bo'ldi:
Bunday   holda,   vaqtning   murakkabligi   ma'lumotlar   parametriga   -   faktorial
funktsiya argumentining qiymatiga chiziqli bog'liqligini aytishimiz mumkin.
2-misol . Ikki vektor A = (a1, a2, ..., ak), B = (b1, b2, ..., bk) skalyar ko'paytmasini
hisoblash.
i uchun:=l To k Do AB:=AB+A[i]*B[i];
Bu masalada kiritilgan ma'lumotlarning o'lchami n = 2k. Amalga oshirilgan
operatsiyalar  soni  1 + 3k = 1 + 3(n/2). Bu  erda V= k= n/2 ni  olishimiz mumkin.
Algoritmning murakkabligi A va B vektorlari elementlarining qiymatlariga bog'liq
emas.   Oldingi   misolda   bo'lgani   kabi,   bu   erda   vaqt   murakkabligining   ma'lumotlar
parametriga chiziqli bog'liqligi haqida gapirish mumkin.
Ikki   nazariy   muammo   odatda   algoritmning   vaqt   murakkabligi   parametri
bilan   bog'liq.   Birinchisi,   savolga   javob   topishdan   iborat:   muammoni   hal   qilish
algoritmini   takomillashtirish   orqali   vaqt   murakkabligi   qiymatining   qaysi
chegarasiga   erishish   mumkin?   Bu   chegara   vazifaning   o'ziga   bog'liq   va   shuning
uchun o'ziga xos xususiyatdir.
Ikkinchi muammo algoritmlarni vaqt murakkabligi bo'yicha tasniflash bilan
bog'liq. Ta(V) funktsiyasi odatda V bilan o'sadi. U qanchalik tez o'sadi? Ta ning V
ga   chiziqli   bog'liqligi   (biz   ko'rib   chiqqan   misollarda   bo'lgani   kabi),   kvadratik
bog'liqlik   va   yuqori   darajali   bog'liqlik   algoritmlari   mavjud.   Bunday   algoritmlar
polinom   deyiladi.   Va   shunday   algoritmlar   mavjudki,   ularning   murakkabligi   har
qanday   polinomga   qaraganda   tezroq   o'sadi.   Ko'pincha   nazariyotchilar   -   algoritm
tadqiqotchilari   tomonidan   hal   qilinadigan   muammo   quyidagi   savoldir:   berilgan
masala uchun ko'p nomli algoritm mumkinmi?
Algoritmlarni tahlil qilishda tez-tez uchraydigan funktsiyalar:
 jurnal   n (logarifmik vaqt),
 n (chiziqli vaqt),
 n   jurnal   n ,
 n   2 (kvadrat vaqt),
 2 n (eksponensial vaqt).
Birinchi   to'rtta   funktsiya   past   o'sish   sur'atiga   ega   va   ishlash   muddati   ushbu
funktsiyalar   tomonidan   baholanadigan   algoritmlarni   tez   deb   hisoblash   mumkin.
Eksponensial   funktsiyaning   o'sish   tezligi   ba'zan   "portlovchi"   sifatida   tavsiflanadi.
Taqqoslash uchun, murakkabligi (operatsiyalar soni) ushbu funktsiyalar tomonidan
aniq aks ettirilgan algoritmlar mavjud deb faraz qilaylik. Bu algoritmlar sekundiga
10   12   amal   tezlikda   ishlaydigan   kompyuterda   bajarilsin.   Kirish   uzunligi   bilan   n ≤ 100000,   ishlashi   dastlabki   to'rtta   funktsiya   tomonidan   baholanadigan   algoritmlar
javobni   soniyaning   kichik   bir   qismida   oladi.   Murakkablik   bilan   algoritm   uchun
2   n   ish vaqti quyidagicha hisoblanadi:
 n = 50 ≈ 19 daqiqa,
 n=   60 ≈ 320 soat,
 n=   70 ≈ 37 yosh.
Savol   15=49.   Ketma-ket,   siklik   va   rekursiv   algoritmlar.   Ketma-ket   algoritmlar   -
bloklar   birin-ketin,   berilgan   sxema   bo'yicha   ketma-ket   bajariladigan   algoritmlar.
Misol.  Tomonlari a,b,c bo‘lgan uchburchakning perimetrini hisoblang. 
Amaliyotda   masalaning   yechimini   algoritm   ko‘rinishida   ko‘rsatish   kamdan-kam
uchraydi.chiziqli   tuzilish.   Ko'pincha   ba'zi   oraliqlarga   bog'liqHisoblash   natijalari
birida   yoki   boshqasida   amalga   oshiriladiformulalar,   ya'ni.   ba'zilarining   ishlashiga
bog'liq   mantiqiy   holat hisoblash   jarayoni   u   yoki   bu   formula   bo'yicha   amalga
oshiriladi.Bunday hisoblash jarayonining algoritmi algoritm deb ataladishoxlanish
tuzilishi.Tarmoqlanish   -   bu   faqat   bajarilishini   tashkil   qiluvchi   boshqaruv
tuzilmasiadolatga qarab belgilangan ikkita harakatdan biriba'zi shart.
Shart   -   bu   ikkita   mumkin   bo'lgan   javobga   ega   bo'lgan   savol:   ha   yoki   yo'q.
Tarmoqlanish ikki shaklda qayd etiladi: to'liq va to'liqsiz (1-rasm a, b).
a) to`liq shakl b) to`liqsiz shakl
Tekislik   algoritmlar   –   uchun   bir   xil   matematik   bog'liqliklarga   (blok
diagrammalarga)   ko'ra   qiymatlarni   qayta-qayta   hisoblash   kerak   bo'lgan
algoritmlar.   turli   ma'nolar   ularga   kiritilgan   miqdorlar.   Davrlardan   foydalanish
sxemaning   hajmini   sezilarli   darajada   kamaytirishi   mumkin   algoritm   va   tegishli
dasturning   uzunligi .   bilan   tsikllar   mavjud   berilgan   va   noma ' lum   takroriy   soni .
Berilgan   takroriy   sonlar   bilan   -   hisoblagich   bilan   halqa.   Noma'lum   sonli
takrorlashlar bilan - oldingi shartli halqa, postshartli tsikl.
To'g'ridan-to'g'ri   yoki   bilvosita   o'ziga   tegishli   bo'lgan   funksiya   (yoki
protsedura)   rekursiv   deyiladi.   Rekursiya   funksiyani   oldingi   va   avval   belgilangan
qiymatlari,   shuningdek,   usuli   orqali   aniqlash   usulidir   hisob-kitoblarni   tashkil
qilish, bunda funktsiya o'zini boshqa argument bilan chaqiradi.
Rekursiv   algoritmlarni   amalga   oshirishda   har   bir   rekursiya   bosqichi
muammoning   to'g'ridan-to'g'ri   echimini   ta'minlamaydi,   balki   uni   bir   xil
muammoga   qisqartiradi.   kichikroq .   Bu   jarayon   shunday   hajmdagi   vazifaga   olib
kelishi   kerakki   yechim   ancha   oson .   Bundan   tashqari,   "teskari   harakat"   hajmini
oshirish   muammosi   uchun   boshlang'ichga   qadar   ketma-ket   echimlarni   beradi.
Rekursiya   bilan   protsedurani   amalga   oshirish   stekga   (do'kon   tipidagi   xotira)
asoslangan   bo'lib, u  hali  o'z  ishini   tugatmagan  protseduraga  barcha  chaqiruvlarda
qatnashgan  ma'lumotlarni  saqlaydi.   Rekursiya  -  algoritm   o'ziga  tegishli   bo'lganda hisoblash   jarayonini   tashkil   qilish   usuli.   Rekursiya   printsipi   bizga   hal   qilish
imkonini   beradi   qiyin   vazifa   oddiyroq   kichik   masalalarni   ketma-ket   yechish
orqali.Qoidaga ko'ra, juda ko'p variantlardan o'tish kerak bo'lgan hollarda rekursiya
zarur.   Rekursiya   siklik   algoritmning   turlaridan   biri   hisoblanadi.   Tashkilotning
rekursiv   shakli  algoritmga   yanada  ixcham  shakl   berish  imkonini   beradi.   Shunday
qilib,   muammo   murakkabdan   oddiygacha   hal   qilinadi   -   rekursiv   algoritmning
mazmuni bir xil turdagi oddiyroq ob'ekt orqali murakkabroq ob'ektni aks ettiradi.
Odatda, rekursiv algoritm quyidagi asosiy qismlarni o'z ichiga oladi:
– tsiklni tugatish sharti;
- mo'ljallangan harakatlarni o'z ichiga olgan rekursiya tanasi
har bir iteratsiyada bajarilishi;
rekursiv algoritm o'zini chaqiradigan rekursiya bosqichidir.
To'g'ridan-to'g'ri   va   bilvosita   rekursiyani   farqlang.   Birinchi   holda,   algoritm   o'zini
chaqiradigan   funktsiyani   o'z   ichiga   oladi.   Agar   funktsiya   boshqa   funktsiyani
chaqirsa,   u   o'z   navbatida   birinchisini   chaqirsa,   u   holda   bu   funktsiya   bilvosita
rekursiv   deyiladi.   Rekursiv   algoritmlarga   qo'yiladigan   asosiy   talab   inversiya
jarayonining   yo'qligidir   cheksiz   bo'lishi   kerak.   Boshqacha   aytganda,   uni   amalga
oshirish   kerak   qo'ng'iroqning   bajarilishini   tekshirish   yoki   rekursiv   ta'rifda   kerak
keyingi   ishga   tushirish   uchun   cheklov   mavjud   rekursiya   tugatiladi.   Rekursiv
funktsiyaga misol sifatida sonning faktorialini hisoblash mumkin.
int factoria(int n)
agar (n) n* faktoriyani (n-1) qaytarsa;
aks holda 1ni qaytaring;
3. Ma lumotlar tuzilmasida satrli va belgili turlarni dasturlashtirish‟
Belgili   C++   dasturlash   tilida   bir   nechta   turlardan   foydalanish     va         ular   ustida
amallar   bajarish   mimkin,   dasturlash   muhitida   boshqa   turlar   kabi   belgili   turlar   ham
mavjud.   C++   dasturlash   tilida   belgili   turlar   char   turiga   mansub   bo‘lgan   yagona
elementli tur hisoblanadi. 
Ma ’ lumotlar   tuzilmasi   va   algoritmlar   dastur   tuzish   uchun   zarur   bo’lgan
tushunchalar   sifatida   qaraladi.   O’rnatilgan   ma ’ lumotlar   tuzilmasi   ikkilik   miqdor
(kodlangan   ma ’lumot)lar   saqlanadigan   registrlar   va   xotira   so’zlarini   ifodalab
beradi.   ...   Ma ’ lumotlar   turi   natural   va   butun   sonlar,   haqiqiy   (o’nlik   kasr
ko’rinishidagi)   sonlar,   satrlar ,   belgilar   va   boshqalarni   o’z   ichiga   oladi.   Ba ’zi dasturlash   tillarida   har   bir   konstanta   yoki   o’zgaruvchilarning   turini   unga
ta’minlangan qiymatning yozilishiga qarab kompilyator aniqlaydi. Masalan, o’nlik
sonda qo’llaniladigan nuqta, haqiqiy son belgisi sifatida qabul qilinadi.  
Shunday   masalalarga   satrli   va   belgili   ma ’ lumotlar   bilan   ishlash   masalalarini
keltirib o`tish lozim.   Belgili   malumotlar bilan ishlash uchun esa unda ishlatiladigan
operator   va   proseduralarni   vazifalarini   va   ularni   qayerda   qo`llashni   yaxshi   bilish
talab   etiladi.   ...   Dasturlash   jarayonida   dasturlovchilar   turli   muammolarga   duch
kelishi mumkin   va   bu muammolarni hal qilish uchun esa dasturlash tillarini yuqori
darajada   bilish   talab   etiladi.   Shunday
masalalarga   satrli   va   belgili   ma ’ lumotlar   bilan   ishlash   masalalarini   keltirib   o`tish
lozim.   Belgili   malumotlar   bilan   ishlash   uchun   esa   unda   ishlatiladigan
operator   va   proseduralarni   vazifalarini   va   ularni   qayerda   qo`llashni   yaxshi   bilish
talab etiladi.
C++ dasturlash tilida   belgili   turlar   char   turiga   mansub bo‘lgan yagona elementli
tur   hisoblanadi.   C++   dasturlash   tilida   satrlar   uchun   alohida   maxsus   turlar   ishlab
chiqilmagan   satrlarni   belgilar   massivi sifatida ishlatish imkoniyati mavjud.   ...  
C++   dasturlash   tilida   satrlar   uchun   alohida   maxsus   turlar   ishlab
chiqilmagan   satrlarni   belgilar   massivi sifatida ishlatish imkoniyati mavjud. 
Ta’rif:   Alohida   nom   bilan   saqlanuvchi   bir   nechta   belgilardan   tashkil
topgan   belgilar   majmuasi satr deyiladi.
4. Dinamik xotiradan foydalanish, dinamik xotirani ishlatishda
ko rsatkich turlari‟
` O'rganib   olgan   C   markerni ,   Biz   dinamik   xotira   ajratish   mumkinligini
aniqlashdi.   Bu   nima   degani?   Bu   shuni   anglatadiki,,   dinamik   xotira   ajratish,   deb,
xotira vaqtida bir dastur kompilyatsiya ajratilgan emas. Va u bizga yanada samarali
xotira ajratish imkonini beradi, asosan suhbat haqida. Dinamik xotira ajratish bilan,
Biz   qator   hajmini   belgilash   uchun   oldindan   shart   emas,   ayniqsa,   qaysi   har   doim
ma'lum   emas,   Nima   hajmi   bir   qator   bo'lishi   kerak.   Keyingi,   siz   xotira   ajratish
mumkin image tushunmoq.
C RAM, ajratish ( функция  malloc)
Funksiya   malloc()   Bu   header   faylida   belgilangan   stdlib.h ,   zarur
xotira   markerni   ishga   tushirish   uchun   ishlatiladigan.   Xotira   har   qanday   dastur
uchun mavjud bo'lgan xotira sohasida ajratilgan,  Mashinada   amalga.   Dalil   vazifalari        malloc()      xotira   bayt   soni,   qaysi
ajratilgan bo'lishi kerak, funktsiya qaytadi – ajratilgan xotira blokda uchun pointer.
Malloc   funksiyasi()   Bu   faqat   har   qanday   boshqa   funktsiyasi   kabi   ishlaydi,   yangi
hech narsa.
Ma'lumotlarning   turli   turdagi   boshqa   saqlash   talablari   bor   beri,   negadir   biz
har xil turdagi ma'lumotlar bayt hajmini olish uchun o'rganish kerak. Masalan, Biz
xil qadriyatlar qator uchun xotira son kerak   int   – Bu bir-hajmi Xotira, va biz bir
xil darajada, bir qator uchun xotira ajratish kerak bo'lsa,, lekin turi   char   – u bir xil
hajmi.   Shuning   uchun,   biz   negadir   xotira   miqdorini   hisoblash   uchun   kerak.   Bu
operatsiya tomonidan amalga oshirilishi mumkin   sizeof() , degan iborani oladi
va   uning   hajmini   qaytaradi.   Masalan,   sizeof(int)   hajm   baytlarda   qaytaradi,
xil qiymatini saqlash uchun zarur bo'lgan   int .  Bir misolni ko'rib chiqaylik:
Ushbu   misol,,   yilda   chiziq   3   pointer   ptrVar   xotira   sohasida   bir   manzil
tayinlangan, hajmi ma'lumotlar turiga mos keladi   int . Avtomatik ravishda, Ushbu
xotira   maydoni,   endi   boshqa   dasturlar   uchun   mavjud.   Buning   ma'nosi,   Shundan
keyin,  ajratilgan   xotira   keraksiz   bo'lib  sifatida,   u  aniq   ozod   bo'lishi   kerak.   Xotira
ochiq   ozod   bo'lsa,   keyin   dastur   tugashi   bilan,   xotira   va   operatsion   tizimiga
ajratilgan   bo'lmaydi,   Bu   bir   xotira   migratsiyasi   deb   ataladi.   Bundan   tashqari,
ajratilgan xotira miqdorini aniqlash mumkin, Agar o'lim null ajratish kerak, Mana,
bir misol,:
Bu   yerda   nimalar   bo'lyapti?   Operatsiya   sizeof(*ptrVar)   xotira   hajmini
baholash,   a   pointer   bilan   mos   yozuvlar.   Sifatida   ptrVar   Bu   xotira   turdagi   bir   son
uchun   a   namoyishchi   int ,   so'ng   sizeof()   tamsayı   hajmini   qaytaradi.   Ya'ni,   aslida,
indeksining   ta'rifi   birinchi   qismi,   ikkinchi   qismi   hajmini   hisoblash.   Bas,   biz   buni
nima   uchun   kerak?   Bu   zarur   bo'lishi   mumkin,   Agar   to'satdan   indeksi   ta'rifi
o'zgartirish kerak bo'lsa,,   int , masalan,, bo'yicha   float   undan keyin, Biz indeksining
ta'rifi   ikki   qismdan   ma'lumotlar   turini   o'zgartirish   shart   emas.   Uchun   kifoya,   Biz
birinchi qismini o'zgartiradi, deb:
Ko'rib turganimizdek, bu  yozilgan  juda  kuchli   tomoni   bor,  Biz  bir   vazifani
qo'ng'iroq   qilish   shart   emas   malloc()   yordamida   sizeof(float) .   Buning
o'rniga   biz   o'tdi   malloc()   pointer   yozing   float ,   so'ng,   ajratilgan   xotira   hajmi
avtomatik ravishda o'zini aniqlanadi! Bu, ayniqsa, foydalidir, Agar xotira ajratish kerak bo'lsa, indeks ta'rifi emas:
Agar dizayn xotira ajratish jarayonini ishlatiladigan bo'lsa   sizeof() , keyin kodi
ko'rsatgichlari bir ta'rifi topish kerak edi, ma'lumotlar turini kuzatib, va faqat keyin
to'g'ri xotira ajratish mumkin bo'ladi.
ajratilgan xotira relizlar
xotira relizlar yordamida amalga oshiriladi   free() .  Mana, bir misol:
Xotira   ozodlik   keyin,   yaxshi   amaliyot   nolga   markerni   o'rnatish   uchun,   ya'ni
tayinlash   *ptrVar = 0 . Pointer tayinlangan bo'lsa 0, pointer nol bo'ladi, boshqa
so'zlar   bilan   aytganda,   U,   hech   bir   joyda   ko'rsatadi   qildi.   Har   doim   Xotira   ozod
keyin, pointer tayinlangan 0, Aks holda,, hatto Xotira ozod keyin, pointer hali unga
ishora,  
5. Murakkab turlarni algoritmlashtirish va dasturlash. Vektorlar va
massiv ma lumotlarini algoritmlashtirish‟
Dasturlash   tillari,   asosan,   ikkinchi   jahon   urushidan   keyin   yaratila   boshlandi.
Ammo   uning   boshlanish   tarixi   ancha   oiis   yillarga   borib   taqaladi.   Arxeologik
qazilmalarda   topilgan   sopol   taxtachada   bundan   3800   yil   oldin   (eramizdan   awalgi
1800-   yillar)   Bobilda   foiz   bilan   bog‘liq   murakkab   amallar   algoritmi   keltirilgan.
Dnda aniq masala ishlangan bo‘lib, agar bug'doy hosili yiliga 20% dan oshib borsa,
uning   miqdori   ikki   marta   o‘sishi   uchun   necha   yil   va   oy   kerak   boMish   algoritmi
tuzilgan.
Ma'lumki, kompyuter texnikasidan samarali foydalanish ikki qism — texnik va
dasturiy   ta'minotning   uzviyligini   talab   etadi.   Bu   uzviylik   kompyuter   texnik
ta'minotining jadal  sur'atlar bilan takomillashib borishiga mos dasturiy ta’minotni
ham keskin sur'atlar bilan rivojlanishiga sabab bo'ladi, va aksincha. Buning sababi
ma'lum, mos dasturiy ta'minotsiz har qanday kompyuter «qimmatbaho o‘yinchoq»
bo‘lib   qolaveradi.   MaMumki,   kompyuterda   biror   masalani   hal   qilish   uchun   awal
uning   qandaydir   nusxasi   olinadi   va   algoritmi   tuziladi,   so‘ng   mazkur   algoritm ma'lum   bir   qonun-qoidalar   asosida   kompyuter   tushunadigan   ko‘rsatma   va
buyruqlar shaklida yoziladi. Hosil boMgan matn kompyuter tilida yozilgach, dastur
deb   ataladi   Demak,   dastur   —   biror   masalani   yechish   uchun   kompyuter   bajarishi
mumkin   bo'lgan   ko‘rsatmalarning   izchil   tartibi   ekan.   Kompyuter   uchun   dastur
tuzish jarayoni dasturlash va dastur tuzadigan kishi dasturchi deyiladi. Kompyuter
tushunadigan   «til»   esa   dasturlash   tili   deb   ataladi.   Dasturlash   tillarini   shartli
ravishda quyidagi uch guruhga ajratish mumkin:
XIX asr fransuz kashfiyotchisi  Jozef  Mari Jakkard 1804- yilda yupqa mato
ishlab   chiqish   jarayonida   to'quv   dastgohlari   uchun   perfokartani   eslatuvchi   tasma
ishlatgan va shu bilan perfokartaga asos solgan edi. 1836- yilda ingliz olimi Charlz
Bebbij hozirgi kompyuterlarning bevosita ajdodi bo‘)mish anaiilik mashina ishlab
chiqishga   kirishdi   va   bu   masalani   nazariy   hal   qildi.   Bu   mashinaning   asosiy
xususiyati   uning   dastur   asosida   ishlashi   va   hisob-kitob   natijalarini   «eslab»
qolishida edi. 1843- yiida ingliz matematigi Ogasta Ada Bayron (Lavleys) — shoir
lord   Bayronning   qizi   analitik   mashina   buyruqlar   asosida   ishlashi   lozimligini
ta'kidladi.   U   berilgan   shartlar   bajarilm   agunga   qadar   qadam   lar   ketm   aketligini
ta’minlovchi buyruqlarni yozdi. Ana shu holat bilan u dasturlash tiliga asos soldi.
Mazkur va boshqa kashfiyotlar kompyuter yaratilgach, ularni ishlatish uchun zarur
Ada   Rayron   bo‘lgan   til   yaratilishini   talab   etdi.   Quyi   darajadagi   dasturlash   tillari
kompyuter   qurilmalari   bilan   bevosita   bog‘liq   bo'lib,   buyruqlar   maxsus   raqamlar
(kodlar)   yordamidayoziladi.   Bu   kabi   buyruqlardan   tashkil   topgan   dasturlar   katta
hajmli bo'lib, ularni tahrir qilish ancha mushkul ish hisoblanadi. Dastlabki elektron
hisoblash   mashinalarida   («ENIAK»,   «MESM»   va   boshqalar)   masalalarni   yechish
uchun ana shunday buyruqlar yordamida dasturlar tuzilgan. Misol tariqasida M-20
rusumidagi   elektron   hisoblash   mashinasida   qoMlanilgan   tilda   tuzilgan   dastumi
(dastur doira yuzini hisoblash amallarini o‘z tchiga olgan) izoh bilan keltiramiz: Ko‘rinib   turibdiki,   bu   tilda   dastur   tuzish   ancha   mashaqqatli   ekan.   Buning
asosiy   qiyinchiligi   —   bir   tomondan   buyruqlarning   raqamlar   yordamida
ifodalanishi  bo'lsa, ikkinchi tomondan dasturchidan har bir amalning bajarilishida
jamlagichdagi   sonli   qiymatning   qaysi   o   ‘zgaruvchiga   tegishliligini   va   boshqa
o‘zgaruvchilarning   qiymatlari   qaysi   adresda   joylashganligini   bilish   talab   etiladi.
Dastur   tuzishni   osonlashtirish   maqsadida   inson   tiliga   yaqin   bo'lgan   buyruqlar
tizimini   tuzish   va   qo‘llash   masalasi   qo'yildi   hamda   hal   etildi.   Bu   kabi   dasturlash
tillari   o‘rta   darajadagi   dasturlash   tillari   (ba‘zan   assemblerlar)   deb   yuritila
boshlandi.   Bunday   tillarga   AVTOKOD-BEMSH,   AVTOKOD-MADLEN   va
boshqalar  kiradi.  Ular  BESM-6,  M   in  sk-22  .  M  in  sk-32  ,  IB  M   -360  elek   tro  n
hisoblash mashinalarida ishlatildi. Masalan, ST 5, BSUM ifodada 5 raqam i BSUM
deb   nom   langan   yacheykaga   joylashtirilsin   (ST-store   —joylashtirish),   degan
buyruq berilgan.
Yuqori darajali dasturlash tillaridagi ko'rsatmalar  inson tiliga yaqin bo‘lgan
so'zlar majmuidan iborat. Ular yordamida amallarni bajarish quyi darajadagilaridan
ko‘ra   yengil   bo‘lib,   biror   maxsus   ko‘rsatma   bo'lm   asa,   dasturchidan   adreslar,
qurilmalar   bilan   bevosita   bog'Iiq   axborotlarni   bilish   talab   etilmaydi.   Bu   tilda
tuzilgan  dasturlarni   translatorlar   deb  nomlanuvchi   maxsus   dasturlar   kompyuterlar
bajara olishi uchun raqamli ko‘rinishga o‘tkazib beradi. Keyingi yillarda juda ko‘p
yuqori   darajadagi   dasturlash   tillari   yaratilgan   bo‘lib,   ular   qatoriga   Paskal.   dBase,
Ada,   KARAT.   C++,   Delphi,   Visual   Basic   va   boshqa   tillarni   qo‘shish   mumkin.
Hozirgi  kunda  yaratilayotgan  dasturlash tillari  biror  yo‘nalishdagi  masalalami  hal
qilishga   moMjallangandir.   Quyidagi   jadvalda   dasturlash   tili   rivojlanishi   tarixidan
qisqacha ma'lumot berilgan.
Endi   ba‘zi   dasturlash   tillarida   nomlar,   ko‘rsatmalar,   tuzilmalar   va   boshqalar
qanday   bo'lishini   ko'rib   chiqamiz.   Biz   ko'rmoqchi   bo'lgan   dasturlash   tillarida
o'xshashliklar  ko‘p. Masalan,  ulaming  alifbosi  quyidagi   asosiy  qismlardan  iborat: Lotin alifbosining 26 ta harfi: Aa, Bb, Cc, Dd, Ee, Ff, Gg, Hh, Ii, Jj, Kk, Ll, Mm,
Nn, Oo, Pp, Qq, Rr, Ss, Tt, Uu, Vv, Ww, Xx, Yy, Zz ; 0 ‘nta arab raqami: 0, 1,2, 3,
4,   5,   6,   7,   8,   9   ;   Arifmetik   amal   belgilari:   +   (q   o'shish   ),   —   (ayirish),   *   (ko
‘paytirish), / (bo ‘lish); Munosabat belgilari: =(teng), <> (tengemas), < (kichik), <
= (katta emas), > (katta), > = (kichik emas); Maxsus belgilar: . (nuqta), , (vergul), ;
(nuqtali   vergul),   ‘   (apostrqf),   «   (qo   ‘shtirnoq),   !(undov),   ?   (so   ‘roq),   %   (foiz),
S(dollar   belgisi),   @   (tijorat   belgisi),   &   (ampersand),   (b   o   ‘shliq,   ekranda
tasvirlanmaydi), ( ,) , {, }, {, J (turti qavslar); Mantiqiy amallar: AND («VA» —
mantiqiy   ko'paytirish   amali),   OR   («YOKI»   —   mantiqiy   qo‘shish   amali),   NOT
(«EMAS»   —   mantiqiy   inkor   amali).   Yodingizda   bo‘lsa,   nom   va   qiymati
o‘zgaradigan   miqdorlar   haqida   aytib   o‘tgan   edik.   Yana   dasturlash   tillarida
quyidagilar   qo'Ilaniladi:   Konstantalar   (o‘zgarmaslar)   -   dastur   ishlashi   davomida
qiymati   o'zgarmaydigan   miqdorlar;   0   ‘zgaruvchilar   —   dastur   ishlashi   davomida
qiymati   o‘zgaradigan   miqdorlar;   Algebraik   ifodalar   -   arifmetik   amallar   bilan
bog'langan o‘zgarmaslar, o‘zgaruvchilar va funksiyalar; Operatorlar — dasturlash
tilining biror tugallangan amalini berish uchun mo'ljallangan buyrug'i, operatorlar
BASIC da «:» bilan, PASCAL va DELPHI da «;» bilan ajratiladi;
Funksiya   va   protseduralar   —   o‘z   nomiga   ega   boMgan   alohida   dastur
qismlari (bloklari). Ularga asosiy dasturdan murojaat etiladi; Nishonlar — dasturda
boshqarish   uzatilayotgan   operatorni   ko‘rsatadi.   Har   bir   dasturlash   tili   yuqoridagi
tushunchalar   bilan   bog‘liq   o‘z   sintaksisiga,   maxsus   xizmatchi   so‘zlariga   ega.
Dastur   yozishdan   awal   unda   ishtirok   etadigan   miqdorlarni   aniqlab   olish,
o‘zgaruvchilarga   nom   berish   va   ularni   tavsiflash   (turini   ko‘rsatish)   kerak   bo'ladi.
Shundan so'nggina dasturning asosiy qismi boshlanadi. Har qanday dasturlash tili,
odatda,   quyidagi   ikki   qismdan   tashkil   topadi:   •   tavsiflash   qismi,   PASCAL   va
DELPHT  da  VAR  xizmatchi  so'zi  bilan  boshlanib   va  BEGIN  xizmatchi   so‘zidan
oldin   tugaydi;   •   asosiy   qism,   PASCAL   va   DELPHI   da   BEGIN   xizmatchi   so‘zi
bilan   boshladi   hamda   END   xizmatchi   so‘zi   bian   tugaydi.   Dasturlash   tillarida
asosan   uch   xil:   o'zgarmas,   o‘zgaruvchi   (masalan,   A   tokcha)   va   massiv   (jadval,
masalan,   biz   ishlatgan   qavatli   tokchalar)   ko'rinishidagi   miqdorlar   qoMlaniladi.
Ularbelgili, satrli, mantiqiy va sonli turdagi qiymatlarni qabul qilishi mumkin.
Massiv   —   belgilangan   miqdordagi   elementlarni   o z   ichiga   oladiganʻ
konteyner   va   ushbu elementlar bir xil turdagi bo lishi kerak. Ko pgina ma lumotlar	
ʻ ʻ ʼ
tuzilmalari   o zlarining   algoritmlarini   amalga   oshirish	
ʻ
uchun   massivlardan   foydalanadilar.   Massiv   tushunchasini   tushunish   uchun
quyidagi   muhim   atamalar   keltirilgan.   •   Element   —   bir   qatorda   saqlanadigan   har
bir   massiv   element   deb   ataladi.   •   Indeks   —   bir   qator   elementning   har   bir
joylashuvi   massivni   aniqlash   uchun   ishlatiladigan   raqamli   indeksga ega.   Massiv   vakolatxonasi.   Massivlar   turli   tillarda   turli   xil   usullar   bilan   e lonʼ
qilinishi mumkin.
6. Struktura turi, Strukturalarni dasturlash va algoritmlashtirish
Struktura   bu   turli   tipdagi   ma’lumotlarning   birlashtirilgan   tipdir.   Struktura   har
xil tipdagi elementlar-komponentalardan iborat bo‘ladi.
Strukturalar quyidagicha ta’riflanishi mumkin:
struct   struturali_tip_nomi
{Elementlar_ta’riflari}
Masalan:
struct Date
{
int year;
char month, day;
};
Dasturda tuzilma turidagi o‘zgaruvchi quyidagi shaklda kiritiladi:
Tuzilma_nomi identifikatorlarning_ro‘yxati;
Masalan:
Date s1, s2;
Misol     uchun:
struct complex
{ double real;
double imag;
}
Bu   misolda   kompleks   sonni   tasvirlovchi   strukturali   tip   complex   kiritilgan
bo‘lib,   kompleks   son   xaqiqiy   qismini   tasvirlovchi   real   va   mavxum   qismini
tasvirlovchi imag komponentalaridan iboratdir.  
Konkret strukturalar bu holda quyidagicha tasvirlanadi:
complex sigma,alfa;
Quyidagi  misolda  kasr  sonni   tasvirlovchi   numerator  –sur’at   va denominator-
maxraj komponentalaridan iborat struktura ta’rifi keltirilgan.
struct fraction;
{
int numerator;
int denominator;
}
Bu holda konkret strukturalar quyidagicha tasvirlanishi mumkin:
fraction beta;  
Strukturalar ta’riflanganda konkret strukturalar ro‘yxatini kiritish mumkin:
struct   struturali_tip_nomi
{Elementlar_ta’riflari}
Konkret_strukturalar_ro‘yxati.
Misol: struct student
{
char name[15];
char surname[20];
int year;
} student_1, student_2, student_3;
Bu   holda   student   strukturali   tip   bilan   birga   uchta   konkret   struktura
kiritiladi.   Bu   strukturalar   student   ismi   (name[15]),   familiyasi   (surname[20]),
tugilgan yilidan (year) iborat.
Strukturali   tip   ta’riflanganda   tip   nomi   ko‘rsatilmay,   konkret   stьrukturalar
ro‘yxati ko‘rsatilishi mumkin:
struct
{Elementlar_ta’riflari}
Konkret_strukturalar_ro‘yxati.
  Quyidagi   ta’rif   yordamida   uchta   konkret   struktura   kiritiladi,   lekin
strukturali tip kiritilmaydi.
struct
{
char processor [10];
int frequency;
int memory;
int disk;
} IBM_486, IBM_386, Compaq; Strukturalarga   murojaat.   Konkret   strukturalar   ta’riflanganda   massivlar   kabi
initsializatsiya kilinishi mumkin. Masalan
complex sigma ={1.3;12.6};
goods coats={"pidjak",40000,7.5,220,   "12.01.97");
Bir xil tipdagi strukturalarga qiymat berish amalini qo‘llash mumkin:
Complex alfa; alfa=sigma;
Lekin strukturalar uchun solishtirish amallari aniklanmagan.
Strukturalar elementlariga quyidagicha murojaat kilish mumkin:
Struktura nomi.element_nomi.
'Nuqta   amali'   struktura   elementiga   murojaat   kilish   amali   deyiladi.   Bu   amal
qavs amallari bilan birga eng yuqori ustivorlikka egadir.
Misol:
Complex alfa={1.2,-4.5},betta={5.6,-7.8),sigma;
Sigma.real=alfa.real+betta.real;
Sigma.imag=alfa.imag+betta.imag;
Konkret   strukturalar   elementlari   dasturda   aloxida   kiritilishi   va   chiqarilishi
zarurdir.
Massivlar   strukturalar   elementlari   sifatida.   Massivlarni   strukturalar   elementi
sifatida   ishlatilishi   xech   kanday   kiyinchilik   tug‘dirmaydi.   Biz   yuqorida   simvolli
massivlardan foydalanishni ko‘rdik.
Strukturalar   massivlari.   Strukturalar   massivlari   oddiy   masivlar   kabi
tasvirlanadi.   YUqorida   kiritilgan   strukturali   tiplar   asosida   quyidagi   strukturalar
massivlarini kiritish mumkin: Struct goods list[100];
complex set [80];
Bu ta’riflarda list va set strukturalar nomlari emas, elementlari strukturalardan
iborat   massivlar   nomlaridir.   Konkret   strukturalar   nomlari   bo‘lib   set[0],set[1]   va
xokazolar  xizmat  qiladi. Konkret  strukturalar  elementlariga quyidagicha murojaat
qilinadi: set[0].real– set massivi  birinchi elementining real nomli komponentasiga
murojaat.
Misol uchun kompleks son modulini hisoblash dasturini keltiramiz:
double modul(complex a)
{return sqrt(a.real*a.real+a.imag*a.imag}
Ikki kompleks son yig‘indisini hisoblash funksiyasi:
complex add(complex a, complex b)
{ complex c;
c.real=a.real+b.real;
c.imag=a.imag+b.imag;
return c;
}
Strukturalar   uchun   xotiradan   joy   ajratish.   Struktura   uchun   ajratilgan   joy
xajmini quyidagi amallar yordamida aniqlash mumkin:
Sizeof (strukturali_tip_nomi);
Sizeof (struktura_nomi);
Sizeof struktura_nomi. Oxirgi holda struktura nomi ifoda deb karaladi. Ifodaning tipi aniqlanib, xajmi
hisoblanadi.
  Misol uchun:
Sizeof (struct goods)
Sizeof (tea)
Sizeof coat
Murakkab   tiplar   ya’ni   massivlar   va   strukturali   tiplar   uchun   xotiraga   talab
ularning   ta’rifiga   bog‘liqdir.   Masalan   double   array[10]   ta’rif   xotiradan   10*sizeof
bayt joy ajratilishiga olib keladi.
Struct mixture
{
int ii;
long ll;
char cc[8];
};
Bu   ta’rif   har   bir   Struct   mixture   tipidagi   ob’ekt   xotirada   sizeof(int)
+sizeof(long)+8*sizeof(char) bayt joy egallashini ko‘rsatadi. Ob’’ekt aniq xajmini
quyidagi amal hisoblaydi:
Sizeof(struct mixture)
Xotirani   tekislash.   Strukturali   tip   kiritilishi   bu   tip   uchun   xotiradan   joy
ajratilishiga   olib   kelmaydi.   Har   bir   konkret   struktura   (ob’ekt)   ta’riflanganda,   shu
ob’ekt uchun elementlar tiplariga qarab xotiradan joy ajratiladi. Xotiradan joy zich
ajratilganda   struktura   uchun   ajratilgan   joy   xajmi   har   bir   element   uchun   zarur
bo‘lgan xotira xajmlari yigindisiga teng bo‘ladi. SHu bilan birga xotiradan joy zich
ajratilmasligi   ham   mumkin   ya’ni   elementlar   orasida   bo‘sh   joylar   ham   kolishi mumkin.   Bu   bo‘sh   joy   keyingi   elementni   xotira   qismlarining   qabul   qilingan
chegaralari bo‘yicha tekislash uchun koldiriladi.
Strukturalarga   yakin   tushuncha   bu   birlashma   tushunchasidir.   Birlashmalar
union xizmatchi suzi yordamida kiritiladi. Misol uchun
union
{
long h;
int i,j;
char c[4]
}UNI;
Birlashmalarning asosiy  xususiyat  shundaki  uning hamma elementlari bir xil
boshlang‘ich adresga ega bo‘ladi.
  Birlashmalarning asosiy avfzalliklaridan biri xotira biror qismi qiymatini har
xil tipdagi qiymat shaklida karash mumkindir.
Misol uchun quyidagicha birlashma
union
{
float f;
unsigned long k;
char h[4];
}fl; Xotiraga   fl.f=2.718   xaqiqiy   son   yuborsak   uning   ichki   ko‘rinishi   kodini   fl.l
yordamida   ko‘rishimiz,   yoki   aloxida   baytlardagi   qiymatlarni   fl.h[0];   fl.h[1]   va
xokazo yordamida kurishimiz mumkin.
Satrlarni     ulash     amalini     bajarishga     mo„ljallangan     strcat(satr1,satr2)         va
strncat(satr1,   satr2,   n)   funksiyalari   mavjud   bo„lib,   ular   <string.h>funksiyalar
kutubxonasida   aniqlangan.     Bunda     satr1     –     tarkibiga     qo„shimcha     satr
ulanayotgan  satr,  satr2  –  esa  boshqa  satrga ulanadigan satr.  strcat(satr1, satr2)
funksiyasi   satr1   ning   orqasidan   satr2   ni   ulaydi.     strncat(satr1,   satr2,n)   funksiyasi
esa satr1 ning orqasidan satr2 ning dastlabki n  ta belgisini ulaydi. 
Bu fikrlarni quyidagi dasturni tahlil qilish yo„li bilan tushunish mumkin.  
#include <iostream.h> 
#include <string.h> 
int main () 
{ 
char satr1 [60]=”men 26-“, satr6[30]=”men vrach”; 
char satr2[30]=”maktabda o„qiyman”; 
char satr4 [60]=”men 36-“, satr5[60]=”men 16-”; 
char satr3 [30]=”kollej talabasiman“ 
strcat (satr1, satr2); 
strcat (satr4, satr3); strncat (satr5, satr3,15); 
cout <<satr1<< \n <<satr4<< \n <<satr5 \n ; ‟ ‟ ‟ ‟ ‟ ‟
strncat (satr6,” bo„laman”,4); cout<< \n <<satr6<< \n ; 	
‟ ‟ ‟ ‟
strncat (satr6,”dimki”,3); cout<<satr6<< \n ; 	
‟ ‟
system (“pause”); 
return 0; 
} 
Dastur natijasi quyidagicha bo„ladi. Uni tahlil qiling. 
men 26-maktabda o„qiyman  men 36-kollej talabasiman 
men 16-kollej talabasi 
men vrach bo„ 
men vrach bo„ldim 
Satrlarni solishtirish (taqqoslash) funksiyalari 
C++ da satrlarni solishtirish uchun quyidagi funksiyalardan foydalaniladi.  
1.  Strcmp(satr1,  satr2)  funksiyasi.  Bu  funksiya  satr1  satrining  har  bir  belgisi
satr2 satrining mos nomerlaridagi belgilarini ASCII kodlari   bo„yicha solishtiradi.
Eslatma:  Lotin alifbesining kichik harflari  kodi  katta harflari  kodidan 32 ga ortiq
qilib     kodlangan     va     solishtirish     natijasi     qandaydir     n     butun     soniga     qiymat
sifatida  berilishi kerak. Masalan, n=strcmp (s1.s2) 
Agar  
s1>s2bo„lsa n>0 
s1=s2bo„lsa n=0  
s1<s2bo„lsa   n<0   bo„ladi  
n ning qiymati birinchi farq qiluvchi belgilar kodlarini solishtirish bilan aniqlanadi.
#include <iostream.h> 
#include <string.h> 
using namespace std; 
int main() 
{ 
int j,i,s,n,m;    char k1[20]="",k2[20]="";  
char satr1[60]="Dasturlash ";char *kor1=satr1; 
char satr2[60]="dasturlash ";char *kor2=satr2; 
m=strcmp(kor1,kor2); cout<<" m="<<m; 
n=strcmp(kor2,kor1); cout<<" n="<<n<<'\n';    
system("pause");  return 0; 
} 
satr1  va  satr2  larning  birinchi  belgilari  P  va  p  larning  kodlari  farq  qilayapti.
Shuning uchun dastur natijasi m=-1; n=1 kabi bo„lmoqda. 
2.     Agar     satrlarni     solishtirishda     harflarning     registrlarini     (ya ni     katta     yoki‟
kichikligini)     farqlash     kerak     bo„lmasa,     u     holda     strcmpi(satr1,     satr2)
funksiyasidan foydalaniladi. Bu hol quyidagi dasturda o„z aksini topgan. 
#include  <iostream.h> 
#include  <string.h> 
using namespace std; 
int main() 
{ 
     int j,i,s,n,m;     
     char satr1[60]="Dasturlash ";char *kor1=satr1; 
     char satr2[60]="dasturlash ";char *kor2=satr2; 
     char satr3[60]="pragraMMalash ";char *kor3=satr3; 
    m=strcmpi(kor1,kor2); cout<<" m="<<m; 
    n=strcmpi(kor2,kor3); cout<<" n="<<n<<'\n';    
       system("pause"); 
    return 0; 
} 
Dastur natijasi m=0, n=1 kabi bo„lishini tushunish qiyin emas. 
3. Agar ikkita satrning   faqat dastlabki   n ta   belgilarini solishtirish   talab   etilgan
bo’lsa,     strncmp(satr1,satr2,n)     funksiyasidan     foydalaniladi.     Quyidagi     dasturni
tahlil qilib bunga ishonch hosil qilish mumkin. 
#include <iostream.h> 
#include <string.h>  using namespace std; 
int main() 
{  
     int j,i,s,n,m;     
     char satr1[60]="dasturlash ";char *kor1=satr1; 
     char satr2[60]="dasturlash ";char *kor2=satr2; 
     m=strncmp(kor1,kor2,6); cout<<" m="<<m; 
    n=strncmp(kor1,kor2,7); cout<<" n="<<n<<'\n';    
       system("pause"); 
    return 0; 
} 
Dastur natijasi m=0, n=32 kabi bo’ladi. Ikkita satr berilgan. Ularning farq qiluvchi
belgilarini aniqlash dasturini tuzing. 
#include  <iostream.h> 
#include  <string.h> 
using  namespace  std; 
int  main() 
{ 
     int j, i, s, n, m;    char k1[20]="", k2[20]="";  
     char satr1[60]="Progoamalash tillarini o„rganamiz"; char *kor1=satr1; 
     char satr2[60]="Programalash tillarini o„rganamiz"; char *kor2=satr2; 
    for(i=1; i<=32; i++) {  
strncpy(k1, kor1, 1);strncpy(k2, kor2, 1); kor1+=1; kor2+=1;   n=strcmp(k1, k2); 
  if(n!=0)  cout<<i<<"-chi belgisi har xil, ular: "<<k1<< " va " <<k2<<'\n'; 
}    
    system("pause");      return 0; 
} 
Dastur natijasi quyida keltirilgan. Mustaqil tahlil qiling. 
1-chi belgisi har xil, ular: p va P 
5-chi belgisi har xil, ular: o va r 
8-chi belgisi har xil, ular: a va f 
25-chi belgisi har xil, ular: R va r 
26-chi belgisi har xil, ular: c va g 
32-chi belgisi har xil, ular: Z va z 
  Agar     satrdagi     belgilari     ichida     harflar     bo„lsa,     ularni     bosh     harflardan
kichik harflarga   almashtirsh   uchun   strlwr(satr)   funksiyasidan,   aksincha   kichik
harflarni   bosh     harflarga     almashtirish     uchun     esa     strupr(satr)     funksiyasidan
foydalaniladi. Masalan,  
#include <iostream.h> 
#include <string.h> 
using namespace std; 
int   main()  
{  
    char  satr2[30]="maktabda o„qiyman";     
    strupr(satr2);     
    cout<<satr2<<'\n'; 
    char  satr3[30]="MEN TALABAMAN";   
    strlwr(satr3);        
    cout<<satr3<<'\n';       
    system("pause"); 
    return 0; 
}  Dastur natijasi quyidagicha bo’ladi 
MAKTABDA O’QIYMAN 
men talabaman  kabi  bo’ladi 
Berilgan     satrni     teskari     tartibda     yozish     uchun     strrev(satr)     funksiyasidan
foydalaniladi. Masalan,  
#include <iostream.h> 
#include <string.h> 
using namespace std; 
int main() 
{ 
    char  satr3[30]="TALABAMAN";   
    strrev(satr3);        
    cout<<satr3<<'\n';       
    system("pause"); 
    return 0; 
} 
Dastur natijasi 
          NAMABALAT 
kabi bo’ladi 
C++   da   berilgan   satrdan   biror   belgini   yoki   satrning   biror   qismini   izlashga
mo’ljallangan   bir   nechta   funksiyalar   mavjud.     1.     Satrdan     tayin     belgini     izlash
uchun     strchr(satr,     „belgi )     funksiyasi   aniqlangan     bo„lib,     agar     belgini     satr‟
tarkibidan  topsa,  funksiya  satrning  o„sha  belgisini va undan keyingi belgilarini
qiymat sifatida oladi. Masalan, 
#include <iostream> 
#include   <string.h>  
using namespace std; 
int main()  { 
    char  satr3[30]="134567389"; 
    char  satr4[30]="gfdrcx98mjhk"; 
    char *satr,*satr1; 
    satr=strchr(satr3,'3');cout<<satr<<'\n'; 
    satr1=strchr(satr4,'m');cout<<satr1<<'\n'; 
    system("pause"); 
    return 0; 
} 
Dastur natijasi quyidagicha bo„ladi  
34567389 
mjhk 
2.     Satrlardan   birinchi   farq   qiluvchi   belgini,   ya ni   satr1   dan   satr2   da   bo’lmagan‟
birinchi  belgini  topish  uchun  strspn  (satr1,  satr2)  funksiyasidan  foydalaniladi.
Bu     funksiya   satr1   ning   har   bir   belgisini   satr2   dan   izlab   chiqadi.   Qaysi   belgisini
topmasa,   o’sha   belgi   indeksiga   teng   qiymatni   oladi.   Masalan,   quyidagi   dasturni
tahlil qilish bilan bunga ishonch hosil qilish mumkin. 
#include <iostream.h> 
#include <string.h> 
using namespace std; 
int main() 
{  int i,j,k; 
    char  satr1[30]="asalkning yechish"; 
    char  satr2[30]="asdfghjhkjl nkdfiggjjk"; 
    j=strspn(satr1,satr2);      
    cout<<"satr1 ning satr2 dan farq qiluvchi birinchi belgisi nomeri="<<j<<'\n';     
    system("pause");      return 0; 
} 
Dastur   natijasi   quyidagicha   bo’ladi.   satr1   ning   satr2   dan   farq   qiluvchi   birinchi
belgisi nomeri=10 kabi bo’ladi 
3.   Birinchi   satrdan   ikkinchi   sairda   bo„lgan   birinchi   belgini   topish   uchun   strcspn
(satr1,satr2) funksiyasidan foydalaniladi.  
#include <iostream.h> 
#include <string.h> 
using namespace std; 
int main() 
{  int i ,j, k; 
    char  satr1[30]="asalkning yechish"; 
    char  satr2[30]="dfghjhkjl nkdfiggjjk"; 
    j=strcspn(satr1,satr2);      
        cout<<"satr1   ning   satr2   da   bo„lgan   birinchi   belgisi   nomeri="<<j<<'\n';          
    system("pause"); 
    return 0; 
} 
Dastur   natijasi   quyidagicha   bo’ladi.   satr1   ning   satr2   da   bo„lgan   birinchi   belgisi
nomeri = 3 
4.     Strpbrk     (satr1,     satr2)     funksiyasi     satr1     tarukibidagi     belgilarni     satr2     dan
izlaydi.   Agar     topsa,     satr1   ning     topilgan   belgidan     o„ngdagi     qismini     qiymat
sifatida oladi. Topmasa funksiya NULL qiymatni oladi. 
#include <iostream.h> 
#include <string.h> 
using namespace std; 
int main() 
{  int i,j,k;      char  satr1[30]="asan5ng yechish"; 
    char  satr2[30]="df3hjhkjmkdfijjk"; 
    char*n; 
    n=strpbrk(satr1,satr2);      
    cout<<"satr1 ning satr2 da bo„lgan birinchi belgisidan o„ngdagi 
qismi="<<n<<'\n';     
    system("pause"); 
    return 0; 
} 
Dastur natijasi quyidagicha bo’ladi. satr1ning satr2 da bo„lgan  birinchi belgisidan
o’ngdagi qismi = hish 
5.     Bir     satr     tarkibida     ikkinchi     satrning     bor     yoki     yo„qligi     aniqlash     uchun
strstr(satr1,     satr2)     funksiyasidan     foydalaniladi.     Bu     funksiya     satr1     ning
tartibidan satr2  ni  izlaydi.  Agar  topsa,  satr1ning  o„sha  topilgan  joyidan  o„ng
qismiga     teng   qiymatni   oladi.   Agar   topmasa   NULL   qiymatni   oladi.   Misol.
Dastlabki   bir   nechta   natural   sonlar   ro„yxati   berilgan.   Ixtiyoriy   tanlangan   son
nomining ro„yxatda bor yoki yo„qligini aniqlash dasturini tuzing. 
#include <iostream.h> 
#include <string.h> 
using namespace std; 
int main() 
{  int i,j,k; 
    char  satr1[]="bi, ikki, uch, to„rt, besh, olti"; 
    char  satr2[30]; 
    char*n; 
    cout<<"son nomini kiriting\n";cin>>satr2; 
    n=strstr(satr1,satr2); cout<<" kipitilgan son ro„yxatda ";   
    if (n==NULL) cout<<"yo„q\n"; else cout<<"bor\n";            system("pause");  
    return 0; 
} 
Ko’pincha   sonlarni   qayta   ishlashni   talab   qiluvchi   masalalarda   sonni   matematik
almashtirishlardan     foydalanib     qayta     ishlagandan     ko„ra     uni     satr     ko„rinishda
qayta   ishlab,   keyin   satrni   songa   aylantirib   qo„yish   ancha   qulay   bo„ladi.   Buning
uchun   S++   dagi   <stdlib.h>   funksiyalar   kutubxonasidagi   quyidagi   funksiyalardan
foydalaniladi. 
1.     Atigi   (satr)     funksiyasi.     Bu     funksiya     turi     butun     (int)     bo„lib,     satr
ko„rinishida berilgan sonni butun turga aylantiradi. Satrni to„liq songa aylantirish
uchun   satrning   belgilari     to„liq     raqamlar     bo„lishi     kerak.     Agar     satrning
boshidagi  bir  nechta belgilarigina raqamlardan  iborat  bo„lsa,  atoi()    funksiyasi
faqat   shu qismini songa aylantiradi va qolgan qismini tashlab yuboradi. Agar satr
raqam   bilan   boshlanmagan   bo„lsa,     funksiya     0(nol)     ga     teng     qiymatni     oladi.
Yuqorida  keltirilgan  fikrlarni quyidagi dastur misolida tahlil qiling. 
#include  <iostream.h> 
#include  <stdlib.h> 
using  namespace  std; 
int main() 
{    int i,j,k,n,m; 
    char  satr1[30]="215625",  satr2[30]="25";     
    char  satr3[30]="2154254254698", 
satr4[30]="7458TALA215AN",satr5[]="assalom";     
    k=atoi(satr1);  n=atoi(satr2); i=atoi(satr3);  j=atoi(satr4); m=atoi(satr5);       
    cout<<"i="<<i<<"\nj="<<j<<'\n'; cout<<"k="<<k<<"\nn="<<n5<<'\n'; 
    cout<<"m="<<m<<'\n';      
    system("pause"); 
    return 0; 
}  Dastur natijasi quyidagicha bo„ladi 
i=-1819327894 
j=7458 
k=215625 
n=25 
m=0 
Satrni  songa  aylantirishda  son  tur  chegarasidan  chiqib  ketsa  C++  kutilmagan
natijani chop etadi. Masalan, dastur i parametri uchun shunday qiymat tanlangan  
2. atof(satr) funksiyasi. Bu funksiya ham atoi() funksiyasi  kabi ishlaydi. Faqat bu
funksiyaning  qiymati  long  turiga  mansub  bo„ladi.  Bundan  tashqari  funksiyaga
float   yoki     double   turi   berilsa,   satr   ko„rinishidagi   sonni   double   ko„rinishidagi,
ya ni   sonning     mantissasi     va     tartibini     ko„tsatish     bilan     yoki     o„nli     kasr‟
ko„rinishiga   o’tkazadi.     Agar     songa     aylantirilayotgan     satr     chegaradan     chiqib
ketsa,  funksiya kutilmagan qiymatni oladi. 
#include <iostream.h> 
#include <stdlib.h> 
using namespace std; 
int main() 
{ 
     int k,n,m; double i,j ;   
    char  satr1[]="3.14D15E+2";     
    char  satr3[30]="21.34254254E15", satr4[30]="745.8215";     
     n=atoi(satr1); i=atof(satr3);  j=atof(satr4);        
    cout<<"i="<<i<<"\nj="<<j<<<<"\nn="<<n<<'\n';  
    system("pause"); 
    return 0; 
} 
Dastur natijasi quyidagicha bo„ladi  i=2.13425e+016 
j=745.822 
n=3 
3. itoa (n,satr,m) funksiyasi. Bu funksiya int turiga mansub bo„lgan n sonini m lik
sanoq   sistemasiga   o„tkazib,   satr   turiga   o„tkazadi   va   hosil   bo„lgan   qiymatni   satr
massivga   beradi.   ltoa(n,satr,m)     funksiyasi     vazifasi     ham         itoa()     funksiyasi
vazifasi     kabi.     Faqat     ltoa()     funksiyasi         long     turiga     mansub     sonlarni     ham
satrga     aylantiradi.     Quyidagi   dasturni   tahlil   qilib,   bunga   ishonch   hosil   qilish
mumkin. 
#include <iostream.h> 
#include <stdlib.h> 
#include <string.h> 
using namespace std; 
int main() 
{ 
     int n=3245,m; long int i,j=568324557; long double  k=5.6e4; 
    char  satr1[20],satr2[20], satr3[20],satr4[20],satr5[20],satr6[20],*satr7;   
    itoa(n,satr1,2); itoa(n,satr2,8);itoa(n,satr3,16);itoa(n,satr4,10);      
cout<<"satr1="<<satr1<<"\nsatr2="<<satr2<<"\nsatr3="<<satr3<<"\nsatr4="<<
satr4<<'\n';  
    ltoa(j,satr1,2); ltoa(k,satr2,8);ltoa(j,satr3,16);ltoa(j,satr4,10);         
cout<<"satr1="<<satr1<<"\nsatr2="<<satr2<<"\nsatr3="<<satr3<<"\
nsatr4="<<satr
4<<'\n'; 
    itoa(n,satr5,10);ltoa(j,satr6,10);satr7=strstr(satr6,satr5);cout<<"   
satr7="<<satr7<<'\n'; 
    system("pause");          return   0;  
} 
Dastur  natijasi  quyidagicha  bo„ladi. 
satr1=110010101101 
satr2=6255 
satr3=cad 
satr4=3245 
satr1=100001110111111111000111001101 
satr2=155300 
satr3=21dff1cd 
satr4=568324557 
satr7=324557 
 
4.   gcvt   (son,raqamlar   soni,   satr)   funksiyasi.   Bu   funksiya   float   yoki   doudle
turidan  sonni  satrga  aylantiradi.  Bunda  son  float  yoki  double  turiga  mansub
son bo’lilshi  kerak,  raqamlar  soni  satrga  aylantirilgan  sonning  raqamlar  soni.
Agar   sonning   raqamlari   soni   ko„rsatilgan   sondan   ortiq   bo„lsa,   quyidagi   ikki   hol
bo’lishi mumkin. 
1)  Butun son berilgan bo„lsa, u nEm ko„rinishida ifodalanadi; 
2)  O„nli kasar ko„rinishida bo„lsa, ortiqcha raqamlari yaxlitlanadi. 
Quyidagi dasturda bu imkoniyatlar o„z aksini topgan 
#include <iostream.h> 
#include <stdlib.h> 
using namespace std; 
int main() 
{ 
     int n=4; double i=4562, m=1234567,k=12.455476;      char  satr[20];  
    gcvt(i,n,satr);cout<<"i  ning satr korinishi="<<satr<<'\n'; 
    gcvt(m,n,satr);cout<<"m  ning satr korinishi="<<satr<<'\n'; 
    gcvt(k,n,satr);cout<<"k  ning satr korinishi="<<satr<<'\n';    
    system("pause"); 
    return 0; 
} 
Dastur  natijasi  quyidagicha  bo’ladi. 
i  ning satr korinishi=4562 
m  ning satr korinishi=1.235e+006 
k     ning   satr   korinishi=12.46  
7. Tartiblash   va   saralash   masalalarini   algoritmlashtirish.   Ma lumotlarni‟
tartibga solish turlari. Ma lumotlar tuzilmasini saralash usullari.	
‟
Saralash   deganda,   eng   oddiy   bo’lgan   arraydagi   ma’lumotlarni   saralashni
nazarda tutamiz va bu kabi saralash algoritmlarining   olti xili ni ko’rib chiqamiz:
1. Selection sort (Tanlab saralash)
2. Bubble sort (Pufakchali saralash)
3. Insertion sort (Joylashtirib saralash)
4. Quick sort (Tezkor saralash)
5. Merge sort (Qo’shib saralash)
6. Radix sort
Ularning   deyarli   hammasi   (6- sidan   tashqari )   ma ’ lumotlarni   taqqoslab   ko ’ rish
orqali   saralaydi   va   tayyor   saralangan   arrayni   javob   sifatida   beradi .   Birinchi   3   ta
algoritm O(n²) vaqtda ishlasa, 4–5 lari O(nlogn) vaqtda ishlaydi. Algoritmlar bir xil
ishni   bajarsa   va   ularning   aksariyatining   ishlash   vaqti   ham   bir   xil   bo’lsa,   unda
ularning hammasi nimaga kerak degan haqli savol tug’iladi. Algoritm xilma-xilligiga ikkita asosiy sabab keltirish mumkin:
 Algoritmlarning   ishlash   vaqtlari   har   doim   ham   bir   xil   bo’lmaydi   va   ularning
ishlashi  qandaydir ma’lum holatlarda o’zgarib turadi. Ya’ni, umumiy holatda
biror  algoritmdan yomonroq  ishlovchi   boshqa   bir   algoritm, aynan,  qandaydir
holat uchun undan ko’ra yaxshiroq ishlashi mumkin.
Buni tushunish uchun quyidagi misolni keltiramiz. Bu yerda turli xil saralash
algoritmlarining  ishlashi   vizual   holda bir  biri   bilan taqqoslangan.   Birinchi   holatda
kiruvchi   ma’lumotlar,   ya’ni   saralanishi   kerak   bo’lgan   ma’lumotlar   ixtiyoriy   turda
va   holatda:   Bu   holatda   Heap,   Merge,   Quick   sort   kabi   algoritmlar   o’z   ishini
boshidagi   3   ta   algoritmdan   ko’ra   ancha   tez   yakunlayapti.   Endi   esa   bu   misolga
e’tibor   bering.   Endi   saralanishi   kerak   bo’lgan   ma’lumotlar   to’liq   bo’lmasa   ham,
deyarli   saralangan   holatda:   Bu   holda   e’tibor   bergan   bo’lsangiz,   Insertion   sort
(birinchi   turgani)   algoritmi   yuqorida   aytilgan   murakkab   algoritmlardan   ko’ra   bir
necha   barobar   tez   ishlashini   ko’rishingiz   mumkin.   Biz   yuqorida   faqat   ikki   xil
holatni,   ixtiyoriy   va   deyarli   saralangan   ma’lumotlarni   saralagan   holatni   ko’rib
chiqdik.   Bunday   holatlar   esa   ko’plab   topiladi,   masalan   teskari   saralangan,   bir
turdagi ma’lumotlar ko’p yoki kam bo’lgan va h.k ma’lumotlarni saralash. Har bir
holat uchun ma’lum bir algoritmlar qolganlaridan ko’ra tezroq yoki sekinroq ishlab
qolishi mumkin.
 Ikkinchi   sabab   sifatida   esa,   albatta,   saralash   algoritmining   xotiradan
qo’shimcha joy egallashi va uning turg’unlik xususiyati inobatga olinadi.
Saralash algoritmlarida   turg’unlik   (stability) deganda, ikkita bir xil elementning ilk
holatdagi   bir   biriga   nisbatan   o’rninini   saralashdan   keyin   ham   saqlab   qolishiga
aytiladi. Masalan,  3 1 2 4 1 5 sonlari bor deylik, ularni saralmoqchimiz. Agar biz
qo’llagan algoritm saraladan keyin   doim   birinchi 1 sonini ikkinchi 1 sonidan doim
oldin   joylashtirsa,   bu   algoritm   turg’un   saralovchi   algoritm   deyiladi.   Yana   haqli
savol tug’ilishi mumkin, “Bu narsaning kimga keragi bor, baribir natija 1 1 2 3 4 5
bo’ladiku?”  degan.  Albatta,  bu  holatda turg’unlik ahamiyati   sezilmasligi   mumkin.
Lekin,   aytaylik   siz   biror   korxona   ishchilari   ma’lumotlarini   ularning   nomiga   ko’ra
saralagan paytda turg’unlik kerak bo’lib qolishi mumkin. Ya’ni, birinchi Nodirbek
ma’lumotlari,   ikkinchi   Nodirbek   ma’lumotlaridan   keyin   turishi   kerak   degan   kabi.
Saralash   algoritmlari   ichidagi   Quick   Sort   ko’p   hollarda   Merge  yoki   Heap   sortdan
tez   ishlagani   bilan   u   turg’un   saralash   algoritmi   hisoblanmaydi   (Turg’un   holga
keltirishning iloji bor).  Ko’rib turganimizdek har xil algoritmlar ishlash tezliklari bir xil bo’lgani bilan
bizga   turli   holatlarda   aynan   bir   turdagi   algoritm   kerak   bo’lib   qolishi   va   u   biz
tuzayotgan   tizim   samaradorligiga   ta’sir   qilishi   mumkin.   Shu   sababdan,   turli   xil
saralash algoritmlari ishlashini o’rganish va tushunish professional dasturchi uchun
muhim hislatlardan biri hisoblanadi.
8. Qidiruv algoritmlari. Axborot izlashning asosiy tamoyillari. Kеtma-kеt
izlash. Izlashning tеzlashtiririlgan usullari.
Har   qanday   ilmiy   tadqiqot   tadqiqot   o’tkazilishi   mo’ljallanayotgan   yo’nalishga
bag’ishlangan   ilmiy   texnikaviy   informasiyalarni   izlashdan   boshlanadi.
Ilmiy   texnikaviy   informasiya   manbai   bo’lib   quyidagi   hujjatlar   hisoblanadi:
-   kitoblar   (darsliklar,   o’quv   qo’llanmalar,   monografiya,   broshyuralar);
-   davriy   matbuot   (jurnallar,   byulletenlar,   institutlarning   ishlari,   ilmiy   to’plamlar);
-   me’yoriy   hujjatlar   (standartlar,   texnikaviy   shartlar,   yo’riqnomalar,   me’yoriy
jadvallar,   muvaqqat   ko’rsatmalar   va   b.);    
-   ilmiy   tadqiqotlar   va   tajribaviy   konstruktorlik   ishlari   haqidagi   hisobotlar;
-   informasiyaviy   nashrlar   (ITI   to’plamlari,   analitik   narxlar,   informasiyaviy
varaqalar,   ekspress   informasiya,   ko’rgazmalarning   prospektlari   va   b.);
-   xorijiy   ilmiy-texnikaviy   adabiyotlar   tarjima   va   asl   nusxalari;   dissertasiyalar,
avtoreferatlar;
-   ilmiy-texnikaviy   konferensiyalar   va   ishlab   chiqarish   yig’ilishlarining   ilmiy-
texnikaviy   materiallari;
- ikkilamchi hujjatlar (referativ sharxlar, bibliografik katalog, referativ jurnallar va
b.)
Sanab o’tilgan hujjatlar ulkan informasiya oqimini hosil qiladi, uning sur’ati
yildan yilga oshib boradi. Bo’sh yuqorilama va quyilama axborot oqimi bir-biridan
farqlanadi.
Informasiyaning   yuqorilama  oqimi  ijrochilar   (ITI  oliy  o’quv  yurtlari, TKB  va  b.)
dan   qayd   etuvchi   idoralarga   tomon   yo’naladi,   quyilama   oqim   esa   bibliografik,
sharhlar, referativ  va boshqa   ma’lumotlar  ko’rinishida  ijrochilar   ularning talabiga
ko’rayo’naladi.   Informasiya «eskirish» xususiyatiga ega.
Yangi ilmiy va Ilmiy-texnikaviy ma’lumotlar jadal o’sib borishi munosabati bilan
informasiya «eskiradi». Uning «eskirish» qonuniyati 4.01-rasmda keltirilgan. Chet
elli   tadqiqotchilarning   ma’lumotlariga   ko’ra,   informasiya   qimmatining   pasayish
(«eskirish»)  jadalligi  taxminan  gazetalar  uchun bir  kunda  10%, bir  oyda jurnallar
uchun   10%   bir   yilda   kitoblar   uchun   10%ni   tashkil   etadi.   Shuning   uchu   ulkan informasiya   oqimida   yangi,   ilg’or,   muayyan   mavzuni   masalani   hal   qilishda
ilmiysini topish faqat bitta ilmiy xodim uchungina emas, balki katta jamoa uchun
ham ancha murakkabdir.
Zarur   informasiyani   izlash   -   ijodiy   jarayon,   shunga   ko’ra   uni   formallashtirish   va
demak avtomatlashtirish murakkabli kelib chiqadi.
Informasiya   oqimi   -   tanlangan   mavzuni   ishlab   chiqish   uchun   zarur   hujjatlarni
izlash   bo’yicha   operasiyalar   majmui.   Qo’lda,   mexanik   tarzda,
mexanizasiyalashtirilgan  va avtomatlashtirilgan holda amalga  oshirilishi  mumkin.
Ko’lda   izlash   odatdagi   bibliografik   varaqchalar,   kartotekalar   va   nashr
ko’rsatkichlari   bo’yicha   amalga   oshiriladi.   Mexanik   izlashda   informasiya
yetkazuvchilar   bo’lib   perfokartalar   hisoblanadi.   Mexanizasiyalashtirilgan   izlash
hisobli   perforasion   mashinalarni,   avtomatlashtirilgani   esa   EHMni   qo’llashga
asoslanadi.   Informasiyaviy izlash sistemalarida informasiyaviy izlash tilining turli
talqinlari qo’llanadi.   Optimal natijaga erishish uchun izlash zarurdir, chunki bunda
u yoki bu darajada mavzuni ishlab chiquvchi (yoki ishlab chiqaruvchilar)ning o’zi
ishtirok   etadi.   Izlashni   amalga   oshira   borib,   ishlab   chiquvchi   izlash   ko’lamini
bamisoli   tadqiq   etadi   va   o’z   informasiyaviy   so’rovi   ifodasini   aniqlaydi.   Ilmiy-
texnikaviy   informasiyani   o’rganish   va   tahlil   qilish   -masalani   mavzu   bo’yicha
ahvolini   yoritish,   ilmiy-tadqiqot   maqsadi   va   vazifasini   isbotlash   uchun   asos.
Informasiya   samarali   ishlab   chiqilishiga   erishish   (O’rganish,   yodda   saqlab   qolish
va   taxlil)   uchun   bir   qator   shartlarga   amal   qilish   kerak.
Birinchi   shart   bo’lib   aniqlash,   ya’ni   o’qishning   maqsadini   belgilash   hisoblanadi.
Bu   psixologik   omil   tafakkurni   faollashtiradi,   o’rganilayotganni   tushunishga
yordamlashadi, idroklashni ancha aniqlashtiradi. Mazkur holda ilmiy xodim o’zini
«muayyan to’lqinga» sozlaydi.
Keyingi shart, bu ilhomlanish. U ilmiy yondashishga  asoslanadi  va informasiyani
ishlab chiqish samarasini oshiradi.
Informasiyani   sifatli   ishlab   chiqishni   ta’minlash   uchun   diqqat   va   fikrni   bir   yerga
to’plash   zarur.   Ishlab   chiqish   jarayonida   turli   asab   qo’zg’atuvchilar   (shovqin,
gaplashishlar,   xususiy   fikrlar   va   b.)ni   bartaraf   etish   zarur,   chunki   bular   e’tiborni
chalg’itadi   va   tezda   toliqishga   olib   keladi.   Informasiya   ustida   muvaffaqiyatli
ishlashning   muhim   omili   bo’lib   mehnatning   mustaqilligi   hisoblanadi.
Adabiyotlarni   o’rganishda   qat’iyat   va   muntazamlik   ancha   muhim   shartlardan
hisoblanadi. Ayniqsa bu narsa murakkab va qiyin yangi matnni o’qishda zarurdir. Materialni   to’liq   tushunishga   erishish   uchun   o’qish   va   qayta   o’qishga   to’g’ri
keladi.Axborotni   ishlab   chiqish   samaradorligi   aqliy   ishlay   olish   qobiliyatiga
bog’liq. Uning oshishi uchun to’g’ri ish tartibi muhim shart hisoblanadi. 12 soatlik
aqliy   mehnatdan   so’ng   57   minut   tanaffus   qilish,   jismoniy   mashqularni   bajarish,
chuqur, kuchli nafas olish va boshqalarni bajarish tavsiya etiladi. Bu markaziy nerv
sistemasini rag’batlantiradi va ishlash qobiliyatini oshiradi.
Ilmiy-texnikaviy   axborotni   ishlab   chiqishda   ko’chirma,   annotasiya,   konspektlar
qo’llaniladi.   Ko’chirma - axborot ayrim qismlarining qisqa (yoki to’liq) mazmuni.
Ularning   qimmati   juda   yuqori,   chunki   ular   kichik   hajmda   ko’pgina   informasiya
to’plashga   imkon   beradi   va   keyingi   ijodiy   ish   uchun   asos   bo’lib   hisoblanadi.
Annotasiya - birinchi manba informasiyasining qisqacha mazmuni. Ular yordamida
matnni xotirada tezda tiklash mumkin bo’ladi.
Konspekt   -   u   yoki   bu   birinchi   manbaadagi   informasiyaning   mazmunini   to’liq
bayoni. U mazmunga ko’ra to’liq hamda hajmga ko’ra iloji boricha qisqa bo’lishi
kerak.   Konspektni   o’z   so’zlari   bilan   tuzish   kerak,   bu   o’qilganni   anglash   va   tahlil
etishni   talab   qiladi   va   shu   bilan   ijodiy   ishga   katta   foyda   keltiradi.
  Ishlanayotgan   informasiyani   eslab   qolishning   turli   usullari   mavjud:   mexanik,
mazmuniy, ixtiyoriy, g’ayriixtiyoriy.
Mexanik usul o’qilganni ko’plab takrorlash va qayta o’qishga asoslangan. Mazkur
holda   eslab   qolinayotgan   informasiya   ayrim   unsurlari   o’rtasidagi   mantiqiy
bog’liqlik   bo’lmaydi.   Shuning   uchun   u   kam   samarali   va   asosan   sana,   formula,
sitata,   chet   so’zlar   va   h.k.larni   eslab   qolish   uchun   qo’llanadi.   Ma’noviy   usul
ishlanayotgan   informasiya   ayrim   unsurlari   o’rtasidagi   mantiqiy   bog’liqlikni   eslab
qolishga   asoslangan.   O’qishda   ayrim   unsurlarnigina   emas,   balki   yaxlit   matnni,
uning mazmuni va ahamiyatini tushunish zarur. Eslab qolishning bu usuli mantiqiy
-   ma’noviy   hisoblanadi,   buning   natijasida   u   mexanik   usuldan   ko’p   marta
samaraliroqdir.Ixtiyoriy   usulda   eslab   qolish   turli   assosiasiya   qonunlari   bilan
bog’liq bo’lgan mnemonik yo’llarga asoslanadi.
Ayri-ixtiyoriy usul o’qish jarayonida hissiyotga ko’ra yuzaga kelgan emosiya bilan
bog’liq   matnning   u   yoki   bu   parchasini   tasodifan   eslab   qolishga   asoslangan.
Shuni   ta’kidlash   joizki,   ishlanayotgan   informasiyani   eslab   qolishning   universal
usuli   yo’q.   Amalda,   ko’pincha,   usullar   majmuvdan   informasiyaning   u   yoki   bu
qismi tavsifiga bog’liq holda foydalaniladi. Ishlanayotgan   informasiyani   tahlil   tadqiqotning   muhim   vazifalaridan   biri.
Tahlil   jarayonida   ham   informasiya   manbaini,   ham   ulardagi   informasiyani
tasniflash va sistemalashtirish zarur. Manbalarni ikki xil sistemalashtirish mumkin:
xronologik tartibda va mavzu bo’yicha.
Birinchi   holda   barcha   informasiya   mavzu   bo’yicha   ilmiy   bosqichga   ko’ra
sistemalashtiriladi,   bular   uchun   sifat   sakrashlari   xosdir.   Keyin   har   bir   bosqichda
tegishli  manbalar  (bosqichlar)  e’tibor   bilan   tanqidiy  tahlil  qilinadi.  Buning   uchun
yuqori darajada erudisiya va bilimga ega bo’lish zarurdir.
Ikkinchi   holda   (mavzuli   taxlil)   da   informasiyaning   butun   hajmi   ishlab
chiqilayotgan   mavzu   masalalari   bo’yicha   sistemalashtiriladi.   Bunda   katta   e’tibor
ilmiy-texnikaviy   informasiya   so’nggi   nashrga   qaratiladi,   ularda   mazkur   masala
tadqiqoti   yakuni   keltirilgan   bo’lishi   mumkin.   Keyinchalik   tanlov   asosida   alohida
qiziqish tug’dirgan boshqa manbalar taxlil etiladi.
Informasiyani taxlil etishning ikkinchi talqini sodda va kam vaqt talab qiladi. Shu
bilan birga mazkur   talqin bo’yicha  mavzu bo’yicha  to’liq bo’lmagan  informasiya
hajmi tahlil etiladi.
Ishlab   chiqish   (o’rganish,   eslab   qolish   va   tahlil)   natijalari   bo’yicha   Ilmiy-
texnikaviy informasiya belgilanadi:
 dolzarblik va mavzuning yangiligi;
 mavzu bo’yicha nazariy va eksperimental tadqiqotlar sohasidagi  so’nggi
yutukdar;
 ilmiy tadqiqotning maqsad va vazifalari;
 mavzu bo’yicha ishlab chiqarish tavsiyalari;
 ilmiy   ishlanmalarning   texnikaviy,   iqtisodiy   va   ekologik   maqsadga
muvofiqligi.
Ilmiy   texnikaviy   axborotni   izlash   va   ishlab   chiqish   (o’rganish,   eslab   qolish   va
tahlil)   ilmiy   tadqiqotning   muhim   vazifalaridan   hisoblanadi.   Ularning   natijalari
asosida   mavzuning   dolzarbligi   va   yangiligi,   uning   maqsad   va   vazifalari
belgilanadi. 9. Algoritmlashtirishda  graflar nazariyasi,  graflarni algoritmlashtirish .
Dastlab   graflar   haqida   qisqacha   tarixiy   ma'lumotlar,   grafning   abstrakt
matematik   tushuncha   sifatidagi   ta'rifi   va   u   bilan   bog'liq   boshlang'ich
tushunchalar,   graflarning   geometrik   ravishda,   maxsus   turdagi   ko'phad   yordamida,
qo'shnilik   va   insidentlik   matritsalari   vositasida   berilishi   yoritiladi.
So'ngra   grafning   elementlari ustida sodda amallar,   graflarni   birlashtirish, biriktirish
va   ko'paytirish   amallari,   mar-   shrutlar   va   zanjirlar,   grafning   bog'lamliligi
tushunchasi,   Eyler   va   Gamilton   graflari ,   graflarda   masofa   tushunchasi,   minimal
masofali   yo'l   haqidagi   masala,   daraxt   va   unga   ekvivalent
tushunchalar,   grafning   siklomatik   soni   bayon   qilinadi.   Graflar   nazariyasi   bo'yicha
tadqiqotlar natijalari inson faoliyatining turli sohalarida qo'llaniladi.  
Graf   —   obyektlar   to plaminingʻ   grafik   ko rinishi   bo lib,   unda   ba zi   juft	ʻ ʻ ʼ
obyektlar   linklar   orqali   bog lanadi.   O zaro   bog langan   obyektlar   uchlari   deb	
ʻ ʻ ʻ
ataladigan nuqtalar bilan ifodalanadi, uchlarini bog laydigan bo g inlar esa qirralar	
ʻ ʻ ʻ
deb   nomlanadi.   Rasmiy   ravishda,   graf   bir   juft   to plamdir   (V,   E),   bu   yerda   V   —
ʻ
uchlarning   to plami,   E   —   uchli   juftlarni   bog laydigan   qirralarning   to plami.   Biz	
ʻ ʻ ʻ
hozir uyidagi   grafni   ko rib chiqamiz: 	
ʻ  . Yuqoridagi   grafda . V = {a, b, c, d, e} E =
{ab, ac, bd, cd, de}.   Graf   ma lumotlar tuzilmasi. Matematik	
ʼ   graflarni   ma lumotlar	ʼ
tuzilmasida   ifodalash   mumkin.   Biz   uch   massivi   va   qirralarning   ikki   o lchovli
ʻ
qatoridan   foydalanishimiz   mumkin.   Oldinga   davom   etishdan   oldin,   ba zi   muhim	
ʼ
atamalar   bilan   tanishib   chiqaylik.   •   Vertex   —   grafning   har   bir   tuguni   vertex
shaklida taqdim etiladi.
Graf   –   bu   tugunlar   va   qirralar   (tugunlar   juftligini   birlashtiruvchi)
to’plamidan   iborat   bo’lgan   abstrakt   matematik   ob’ektdir.   Grafning   elementlari
tarkibi   va   munosabatlar   tuzilishi   beriladi. Grafning   tarkibiy   qismlari   bu   uning
tugunlari   va   qirralaridir.   К   с   о   и   н .   Graflar   haqida.   Tarmoq.   Bir   nechta   juft
tugunlararo   qirralardan   iborat   bo’lgan   turlicha   yo’llar   to’plami   mavjud   bo’lishi
mumkin. Yopiq yo’llar – sikllarning mavjud bo’lishi tarmoqlarga xos xususiyatdir.
Yonaltirilmagan   graf   yoki simmetrik bog’liqlik.
10. Kombinatorika elementlarini dasturlash va algoritmlashtirish
Kombinatorikaning   to'liq   ko'lami   umuman   kelishilmagan   Ga
binoan   H.J.Rayser ,   mavzuni   ta'rifi   qiyin,   chunki   u   juda   ko'p   matematik
bo'linmalarni   kesib   o'tadi. [2]
  Hududni   kombinatorika   bilan   bog'liq   bo'lgan
muammolar turlari bilan tavsiflash mumkin  The   sanab   chiqish   ba'zan   cheklangan   tizimlar   bilan   bog'liq   bo'lgan   juda   umumiy
ma'noda kelishuvlar yoki konfiguratsiyalar deb ataladigan ko'rsatilgan tuzilmalarni
(hisoblash),
 The   mavjudlik   berilgan mezonlarga javob beradigan bunday tuzilmalar,
 The   qurilish   ushbu tuzilmalarning, ehtimol ko'p jihatdan va
 optimallashtirish , "eng katta", "eng kichkina" bo'lsin yoki boshqa biron bir narsani
qoniqtiradigan   bir   qancha   imkoniyatlar   orasida   "eng   yaxshi"   tuzilmani   yoki
echimni topish   maqbullik mezonlari .
"Kombinatorial"   yo'naltirishlar.   Kompyuter   fanidagi   kombinatorial   mantiq
uchun qarang   Kombinatorial mantiq .
Kombinatorika   maydonidir   matematika   birinchi   navbatda   natijalarni   olish
uchun vosita va maqsad sifatida hisoblash va ba'zi  xususiyatlarini  hisoblash bilan
bog'liq   cheklangan   tuzilmalar .   Bu   matematikaning   boshqa   ko'plab   sohalari   bilan
chambarchas   bog'liq   va   ko'plab   dasturlarga   ega   mantiq   ga   statistik   fizika ,
dan   evolyutsion biologiya   ga   Kompyuter fanlari , va boshqalar.
Leon   Mirskiy   dedi:   "kombinatorika   -   bu   bir-biriga   bog'liq   bo'lgan   bir   qator
tadqiqotlardir,   ammo   ularning   maqsadlari,   usullari   va   erishilgan   muvofiqlik
darajasi jihatidan bir-biridan farq qiladi." [3]
  Kombinatorikani aniqlashning bir usuli,
ehtimol, uning bo'linmalarini ularning muammolari va texnikasi bilan tavsiflashdir.
Bu   quyida   keltirilgan   yondashuv.   Shu   bilan   birga,   ba'zi   bir   mavzularni
kombinatoriya   soyaboniga   qo'shish   yoki   qo'shmaslik   uchun   faqat   tarixiy   sabablar
mavjud. [4]
  Avvalo   cheklangan   tizimlar   bilan   bog'liq   bo'lsa-da,   ba'zi   kombinatorial
savollar   va   texnikalar   cheksizgacha   kengaytirilishi   mumkin
(xususan,   hisoblanadigan ) lekin   diskret   sozlash.
Kombinatorika   u   hal   qiladigan   muammolarning   kengligi   bilan   mashhur.
Kombinatoriya   muammolari   ko'plab   sohalarda   paydo   bo'ladi   sof   matematika ,
xususan   algebra ,   ehtimollik   nazariyasi ,   topologiya va   geometriya , [5]
  shuningdek,
uning   ko'plab   dastur   sohalarida.   Ko'plab   kombinatorial   savollar   tarixiy   ravishda
bir-biridan ajratilgan holda ko'rib chiqilgan   maxsus   ba'zi bir matematik kontekstda
yuzaga  keladigan  muammoni   hal   qilish.  Keyingi   yigirmanchi   asrda  esa  kuchli   va
umumiy nazariy usullar ishlab chiqilib, kombinatorika o'z-o'zidan matematikaning
mustaqil   tarmog'iga   aylandi. [6]
  Kombinatorikaning   eng   qadimgi   va   eng   qulay
qismlaridan   biri   grafik   nazariyasi o'z-o'zidan   boshqa   sohalar   bilan   ko'plab   tabiiy
aloqalarga   ega.   Kombinatorika   tez-tez   kompyuterda   formulalar   va   taxminlarni
olish uchun ishlatiladi   algoritmlarni tahlil qilish .
XULOSA
Algoritm   ijrochiga   tushunarli   bo’lishi   uchun   ijrochining   imkoniyatlarini
bilish   lozim.   Agar   ijrochi   inson   bo’lsa,   u   holda   algoritm   insonning
imkoniyatlaridan   kelib   chiqib   tuzilishi   kerak.   Bunda   ko‘zlangan   maqsad   va
algoritmdan kelib chiqib inson tushunadigan til, insonning bilimi, hayotiy tajribasi, kasbiy   malakasi,   yoshi,   qolaversa,   jismoniy   imkoniyatlari   hisobga   olinishi   zarur.
Agar ijrochi texnik vosita (masalan, kompyuter, elektron soat, dastgohlar) boMsa,
u   holda   algoritm   shu   texnik   vositaning   imkoniyatlaridan   kelib   chiqib   tuzilishi
kerak.
Inson hayoti davomida katta-kichik vazifalar yoki masalaiarni hal etishni o‘z
oldiga   maqsad   qilib   qo‘yadi.   Odatda,   u   o‘z   maqsadiga   erishishi   uchun   bajarishi
lozim   bo'lgan   amal   yoki   ishlarini   hayotiy   tajribasi   yoki   o'zlashtirgan   bilimiga
asoslanib   ma'lum   bir   tartibga   keltiradi.   Bunga   hayotimizdan   xilmaxil   misollar
keltirish mumkin.
Algoritm   deganda,   biror   maqsadga   erishishga   qaratilgan   ijrochi   bajarishi
uchun   mo'ljallangan   ko‘rsatma   (buyruq)laming   aniq,   tushunarli   va   chekli   ketma-
ketligi   tushuniladi.   Bu   algoritm   tushunchasining   matematik   ta'rifi   boMmasa   ham
intuitiv   ma'noda   algoritmning   mazmunini   ochib   beruvchi   tavsifidir.   Algoritmni
intuitiv   ma’noda   bir   necha   misollarda   izohlaymiz.   Biror-bir   narsani   taqiqlovchi
qoidalar   algoritm   boMolmaydi,   masalan:   «Chekish   mumkin   emas»,
«Begonalarning kirishi taqiqlanadi», «Kirish», «Chekish  uchun joy» kabi  birorbir
narsaga ruxsat etuvchi qoidalar ham algoritmga xos emas. Lekin «Svetoforni yashil
rangida   o‘ting»   juda   sodda   bo'lsa   ham   algoritmdir.   Demak,   yuqorida   keltirilgan
misollardagi ko‘rsatmalar ketma-ketligi algoritm va bu algoritmlarni bajarayotgan
inson   —   ijrochi   boMar   ekan.   Algoritm   ijrochisi   faqat   insonmi,   degan   savol
berishingiz tabiiy. Bu savolga javob quyidagicha: Algoritm ijrochisi — algoritmda
ko'rsatilgan  buyruq  yoki  ko‘rsatmalarni  bajara  oladigan abstrakt  yoki  real   (texnik
yoki   biologik)   sistema.   Ijrochi   bajara   olishi   uchun   algoritm   unga   tushunarli
boMishi lozim. Algoritm ijrochi tushunadigan tilgagina emas, balki uning bilim va
malakasiga   ham   mos   boMishi   kerak.   Aks   holda   ijrochi   birorta   ham   ko'rsatmani
bajara   olmasligi   mumkin.   Ijrochi   bajara   olishi   mumkin   boMgan   ko‘rsatma   yoki
buyruqlar   to‘plami   ijrochining   ko‘rsatmalar   sistemasi   deyiladi.   Masalan,   «16
sonidan   kvadrat   ildiz   chiqarilsin»   ko'rsatmasi   2-sinf   o'quvchisining   ko'rsatmalar
sistemasiga   tegishli   boMmaydi,   lekin   8-sinf   o'quvchisining   ko‘rsatmalar
sistemasiga   tegishli   boMadi.   Algoritm   ijrochiga   tushunarli   boMishi   uchun
ijrochining   imkoniyatlarini   bilish   lozim.   Agar   ijrochi   inson   boMsa,   u   holda
algoritm insonning imkoniyatlaridan kelib chiqib tuzilishi kerak. Bunda ko‘zlangan
maqsad   va   algoritmdan   kelib   chiqib   inson   tushunadigan   til,   insonning   bilimi,
hayotiy tajribasi, kasbiy malakasi, yoshi, qolaversa, jismoniy imkoniyatlari hisobga
olinishi   zarur.   Agar   ijrochi   texnik   vosita   (masalan,   kompyuter,   elektron   soat,
dastgohlar) boMsa, u holda algoritm shu texnik vositaning imkoniyatlaridan kelib
chiqib tuzilishi kerak. FOYDALANILGAN ADABIYOTLAR
1.   Kulakov   A.G.,   Lando   S.K.,   Semyonov   A.L.,   Shen   A.X..   Algoritmika.   V-V   II
sinflar. Moskva: Drofa, 1997. 
2.   Boltayev   B   .   Abduqodirov   A.,   Taylaqov   N.,   Mahkamov   M.,   Azamalov   A.,
Xafizov S. Informatika va hisoblash texnikasi asoslari. 9-sinf. T.: Cho lpon, 2006.
3.   Boltayev   B.,   Mahkamov   M.,   Azamatov   A.   Informaiikadan   olimpiada
masalalarini yechish. Metodik qo'llanma, T : 2004. 
4.   Boltayev   B.,   Mahkamov   M.,   Azamatov   A.   Informalikadan   olimpiada
masalalarini yechish-2. Melodik qo'llanma, Toshkent, 2004. 
5.   B.Boltayev,   A.Abduqodirov,   N.Taylaqov,   M.Mahkamov,   A.Azamalov,
S.Xafizov. Informatika va hisoblash texnikasi asoslari. 9-sinf. T.: Cho'lpon, 2006.
6.   B.Boltayev,   Mahkamov   M.,   Azamatov   A.,   Ahduqodirov   A.,   Daliyev   A.,
Azlarov T., Taylaqov N. 8-sinf. T.: O'qituvchi, 2006. 
7.   B.Boltayev,   M.Mahkamov,   A.Azamatov.   8-sinf   masalalar   to‘plami   va   ularni
yechish usullari. Metodik qo‘llanma. T.: 2005. 
8. B.Boltayev, M ahkam ov M., Azam atov A. Paskal  dasturlash tili. Metodik qo
llanma. T.: 2007. 
9. B .B oltayev, M ahkam ov M., A zam atov A., R ahm onqulova S. Informatika.
7-sinf. T.: 2006.

REJA: KIRISH 1. Ma’lumotlar tuzilmasi, tuzilmalar ustida bajariladigan amallar. Dasturlash texnalogiyalari 2. Algoritmlarni murakkablik darajalasining tahlili, murakkablik darajasini baholash usullari. 3. Ma lumotlar tuzilmasida satrli va belgili turlarni dasturlashtirish‟ 4. Dinamik xotiradan foydalanish, dinamik xotirani ishlatishda ko rsatkich turlari ‟ 5. Murakkab turlarni algoritmlashtirish va dasturlash. Vektorlar va massiv ma lumotlarini algoritmlashtirish ‟ 6. Struktura turi, struktura dasturlash va algoritmlash 7. Tartiblash va saralash masalalarini algoritmlashtirish. Ma lumotlarni ‟ tartibga solish turlari. Ma lumotlar tuzilmasini saralash usullari. ‟ 8. Qidiruv algoritmlari. Axborot izlashning asosiy tamoyillari. Kеtma-kеt izlash. Izlashning tеzlashtiririlgan usullari. 9. Algoritmlashtirishda graflar nazariyasi, graflarni algoritmlashtirish. 10. Kombinatorika elementlarini dasturlash va algoritmlashtirish XULOSA FOYDANILGAN ADABIYOTLAR

KIRISH Algoritm ijrochiga tushunarli bolishi uchun ijrochining imkoniyatlarini bilish lozim. Agar ijrochi inson bo’lsa, u holda algoritm insonning imkoniyatlaridan kelib chiqib tuzilishi kerak. Bunda ko‘zlangan maqsad va algoritmdan kelib chiqib inson tushunadigan til, insonning bilimi, hayotiy tajribasi, kasbiy malakasi, yoshi, qolaversa, jismoniy imkoniyatlari hisobga olinishi zarur. Agar ijrochi texnik vosita (masalan, kompyuter, elektron soat, dastgohlar) boMsa, u holda algoritm shu texnik vositaning imkoniyatlaridan kelib chiqib tuzilishi kerak. Inson hayoti davomida katta-kichik vazifalar yoki masalaiarni hal etishni o‘z oldiga maqsad qilib qo‘yadi. Odatda, u o‘z maqsadiga erishishi uchun bajarishi lozim bo'lgan amal yoki ishlarini hayotiy tajribasi yoki o'zlashtirgan bilimiga asoslanib ma'lum bir tartibga keltiradi. Bunga hayotimizdan xilmaxil misollar keltirish mumkin. 1 - misol Ko‘chadan o'tish maqsad qilib qo‘yilgan bo'lsin. IJ holda ko‘chadan o'tayotgan kishi hammamizga odatiy hol bo‘lib qolgan quyidagi harakatlarni bajarishi lozim bo'ladi: 1) chap tarafga qaralsin, agar transport vositasi yo‘q bo‘lsa, 2- bandga o'tilsin, aks holda 1-bandga o'tilsin; 2) o‘ng tarafga qaralsin, agar transport vositasi yo‘q bo‘lsa, 3- bandga o'tilsin, aks holda 1-bandga o'tilsin; 3) ko'chadan o'tilsin. Yuqoridagi misollarda keltirilgan amallar ketma-ketligi, boshqacha aytganda, ko'rsatmalar yoki buyruqlar ketma-ketligi biror kishi tomonidan bajarilgach, ko'zlangan maqsadga erishiladi. Bunday amallar ketma-ketligi yoki hayotimizda har kuni va har soatda uchrab turadigan turli qoidalar ichida biror zaruriy natijaga erishishga olib keladigan amallarni ketma-ket bajarishni talab etadigan qoidalar informatikaning asosiy tushunchalaridan biri algoritm so‘zi bilan ifodalanadi. Algoritm so‘zi IX asrda yashab (783-yilda tug‘ilgan) o‘z ilmiy ishlari xazinasi bilan dunyoga tanilgan vatandoshimiz buyuk astronom, matematik va geograf Abu Abdullo Muhammad ibn Muso al-Xorazmiy nomidan kelib chiqqan. Al-Xorazmiy arifmetikaga bag‘ishlangan «Hind hisobi haqida kitob» risolasida

to‘qqizta hind raqamining sonlarni ifodalashdagi afzalliklari va ular yordamida har qanday sonni ham qisqa va oson yozish mumkinligini aytadi va hozirgi kunda hamma o‘quvchilar biladigan sonlar ustida, yuqoridagi 3-misoldagi kabi ustun ko'rinishida amallar bajarish qoidalarini yoritadi. Ayniqsa, nol (0) qo‘llashning ahamiyati haqida tushuncha berib, nolni yozmaslik natijaning xato chiqishiga olib keladi, degan. Bu risola XII asrda Ispaniyada lotin tiliga tarjima qilingan va butun Yevropaga tarqatilgan. Bu tarjimaning XIV asrda ko'chirilgan qoLyozmasi ning yagona nusxasi Kembrij universitetining kutubxonasida saqlanmoqda. Risola «Dixit Alxhorithmi», ya’ni oDediki aiXorazmiy» iborasi bilan boshlanadi. Algoritm deganda, biror maqsadga erishishga qaratilgan ijrochi bajarishi uchun mo'ljallangan ko‘rsatma (buyruq)laming aniq, tushunarli va chekli ketma- ketligi tushuniladi. Bu algoritm tushunchasining matematik ta'rifi boMmasa ham intuitiv ma'noda algoritmning mazmunini ochib beruvchi tavsifidir. Algoritmni intuitiv ma’noda bir necha misollarda izohlaymiz. Biror-bir narsani taqiqlovchi qoidalar algoritm boMolmaydi, masalan: «Chekish mumkin emas», «Begonalarning kirishi taqiqlanadi», «Kirish», «Chekish uchun joy» kabi birorbir narsaga ruxsat etuvchi qoidalar ham algoritmga xos emas. Lekin «Svetoforni yashil rangida o‘ting» juda sodda bo'lsa ham algoritmdir. Demak, yuqorida keltirilgan misollardagi ko‘rsatmalar ketma-ketligi algoritm va bu algoritmlarni bajarayotgan inson — ijrochi boMar ekan. Algoritm ijrochisi faqat insonmi, degan savol berishingiz tabiiy. Bu savolga javob quyidagicha: Algoritm ijrochisi — algoritmda ko'rsatilgan buyruq yoki ko‘rsatmalarni bajara oladigan abstrakt yoki real (texnik yoki biologik) sistema. Ijrochi bajara olishi uchun algoritm unga tushunarli boMishi lozim. Algoritm ijrochi tushunadigan tilgagina emas, balki uning bilim va malakasiga ham mos boMishi kerak. Aks holda ijrochi birorta ham ko'rsatmani bajara olmasligi mumkin. Ijrochi bajara olishi mumkin boMgan ko‘rsatma yoki buyruqlar to‘plami ijrochining ko‘rsatmalar sistemasi deyiladi. Masalan, «16 sonidan kvadrat ildiz chiqarilsin» ko'rsatmasi 2-sinf o'quvchisining ko'rsatmalar sistemasiga tegishli boMmaydi, lekin 8-sinf o'quvchisining ko‘rsatmalar sistemasiga tegishli boMadi. 1. Ma’lumotlar tuzilmasi, tuzilmalar ustida bajariladigan amallar. Dasturlash texnalogiyalari Ma’lumotlar tuzilmasi — bu ma’lumotlarni samarali o’qish va o’zgartirish imkonini beruvchi, ma’lumotlarni saqlash va boshqarishning bir formatga solingan shaklidir.

Barcha dastur yoki dasturiy mahsulotning asosida ikkita birlik yotadi: ma’lumotlar va ular ustida qandaydir amallar bajaradigan algoritmlar. Algoritmlar ma’lumotlarni biz yoki dastur uchun foydali bo’lgan axborot ko’rinishiga keltirib beradi. Algoritmlar shu ma’lumotlar ustida amallarni (o’qish, yozish, yangilash, o’chirish) samarali va tez bajara olishi uchun biz shu ma’lumotlarni ma’lum bir strukturaga solgan holda saqlashimiz kerak bo’ladi. Demak shunday qilib, Quyida keltirilgan ma’lumotlar tuzilmalari dasturlashda eng ko’p qo’llaniladigan tuzilmalardir. Ularga: 1. Massiv (Array) 2. Bog’langan ro’yhat (Linked List) 3. Navbat (Queue) 4. Stek (Stack) 5. Hash jadvallar (Hash tables) 6. Daraxtlar (Trees) 7. Graflar (Graph) kiradi. Biz bu bo’limda boshidagi 5 ta tuzilma bilan yaqindan tanishib, ularning kuchli va kuchsiz tomonlari va ularni qanday holatlarda ishlatish ma’qulligi haqida gaplashib o’tamiz. Qolgan ikkita tuzilma murakkabroq bo’lib ular o’z ichida yana ko’plab turlarga bo’linib ketadi. Shuning uchun ularni keyinroqqa qoldiramiz. Bundan tashqari barcha tuzilmalarning hamma joyda ingliz tilidagi nomi

ishlatilgani va ularning nomi odatda tarjima qilinmaganligi sababli keyingi o’rinlarda men ularning asosan ingliz tilidagi nomlarini ishlataman. Turli xildagi ma’lumotlar tuzilmalari nima uchun kerak? Ma’lumotlar tuzilmalari nimaligi haqida qisman tasavvurga ega bo’ldingiz va ularning asosiy turlari bilan ham tanishib oldingiz. Lekin, shu joyga kelib agar sizda “Nima uchun ma’lumotlarning turli xil tuzilmalari kerak?” “Nima uchun bir turdagi universal ma’lumotlar tuzilmalaridan foydalanib qo’ya qolsa bo’lmaydi?” degan savol tug’ilmagan bo’lsa, bu yaxshi emas.) Keling endi shu savolga javob topishga harakat qilamiz. Undan oldin ma’lumotlar tuzilmalari ustida asosiy bajarilishi mumkin bo’lgan amallarni ko’rib chiqaylik. Bularga ma’lumotlarni :  Ko’rib chiqish (Traversing)  O’qib olish (Retrieving)  Kiritish (Insertion)  O’chirish (Deletion)  Qidirish (Search)  Saralash (Sorting)  Birlashtirish (Merging) lar kiradi. Turli xildagi ma’lumotlar tuzilmalarida esa yuqoridagi amallar turlicha tezlikda amalga oshadi. Masalan oddiyroq misol olaylik, array uchun ma’lumotni o’qib olish uchun O(1) vaqt sarflansa, uni kiritish yoki o’chirish uchun O(n) vaqt sarflanadi. Linked listda esa bular aksincha. Shuning uchun, masalan, sizning dasturingizda ma’lumotlar ko’p kiritilib, o’chirilsayu lekin kam o’qilsa, bunda ma’lumotlarni saqlashda arraydan foydalangandan ko’ra linked list qulayroq hisoblanadi. Lekin, ko’pincha holatda bir necha ma’lumotlar tuzilmalarini o’zini birlashtirgan gibrid ma’lumotlar tuzilmalaridan ham foydalaniladi. 2. Algoritmlarni murakkablik darajalasining tahlili, murakkablik darajasini baholash usullari . Dasturni bajarish vaqti bajarilgan amallar soniga proportsionaldir. Albatta, vaqtning o'lchov birliklarida (sekundlar), u ham protsessorning tezligiga (soat chastotasiga) bog'liq. Algoritmning vaqt murakkabligi ko'rsatkichi nisbatan o'zgarmas bo'lishi uchun spetsifikatsiyalar kompyuter, u nisbiy birliklarda o'lchanadi. Odatda vaqt murakkabligi bajarilgan operatsiyalar soniga qarab baholanadi. An'anaga ko'ra, algoritmning murakkablik darajasini u foydalanadigan asosiy kompyuter resurslari miqdori bo'yicha baholash odatiy holdir: protsessor vaqti