Sikllar — for, while, do-while
Sikl nima?
Tasavvur qiling: 100 ta son yig'indisini hisoblash kerak. Sicl bo'lmasa:
int yigindi = 0;
yigindi += 1;
yigindi += 2;
yigindi += 3;
// ... 100 qator!
Bu yomon. Sikl bilan:
int yigindi = 0;
for (int i = 1; i <= 100; i++) {
yigindi += i;
}
Atigi 3 qator. Sikl — bir ishni belgilangan marta yoki shart bajarilguncha takrorlaydi.
C da uch xil sikl:
for → necha marta takrorlanishini oldindan bilsak
while → shart bajarilguncha (oldindan noma'lum)
do-while → kamida bir marta bajarilishi kerak bo'lsa
1. for sikli
Sintaksis
for (boshlang'ich; shart; qadam) {
// tanasi
}
Uch qism nima qiladi?
for (int i = 0; i < 5; i++)
│ │ │
│ │ └── har iteratsiyada i ni 1 ga oshir
│ └────────── i < 5 bo'lsa davom et
└─────────────────────── i ni 0 dan boshlash (bir marta)
Vizual ishlash tartibi
┌─────────────────────────────────────────┐
│ 1. boshlang'ich: int i = 0 │
│ │
│ 2. shart: i < 5 → to'g'rimi? │
│ ha → tanani bajar │
│ yo'q → sikldan chiq │
│ │
│ 3. qadam: i++ │
│ │
│ 4. 2-qadamga qayt │
└─────────────────────────────────────────┘
Oddiy misol
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
printf("%d-qadam\n", i);
}
printf("Sikl tugadi\n");
return 0;
}
Natija:
1-qadam
2-qadam
3-qadam
4-qadam
5-qadam
Sikl tugadi
Teskari sanash
for (int i = 5; i >= 1; i--) {
printf("%d...\n", i);
}
printf("Start!\n");
Natija:
5...
4...
3...
2...
1...
Start!
Ikki qadam
// Juft sonlar: 0, 2, 4, 6, 8, 10
for (int i = 0; i <= 10; i += 2) {
printf("%d ", i);
}
printf("\n");
Natija:
0 2 4 6 8 10
2. while sikli
Sintaksis
while (shart) {
// shart to'g'ri ekan davom et
}
for dan farqi
for → necha marta — oldindan ma'lum
while → qachon to'xtash — shart bilan aniqlanadi
Vizual ishlash
┌──────────────────────────────┐
│ shart tekshiriladi │
│ │ │
│ ha ─┼──► tanani bajar │
│ │ │ │
│ yo'q └──► qaytib │
│ │ shart │
│ ▼ tekshiriladi│
│ chiq │
└──────────────────────────────┘
Misol — 1 dan N gacha yig'indi
#include <stdio.h>
int main() {
int n, i = 1, yigindi = 0;
printf("N ni kiriting: ");
scanf("%d", &n);
while (i <= n) {
yigindi += i;
i++;
}
printf("1 dan %d gacha yig'indi: %d\n", n, yigindi);
return 0;
}
Natija (n = 100):
1 dan 100 gacha yig'indi: 5050
Misol — Raqam topish o'yini
#include <stdio.h>
int main() {
int maxsus = 42;
int taxmin;
printf("1-100 orasidagi sonni toping!\n");
printf("Taxminingiz: ");
scanf("%d", &taxmin);
while (taxmin != maxsus) {
if (taxmin < maxsus)
printf("Kattaroq!\n");
else
printf("Kichikroq!\n");
printf("Taxminingiz: ");
scanf("%d", &taxmin);
}
printf("To'g'ri! Son %d edi.\n", maxsus);
return 0;
}
Ishlash:
1-100 orasidagi sonni toping!
Taxminingiz: 50
Kichikroq!
Taxminingiz: 25
Kattaroq!
Taxminingiz: 42
To'g'ri! Son 42 edi.
3. do-while sikli
Sintaksis
do {
// tanasi
} while (shart);
while dan farqi
while → avval shart, keyin tana (0 marta ham bo'lishi mumkin)
do-while → avval tana, keyin shart (kamida 1 marta)
Vizual ishlash
┌──────────────────────────────┐
│ tanani bajar ◄─────────┐ │
│ │ │ │
│ shart tekshiriladi │ │
│ │ │ │
│ ha ─┼──────────────────┘ │
│ │ │
│ yo'q │
│ │ │
│ ▼ │
│ chiq │
└──────────────────────────────┘
Misol — Menyu
#include <stdio.h>
int main() {
int tanlov;
do {
printf("\n=== MENYU ===\n");
printf("1. Salom de\n");
printf("2. Son yig'indisi\n");
printf("0. Chiqish\n");
printf("Tanlov: ");
scanf("%d", &tanlov);
switch (tanlov) {
case 1:
printf("Salom, Dunyo!\n");
break;
case 2:
printf("1+2+...+10 = 55\n");
break;
case 0:
printf("Xayr!\n");
break;
default:
printf("Noto'g'ri tanlov!\n");
}
} while (tanlov != 0);
return 0;
}
Ishlash:
=== MENYU ===
1. Salom de
2. Son yig'indisi
0. Chiqish
Tanlov: 1
Salom, Dunyo!
=== MENYU ===
...
Tanlov: 0
Xayr!
💡 Qoida: Menyu, parol tekshiruvi, kiritish validatsiyasi —
do-whileuchun ideal.
4. break va continue
break — sikldan chiqish
for (int i = 1; i <= 10; i++) {
if (i == 5) break; // 5 ga yetganda chiq
printf("%d ", i);
}
// Natija: 1 2 3 4
continue — bu iteratsiyani o'tkazib yuborish
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) continue; // juftlarni o'tkazib yubor
printf("%d ", i);
}
// Natija: 1 3 5 7 9
Farqi vizual
break: continue:
i=1 → chiqar i=1 → chiqar
i=2 → chiqar i=2 → o'tkazib yubor (juft)
i=3 → chiqar i=3 → chiqar
i=4 → chiqar i=4 → o'tkazib yubor (juft)
i=5 → STOP! i=5 → chiqar
(6,7,8... bajarilmaydi) i=6 → o'tkazib yubor (juft)
...
5. Ichma-ich sikllar — Nested loops
Sikl ichida sikl bo'lishi mumkin.
#include <stdio.h>
int main() {
// Ko'paytirish jadvali
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
printf("%4d", i * j);
}
printf("\n");
}
return 0;
}
Natija:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
Yulduzchalar chizish
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
printf("* ");
}
printf("\n");
}
Natija:
*
* *
* * *
* * * *
* * * * *
6. Cheksiz sikl
Ba'zan qasddан cheksiz sikl kerak:
while (1) {
// istalgancha davom et
// faqat break bilan chiqish
}
for (;;) {
// bu ham cheksiz
}
⚠️ Diqqat: Cheksiz sikldan chiqish uchun
breakyokireturnbo'lishi shart. Aks holda dastur "muzlab" qoladi.
Qaysi siklni tanlash?
Necha marta — oldindan ma'lum?
→ for
Shart bajarilguncha, necha marta noma'lum?
→ while
Kamida bir marta bajarilishi kerak?
→ do-while
Menyu, parol, kiritish validatsiyasi?
→ do-while
Vazifalar
✏️ Vazifa 1 — N gacha yig'indi
Foydalanuvchidan
Nson oling. 1 dan N gacha barcha sonlar yig'indisini chiqaring.
Input Output 5 15 10 55 100 5050 Hint:
yigindi += i
✏️ Vazifa 2 — Ko'paytma
Foydalanuvchidan
Nson oling. 1 dan N gacha barcha sonlar ko'paytmasini chiqaring. (Faktorial:N!)
Input Output 5 120 6 720 10 3628800 Hint:
long longtur ishlating — katta sonlar uchun.
✏️ Vazifa 3 — Juft sonlar
Foydalanuvchidan
Nson oling. 1 dan N gacha barcha juft sonlarni chiqaring.
Input Output 10 2 4 6 8 10 7 2 4 6 Hint:
i % 2 == 0yokii += 2
✏️ Vazifa 4 — Raqamlar yig'indisi
Foydalanuvchidan butun son oling. Uning raqamlari yig'indisini toping.
Input Output 1234 10 9999 36 305 8
✏️ Vazifa 5 — Eng katta bo'luvchi (EKUB)
Foydalanuvchidan ikkita son oling. Evklid algoritmida EKUB (GCD) ni toping.
Input Output 48 18 6 100 75 25 7 13 1
✏️ Vazifa 6 — Tub son tekshiruvi
Foydalanuvchidan son oling. Tub son ekanligini aniqlang. (Tub son — faqat 1 va o'ziga bo'linadigan son)
Input Output 7 Tub son 12 Tub emas 2 Tub son 1 Tub emas
✏️ Vazifa 7 — Sonni teskari chiqarish
Foydalanuvchidan butun son oling. Raqamlarini teskari tartibda chiqaring.
Input Output 1234 4321 1000 0001 789 987 Hint:
son % 10— oxirgi raqam,son /= 10— kesib tashla.
✏️ Vazifa 8 — Fibonacci
Foydalanuvchidan
Noling. Fibonacci ketma-ketligining N ta hadini chiqaring.0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... Har had = oldingi ikki hadning yig'indisi
Input Output 7 0 1 1 2 3 5 8 10 0 1 1 2 3 5 8 13 21 34
✏️ Vazifa 9 — Paxta terish
Dam olish kuni talabalar paxta terimiga hasharga chiqishdi.
Nnafar qiz vaMnafar yigit musobaqa o'ynashdi.Har bir qiz o'rtacha
k1kg, har bir yigitk2kg paxta terdi.Hisoblang:
- Umumiy paxta og'irligi
S— tonnada- Har bir talaba tergan o'rtacha
Q— kilogrammda
Input Output N=20 M=15 k1=12 k2=10 S=0.39 tonna, Q=11.14 kg N=10 M=10 k1=8 k2=8 S=0.16 tonna, Q=8.00 kg Hint:
double jami_kg = (double)(N*k1 + M*k2); double S = jami_kg / 1000.0; double Q = jami_kg / (N + M);
✏️ Vazifa 10 — Mukofot
Yuqoridagi paxta masalasiga ko'ra, tadbirkor talabalarni mukofotlashga qaror qildi:
- Qizlar ko'p tersa → har bir qizga 3 ta shokolad, aks holda 1 ta shokolad
- Yigitlar g'alaba qozonsa → har bir yigitga 2 ta muzqaymoq, aks holda 1 ta muzqaymoq
Jami necha dona shokolad va muzqaymoq sotib olindi?
Input Output N=20 M=15 k1=12 k2=10 60 ta shokolad, 15 ta muzqaymoq N=10 M=10 k1=8 k2=10 10 ta shokolad, 20 ta muzqaymoq
✏️ Vazifa 11 — Uchburchak tekshiruvi
Foydalanuvchidan uch tomonni oling (
a,b,c). Uchburchak hosil qila oladimi?Qoida: har bir tomon qolgan ikki tomonning yig'indisidan kichik bo'lishi kerak. a < b+c va b < a+c va c < a+b
Input Output 3 4 5 Uchburchak bo'ladi 1 2 10 Uchburchak bo'lmaydi
✏️ Vazifa 12 — Yil fasli
Foydalanuvchidan oy raqamini oling (1-12). Qaysi fasl ekanligini chiqaring.
12, 1, 2 → Qish 3, 4, 5 → Bahor 6, 7, 8 → Yoz 9, 10, 11 → Kuz
Input Output 3 Bahor 7 Yoz 11 Kuz 1 Qish
✏️ Vazifa 13 — Sonni tasniflash
Foydalanuvchidan son oling. Bir vaqtda bir nechta xususiyatini chiqaring:
Kiriting: 12 Musbat: ha Juft: ha 3 ga bo'linadi: ha 4 ga bo'linadi: ha
Input Musbat Juft 3 ga 4 ga 12 ha ha ha ha -9 yo'q yo'q ha yo'q 7 ha yo'q yo'q yo'q
✏️ Vazifa 14 — Parol tekshiruvi
Foydalanuvchidan parol uzunligini (
int) oling.8 dan qisqa → "Juda qisqa" 8 dan 12 gacha → "Qabul qilindi" 12 dan uzun → "Juda uzun"
Input Output 5 Juda qisqa 10 Qabul qilindi 20 Juda uzun
✏️ Vazifa 15 — Uch son tartibda
Foydalanuvchidan 3 ta son oling. Ular o'sish tartibida (
a < b < c) joylashganmi?
Input Output 1 5 9 Tartibda 3 1 7 Tartibda emas 5 5 9 Tartibda emas Hint:
a < b && b < c
⭐ Qo'shimcha vazifalar
✏️ Vazifa 16 — Armstrong soni
[qiyin]N xonali son Armstrong soni hisoblanadi, agar har bir raqamining N-darajasining yig'indisi sonning o'ziga teng bo'lsa.
153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153 ✓ 370 = 3³ + 7³ + 0³ = 27 + 343 + 0 = 370 ✓Foydalanuvchidan son oling. Armstrong sonmi?
Input Output 153 Armstrong soni 370 Armstrong soni 123 Armstrong soni emas Hint:
pow()o'rniga oddiy ko'paytirish ishlating.
✏️ Vazifa 17 — Sonlar orasidagi tub sonlar
[qiyin]Foydalanuvchidan
avaboling.adanbgacha barcha tub sonlarni chiqaring.
Input Output 1 20 2 3 5 7 11 13 17 19 10 30 11 13 17 19 23 29 Hint: Har bir son uchun tub tekshiruvi — ichma-ich sikl.
✏️ Vazifa 18 — Raqamlar o'yini
[qiyin]Kompyuter 1-100 orasida maxfiy son tanlaydi (
int maxfiy = 73).Foydalanuvchi topgunicha urinadi:
- Katta bo'lsa →
"Kattaroq son kiring"- Kichik bo'lsa →
"Kichikroq son kiring"- To'g'ri →
"Barakalla! N ta urinishda topdingiz"
Urinishlar Output 50, 75, 60, 73 Barakalla! 4 ta urinishda topdingiz Hint:
do-while+ urinishlar hisoblagichi.
✏️ Vazifa 19 — Ko'paytirish jadvali
[qiyin]Foydalanuvchidan
Noling. N x N ko'paytirish jadvalini chiqaring.
Input Output 3 1 2 3/2 4 6/3 6 95 5x5 jadval Hint: Ichma-ich
for,%4dformat ishlating.
✏️ Vazifa 20 — Raqamli piramida
[yulduzcha]Foydalanuvchidan
Noling. Raqamli piramida chiqaring:N = 5: 1 121 12321 1234321 123454321Hint: Uch qism — bo'sh joy, o'sish, kamayish. Ichma-ich 3 ta sikl kerak.
Xulosa
| Sikl | Qachon | Kalit farq |
|---|---|---|
for |
Necha marta — ma'lum | Boshlanish, shart, qadam |
while |
Shart bo'yicha | Avval shart |
do-while |
Kamida 1 marta | Avval tana |
break |
Sikldan chiqish | Butunlay to'xtaydi |
continue |
Iteratsiyani o'tkazish | Keyingisiga o'tadi |
Keyingi dars
Sikllar bilan ko'p masalalarni yechdik. 1-bo'lim yakunida barcha bilimlarni mustahkamlovchi amaliy mashqlar.
10-dars: 1-bo'lim mashqlari va masalalar