7. Sikllar — for, while va do while¶
Oldingi bo‘limda if yordamida shart tekshirishni o‘rgandik.
Masalan:
if (yosh >= 18) {
printf("Voyaga yetgan.");
}
Endi boshqa bir muammoni ko‘rib chiqamiz.
Agar biror kodni bir necha marta bajarish kerak bo‘lsa-chi?
Masalan:
Salom
Salom
Salom
Salom
Salom
Buni besh marta alohida yozishimiz mumkin:
printf("Salom\n");
printf("Salom\n");
printf("Salom\n");
printf("Salom\n");
printf("Salom\n");
Lekin bu qulay emas.
Buning o‘rniga sikldan foydalanamiz.
Sikl nima?¶
Sikl — biror kodni bir necha marta bajarish uchun ishlatiladi.
Masalan:
Salom
Salom
Salom
kabi bir xil amalni qayta-qayta bajarish mumkin.
C tilida asosan uchta sikl mavjud:
forwhiledo while
Ularning vazifasi o‘xshash, lekin ishlatilish holatlari biroz farq qiladi.
for sikli¶
Eng ko‘p ishlatiladigan sikllardan biri for.
Oddiy ko‘rinishi:
for (boshlanish; shart; o'zgarish) {
// takrorlanadigan kod
}
Birinchi qarashda bu biroz murakkab ko‘rinishi mumkin.
Keling, oddiy misol ko‘ramiz.
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
printf("Salom\n");
}
return 0;
}
Natija:
Salom
Salom
Salom
Salom
Salom
printf() besh marta bajarildi.
for qanday ishlaydi?¶
Quyidagi kodni ko‘ramiz:
for (int i = 1; i <= 5; i++) {
printf("Salom\n");
}
Bu yerda:
int i = 1
boshlang‘ich qiymat.
i <= 5
sikl davom etishi uchun shart.
i++
esa har bir takrorlanishdan keyin i ni 1 ga oshiradi.
Sikl taxminan shunday ishlaydi:
i = 1 → Salom
i = 2 → Salom
i = 3 → Salom
i = 4 → Salom
i = 5 → Salom
i = 6 → to‘xtaydi
i nima?¶
Misollarda ko‘pincha:
i
nomli o‘zgaruvchi ishlatiladi.
i maxsus so‘z emas.
Uni boshqa nom bilan ham yozish mumkin.
Masalan:
for (int son = 1; son <= 5; son++) {
printf("%d\n", son);
}
Bu ham ishlaydi.
Lekin i sikllarda juda ko‘p ishlatilgani uchun uni ko‘p ko‘rasiz.
for yordamida sonlarni chiqarish¶
Keling, 1 dan 5 gacha bo‘lgan sonlarni chiqaramiz:
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
printf("%d\n", i);
}
return 0;
}
Natija:
1
2
3
4
5
Bu yerda i ning qiymati har safar o‘zgaradi.
1 dan 10 gacha¶
Xuddi shu usulda 1 dan 10 gacha chiqarish mumkin:
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
printf("%d\n", i);
}
return 0;
}
Natija:
1
2
3
4
5
6
7
8
9
10
10 dan 1 gacha¶
Siklni kamaytirish yo‘nalishida ham ishlatish mumkin.
#include <stdio.h>
int main() {
for (int i = 10; i >= 1; i--) {
printf("%d\n", i);
}
return 0;
}
Natija:
10
9
8
7
6
5
4
3
2
1
Bu yerda:
i--
har safar i ni 1 ga kamaytiradi.
while sikli¶
Ikkinchi sikl turi:
while
while — "gacha" yoki "shu shart bajarilayotgan paytda" degan ma'noda ishlatiladi.
Oddiy ko‘rinishi:
while (shart) {
// kod
}
Masalan:
#include <stdio.h>
int main() {
int i = 1;
while (i <= 5) {
printf("%d\n", i);
i++;
}
return 0;
}
Natija:
1
2
3
4
5
while qanday ishlaydi?¶
Quyidagi kodni ko‘ramiz:
int i = 1;
while (i <= 5) {
printf("%d\n", i);
i++;
}
Dastur:
i = 1
↓
1 <= 5 → ha
↓
1 ni chiqarish
↓
i = 2
↓
2 <= 5 → ha
↓
2 ni chiqarish
va shu tarzda davom etadi.
i 6 bo‘lganda:
6 <= 5 → yo‘q
va sikl to‘xtaydi.
for va while¶
Ikkalasi bilan ham bir xil ishni bajarish mumkin.
for:
for (int i = 1; i <= 5; i++) {
printf("%d\n", i);
}
while:
int i = 1;
while (i <= 5) {
printf("%d\n", i);
i++;
}
Ikkalasining natijasi:
1
2
3
4
5
bo‘ladi.
Hozircha for va while orasidagi barcha farqlarni bilish shart emas.
do while¶
Uchinchi sikl:
do while
Oddiy ko‘rinishi:
do {
// kod
} while (shart);
Masalan:
#include <stdio.h>
int main() {
int i = 1;
do {
printf("%d\n", i);
i++;
} while (i <= 5);
return 0;
}
Natija:
1
2
3
4
5
while va do while farqi¶
Bu ikki siklning muhim farqi bor.
while avval shartni tekshiradi:
while (shart) {
// kod
}
do while esa avval kodni bajaradi, keyin shartni tekshiradi:
do {
// kod
} while (shart);
Shuning uchun do while ichidagi kod kamida bir marta bajariladi.
Oddiy misol¶
while:
int son = 10;
while (son < 5) {
printf("Salom");
}
Bu yerda:
10 < 5
noto‘g‘ri.
Shuning uchun Salom chiqmaydi.
Ammo do while:
int son = 10;
do {
printf("Salom");
} while (son < 5);
Natija:
Salom
bo‘ladi.
Chunki do while avval kodni bir marta bajaradi.
Siklda hisoblash¶
Sikllar yordamida hisob-kitob qilish ham mumkin.
Masalan, 1 dan 5 gacha bo‘lgan sonlar yig‘indisini topamiz.
#include <stdio.h>
int main() {
int yigindi = 0;
for (int i = 1; i <= 5; i++) {
yigindi = yigindi + i;
}
printf("%d", yigindi);
return 0;
}
Natija:
15
Chunki:
1 + 2 + 3 + 4 + 5 = 15
Juft sonlarni chiqarish¶
Sikl va % operatoridan foydalanib, juft sonlarni chiqarishimiz mumkin.
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
printf("%d\n", i);
}
}
return 0;
}
Natija:
2
4
6
8
10
Bu yerda if va for birgalikda ishlatilmoqda.
break¶
Ba'zan siklni shart tugashidan oldin to‘xtatish kerak bo‘ladi.
Buning uchun:
break;
ishlatiladi.
Masalan:
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
printf("%d\n", i);
}
return 0;
}
Natija:
1
2
3
4
i 5 bo‘lganda break siklni to‘xtatdi.
continue¶
continue joriy takrorlanishni tashlab, keyingi takrorlanishga o'tadi.
Masalan:
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
printf("%d\n", i);
}
return 0;
}
Natija:
1
2
4
5
3 chiqarilmadi.
Chunki continue 3-iteratsiyani tashlab ketdi.
Hozircha continue ni chuqur o‘rganish shart emas.
Siklning cheksiz bo‘lib qolishi¶
Siklning sharti hech qachon noto‘g‘ri bo‘lmasa, sikl to‘xtamaydi.
Masalan:
int i = 1;
while (i <= 5) {
printf("%d\n", i);
}
Bu kodda i hech qachon o‘zgarmaydi.
Shuning uchun:
i <= 5
har doim to‘g‘ri bo‘lib qoladi.
Natijada sikl cheksiz davom etadi.
To‘g‘ri variant:
int i = 1;
while (i <= 5) {
printf("%d\n", i);
i++;
}
Bu yerda i har safar oshib boradi.
Qaysi sikldan foydalanamiz?¶
Hozircha quyidagicha eslab qolishingiz mumkin:
for¶
Takrorlanish soni taxminan ma'lum bo‘lsa:
for (int i = 1; i <= 10; i++) {
printf("%d\n", i);
}
while¶
Shart bajarilayotgan paytda takrorlash kerak bo‘lsa:
while (shart) {
// kod
}
do while¶
Kod kamida bir marta bajarilishi kerak bo‘lsa:
do {
// kod
} while (shart);
Boshlang‘ich dasturlarda for juda ko‘p ishlatiladi.
Amaliy mashqlar¶
1-mashq¶
for yordamida 1 dan 10 gacha bo‘lgan sonlarni chiqaring.
Natija:
1
2
3
4
5
6
7
8
9
10
2-mashq¶
10 dan 1 gacha bo‘lgan sonlarni chiqaring.
Natija:
10
9
8
7
6
5
4
3
2
1
3-mashq¶
1 dan 20 gacha bo‘lgan juft sonlarni chiqaring.
Natija:
2
4
6
8
10
12
14
16
18
20
4-mashq¶
1 dan 10 gacha bo‘lgan sonlar yig‘indisini hisoblang.
Natija:
55
bo‘lishi kerak.
5-mashq¶
Quyidagi kod nima chiqaradi?
for (int i = 1; i <= 5; i++) {
printf("%d\n", i);
}
Javobingizni oldindan topib, keyin tekshiring.
Muhim narsalarni eslab qoling¶
C tilida uchta asosiy sikl bor:
for
while
do while
for:
for (boshlanish; shart; o'zgarish) {
// kod
}
while:
while (shart) {
// kod
}
do while:
do {
// kod
} while (shart);
Shuningdek:
break;
siklni to‘xtatadi.
continue;
joriy takrorlanishni tashlab, keyingisiga o'tadi.
Xulosa¶
Sikl yordamida bir xil kodni qayta-qayta yozmasdan, uni bir necha marta bajarishimiz mumkin.
Masalan:
for (int i = 1; i <= 5; i++) {
printf("Salom\n");
}
Bu kod Salom so‘zini besh marta chiqaradi.