# Algoritm nima va u qanday tuziladi

> Algoritm nima va masalani qanday qadamlarga bo'lish kerak? Kundalik misollar orqali algoritmik fikrlash, blok-sxema va dastur mantiqi bilan tanishasiz.

Manba: https://learncode.uz/dasturlash-asoslari/algoritm-nima/
Sana: 2026-05-02

![Muammodan natijagacha bo'lgan aniq qadamlarni tuzayotgan o'quvchi](https://learncode.uz/images/dasturlash-asoslari/algoritm-hero-v2.webp)

*Algoritm masalani aniq, tartibli qadamlarga bo'lishdan boshlanadi.*

Har kuni, bilmagan holda, o'nlab algoritm bajarasiz: choy damlash, ishga
borish yo'li, ovqat pishirish. **Algoritm — biror natijaga olib boradigan
aniq qadamlar ketma-ketligi.** Dasturlash ham aynan shu — faqat qadamlarni
odam emas, kompyuter bajaradi. Bu darsda algoritm nima ekanini va uni qanday
tuzishni ko'ramiz.

[Dasturlash nima](https://learncode.uz/dasturlash-asoslari/dasturlash-nima) darsida "javobni emas,
javobga olib boradigan yo'lni yozamiz" degandik. O'sha yo'l — algoritm.

## Algoritm — kundalik misolda

Kimdir sizdan choy damlashni o'rgatishni so'radi. Siz qadamlarni tartib bilan
aytasiz:

1. Choynakka suv quy.
2. Suvni qaynat.
3. Choynakka choy sol.
4. Qaynoq suv quy.
5. 5 daqiqa kut.

Bu — algoritm. Har qadam **aniq**, **tartibli** va oxiri **bor**. Kompyuter
uchun dastur yozish ham xuddi shunday: masalani mana shunday mayda, aniq
qadamlarga bo'lasiz.

## Algoritmning uch xossasi

Yaxshi algoritm uchta shartga javob beradi:

- **Aniqlik** — har qadam bir ma'noli. "Bir oz kut" emas, "5 daqiqa kut".
- **Tartiblilik** — qadamlar ketma-ket. Choyni suv qaynashidan oldin solmaysiz.
- **Cheklanganlik** — algoritm oxir-oqibat **tugaydi**, cheksiz davom etmaydi.

Kompyuter juda aniq, shuning uchun noaniq qadam — xatoga olib keladi. "Suvni
biroz isit" degan buyruqni u tushunmaydi; unga "90 gradusgacha isit" kerak.

![Yaxshi algoritmning aniqlik, tartiblilik va cheklanganlik xossalari](https://learncode.uz/images/dasturlash-asoslari/algoritm-uch-xossa-v2.webp)

*Yaxshi algoritmning har bir qadami aniq va tartibli bo'ladi, algoritm esa oxir-oqibat tugaydi.*

> **Yodda tuting**
>
> Yaxshi dasturchi bo'lishning siri — tez kod yozish emas, masalani **to'g'ri
> qadamlarga bo'la olish**. Qadamlar aniq bo'lsa, ularni istalgan tilga
> o'girish oson. Shuning uchun avval algoritmni o'ylab, keyin kod yoziladi.

## Blok-sxema — algoritmni chizish

Algoritmni so'z bilan ham, **blok-sxema** (rasm) bilan ham ifodalash mumkin.
Blok-sxemada har qadam bir shakl bilan belgilanadi:

| Shakl | Ma'nosi |
|---|---|
| Oval | Boshlanish yoki tugash |
| To'rtburchak | Amal (masalan "suvni qaynat") |
| Romb | Shart (savol: ha/yo'q) |
| Strelka | Qadamlar tartibi |

Romb — eng qiziq qismi. U **shart** ni bildiradi: javobga qarab algoritm
turli yo'ldan ketadi. Masalan "Choynak issiqmi?" — ha bo'lsa bir qadam,
yo'q bo'lsa boshqasi. Bu tushunchani keyinroq Python'da
[shart operatorlari](https://learncode.uz/python/shart-operatorlari) sifatida ko'rasiz.

![Blok-sxemadagi oval, to'rtburchak, romb va strelka belgilarining ma'nolari](https://learncode.uz/images/dasturlash-asoslari/blok-sxema-belgilari-v2.webp)

*Blok-sxemada oval boshlanish va tugashni, to'rtburchak amalni, romb shartni, strelka esa qadamlar tartibini bildiradi.*

## Bir masala — bir necha algoritm

Bitta masalani turli algoritm bilan yechsa bo'ladi. Ishga borishni oling:
piyoda, avtobusda yoki taksida — hammasi maqsadga olib boradi, lekin
tezligi va "narxi" har xil.

Dasturlashda ham shunday: bir vazifani bajaradigan bir necha algoritm bor,
lekin ba'zisi tez, ba'zisi sekin ishlaydi. Yaxshi algoritmni tanlash —
dasturchining muhim mahorati.

> **O'zingizni sinab ko'ring**
>
> Kundalik ishni algoritmga aylantiring: **telefonni zaryadlash**. Qadamlarni
> aniq yozing — shart ham qo'shing:
>
> 1. Zaryadlagichni rozetkaga ula.
> 2. Telefonni zaryadlagichga ula.
> 3. **Agar** zaryad 100% bo'lsa — uzib qo'y, **aks holda** kutishda davom et.
>
> Uchinchi qadamda "agar … aks holda …" — bu shart. Aynan shu mantiq dasturda
> takrorlanadi.

## Algoritmni aniqlashtirish

### Qayta ko'rib chiqish

Birinchi yozilgan algoritm yakuniy bo'lishi shart emas. U misolni yechishi, ammo keraksiz qadamga ega bo'lishi, chekka holatni unutishi yoki nomlari tushunarsiz bo'lishi mumkin. Avval to'g'riligini tekshiring, keyin uni soddalashtiring. Qadamni olib tashlaganingizda natija o'zgarsa, u kerak; o'zgarmasa, ortiqcha bo'lishi mumkin. Biror qadam ikki xil talqin qilinsa, uni maydaroq va aniqroq qilib yozing.

Masalan, "ro'yxatni tekshir" juda noaniq. "Ro'yxat bo'sh bo'lsa xato xabarini qaytar; aks holda birinchi elementni eng katta deb ol" aniqroq. Shu aniqlik keyinchalik kod review va debuggingda yordam beradi: boshqa odam ham qoidani bir xil tushunadi.

### Uch turdagi qadam: ketma-ketlik, tanlov, takrorlanish

Ko'p algoritm uch turdagi qadamdan tuziladi: ketma-ket amal, tanlov va takrorlanish. Ketma-ket amal — avval ma'lumotni olasiz, keyin hisoblaysiz, so'ng natijani ko'rsatasiz. Tanlov — qiymatga qarab turli yo'l tanlanadi. Takrorlanish — bir qoida ro'yxatdagi har elementga tatbiq qilinadi. Murakkab dastur ham odatda shu uch fikrning birikmasi.

Masalan, o'quvchilar bahosini tekshiruvchi algoritm ro'yxat bo'ylab yuradi. Har baho uchun "60 dan kichikmi?" degan shartni tekshiradi. Shart rost bo'lsa, ogohlantirish ro'yxatiga ismni qo'shadi. Ro'yxat tugaganda natijani chiqaradi. Bu algoritmni blok-sxema, psevdokod yoki tanlangan til sintaksisida yozish mumkin; mazmuni o'zgarmaydi.

### Chekka holatlarni oldindan belgilang

Algoritm odatiy misolda ishlashi yetarli emas. Ro'yxat bo'sh, qiymat manfiy, matn kutilgan joyga son kelgan yoki bir nechta teng natija chiqqan holatda nima bo'lishini yozing. Bunday holatlarning qoidasi mahsulot talabidan keladi. Masalan, baholar ro'yxati bo'sh bo'lsa o'rtacha baho 0 deb ko'rsatish noto'g'ri talqin qilinishi mumkin; "hali baho kiritilmagan" degan alohida natija tushunarliroq bo'ladi.

## Psevdokod namunasi

```text
funksiya eng_katta_sonni_top(sonlar):
    agar sonlar bo'sh bo'lsa:
        xato qaytar
    eng_katta = sonlar ichidagi birinchi son
    har bir son uchun sonlar ichida:
        agar son > eng_katta bo'lsa:
            eng_katta = son
    eng_katta ni qaytar
```

Bu yerda kirish, chekka holat, boshlang'ich qiymat, sikl, shart va chiqish ko'rinib turibdi. Dry run orqali `[3, 7, 2]` hamda `[-4, -1, -9]` ro'yxatini sinang. So'ng bo'sh ro'yxat algoritmning birinchi shartiga yetishini tekshiring.

### Yakuniy tekshiruv

Algoritmni topshirishdan oldin uch savol bering: u har doim tugaydimi, barcha kerakli kirishlarda aniq natija beradimi, qadamlarni boshqa odam bajarib ko'ra oladimi? Bu savollarga "ha" bo'lsa, algoritmni kodga o'tkazish xavfsizroq.

### Yechimni boshqaga tushuntirish

Algoritmni faqat o'zingiz emas, boshqa odam ham o'qiydi. Shuning uchun o'zgaruvchi va qadam nomlarini mazmunli tanlang: `x` o'rniga `eng_katta_baho`, `a` o'rniga `xarajatlar` kabi nomlar qoidani tushunishga yordam beradi. Juda uzun qadamni ikki qismga bo'ling, lekin mayda bo'laklarni ham ortiqcha ko'paytirmang. Maqsad — har qadamning vazifasi bir qarashda ko'rinishi.

O'zingiz yozgan algoritmni bir soat yoki bir kun o'tgach qayta o'qing. Agar uni yana tushunish uchun ko'p taxmin qilish kerak bo'lsa, matn yoki qadamlar aniqlashtirilishi kerak. Bu odat keyinchalik jamoa bilan ishlashda, pull request reviewda va ishlab turgan loyihani yangilashda katta vaqt tejaydi.

## Masalani algoritmga aylantirish tartibi

Yangi vazifani ko'rganda darrov kod yozmang. Avval natijani bitta gapda ayting: masalan, "ro'yxatdagi eng katta sonni topish". Keyin kirish ma'lumotini aniqlang: sonlar ro'yxati. Chiqish nima ekanini yozing: eng katta son. So'ng odatiy holat bilan birga chekka holatni ham belgilang: ro'yxat bo'sh bo'lsa nima qilinadi, sonlar manfiy bo'lsa qoida o'zgaradimi, bir nechta bir xil eng katta son bo'lsa nima qaytariladi?

Shundan keyin qadamlarni mayda bo'laklarga ajrating. Masalan, birinchi sonni vaqtincha eng katta deb olasiz, keyingi har son bilan solishtirasiz, kattaroq bo'lsa vaqtinchalik qiymatni almashtirasiz, ro'yxat tugaganda natijani qaytarasiz. Bu fikr istalgan tilga o'tadi; faqat yozilish belgilari o'zgaradi.

### Algoritmni qog'ozda sinash

Algoritm qog'ozda ham sinovdan o'tishi kerak. `[3, 7, 2]` ro'yxati uchun vaqtinchalik eng katta qiymat dastlab 3, keyin 7, oxirida esa 7 bo'ladi. `[-4, -1, -9]` uchun ham xuddi shu qoida ishlashi kerak. Bo'sh ro'yxat esa maxsus qarorni talab qiladi: xato xabari qaytariladimi yoki oldindan ro'yxat bo'sh emasligi tekshiriladimi? Bu savolga javob yozilmasa, dasturdagi xato tasodifan emas, talabdagi noaniqlikdan chiqadi.

### Tezlik haqida dastlabki fikr

Ba'zan ikki algoritm bir xil natija beradi, ammo ulardan biri ko'proq qadam bajaradi. Telefon kitobida kerakli ismni boshidan boshlab qidirish bir usul; saralangan ma'lumotda bo'lib-bo'lib qidirish boshqa usul. Hozir murakkab formulani yodlash shart emas. Muhimi: ma'lumot ko'payganda qadamlar soni ham oshishini ko'rish va "bu ishni har element uchun necha marta qilaman?" deb so'rashdir.

> **Amaliy mashq**
>
> Sinf baholaridan o'rtacha qiymat chiqarish algoritmini yozing. Kirish: baholar ro'yxati. Qadamlar: jami qiymatni 0 dan boshlang, har bahoni qo'shing, oxirida elementlar soniga bo'ling. So'ng bo'sh ro'yxatda bo'lish nolga bo'linishga olib kelishini aniqlang va unga qoida yozing.
>
> Bu mashq o'zgaruvchi, sikl, shart va testning bitta algoritmda qanday uchrashini ko'rsatadi.

## Qisqacha xulosa

Har yangi masalada shu savollarni qayta ishlating: kirish nima, qoida nima, natija nima va chekka holat qanday boshqariladi?

- **Algoritm** — natijaga olib boradigan aniq qadamlar ketma-ketligi.
- Uch xossasi: **aniqlik**, **tartiblilik**, **cheklanganlik** (tugaydi).
- Kompyuter aniq — noaniq qadam xatoga olib keladi.
- **Blok-sxema** algoritmni chizadi; **romb** shart (ha/yo'q) ni bildiradi.
- Bir masalaning bir necha algoritmi bo'ladi; tezrog'i afzal.

Keyingi darsda [kod mantig'i](https://learncode.uz/dasturlash-asoslari/kod-mantigi-psevdokod) —
o'zgaruvchi, shart, sikl va funksiya bilan algoritmni qanday yozishni ko'ramiz.
