Mundarija (27)
- Bu darsda
- 1. Nega bu kerak?
- 2. Dekompozitsiya: katta ishni bo'laklash
- 2.1 Misol: to'y tashkil qilish
- 2.2 Bo'laklarni yana bo'lish
- 3. Naqshni topish: o'xshashlikni payqash
- 3.1 Misol: to'lov ilovasi
- 3.2 Misol: saralash
- 3.3 Naqsh — takrorga ishora
- 4. Abstraksiya: faqat muhimini qoldirish
- 4.1 Misol: metro sxemasi
- 4.2 Nima muhimligi vazifaga bog'liq
- 4.3 Siz allaqachon abstraksiyadan foydalanasiz
- 5. Algoritm tuzish: hammasini birlashtirish
- 5.1 To'liq yechilgan misol: choyxona boti
- 5.2 Qisman yechilgan misol: yetkazib berish
- 6. Ko'p uchraydigan xatolar
- 6.1 Hammasini birdaniga qilishga urinish
- 6.2 Juda mayda bo'laklash
- 6.3 Muhim narsani ham tashlab yuborish
- 6.4 Mayda narsaga berilib ketish
- 7. Mashqlar
- 1-mashq (oson): Kitob javonini yig'ish
- 2-mashq (o'rta): Kutubxona va kitob do'koni
- 3-mashq (qiyin): Kommunal to'lovlar
- 8. Real ishda
- Xulosa
Kompyutercha fikrlash: bo'laklash, naqsh, abstraksiya va algoritm
Qisqacha: Kompyutercha fikrlash — katta muammoni kompyuter yecha oladigan holatga keltirish usuli. U to'rt qadamdan iborat: muammoni kichik bo'laklarga bo'lish, bo'laklar orasidagi o'xshashlikni topish, keraksiz tafsilotni tashlash va aniq qadamlar yozish.
Bu darsda
- Katta vazifani kichik, bajarsa bo'ladigan bo'laklarga ajrata olasiz.
- Turli vazifalardagi bir xil naqshni (qolipni) payqay olasiz.
- Vazifa uchun qaysi ma'lumot muhim, qaysisi ortiqcha ekanini ajrata olasiz.
- To'rt usulni birlashtirib, kichik loyiha uchun algoritm tuza olasiz.
Oldin bilishingiz kerak: Algoritm nima va yaxshi algoritm qanday bo'ladi.
1. Nega bu kerak?
Oldingi darsda algoritm — aniq qadamlar ketma-ketligi ekanini ko'rdik. Choy damlash uchun 5 qadam yetarli edi. Lekin real vazifalar ancha katta bo'ladi.
Tasavvur qiling: tanishingizning choyxonasi bor. U sizdan so'radi: "Telegram'da buyurtma qabul qiladigan bot qilib bera olasizmi?" Birinchi fikr: "Qayerdan boshlayman? Bu juda katta ish!"
Bu qo'rquv tabiiy. Katta vazifaga bir butun holida qarasangiz, qayerdan boshlashni bilmaysiz. Dasturchilar bunday vaziyatda maxsus fikrlash usulini ishlatadi.
Kompyutercha fikrlash (computational thinking) — muammoni kompyuter bajarsa bo'ladigan aniq qadamlarga aylantirish usuli. Nomiga qaramang: bu kompyuterning emas, odamning fikrlash usuli. U to'rt qismdan iborat:
| Usul | Inglizcha | Nima qiladi |
|---|---|---|
| Dekompozitsiya | Decomposition | Katta vazifani bo'laklarga bo'ladi |
| Naqshni topish | Pattern recognition | O'xshash bo'laklarni payqaydi |
| Abstraksiya | Abstraction | Keraksiz tafsilotni tashlaydi |
| Algoritm tuzish | Algorithm design | Aniq qadamlarni yozadi |
Keling, har birini alohida ko'ramiz.
2. Dekompozitsiya: katta ishni bo'laklash
2.1 Misol: to'y tashkil qilish
To'y tashkil qilish — ulkan ish. Lekin hech kim uni "bir kunda, bir o'zim qilaman" demaydi. Oila ishni bo'ladi:
- To'yxona topish va band qilish.
- Mehmonlar ro'yxatini tuzish.
- Taklifnomalarni tarqatish.
- Oshpaz va dasturxon masalasi.
- Musiqa va boshlovchi.
Endi har bir bo'lakni alohida odam oladi. Har bir bo'lak kichik va tushunarli. Mana shu dekompozitsiya (decomposition) — katta vazifani mustaqil, kichik bo'laklarga ajratish.
2.2 Bo'laklarni yana bo'lish
Bo'lak hali ham katta bo'lsa, uni yana bo'lasiz. Masalan, onlayn do'kon yaratish vazifasi:
flowchart TD
A[Onlayn do'kon] --> B[Mahsulotlar]
A --> C[Savat]
A --> D[To'lov]
A --> E[Yetkazib berish]
C --> C1[Mahsulot qo'shish]
C --> C2[Sonini o'zgartirish]
C --> C3[O'chirish]
C --> C4[Jami summani hisoblash]Diagrammada "Savat" to'rtta kichik ishga bo'lindi. "Mahsulot qo'shish" kabi bo'lakni bitta dasturchi bir kunda qila oladi.
Qachon to'xtash kerak? Bo'lakni o'qib, "buni qanday qilishni bilaman" desangiz — yetarli. Hali "qanday?" degan savol qolsa — yana bo'ling.
Tekshirib ko'ring: Choyxona boti uchun 4 ta asosiy bo'lakni ayting.
Javob
Masalan: menyuni ko'rsatish, buyurtma qabul qilish, jami summani hisoblash, buyurtmani oshxonaga yuborish. Boshqacha bo'lishingiz ham mumkin — muhimi, har bir bo'lak alohida ish bo'lsin.
3. Naqshni topish: o'xshashlikni payqash
3.1 Misol: to'lov ilovasi
Payme yoki Click'da uchta to'lovni eslang: svet uchun, telefon uchun, internet uchun. Uchalasida ham qadamlar deyarli bir xil:
1. Xizmatni tanlang.
2. Hisob raqami yoki telefon raqamini kiriting.
3. Summani kiriting.
4. To'lovni tasdiqlang.Faqat xizmat nomi o'zgaradi, qadamlar esa bir xil. Bunday takrorlanadigan qolip naqsh (pattern) deyiladi. Uni payqash naqshni topish (pattern recognition) deb ataladi.
Nega bu foydali? Ilova yaratuvchilari har bir xizmat uchun alohida to'lov sahifasi yozmaydi. Bitta umumiy sahifa yozib, unga faqat xizmat nomini beradi. Bir marta yozilgan yechim hamma joyda ishlaydi.
3.2 Misol: saralash
Uchta turli vazifani ko'ring:
- Talabalar ro'yxatini familiya bo'yicha tartiblash.
- Mahsulotlarni narxi bo'yicha arzonidan qimmatiga joylash.
- Xabarlarni kelgan vaqti bo'yicha qatorlashtirish.
Tashqi ko'rinishi har xil, lekin bularning barchasi bitta naqsh — saralash (sorting). Saralashni bir marta o'rgansangiz, uchala vazifani ham yechasiz.
3.3 Naqsh — takrorga ishora
Naqsh ko'pincha "bu ishni takrorlash kerak" degan ma'noni beradi. Masalan, 2, 4, 6, 8, ... qatorida naqsh: "oldingi songa 2 qo'shiladi". Buni bilgan odam 100 ta sonni ham yoza oladi — qoidani takrorlaydi, xolos.
Maslahat: Dasturchilarda "o'zingizni takrorlamang" degan qoida bor. Inglizcha qisqartmasi — DRY (Don't Repeat Yourself). Bir xil ish ikki-uch joyda uchrasa, demak naqsh bor — uni bir joyga yig'ish vaqti keldi.
Tekshirib ko'ring: Qaysi ikkitasi bir naqshga tegishli? a) Do'stlar ro'yxatidan "Jasur"ni topish. b) Kitobning sahifalar sonini aytish. c) Kontaktlar orasidan telefon raqamini qidirish.
Javob
a) va c). Ikkalasi ham qidirish naqshi: ro'yxatni ko'rib chiqib, kerakli narsani topish. b) esa tayyor ma'lumotni o'qish, xolos — unda qidirish yo'q.
4. Abstraksiya: faqat muhimini qoldirish
4.1 Misol: metro sxemasi
Toshkent metrosi bekatlaridagi sxemani eslang. Unda relslar qanchalik egilgani, poyezd tezligi va bekat qancha chuqurlikda ekani yo'q. Nega? Yo'lovchiga bu kerak emas.
Yo'lovchiga faqat ikki narsa kerak: qaysi bekatdan keyin qaysi biri keladi va qayerda boshqa yo'nalishga o'tish mumkin. Sxema keraksiz tafsilotni tashlab, faqat keraklisini qoldirgan.
Bu abstraksiya (abstraction) — vazifa uchun kerak bo'lmagan tafsilotni tashlab, faqat muhimini qoldirish.
4.2 Nima muhimligi vazifaga bog'liq
Talaba haqida juda ko'p ma'lumot bor: ismi, guruhi, bali, sevimli taomi, poyabzal o'lchami, telefon raqami.
- Baholar jurnali uchun kerak: ism, guruh, ball.
- Poyabzal o'lchami jurnal uchun keraksiz.
Lekin sport formasi buyurtma qilayotgan bo'lsangiz — poyabzal o'lchami birinchi o'ringa chiqadi. Demak abstraksiya "hamma joyda bir xil kesish" emas. U doim "bu vazifa uchun nima muhim?" degan savoldan boshlanadi.
4.3 Siz allaqachon abstraksiyadan foydalanasiz
Mashina haydovchisi dvigatel ichida nima bo'layotganini bilishi shart emas. Unga rul, gaz va tormoz yetarli. Ichki murakkablik yashirilgan.
Terminalda ham shunday. ls buyrug'ini yozganingizda, disk qanday aylanishi va fayl tizimi qanday tuzilganini o'ylamaysiz. Operatsion tizim bu murakkablikni sizdan yashiradi. Dasturlashda siz ham shunday "rul va pedal" yasaysiz: murakkab ishni oddiy nom ortiga yashirasiz.
Tekshirib ko'ring: Taksi narxini hisoblaydigan dastur uchun qaysi ma'lumot muhim: mashina rangi, yurilgan masofa, haydovchining ismi, kutish vaqti?
Javob
Yurilgan masofa va kutish vaqti. Narx shularga bog'liq. Mashina rangi va haydovchi ismi mijozga mashinani topish uchun kerak, lekin narx hisobiga ta'sir qilmaydi.
5. Algoritm tuzish: hammasini birlashtirish
5.1 To'liq yechilgan misol: choyxona boti
To'rt usulni choyxona botiga birma-bir qo'llaymiz.
1. Dekompozitsiya. Botni to'rt bo'lakka bo'ldik: menyuni ko'rsatish, buyurtma qabul qilish, jami summani hisoblash, oshxonaga yuborish. Hozir faqat bittasini — "jami summani hisoblash"ni yechamiz.
2. Naqsh. Buyurtmadagi har bir taom uchun ish bir xil: narxni soniga ko'paytirish. 2 ta choy ham, 1 ta osh ham shu qolipga tushadi.
3. Abstraksiya. Summa uchun taomning faqat narxi va soni kerak. Rasm, tarkib va oshpaz ismi — kerak emas.
4. Algoritm. Endi qadamlarni yozamiz:
1. Jamini 0 deb boshlang.
2. Buyurtmadagi har bir taom uchun:
narxni soniga ko'paytiring va natijani jamiga qo'shing.
3. Jamini chiqaring.Qo'lda tekshiramiz. Buyurtma: 2 ta choy (3 000 so'mdan), 1 ta osh (35 000 so'm), 4 ta non (4 000 so'mdan).
| Taom | Hisob | Jami |
|---|---|---|
| Boshida | — | 0 |
| Choy | 2 × 3 000 = 6 000 | 6 000 |
| Osh | 1 × 35 000 = 35 000 | 41 000 |
| Non | 4 × 4 000 = 16 000 | 57 000 |
Natija: 57 000 so'm. E'tibor bering: 2-qadam har bir taom uchun takrorlandi. Taom 3 ta emas, 30 ta bo'lsa ham algoritm o'zgarmaydi — naqsh shunga yordam berdi.
5.2 Qisman yechilgan misol: yetkazib berish
Choyxona yangi qoida qo'ydi: buyurtma 100 000 so'm yoki undan ko'p bo'lsa, yetkazib berish bepul. Aks holda yetkazib berish 15 000 so'm.
1. Jami summani yuqoridagi algoritm bilan hisoblang.
2. Agar jami 100 000 yoki undan ko'p bo'lsa —
yetkazib berish narxi 0.
3. Aks holda — yetkazib berish narxi 15 000.
4. Jami va yetkazib berish narxini qo'shib, chiqaring.Yuqoridagi buyurtma (57 000 so'm) uchun yetkazib berish qancha turadi? Bo'sh joysiz yozing:
6. Ko'p uchraydigan xatolar
6.1 Hammasini birdaniga qilishga urinish
Boshlovchi "choyxona boti"ni bitta ulkan ish deb ko'radi va hammasini aralash yozadi. Keyin bitta joyda xato chiqsa, uni topish juda qiyin bo'ladi. Qoida: bitta bo'lak — bitta ish.
6.2 Juda mayda bo'laklash
Teskari xato ham bor: "choynakka qo'l uzat", "barmoqlarni yum" kabi 100 ta bo'lak. Bu vaqtni yeydi va rejani o'qib bo'lmaydi. Bo'lak "qanday qilishni bilaman" darajasiga yetsa — to'xtang.
6.3 Muhim narsani ham tashlab yuborish
Abstraksiyada chegara bor. Taksi narxi uchun masofani "tafsilot" deb tashlasangiz, hisob buziladi. Har bir tashlanayotgan ma'lumot uchun so'rang: "Natijaga ta'sir qiladimi?"
6.4 Mayda narsaga berilib ketish
Bot hali buyurtma olmayapti-yu, siz tugma ko'kmi yoki yashilmi deb bir soat o'ylayapsiz. Avval asosiy ish ishlasin. Bezak — oxirida.
7. Mashqlar
1-mashq (oson): Kitob javonini yig'ish
Do'kondan qismlarga ajratilgan kitob javoni oldingiz. "Javonni yig'ish" vazifasini kamida 4 ta mustaqil bo'lakka ajrating.
Yechim
- Qutini ochish va detallarni yo'riqnoma bo'yicha sanash.
- Kerakli asboblarni (otvyortka, bolg'a) tayyorlash.
- Yon devorlar va tokchalarni bir-biriga ulash.
- Orqa panelni qoqish va javonni joyiga qo'yish.
Har bir bo'lakni boshqa odam qilishi ham mumkin — bu yaxshi dekompozitsiya belgisi.
2-mashq (o'rta): Kutubxona va kitob do'koni
Kitob haqida ma'lumotlar: nomi, muallifi, ISBN raqami (har kitobning xalqaro tartib raqami), nashr yili, sahifalar soni, narxi, varaqlarining hidi, uni sotgan sotuvchining ismi.
- Kutubxona hisobi uchun qaysilari kerak?
- Kitob do'koni uchun qaysilari kerak?
Yechim
- Kutubxona: nomi, muallifi, ISBN, nashr yili, sahifalar soni. Narx kutubxona uchun odatda muhim emas.
- Do'kon: nomi, muallifi, ISBN va albatta narxi.
Varaqlar hidi va sotuvchining ismi ikkalasiga ham kerak emas. Ko'ryapsizmi: bitta kitob, lekin vazifaga qarab "muhim" ro'yxat o'zgardi.
3-mashq (qiyin): Kommunal to'lovlar
Oylik kommunal to'lovlarni hisoblaydigan algoritm yozing. Uchta xizmat bor (tariflar o'ylab topilgan):
- Svet: 250 kVt·soat, 1 kVt·soat — 1 000 so'm.
- Gaz: 100 kub metr, 1 kub metr — 1 500 so'm.
- Suv: 10 kub metr, 1 kub metr — 3 000 so'm.
Avval naqshni toping, keyin algoritmni yozing va qo'lda hisoblang. Ishora: choyxona misolidagi "jamini 0 dan boshlash" g'oyasidan foydalaning.
Yechim
Naqsh: har bir xizmat uchun "sarflangan miqdor × tarif".
1. Jamini 0 deb boshlang.
2. Har bir xizmat uchun:
miqdorni tarifga ko'paytiring va jamiga qo'shing.
3. Jamini chiqaring.Hisob:
- Svet: 250 × 1 000 = 250 000 → jami 250 000.
- Gaz: 100 × 1 500 = 150 000 → jami 400 000.
- Suv: 10 × 3 000 = 30 000 → jami 430 000.
Natija: 430 000 so'm. Bu algoritm choyxona algoritmi bilan deyarli bir xil — faqat "taom" o'rniga "xizmat". Naqshni ko'rgan odam ikkinchi masalani ancha tez yechadi.
8. Real ishda
- Jamoada ishlash. Katta loyiha kichik vazifalarga bo'linadi va har bir dasturchi bittasini oladi. Bu — dekompozitsiya.
- Qayta ishlatiladigan kod. Dasturchi naqshni payqasa, uni bir marta yozadi va hamma joyda ishlatadi. Keyinroq buni funksiyalar darsida ko'rasiz.
- Abstraksiya — dasturlashning har qadamida. Siz ishlatadigan har bir tayyor vosita ichidagi murakkablikni yashiradi.
- Intervyu. "Buni qanday qurgan bo'lardingiz?" degan savolga javob aynan dekompozitsiyadan boshlanadi. Buni system design intervyu darsida ko'rasiz.
Xulosa
- Kompyutercha fikrlash — muammoni kompyuter bajara oladigan qadamlarga aylantirish usuli.
- Dekompozitsiya: katta ishni "qanday qilishni bilaman" darajasigacha bo'lish.
- Naqsh: o'xshash bo'laklarni payqab, bir yechimni ko'p joyda ishlatish.
- Abstraksiya: vazifa uchun muhim bo'lmagan tafsilotni tashlash.
- Algoritm tuzish: oldingi uchtasiga tayanib aniq qadamlarni yozish.
Keyingi dars: Pseudokod va uch g'isht: ketma-ketlik, shart, takror — algoritmni dasturchilarga tushunarli yozish usulini va har qanday dastur quriladigan uchta "g'isht"ni o'rganamiz.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!