Massivlar va satrlar
O'tgan haftada bitta o'zgaruvchi bitta qiymatni saqlardi. Endi bir nechta qiymatni bitta nom ostida saqlashni o'rganamiz, ya'ni massivlarni. So'ng satrlarni ko'ramiz: C da satr aslida harflarning massivi. Har bir g'oyani jonli massiv vizualizatori va IDE uslubidagi kod izlagichda bosqichma-bosqich ko'rib chiqamiz.
Bu darsda nimani o'rganasiz
4.1 Massiv nima?
Tasavvur qiling, bir sinfdagi 5 o'quvchining bahosini saqlashingiz kerak. O'tgan haftadagi bilim bilan beshta alohida o'zgaruvchi yozgan bo'lardingiz: ball1, ball2, ball3 va hokazo. 5 ta uchun chidasa bo'ladi, lekin 30 yoki 100 o'quvchi bo'lsa-chi?
Aynan shu muammoni massiv (array) hal qiladi. Massiv deganda bir xil turdagi bir nechta qiymatni bitta nom ostida saqlash tushuniladi. Beshta baho endi bitta ballar nomi ostida, yonma-yon turadi:
Bitta qatorda beshta baho saqlandi. Ularning hammasi bir joyda, tartib bilan turadi va biz ularni sikl bilan oson aylanib chiqishimiz mumkin. Massivning ikkita asosiy xususiyati bor:
- Hamma elementlar bir xil turda bo'ladi, masalan hammasi
int - Element soni oldindan belgilanadi va keyin o'zgarmaydi, bu yerda 5 ta
4.2 Yaratish va indeks
Massivni yaratganda kvadrat qavs ichida nechta element borligini, jingalak qavs ichida esa qiymatlarni yozamiz. Endi eng muhim g'oya: har bir elementning o'z indeksi (raqami) bor, va sanoq 1 dan emas, 0 dan boshlanadi.
Demak 5 elementli massivda indekslar 0, 1, 2, 3, 4 bo'ladi. Birinchi element ballar[0], oxirgisi esa ballar[4]. Pastdagi katakni bosib ko'ring:
ballar[5] deb yozsangiz, massiv chegarasidan chiqib ketasiz, bu jiddiy xato hisoblanadi.4.3 O'qish va o'zgartirish
Indeks yordamida har bir katakni alohida o'qishimiz yoki o'zgartirishimiz mumkin. O'qish uchun shunchaki indeksni yozamiz, o'zgartirish uchun esa unga yangi qiymat beramiz:
Pastda indeksni tanlang, yangi qiymat kiriting va O'rnat tugmasini bosing. Faqat tanlangan katak o'zgaradi:
4.4 Massiv bo'ylab sikl
Massivning asl kuchi sikl bilan birga ochiladi. Har bir elementni qo'lda yozish o'rniga, for sikli bilan indeksni 0 dan oxirigacha o'tkazamiz va har bir katakka navbatma-navbat murojaat qilamiz. Quyidagi dastur barcha bahalarni qo'shib, yig'indini chiqaradi.
Uni qadamlab yuriting: sariq chiziq joriy qatorni, yashil katak esa shu qadamda o'qilayotgan elementni ko'rsatadi.
Yig'indi 428 chiqdi. O'rtachani topish uchun shuni element soniga bo'lamiz: 428 / 5. Xuddi shu naqsh bilan eng katta, eng kichik yoki nechtasi o'tganini ham sanay olamiz.
Bashorat qiling
Bu dastur terminalga nima chiqaradi?
4.5 Satrlar (string)
Endi harflarga o'tamiz. O'tgan haftada char turi bitta harfni saqlashini ko'rgandik. Lekin so'z, ism yoki gap ko'p harfdan iborat. Bularni saqlash uchun satr (string) ishlatamiz.
Eng muhim g'oya shu: C da satr aslida char larning massivi. Ya'ni satr ham xuddi massiv kabi, faqat ichida sonlar emas, harflar turadi. Har bir harfning o'z indeksi bor, va sanoq yana 0 dan boshlanadi:
So'z yozing va uning har bir harfi qaysi indeksda turishini ko'ring:
4.6 Null terminator (\0)
Bu yerda C ning bir nozik, lekin juda muhim qoidasi bor. Kompyuter satr xotirada qayerda tugashini qanday biladi? Buning uchun C har bir satr oxiriga ko'rinmas maxsus belgi qo'yadi: null terminator, ya'ni \0. U «satr shu yerda tugadi» degan ma'noni bildiradi.
Demak "Ali" uchta harf bo'lsa ham, xotirada to'rtta katak egallaydi: A, l, i va oxirida \0. Pastda so'z yozing, oxiridagi \0 katagiga e'tibor bering:
\0 uchun joy qoldirishni unutmang. Tirnoq orasiga "Ali" deb yozsangiz, C buni avtomatik bajaradi.4.7 strlen: satr uzunligi
Ko'pincha satr nechta harfdan iboratligini bilishimiz kerak. Buni qo'lda sanab o'tirmaymiz, tayyor funksiya bor: strlen (string length, ya'ni satr uzunligi). U satr boshidan yurib, harflarni sanaydi va \0 ga yetganda to'xtaydi.
Bu funksiya string.h kutubxonasida turadi, shuning uchun dastur boshida #include <string.h> yozish kerak. Pastda so'z yozing va Hisobla tugmasini bosing, strlen qanday sanashini kuzating:
\0 ni hisobga olmaydi. Shuning uchun strlen("Ali") natijasi 3, garchi xotirada 4 ta katak bo'lsa ham.4.8 Belgilarni aylanish
Satr massiv bo'lgani uchun, uni ham sikl bilan aylanib chiqishimiz mumkin. Lekin bu yerda chiroyli usul bor: uzunlikni oldindan bilishimiz shart emas, shunchaki \0 ga yetguncha yuramiz. Sikl sharti aynan shuni tekshiradi: ism[i] != '\0'.
Misol uchun, har bir kichik harfni katta harfga aylantiramiz. ASCII jadvalida kichik 'a' raqami 97, katta 'A' esa 65, ya'ni orasidagi farq 32. Demak kichik harfdan 32 ni ayirsak, katta harf chiqadi. Bajar tugmasini bosing:
4.9 Amaliy: eng katta elementni topish
Bu massivlar bilan eng tez-tez uchraydigan vazifalardan biri, va u keyingi hafta o'rganadigan algoritmlarga ko'prik bo'ladi. G'oya oddiy: birinchi elementni vaqtincha «eng katta» deb olamiz, so'ng qolganlarini birma-bir ko'rib, kattaroq topsak, «eng katta»ni yangilaymiz.
Pastda yashil katak hozirgi eng kattani, ko'k katak esa tekshirilayotgan elementni bildiradi. Keyingi qadam tugmasi bilan yuring:
4.10 Chuqurroq advanced
Massiv va satr asoslarini egalladingiz. Endi yana ikkita kengaytmaga qisqacha qaraymiz: bularni hozir to'liq o'rganish shart emas, faqat tasavvur bo'lsa kifoya.
Ikki o'lchamli massiv (matritsa)
Massivni qator deb tasavvur qilgan edik. Agar kataklar nafaqat qator, balki ustun bo'ylab ham joylashsa, ikki o'lchamli massiv hosil bo'ladi: bu jadval yoki matritsa. Masalan shaxmat taxtasi yoki Excel varag'i shunday.
Endi element ikkita indeks bilan olinadi: jadval[qator][ustun]. Yuqorida jadval[1][2] 1-qator, 2-ustundagi qiymatni, ya'ni 6 ni beradi.
Satrlar massivi
Satr char massivi bo'lgani kabi, bir nechta satrni ham bitta massivga yig'ish mumkin. Bu, masalan, hafta kunlari yoki ismlar ro'yxatini saqlash uchun qulay:
* belgisi pointer, ya'ni ko'rsatkichni bildiradi. U xotiradagi manzil bilan ishlaydi va biz uni keyingi haftalarda alohida chuqur o'rganamiz. Hozircha buni «har bir katakda bitta satr turibdi» deb tushunsangiz yetarli.Atamalar lug'ati
4.11 Bilim testi
16 ta savol. Haftani yakunlash uchun kamida 11 tasiga to'g'ri javob bering.
Tabriklaymiz! 4-hafta yakunlandi
Endi siz massiv va satrlar bilan ishlay olasiz: ko'p qiymatni saqlash, indeks bilan murojaat, sikl bilan aylanish, null terminator va strlen. Bular ma'lumot ustida ishlaydigan deyarli har bir dasturning asosi.
Keyingi hafta: Algoritmlar (chiziqli va ikkilik qidiruv, saralash, Big-O samaradorlik).
Keyingi modulga o'tish