3-dars: Algoritmlar va pseudocode
Dars haqida
Davomiyligi: 90 daqiqa Maqsad: Talaba algoritmlarni chuqurroq tushunishi, pseudocode yozishi, asosiy algoritm naqshlarini (qidiruv, sortlash) bilishi kerak.
1. Algoritmni qayta ko'rib chiqamiz
Algoritm — muammoni yechish uchun ketma-ket qadamlar.
Bugungi darsda algoritm yozishni o'rganamiz — keyingi darslarda Scratch va kodda amalga oshiramiz.
2. Algoritmni qanday yozish?
3 ta usul:
Natural language (oddiy til)
"Birinchi raqamni eslab qoling.
Keyingi raqamni tekshiring.
Agar u kattaroq bo'lsa — uni eslab qoling.
Hammasi tugaguncha takrorlang."Pseudocode
SET max = numbers[0]
FOR each number in numbers:
IF number > max:
SET max = number
PRINT maxFlowchart
(Keyingi darsda batafsil)
3. Pseudocode qoidalari
Pseudocode — qat'iy qoida yo'q
Pseudocode — erkin format. Asosiysi:
- Aniq bo'lsin
- Tushunarli bo'lsin
- Real kodga aylantirish oson bo'lsin
Tipik pseudocode tuzilmalari
1. O'zgaruvchilarni belgilash
SET age = 18
SET name = "Akmal"
SET ballar = [85, 92, 78, 65, 90]2. Input olish
INPUT yosh
INPUT ism3. Output berish
PRINT "Salom!"
PRINT ism
DISPLAY natija4. Shart (if-else)
IF yosh >= 18:
PRINT "Kattalar"
ELSE:
PRINT "Bola"5. Sikl (loop)
FOR i FROM 1 TO 10:
PRINT i
WHILE shart IS TRUE:
bajar narsa
REPEAT 5 TIMES:
bajar narsa6. Funksiya
FUNCTION qoshish(a, b):
RETURN a + b
CALL qoshish(5, 3) → natija: 84. Algoritm misoli: O'rtacha hisoblash
Vazifa: 10 ta raqam berilgan. O'rtachasini topish.
Oddiy til:
"Hamma raqamlarni qo'shing.
10 ga bo'ling.
Natija — o'rtacha."Pseudocode:
SET numbers = [85, 92, 78, 65, 90, 75, 88, 70, 95, 60]
SET sum = 0
SET count = LENGTH(numbers)
FOR each n in numbers:
SET sum = sum + n
SET average = sum / count
PRINT "O'rtacha:", averageNatija: 79.8
5. Algoritm naqshlari (patterns)
CS'da takrorlanadigan asosiy naqshlar bor:
6. Naqsh 1: Qidiruv (Search)
Linear Search (chiziqli qidiruv)
Eng oddiy: ro'yxatdagi har elementni navbat bilan tekshirish.
ALGORITHM: Linear Search
INPUT: ro'yxat, qidirilayotgan element
OUTPUT: pozitsiya yoki NOT_FOUND
FOR i FROM 0 TO LENGTH(ro'yxat) - 1:
IF ro'yxat[i] == qidirilayotgan element:
RETURN i
RETURN NOT_FOUNDMisol: 5 raqamini topish — [3, 7, 1, 5, 9]
i=0: 3 ≠ 5
i=1: 7 ≠ 5
i=2: 1 ≠ 5
i=3: 5 == 5 → RETURN 3Binary Search (ikkilik qidiruv)
Tezroq: ro'yxat sortlangan bo'lsa.
ALGORITHM: Binary Search
INPUT: sortlangan ro'yxat, qidirilayotgan
OUTPUT: pozitsiya yoki NOT_FOUND
SET left = 0
SET right = LENGTH(ro'yxat) - 1
WHILE left <= right:
SET middle = (left + right) / 2
IF ro'yxat[middle] == qidirilayotgan:
RETURN middle
ELSE IF ro'yxat[middle] < qidirilayotgan:
SET left = middle + 1
ELSE:
SET right = middle - 1
RETURN NOT_FOUNDMisol: 7 ni topish — [1, 3, 5, 7, 9, 11, 13]
left=0, right=6, middle=3 → ro'yxat[3]=7 == 7 → RETURN 3Atigi 1 ta tekshirish!
Taqqoslash
| Algoritm | 1000 element | 1,000,000 element |
|---|---|---|
| Linear | 1000 tekshirish | 1,000,000 tekshirish |
| Binary | 10 tekshirish | 20 tekshirish |
Binary juda tezroq — lekin ro'yxat sortlangan bo'lishi kerak.
7. Naqsh 2: Sortlash (Sort)
Bubble Sort
Eng oddiy. Qo'shni elementlarni almashtirish.
ALGORITHM: Bubble Sort
INPUT: ro'yxat
OUTPUT: sortlangan ro'yxat
FOR i FROM 0 TO LENGTH(ro'yxat) - 1:
FOR j FROM 0 TO LENGTH(ro'yxat) - 2 - i:
IF ro'yxat[j] > ro'yxat[j+1]:
SWAP ro'yxat[j] AND ro'yxat[j+1]
RETURN ro'yxatMisol: [3, 1, 4, 1, 5]
Iteration 1:
[3,1,4,1,5] → [1,3,4,1,5] → [1,3,4,1,5] → [1,3,1,4,5] → [1,3,1,4,5]
Iteration 2:
[1,3,1,4,5] → [1,3,1,4,5] → [1,1,3,4,5] → ...
Yakuniy: [1,1,3,4,5]Bubble Sort — sekin
Bubble Sort — o'rganish uchun yaxshi, lekin amaliyotda sekin.
1000 element → ~1,000,000 amaliyot.
Real dunyoda: Quick Sort, Merge Sort (5-oyda).
8. Naqsh 3: Sanash (Counting)
ALGORITHM: Necha ta musbat raqam bor
INPUT: raqamlar ro'yxati
OUTPUT: musbat raqamlar soni
SET count = 0
FOR each n in raqamlar:
IF n > 0:
SET count = count + 1
RETURN countMisol: [-3, 5, -2, 8, 0, 1] → 3 ta musbat
9. Naqsh 4: Filtrlash (Filter)
ALGORITHM: Faqat juft raqamlarni olish
INPUT: raqamlar ro'yxati
OUTPUT: yangi ro'yxat — faqat juft
SET result = []
FOR each n in raqamlar:
IF n MOD 2 == 0: // qoldiqsiz 2 ga bo'linadi
APPEND n TO result
RETURN resultMisol: [1, 2, 3, 4, 5, 6] → [2, 4, 6]
10. Naqsh 5: Jamlash (Aggregation)
ALGORITHM: Yig'indi va o'rtacha
INPUT: raqamlar
OUTPUT: sum, average
SET sum = 0
FOR each n in raqamlar:
SET sum = sum + n
SET average = sum / LENGTH(raqamlar)
RETURN sum, average11. Naqsh 6: Aylantirish (Transformation)
ALGORITHM: Har raqamni 2 ga ko'paytirish
INPUT: raqamlar
OUTPUT: yangi ro'yxat
SET result = []
FOR each n in raqamlar:
APPEND (n * 2) TO result
RETURN resultMisol: [1, 2, 3, 4] → [2, 4, 6, 8]
12. Murakkab algoritm: Eng tez yo'l
Vazifa: Yandex Maps qanday eng tez yo'lni topadi?
Algoritm: Dijkstra's Algorithm (juda murakkab)
Tushuncha:
Toshkent → Angren:
- Yo'l 1: A→D = 5 soat
- Yo'l 2: A→B→D = 2+1 = 3 soat
- Yo'l 3: A→C→D = 3+2 = 5 soat
Eng tez: Yo'l 2 (3 soat).
Real Yandex Maps har sekundda millionlab bunday hisoblar qiladi.
13. Algoritm tekshirish
Yaxshi algoritm — trace qila olish (har qadamda nima bo'lishini ko'rsatish).
Misol: Bubble Sort'ni qo'lda trace qiling.
| Iteration | Holat |
|---|---|
| Boshlang'ich | [5, 2, 8, 1, 9] |
| 1-iteration | [2, 5, 1, 8, 9] |
| 2-iteration | [2, 1, 5, 8, 9] |
| 3-iteration | [1, 2, 5, 8, 9] |
| Tugadi | [1, 2, 5, 8, 9] ✓ |
Algoritmni qog'ozda yozing
Real koddan oldin doim qog'ozda algoritmni yozing. Tekshiring. Keyin kodga aylantiring.
Bu — professional dasturchi odati.
14. Real-world misol: Email spam filter
ALGORITHM: Spam aniqlash
INPUT: email
OUTPUT: SPAM yoki INBOX
SET spam_words = ["winner", "free", "money", "click here", "urgent"]
SET score = 0
FOR each word in email.text:
IF word IS IN spam_words:
SET score = score + 1
IF email.sender IS UNKNOWN:
SET score = score + 2
IF email.subject CONTAINS uppercase letters > 50%:
SET score = score + 1
IF score >= 3:
RETURN SPAM
ELSE:
RETURN INBOXReal spam filter ko'p murakkabroq, lekin g'oya shu.
Darsdagi topshiriqlar
Topshiriq 1 — Eng katta uch ta
Pseudocode yozing:
"Ro'yxatda 100 ta raqam bor. Eng katta uch ta ni toping."
Pseudocode:
SET ro'yxat = [100 ta raqam]
SET eng_kattalar = ?
??? Algoritm yozingTopshiriq 2 — O'rtacha va median
2 ta algoritm yozing:
- O'rtacha (mean): yig'indi / soni
- Median: sortlab, o'rtadagi qiymat
Misol uchun [1, 5, 3, 9, 7]:
- O'rtacha: (1+5+3+9+7)/5 = 5
- Sortlangan: [1, 3, 5, 7, 9]
- Median: 5 (o'rtadagi)
Har biri uchun pseudocode yozing.
Topshiriq 3 — Linear va Binary Search
Linear Search va Binary Search pseudocode'lari yuqorida berilgan.
Quyidagi ro'yxatda 23 raqamini qidiring va har qadamni qog'ozga yozib chiqing:
[3, 7, 12, 15, 18, 23, 28, 35, 42, 50]
- Linear Search: necha qadamda topdingiz?
- Binary Search: necha qadamda topdingiz?
Topshiriq 4 — Bubble Sort qo'lda
Quyidagi ro'yxatni Bubble Sort bilan sortlang. Har iteration'ni qog'ozga yozing:
[7, 3, 9, 1, 5, 8, 2]
Har iteration (raund) oxirida ro'yxat holati qanday bo'ladi?
Topshiriq 5 — Hayotiy algoritm
Quyidagi vazifa uchun batafsil pseudocode yozing:
"Sinfdagi 30 ta talaba ballari berilgan. Quyidagilarni hisoblang:
- Jami yig'indi
- O'rtacha
- Eng yuqori va eng past ball
- 60+ ball olganlar soni
- 90+ ball olganlar foizi"
Bitta algoritm — hammasini hisoblasin.
Topshiriq 6 — Spam filter
O'zingizning spam filter algoritmingizni yozing:
- Qanday so'zlar — spam belgisi?
- Qaysi belgilar — ehtimollik oshiradi?
- Qanday score sistemasi?
- Qaysi chegara — SPAM/INBOX?
Pseudocode shaklida yozing.
Topshiriq 7 — Trace
Quyidagi algoritm berilgan:
SET arr = [3, 1, 4, 1, 5, 9, 2, 6]
SET total = 0
FOR each n in arr:
IF n > 3:
SET total = total + n
PRINT totalTrace qiling (qadam-baqadam yozing) — total qiymati qanday o'zgaradi?
Yakuniy javob qancha?
Topshiriq 8 — O'z algoritmingizni o'ylab toping
Quyidagi muammolardan biri uchun algoritm yozing:
- Telegram'da spam guruhlarni aniqlash
- YouTube'da videolarni tartiblash (eng yangi → eski)
- Tinder uslubidagi taqqoslash algoritmi
- Restoran menyusidan eng arzon to'liq ovqat (asosiy + ichimlik) tanlash
- GPS'da yo'l ko'rsatkichi (oddiy variant)
Pseudocode + diagram (oddiy chizmacha).
Asosiy tushunchalar (lug'at)
| Termin | Qisqacha izoh |
|---|---|
| Pseudocode | Dastur tili-simon yozish usuli |
| Variable | O'zgaruvchi |
| Input / Output | Kiruvchi / chiquvchi |
| Loop | Sikl (FOR, WHILE) |
| Condition | Shart (IF, ELSE) |
| Function | Funksiya |
| Linear Search | Ketma-ket qidiruv |
| Binary Search | Yarim-yarimga qidiruv |
| Bubble Sort | Pufakcha saralash |
| Trace | Algoritmni qadam-baqadam kuzatish |
| Swap | Ikki qiymatni almashtirish |
| MOD | Qoldiq (modulo) |
| APPEND | Ro'yxatga qo'shish |
| LENGTH | Hajm (uzunlik) |