5-oy uy vazifalari (C tili — chuqurlashish)
Umumiy ko'rsatmalar
Hammasi GitHub orqali! (4-oyning 6-darsidan beri odatiy tartib)
- Repo:
c-darslari(yokifoundation-darslar) — 4-oyda boshlangan repo davomi - Har dars uchun alohida papka:
5-oy-dars-N/ - Har vazifa — alohida
.cfayl + alohida commit (conventional commits) - Email subject:
5-oy UV — [dars-raqam] — [Ism Familiya] - Email body: GitHub repo havolasi + qisqacha sharh
1-dars uy vazifalari: Input/Output — scanf, printf
Topshiriq 1.1 — Interaktiv tanishuv
Ikkita fayl:
tanishuv.c— foydalanuvchidan ism, yosh va shaharni so'raydi, so'ng chiroyli formatda javob chiqaradi:
Ismingiz: Ali
Yoshingiz: 15
Shahringiz: Toshkent
Salom, Ali! Siz 15 yoshdasiz va Toshkentda yashaysiz.yosh.c— tug'ilgan yilni so'raydi, yoshni kun, soat va daqiqalarda hisoblab chiqaradi
Topshiriq 1.2 — Kalkulyator va chegirma
calc.c— to'liq kalkulyator: 2 ta son va amalni (+,-,*,/) so'raydi, natijani chiqaradi. Nolga bo'lishni tekshiring!narx.c— mahsulot narxi va chegirma foizini so'raydi, yakuniy narxni%.2fformatda chiqaradi
Topshiriq 1.3 — Raqam topish o'yini
game.c — number guessing game:
- Dastur 1-100 oralig'ida random raqam o'ylaydi (
rand()) - Foydalanuvchi taxmin kiritadi
- Har urinishda "Kattaroq!" yoki "Kichikroq!" deb yordam beradi
- Topilganda urinishlar sonini chiqaradi
Bonus: o'yinni qayta boshlash imkoniyati.
Topshiriq 1.4 — Talabalar reytingi va formatlash
students.c— N talaba ballarini kiritib olib, statistika chiqaradi: o'rtacha, eng yuqori, eng pastformat-mashq.c— ma'lumotlarni jadval ko'rinishida chiqaring:%-10s,%5d,%8.2fkabi format specifiers bilanecho.c—getchar/putcharbilan kiritilgan matnni qaytarib chiqaradigan dastur
2-dars uy vazifalari: Character va string
Topshiriq 2.1 — Char va string asoslari
char-basics.c— belgi kiritib olib tekshiradi: harfmi, raqammi, katta harfmi, kichik harfmi (ctype.h)string-basics.c—strcpy,strcat,strlen,strcmpbilan mashqlar: ikki ismni birlashtirish, uzunligini topish, taqqoslash
Topshiriq 2.2 — O'z string funksiyalaringiz
my-string.c — kutubxona funksiyalaridan foydalanmasdan o'zingiz yozing:
my_strlen(char s[])— uzunlikmy_strcpy(char dest[], char src[])— nusxalashmy_strcmp(char a[], char b[])— taqqoslash
main ichida har birini kutubxona versiyasi bilan solishtirib tekshiring.
Topshiriq 2.3 — Palindrome va unli harflar
palindrome.c— kiritilgan so'z palindrom yoki yo'qligini tekshiradi (katta-kichik harfni hisobga olmang)vowel-count.c— matndagi unli va undosh harflar sonini sanaydi
Topshiriq 2.4 — Caesar shifri va parol tekshiruvchi
caesar.c— Caesar cipher: matn va siljish (shift) qiymatini olib shifrlaydi, keyin deshifrlaydipassword.c— kuchli parol tekshiruvchi: kamida 8 belgi, katta harf, kichik harf, raqam bormi — har mezon bo'yicha xabar chiqaradicase-converter.c— matnni upper/lower/swap qiladigan dastur (menu bilan)
3-dars uy vazifalari: Massiv asoslari
Topshiriq 3.1 — Birinchi massivlar
asosiy.c— 10 elementli massiv: e'lon qilish, to'ldirish, chiqarish va yig'indini hisoblashmin-max.c— massivdagi eng katta va eng kichik elementni topishcount.c— shart bo'yicha sanash: nechta musbat, nechta manfiy, nechta juft
Topshiriq 3.2 — Teskari va nusxa
reverse.c— massivni teskari tartibda chiqarish, so'ng joyida teskari qilish (yangi massivsiz)copy.c— bir massivni ikkinchisiga nusxalash va ikkalasini chiqarish
Topshiriq 3.3 — Statistika funksiyalari
stats.c— to'liq statistika: yig'indi, o'rtacha, min, max, rangearray-fn.c— yuqoridagi barcha amallarni alohida funksiyalar ko'rinishida yozing:sum(int arr[], int n),average(...),find_min(...),find_max(...)
Massivni funksiyaga parametr sifatida berishni mashq qilasiz.
Topshiriq 3.4 — Amaliy: talabalar va histogram
students.c— N talaba balini massivga olib, statistika chiqaradi: o'rtacha, eng yuqori/past ball, o'rtachadan yuqorilar sonihistogram.c— massiv qiymatlarini#belgilar bilan gistogramma ko'rinishida chiqaradi:
5: #####
3: ###
7: #######4-dars uy vazifalari: Massivda qidiruv (linear, binary)
Topshiriq 4.1 — Linear search
linear.c— chiziqli qidiruv: element topilsa indeksini, topilmasa -1 qaytaradigan funksiyacount.c— element massivda necha marta uchrashini sanaydifind-all.c— element uchragan barcha indekslarni chiqaradi
Topshiriq 4.2 — Binary search
binary.c— saralangan massivda binary search (sikl bilan). Har qadamdalow,mid,highqiymatlarini chiqarib, algoritm qanday ishlashini ko'rsatingrecursive-binary.c— xuddi shu algoritm, lekin rekursiv versiyada
Topshiriq 4.3 — Indeks va oraliq
min-max-idx.c— eng katta va eng kichik element indeksini topishrange.c— berilgan oraliqdagi (masalan, 10 dan 50 gacha) elementlarni topib chiqarish va sanash
Topshiriq 4.4 — Tezlik taqqoslash
speed-test.c— katta massivda (masalan, 100 000 element) linear va binary search vaqtini taqqoslang (clock()bilan). Natijani izoh sifatida faylga yozing: qaysi biri nechchi marta tez?element-stats.c— massiv bo'yicha element statistikasi: takrorlanishlar, unikal elementlar soni
Bu — Big O tushunchasining amaliy isboti: O(n) vs O(log n).
5-dars uy vazifalari: Saralash algoritmlari — Bubble, Selection, Insertion
Topshiriq 5.1 — Bubble sort
bubble.c— to'liq bubble sort, har iteratsiyadan keyin massiv holatini chiqaring:
Boshlanish: 5 2 8 1 9
1-iteratsiya: 2 5 1 8 9
2-iteratsiya: 2 1 5 8 9
3-iteratsiya: 1 2 5 8 9bubble-opt.c—swappedflag bilan optimizatsiya: agar iteratsiyada almashinuv bo'lmasa — to'xtashbubble-desc.c— kamayish tartibida (descending) saralash
Topshiriq 5.2 — Selection va Insertion
selection.c— selection sort, har qadamda tanlangan minimum va massiv holatini chiqaringinsertion.c— insertion sort, har qadamda qaysi element qayerga "qo'yilganini" ko'rsating
Ikkala algoritmni og'zaki tushuntirib bera olishingiz kerak — darsda so'raladi!
Topshiriq 5.3 — Uchala algoritm birga
all-sorts.c— bitta dasturda 3 algoritm: menu orqali tanlanadi, bir xil random massivda ishlaydispeed.c— turli hajmlarda (100, 1000, 10000 element) uchala algoritm vaqtini taqqoslang va natijani jadval ko'rinishida chiqaring
Topshiriq 5.4 — Sort + Search va string saralash
sort-search.c— avval massivni saralab, keyin binary search bilan qidiradigan dastur (4-dars bilan bog'lanish)string-sort.c— ismlar ro'yxatini alifbo tartibida saralash (strcmpbilan)
6-dars uy vazifalari: 2D massiv (matrix)
Topshiriq 6.1 — Birinchi 2D massiv
first-2d.c— 3x4 massiv: e'lon qilish, kiritish, jadval ko'rinishida chiqarish, barcha elementlar yig'indisimult-table.c— 9x9 ko'paytirish jadvalini 2D massivga to'ldirib, chiroyli formatda chiqarish
Topshiriq 6.2 — Matritsa amallari
matrix-ops.c— ikki matritsa ustida: qo'shish, ayirish, ko'paytirish, transpose. Har amal — alohida funksiyadiagonal.c— kvadrat matritsaning asosiy va yon diagonal yig'indilarini hisoblash
Topshiriq 6.3 — 2D statistika
stats-2d.c — matritsa bo'yicha to'liq statistika:
- Har qator yig'indisi va o'rtachasi
- Har ustun yig'indisi
- Umumiy min va max (qaysi qator/ustunda ekanini ham chiqaring)
Topshiriq 6.4 — O'yin: Tic-Tac-Toe yoki labirint
Bittasini tanlang (bonus uchun ikkalasini):
tictactoe.c— 3x3 X-O o'yini: 2 o'yinchi navbat bilan yuradi, g'olibni tekshiradimaze.c— 2D massivda labirint:#devor,.yo'l, boshlanish va chiqish nuqtasi
Bonus: image.c — 0-9 qiymatli "rasm" matritsasini negative qilish va 90 gradusga aylantirish.
7-dars uy vazifalari: Pointer asoslari
Topshiriq 7.1 — Pointer asoslari
pointer-basics.c— o'zgaruvchi, uning manzili (&) va pointer (*) bilan tajriba: qiymat, manzil, pointer orqali o'qish va o'zgartirisharithmetic.c— pointer arifmetikasi:p+1,p-1, massiv bo'ylab pointer bilan yurish
Topshiriq 7.2 — Swap va o'zgartirish
swap.c— pointer bilan ishlaydiganswap(int *a, int *b). 4-oyda pass-by-value bilan swap nima uchun ishlamagan edi — endi nima uchun ishlashini kod izohida tushuntiringincrement.c— funksiya pointer orqali o'zgaruvchini oshiradi:add_five(int *n)
Topshiriq 7.3 — Ko'p qiymat qaytarish
divide.c— bo'linma va qoldiqni bitta funksiyadan pointer parametrlar orqali qaytarish:divide(int a, int b, int *quotient, int *remainder)analyze.c— massiv statistikasini pointer parametrlar bilan qaytarish:analyze(int arr[], int n, int *min, int *max, float *avg)
Topshiriq 7.4 — NULL va amaliyot
null.c— NULL pointer bilan xavfsiz ishlash: pointer NULL bo'lsa tekshirib, xabar chiqarishcalc-with-ptr.c— kalkulyator: barcha amallar natijani pointer parametr orqali qaytaradigan funksiyalar bilan
8-dars uy vazifalari: Pointer, massiv va string
Topshiriq 8.1 — Pointer va massiv
pointer-array.c— massiv elementlariga 4 xil usulda murojaat:arr[i],*(arr+i),p[i],*(p+i)— hammasi bir xil natija berishini ko'rsatingpointer-arith.c— faqat pointer arifmetikasi bilan (indekssiz) massiv yig'indisi va teskari chiqarish
Topshiriq 8.2 — Dinamik xotira
malloc-basic.c—mallocbilan massiv yaratish, to'ldirish, chiqarish,freedynamic-input.c— massiv hajmini foydalanuvchi kiritadi, xotira dinamik ajratiladirealloc.c—reallocbilan o'sadigan massiv: foydalanuvchi 0 kiritmaguncha son qo'shib boradi
Har mallocga bitta free — xotira oqishiga (memory leak) yo'l qo'ymang!
Topshiriq 8.3 — String pointer bilan
string-fn.c— 2-darsdagimy_strlen,my_strcpy,my_strcmpfunksiyalarini endi faqat pointer bilan qayta yozing (indekslarsiz,while (*s)uslubida)string-array.c— so'zlar massivichar *words[]bilan ishlash: chiqarish, eng uzun so'zni topish
Topshiriq 8.4 — String algoritmlari
Bittasini tanlab to'liq ishlang (bonus uchun ikkitasini):
anagram.c— ikki so'z anagram ekanini tekshirish (masalan, "listen" va "silent")word-count.c— matndagi so'zlar sonini sanash (fgetsbilan)tokenize.c— matnni so'zlarga bo'lib, har birini alohida qatorda chiqarish
9-dars uy vazifalari: Struct asoslari
Topshiriq 9.1 — Birinchi struct
first-struct.c—Studentstruct: ism, yosh, ball. Bitta talaba yaratib, maydonlarini to'ldirib chiqaringgeometry.c—PointvaCirclestructlari: ikki nuqta orasidagi masofa, doira yuzasi va perimetri
Topshiriq 9.2 — Talabalar bazasi
students.c— struct massivi: N talaba ma'lumotlarini kiritish, ro'yxatni jadval ko'rinishida chiqarish, o'rtacha ball:
Ism Yosh Ball
--------------------------
Ali 15 87.50
Vali 16 92.00sort-students.c— talabalarni ball bo'yicha saralash (5-darsdan bilgan algoritmingiz bilan), bonus: ism bo'yicha ham
Topshiriq 9.3 — Nested struct
nested.c — struct ichida struct:
Datestruct: kun, oy, yilPersonstruct: ism +Date birthdaymaydoni
Bir necha odam yaratib, tug'ilgan sanalarini chiroyli formatda chiqaring.
Topshiriq 9.4 — Amaliy tanlov
Bittasini tanlab kichik CRUD dastur yozing (qo'shish, ro'yxat, qidirish):
inventory.c— mahsulotlar ombori: nom, narx, sonilibrary.c— kutubxona: kitob nomi, muallif, yiliaccount.c— bank hisobi: egasi, balans, kirim/chiqim
Bu — 11-darsdagi mini loyihaga tayyorgarlik.
10-dars uy vazifalari: File I/O
Topshiriq 10.1 — Yozish va o'qish
first.c—fopen("w")+fprintfbilan fayl yaratib, unga 5 qator matn yozishread-file.c— o'sha faylnifopen("r")bilan ochib, mazmunini ekranga chiqarish
Fayl ochilmasa (NULL) xato xabarini chiqarishni unutmang.
Topshiriq 10.2 — Append va log
log.c — log dastur: har ishga tushirilganda faylga yangi qator qo'shadi ("a" rejimi):
[1] Dastur ishga tushdi
[2] Dastur ishga tushdiBonus: qator raqamini fayldan o'qib davom ettiring.
Topshiriq 10.3 — Unix vositalari
O'zingizning kichik utilitalaringiz:
wc.c— fayldagi qatorlar, so'zlar va belgilar sonini sanaydimycat.c— fayl mazmunini ekranga chiqaradi (cat dasturi kabi)mycopy.c— bir faylni ikkinchisiga nusxalaydi
Topshiriq 10.4 — Telefon kitobi
phonebook.c — struct + fayl birga:
=== TELEFON KITOBI ===
1. Kontakt qo'shish
2. Barcha kontaktlar
3. Qidirish
4. Chiqish
Tanlang:- Kontakt qo'shish (ism, telefon)
- Barcha kontaktlarni ko'rish
- Ism bo'yicha qidirish
- Ma'lumotlar faylda saqlanadi — dastur yopilib qayta ochilganda ham turadi!
Bonus: binary.c — struct massivini fwrite/fread bilan binary faylga yozish va o'qish.
11-dars uy vazifalari: Mini loyiha
Topshiriq 11.1 — Loyiha tanlash va reja
Variantlardan birini tanlang yoki o'z g'oyangizni taklif qiling:
- Kutubxona boshqaruvi
- Telefon kitobi (kengaytirilgan)
- Mahsulotlar ombori (inventory)
- Talabalar jurnali
- Bank hisobi simulyatori
- Todo ro'yxati
reja.md yozing: qanday funksiyalar bo'ladi, qanday struct, qanday fayl formati.
Topshiriq 11.2 — Repo va skeleton
Yangi repo: c-mini-loyiha-2
README.md(loyiha nomi va qisqacha tavsif).gitignore(kompilyatsiya fayllari uchun)main.c— menu skeleton (funksiyalar hali bo'sh)- Initial commit + push
Topshiriq 11.3 — Asosiy funksiyalar
Har funksiyani alohida commit bilan qo'shing:
- Add — yangi yozuv qo'shish
- Show — barcha yozuvlarni ko'rish
- Search — qidirish
- Update — o'zgartirish
- Delete — o'chirish
- Sort — saralash (5-darsdan)
- Statistika
Kamida 7 ta mazmunli commit (conventional commits: feat: add search function).
Topshiriq 11.4 — File I/O, validation va final
- Fayldan yuklash / faylga saqlash — ma'lumot dastur yopilganda yo'qolmasin (10-darsdan)
- Har input uchun validation — commit:
fix: add input validation README.mdto'liq: o'rnatish, ishlatish, screenshot- Har xil holatlarda test qiling, bug topsangiz — tuzatib commit qiling
- Final push — repo URL'ni email orqali jo'nating
12-dars uy vazifalari: Oylik imtihon
Topshiriq 12.1 — Imtihonga tayyorgarlik
Imtihondan oldin:
- 1-10 darslarning barcha mavzularini takrorlang
- Har mavzudan kamida 1 ta mashqni qaytadan, ko'chirmasdan yozib chiqing
- Tushunarsiz joylar ro'yxatini tuzing — imtihondan oldingi konsultatsiyada so'rang
Topshiriq 12.2 — Refleksiya
Imtihondan keyin Google Doc yozing:
- Eng yoqqan dars va mavzu
- Eng qiyin mavzu (pointer? struct? algoritmlar?)
- 4-oy boshidagi holatingiz bilan hozirgi holatingizni solishtiring
- 6-oyga maqsadlar
Topshiriq 12.3 — Portfolio yangilash
c-darslari repo'ni tartibga keltiring:
README.mdto'liq: qaysi oy, qaysi mavzular, dars papkalari ro'yxati- Har dars uchun papka to'g'ri nomlangan
- Eng yaxshi ishlaringizga sharh yozilgan
- GitHub profilingizda
c-mini-loyiha-2ni pin qiling
Topshiriq 12.4 — 6-oyga tayyorgarlik
6-oyda Python boshlanadi:
- Python haqida o'qing: python.org, "Python nima uchun mashhur?"
- "C vs Python" mavzusida bitta video ko'ring
- Kompyuteringizga Python o'rnatib,
print("Hello, World!")ni ishlatib ko'ring
C dan keyin Python sizga juda oson tuyuladi — va'da!
Topshirish formati
GitHub orqali:
- Repo:
c-darslari(asosiy) +c-mini-loyiha-2(loyiha uchun) - Har dars: alohida papka
5-oy-dars-N/ - Har vazifa: alohida
.cfayl + alohida commit
Email:
- Subject:
5-oy UV — [dars-raqam] — [Ism Familiya] - Body: GitHub repo havolasi + dars bo'yicha qisqacha sharh
Baholash
| Mezon | Ball |
|---|---|
| To'liq bajarilgan | 50 |
| O'z vaqtida | 20 |
| Conventional commits | 15 |
| Kod toza, funksiyalarga bo'lingan | 10 |
| Kreativlik | 5 |
| Jami | 100 |
Kech topshirish
- 1 kun kech: -10%
- 3 kun kech: -30%
- 1 hafta kech: 0 ball
5-oy tugadi! 🎉
Bu Foundation'ning eng og'ir oyi edi — va siz uni yengdingiz!
Endi C bilan jiddiy dasturlar yoza olasiz: massiv, saralash, pointer, struct, fayl — hammasi qo'lingizda. Bu bilim keyingi barcha tillar uchun mustahkam poydevor bo'ladi.
6-oyda: Python boshlanadi. C dan keyin Python juda yengil va qiziqarli tuyuladi — dam olishdan oldin Python o'rnatilganini tekshirib qo'ying (Topshiriq 12.4).
Yutuqlar tilab qolaman!