Kompyuter va dasturlash asoslari
Dasturlashni o'rganishdan oldin bitta savolga javob beramiz: kompyuter aslida qanday «o'ylaydi»? Bu darsda ikkilik sanoqni (0 va 1), matn va rang qanday saqlanishini, hamda yozgan kodimiz qanday qilib kompyuter tushunadigan tilga, ya'ni kompilyatsiyaga aylanishini interaktiv tarzda o'rganamiz.
1.1 Dasturlash nima?
Dasturlashda biz kompyuterga nima qilishni qadam-baqadam aytib beramiz. Kompyuter o'zi hech narsa o'ylab topmaydi; u sizning ko'rsatmalaringizni aniq, tartibli va hech qanday taxminsiz bajaradi.
Tasavvur qiling: do'stingizga choy damlashni tushuntiryapsiz. Odamga «choy damla» desangiz yetadi. Lekin kompyuter bunchalik aqlli emas, shuning uchun unga shunday aytish kerak:
- Choynakka suv quy
- Suvni qaynaguncha qizdir
- Choy bargini sol va 5 daqiqa kut
- Piyolaga quy
Mana shu aniq ko'rsatmalar ketma-ketligi algoritm deyiladi, uni kompyuter tilida yozish esa dastur deb ataladi. Bu kursda biz shunday ko'rsatmalarni yozishni o'rganamiz. Ammo avval kompyuter bu ko'rsatmalarni qanday «eshitishini» bilishimiz kerak.
1.2 Kompyuter va ikki holat: 0 va 1
Kompyuter ichida millionlab juda kichik «kalitlar» (tranzistorlar) bor. Har bir kalitning faqat ikki holati bo'ladi: tok bor yoki tok yo'q. Biz bularni shunday belgilaymiz:
- 0 degani tok yo'q (o'chiq)
- 1 degani tok bor (yoniq)
Bitta shunday 0 yoki 1 bit deb ataladi (eng kichik ma'lumot bo'lagi). Sakkizta bit birga bayt bo'ladi. Kompyuterdagi hamma narsa, ya'ni sonlar, harflar, rasmlar, video va musiqa, oxir-oqibat shunchaki 0 va 1 lar to'plami.
1.3 Ikkilik sanoq sistemasi
Biz kundalik hayotda o'nlik sanoqdan foydalanamiz, unda 10 ta raqam bor (0 dan 9 gacha). Kompyuter esa ikkilik sanoqdan foydalanadi, unda atigi 2 ta raqam bor: 0 va 1. Qo'rqmang, ikkalasining ham siri bitta oddiy g'oyada: har bir raqamning turgan o'rni muhim.
Avval tanish narsa: o'nlik son
«342» sonini olaylik. Aslida biz uni har kuni shunday «yig'amiz», faqat buni sezmaymiz. Har bir raqam o'z o'rin qiymatiga ko'paytiriladi:
3×100 + 4×10 + 2×1 = 300 + 40 + 2 = 342
Diqqat qiling: o'ngdan chapga har o'rin 10 baravar kattalashadi: birlar, o'nlar, yuzlar...
Endi aynan shu g'oya ikkilikda
Ikkilikda ham xuddi shunday, faqat har o'rin 10 emas, 2 baravar kattalashadi: 1, 2, 4, 8, 16, 32, 64, 128. Bir bayt (8 bit) shu sakkiz o'rindan iborat. Qoida sodda: 1 turgan o'rin qiymati qo'shiladi, 0 turgani qo'shilmaydi.
Masalan, 00001101 sonini birga «o'qib» ko'ramiz:
Faqat yoniq (1) o'rinlarni qo'shamiz: 8 + 4 + 1 = 13
Endi navbat sizda. Pastdagi o'yinda bitlarni bosing va son qanday yig'ilishini o'z ko'zingiz bilan kuzating:
Ko'ryapsizmi? Har bir yoniq bit o'z «o'rin qiymatini» qo'shadi. Masalan 01000001 = 64 + 1 = 65. Bir bayt bilan 0 dan 255 gacha, jami 256 ta turli son ifodalash mumkin.
Ikkilik ↔ O'nlik o'giruvchi
Istalgan sonni yozing, ikkinchi tomonda uning ikkilik ko'rinishi paydo bo'ladi (va aksincha).
1.4 Ma'lumot o'lchovlari: bayt, KB, MB, GB
Bitta bayt deyarli hech narsa, atigi bitta harf. Lekin baytlar yig'ilib ulkan narsalarni tashkil qiladi. Telefoningizdagi «128 GB xotira» yozuvini ko'rgansiz; o'sha GB ham aslida baytlardan iborat. Har bir keyingi o'lchov avvalgisidan ~1000 baravar katta:
Demak fayl hajmi («3 MB rasm»), xotira («256 GB»), internet tezligi («50 Mbit/s»), bularning barchasi shu baytlar bilan o'lchanadi. Endi bu sonlarni ko'rganingizda ular siz uchun ma'noli bo'ladi.
1.5 Harf, rang va hex qanday saqlanadi?
Agar bayt bilan 0–255 oraliqdagi sonni saqlay olsak, demak harflarni ham saqlay olamiz: har bir harfga shunchaki bitta son biriktirib qo'yamiz. Masalan, lotincha A = 65, B = 66, a = 97, bo'sh joy = 32.
«Nega aynan 65?» degan savol tug'ilishi tabiiy. Javob oddiy: bu butun dunyo kelishib olgan jadval (xuddi umumiy lug'at kabi), nomi ASCII. Hamma shu jadvalga amal qilgani uchun bir kompyuterda yozilgan matnni boshqasi ham xuddi shunday o'qiy oladi.
Quyiga biror so'z yozing, har bir harf ortida turgan son va uning 8-bitli ikkilik ko'rinishini ko'rasiz:
Rang ham uchta son
Ekrandagi har bir nuqta (piksel) rangi uchta baytdan iborat: qancha qizil, qancha yashil, qancha ko'k (har biri 0–255). Bu RGB deyiladi.
Muhim nuqta: bu bo'yoq emas, yorug'lik aralashmasi (ekran nur sochadi). Shuning uchun bo'yoqqa teskari: uchalasi 0 bo'lsa yorug'lik yo'q, ya'ni qora; uchalasi 255 bo'lsa to'liq yorug'lik, ya'ni oq. Slayderlarni suring va rang qanday «sonlardan» tug'ilishini ko'ring:
O'zbekcha-chi? Unicode
ASCII jadvalida atigi 128 ta belgi bor: lotin harflari, raqamlar va tinish belgilari. Lekin dunyoda minglab belgi mavjud: kirill harflar, o'zbekcha oʻ va gʻ, xitoy ierogliflari, hatto emoji 😀. Bularning hammasini sig'dirish uchun Unicode degan kattaroq jadval bor. Unda bitta belgi 1 emas, bir necha baytni egallashi mumkin (eng keng tarqalgan ko'rinishi UTF-8).
Tepadagi ASCII tekshirgichga emoji yoki kirill harf yozib ko'ring, uning kodi 255 dan katta chiqadi, ya'ni bir baytga sig'maydi.
Hex: sonlarning qisqa tili
Rang natijasida #5B5BD6 kabi yozuvni ko'rdingiz. Bu o'n oltilik (hex) sanoq. Unda 16 ta «raqam» bor: 0–9, so'ng A, B, C, D, E, F (ya'ni 10, 11, 12, 13, 14, 15). Nega kerak? Chunki 2 ta hex belgi roppa-rosa 1 baytni (8 bit) ifodalaydi, bu juda ixcham. Masalan FF = 255 (eng katta bayt), 5B = 91. Shuning uchun ranglar hex'da yoziladi: #RRGGBB, ya'ni qizil, yashil va ko'kning bayt qiymatlari.
1.6 Kompilyatsiya: kodni mashina tiliga o'girish
Biz dasturni odam o'qiy oladigan tilda yozamiz. Masalan, C tilida «Salom, dunyo!» chiqaruvchi dastur shunday ko'rinadi:
Lekin protsessor bu matnni tushunmaydi, u faqat ikkilik mashina kodini (0 va 1) biladi. Shu sababli oraliqda bitta «tarjimon» kerak; u kompilyator deyiladi (C uchun mashhuri gcc). Kompilyator sizning kodingizni butunligicha o'qib, protsessor bajara oladigan ikkilik faylga aylantiradi.
Quyidagi tugmani bosing va kod qanday bosqichlardan o'tishini kuzating:
Agar xato qilsangiz-chi?
Kompilyator juda talabchan: agar kodda xato bo'lsa (masalan, nuqta-vergul tushib qolsa), u dasturni umuman yasamaydi va aniq qaysi qatorda xato borligini aytadi. Bu yaxshi narsa: dastur ishlamasdan oldin xato topiladi. Masalan:
Bu yozuv «4-qatorda, ; qo'yish unutilgan» degani. Keyingi haftalarda bunday xatolarni o'qishni va tuzatishni o'rganamiz.
Kompilyatsiya vs interpretatsiya
Hamma til ham kompilyatsiya qilinmaydi. C kabi tillar oldindan to'liq mashina kodiga aylantiriladi (kompilyatsiya), natijada tez ishlaydi. Python kabi tillar esa interpretator orqali qatorma-qator, ishlatish payti o'qiladi (alohida kompilyatsiya qadami yo'q); bu qulay, lekin sekinroq. Biz asoslarni C'da o'rganamiz: u kompyuter ichida nima sodir bo'layotganini eng ochiq ko'rsatadi.
1.7 Amaliy mashq: o'zingiz yeching
Bilimni mustahkamlashning eng yaxshi yo'li o'zi qilib ko'rishdir. Bu mashqda har safar bitta son chiqadi va ikki holatdan biri bo'ladi:
- Agar son faqat 0 va 1 lardan iborat bo'lsa (ikkilik), uni o'nlik songa aylantiring.
- Agar son oddiy bo'lsa (o'nlik), uni 8 bitli ikkilikka aylantiring.
Yechishda pastdagi tayanchdan foydalaning, bular o'rin qiymatlari. Ikkilikni o'qiganda yoniq (1) o'rinlarning qiymatini qo'shing. Masalan: 1010 = 8 + 2 = 10; aksincha, 10 = 00001010. Javobni yozib, Enter (yoki «Tekshirish») bosing. Maqsad: 10 ta to'g'ri javob to'plash.
1.8 Chuqurroq: ikkilik bilan hisoblash advanced
Bu bo'lim chuqurroq va ixtiyoriy. U sizni «ma'lumotni saqlash»dan «kompyuter qanday hisoblaydi»ga olib o'tadi. Chinakam tushunish shu yerdan boshlanadi.
Ikkilikda qo'shish
O'nlikdagidek qo'shamiz: 0+0=0, 0+1=1, 1+1 esa ikkilikda «10», ya'ni 0 yozib, 1 ni keyingi o'ringa o'tkazasiz (xuddi o'nlikda 9+1=10 dagidek «o'tkazma»). Misol: 3 + 1 = 4:
Protsessor ichidagi mayda sxemalar aynan shu amalni soniyasiga milliardlab marta bajaradi. Kompyuterning «hisoblashi» mana shu.
Manfiy sonlar va ikki to'ldiruvchi
Faqat 0 va 1 bilan «minus» belgisi yo'q. Hiyla shunday: eng chapdagi bit belgi sifatida ishlatiladi, manfiy sonlar esa maxsus usulda, ya'ni ikki to'ldiruvchi (two's complement) bilan yoziladi. Bu hiylaning go'zalligi: protsessor +5 ni ham, −5 ni ham bir xil qo'shish sxemasi bilan hisoblaydi, alohida ayirish kerak emas. Tafsilotini keyingi haftalarda ko'ramiz.
Bit amallari (bitwise)
Ba'zan dasturchi bitlar ustida bevosita amal bajaradi. Asosiylari: AND (har ikkisi 1 bo'lsa → 1), OR (bittasi 1 bo'lsa → 1), XOR (faqat bittasi 1 bo'lsa → 1), NOT (0 va 1 ni almashtiradi), siljitish (bitlarni chap/o'ngga suradi). Slayderlarni surib, amallarni sinab ko'ring:
Mantiqiy elementlar: hammasi shulardan
Bu amallar protsessor ichida mantiqiy elementlar (logic gates: AND, OR, NOT) deb ataladigan mayda elektron sxemalar bilan bajariladi. Ulardan «qo'shuvchi» (adder), qo'shuvchilardan butun protsessor yig'iladi. Demak kompyuter millionlab AND/OR/NOT elementidan iborat. Atigi 0 va 1 dan butun raqamli dunyo mana shunday quriladi.
1.9 Bilim testi
Testdan oldin: yangi atamalar
Bu hafta o'rgangan asosiy tushunchalar. Test oldidan ko'z yugurtirib chiqing:
Endi sinab ko'ramiz
15 ta savol. Haftani yakunlash uchun kamida 11 tasiga to'g'ri javob bering.
Tabriklaymiz! 1-hafta yakunlandi
Endi siz kompyuter ichida hamma narsa 0 va 1 ekanini, sonlar, harf va ranglar qanday saqlanishini, hamda kompilyatsiya nimaligini bilasiz. Bu dasturlashning mustahkam poydevori.
Keyingi modulga o'tish