5-dars: Sikllar — for
Dars haqida
Davomiyligi: 90 daqiqa Maqsad: Talaba for siklini tushunishi, har xil holatlarda ishlatishi va nested for'lar bilan ishlashi kerak.
1. Sikl nima?
Sikl (loop) — kodning takror-takror bajarilishi.
Scratch'da:
repeat 10
move 10 stepsC'da:
for (int i = 0; i < 10; i++) {
printf("Iteration %d\n", i);
}Bir xil g'oya, boshqa sintaksis.
2. Nima uchun sikl?
Sikl'siz:
printf("1\n");
printf("2\n");
printf("3\n");
printf("4\n");
printf("5\n");
// ...100 marta...Sikl bilan:
for (int i = 1; i <= 100; i++) {
printf("%d\n", i);
}Kod 5 qator, lekin 100 marta ishlaydi.
3. for sikli tuzilmasi
for (initialization; condition; update) {
// body — har iteratsiyada ishlaydi
}3 ta qism:
Misol — 0 dan 9 gacha:
for (int i = 0; i < 10; i++) {
printf("%d ", i);
}Natija: 0 1 2 3 4 5 6 7 8 9
Qadamma-qadam
1. i = 0
2. i < 10? → ROST
3. Body: printf("0 ")
4. i++ → i = 1
1. i = 1
2. i < 10? → ROST
3. Body: printf("1 ")
4. i++ → i = 2
... va h.k. ...
i = 9
2. i < 10? → ROST
3. Body: printf("9 ")
4. i++ → i = 10
i = 10
2. i < 10? → YOLG'ON
3. Sikldan chiqadi4. Asosiy for misollar
1 dan 10 gacha
for (int i = 1; i <= 10; i++) {
printf("%d ", i);
}
// 1 2 3 4 5 6 7 8 9 10Teskari: 10 dan 1 gacha
for (int i = 10; i >= 1; i--) {
printf("%d ", i);
}
// 10 9 8 7 6 5 4 3 2 12 ga qadam
for (int i = 0; i <= 20; i += 2) {
printf("%d ", i);
}
// 0 2 4 6 8 10 12 14 16 18 20Toq raqamlar
for (int i = 1; i <= 20; i += 2) {
printf("%d ", i);
}
// 1 3 5 7 9 11 13 15 17 195. Yig'indi hisoblash
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
printf("1+2+...+100 = %d\n", sum);
// 1+2+...+100 = 50506. O'rtacha hisoblash
int total = 0;
int count = 10;
for (int i = 1; i <= count; i++) {
int ball = i * 10; // misol — 10, 20, 30, ...
total += ball;
}
double average = (double)total / count;
printf("O'rtacha: %.2f\n", average);7. Faktorial
int n = 5;
int factorial = 1;
for (int i = 1; i <= n; i++) {
factorial *= i;
}
printf("%d! = %d\n", n, factorial);
// 5! = 1208. Continue va Break
break — sikldan chiqish
for (int i = 0; i < 100; i++) {
if (i == 5) {
break; // sikl tugaydi
}
printf("%d ", i);
}
// 0 1 2 3 4continue — keyingi iteratsiyaga
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // keyingi iteratsiyaga
}
printf("%d ", i);
}
// 1 3 5 7 9 (faqat toq)9. Nested for — sikl ichida sikl
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
printf("(%d, %d) ", i, j);
}
printf("\n");
}Natija:
(1, 1) (1, 2) (1, 3)
(2, 1) (2, 2) (2, 3)
(3, 1) (3, 2) (3, 3)Ko'paytirish jadvali
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
printf("%d * %d = %d\n", i, j, i * j);
}
printf("---\n");
}10. Pattern (naqsh) chizish
Yulduzlar piramida
int n = 5;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}Natija:
*
**
***
****
*****Teskari piramida
for (int i = n; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}Natija:
*****
****
***
**
*O'rtali piramida
int n = 5;
for (int i = 1; i <= n; i++) {
// Bo'shliqlar
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
// Yulduzlar
for (int j = 1; j <= 2 * i - 1; j++) {
printf("*");
}
printf("\n");
}Natija:
*
***
*****
*******
*********11. for cheklov va o'zgaruvchilar
Bir nechta o'zgaruvchi
for (int i = 0, j = 10; i < j; i++, j--) {
printf("i = %d, j = %d\n", i, j);
}Natija:
i = 0, j = 10
i = 1, j = 9
i = 2, j = 8
i = 3, j = 7
i = 4, j = 6Bo'sh qismlar
int i = 0;
for (; i < 10; ) {
printf("%d ", i);
i++;
}Faqat condition — boshqalari bo'sh.
Cheksiz sikl
for (;;) {
// Cheksiz! Faqat break bilan chiqadi
}Yoki:
for (int i = 0; ; i++) {
if (i >= 100) break;
printf("%d ", i);
}12. Eng katta umumiy bo'luvchi (GCD)
int a = 48, b = 18;
int gcd = 1;
for (int i = 1; i <= a && i <= b; i++) {
if (a % i == 0 && b % i == 0) {
gcd = i;
}
}
printf("GCD(%d, %d) = %d\n", a, b, gcd);
// GCD(48, 18) = 613. Tub son tekshirish
Tub son (prime) — faqat 1 va o'ziga bo'linadigan raqam.
int n = 17;
int prime = 1;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
prime = 0;
break;
}
}
if (n < 2) {
prime = 0;
}
if (prime) {
printf("%d — tub son\n", n);
} else {
printf("%d — tub son emas\n", n);
}14. Fibonacci ketma-ketligi
int n = 10;
int a = 0, b = 1;
printf("%d %d ", a, b);
for (int i = 2; i < n; i++) {
int c = a + b;
printf("%d ", c);
a = b;
b = c;
}
// 0 1 1 2 3 5 8 13 21 3415. Common pitfalls
Off-by-one error
// XATO — 11 marta ishlaydi
for (int i = 0; i <= 10; i++) { ... } // 0,1,2,...,10 (11 marta)
// To'g'ri — 10 marta
for (int i = 0; i < 10; i++) { ... }
for (int i = 1; i <= 10; i++) { ... }Cheksiz sikl
// XATO — i hech qachon o'zgarmaydi
for (int i = 0; i < 10; ) {
printf("%d ", i);
}
// Cheksiz aylanadi!O'zgaruvchini ichkarida e'lon qilish
for (int i = 0; i < 10; i++) {
int x = i * 2;
printf("%d\n", x);
}
// printf("%d\n", x); // XATO! x faqat for ichida ko'rinadi
// printf("%d\n", i); // XATO! i hamIncrement to'g'ri
// XATO — i o'zgarmaydi (bu - operator emas)
for (int i = 0; i < 10; i+) { ... }
// To'g'ri
for (int i = 0; i < 10; i++) { ... }
for (int i = 0; i < 10; i += 1) { ... }Darsdagi topshiriqlar
Topshiriq 1 — Asosiy for
asosiy.c — quyidagilarni chiqaring:
#include <stdio.h>
int main(void) {
// 1 dan 20 gacha
for (int i = 1; i <= 20; i++) {
printf("%d ", i);
}
printf("\n");
// 20 dan 1 gacha
for (int i = 20; i >= 1; i--) {
printf("%d ", i);
}
printf("\n");
// Faqat juft (2 dan 50 gacha)
for (int i = 2; i <= 50; i += 2) {
printf("%d ", i);
}
printf("\n");
// Faqat toq (1 dan 50 gacha)
for (int i = 1; i <= 50; i += 2) {
printf("%d ", i);
}
printf("\n");
return 0;
}Topshiriq 2 — Yig'indi va o'rtacha
sum.c:
#include <stdio.h>
int main(void) {
int sum = 0;
// 1+2+...+100
for (int i = 1; i <= 100; i++) {
sum += i;
}
printf("1 dan 100 gacha yig'indi: %d\n", sum);
// 1+3+5+...+99 (toq)
int sum_odd = 0;
for (int i = 1; i <= 99; i += 2) {
sum_odd += i;
}
printf("Toq yig'indi: %d\n", sum_odd);
// 2*4*6*...*10
int product = 1;
for (int i = 2; i <= 10; i += 2) {
product *= i;
}
printf("Juft ko'paytma: %d\n", product);
return 0;
}Topshiriq 3 — Faktorial
factorial.c — 1 dan 10 gacha barcha faktoriallarni chiqaring:
#include <stdio.h>
int main(void) {
for (int n = 1; n <= 10; n++) {
long fact = 1;
for (int i = 1; i <= n; i++) {
fact *= i;
}
printf("%d! = %ld\n", n, fact);
}
return 0;
}Natija:
1! = 1
2! = 2
3! = 6
...
10! = 3628800Topshiriq 4 — Ko'paytirish jadvali
mult-table.c — 9 ta ko'paytirish jadvali:
#include <stdio.h>
int main(void) {
for (int i = 2; i <= 9; i++) {
printf("\n=== %d ===\n", i);
for (int j = 1; j <= 10; j++) {
printf("%d * %d = %d\n", i, j, i * j);
}
}
return 0;
}Topshiriq 5 — Yulduzlar
stars.c — 4 ta naqsh:
#include <stdio.h>
int main(void) {
int n = 5;
// 1. Oddiy piramida
printf("1) Oddiy piramida:\n");
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}
// 2. Teskari piramida
printf("\n2) Teskari piramida:\n");
for (int i = n; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}
// 3. O'rtali piramida
printf("\n3) O'rtali piramida:\n");
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) printf(" ");
for (int j = 1; j <= 2 * i - 1; j++) printf("*");
printf("\n");
}
// 4. To'rtburchak
printf("\n4) To'rtburchak:\n");
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= 10; j++) {
printf("*");
}
printf("\n");
}
return 0;
}Topshiriq 6 — Tub sonlar
primes.c — 1 dan 100 gacha barcha tub sonlarni chiqaring:
#include <stdio.h>
int main(void) {
printf("1 dan 100 gacha tub sonlar:\n");
for (int n = 2; n <= 100; n++) {
int prime = 1;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
prime = 0;
break;
}
}
if (prime) {
printf("%d ", n);
}
}
printf("\n");
return 0;
}Topshiriq 7 — Fibonacci
fibonacci.c — birinchi 20 ta Fibonacci raqami:
#include <stdio.h>
int main(void) {
int n = 20;
long a = 0, b = 1;
printf("%ld %ld ", a, b);
for (int i = 2; i < n; i++) {
long c = a + b;
printf("%ld ", c);
a = b;
b = c;
}
printf("\n");
return 0;
}Topshiriq 8 — break va continue
break-continue.c:
#include <stdio.h>
int main(void) {
// 1. break: 5'gacha
printf("Break misol:\n");
for (int i = 1; i <= 10; i++) {
if (i == 5) break;
printf("%d ", i);
}
printf("\n");
// 2. continue: 5'ni o'tkazib yuborish
printf("\nContinue misol:\n");
for (int i = 1; i <= 10; i++) {
if (i == 5) continue;
printf("%d ", i);
}
printf("\n");
// 3. Faqat tub
printf("\nTub sonlar (break bilan):\n");
for (int n = 2; n <= 20; n++) {
int prime = 1;
for (int i = 2; i < n; i++) {
if (n % i == 0) {
prime = 0;
break;
}
}
if (prime) printf("%d ", n);
}
printf("\n");
return 0;
}Topshiriq 9 — GCD va LCM
gcd-lcm.c:
#include <stdio.h>
int main(void) {
int a = 48, b = 18;
// GCD (eng katta umumiy bo'luvchi)
int gcd = 1;
for (int i = 1; i <= a && i <= b; i++) {
if (a % i == 0 && b % i == 0) {
gcd = i;
}
}
printf("GCD(%d, %d) = %d\n", a, b, gcd);
// LCM (eng kichik umumiy ko'paytuvchi)
int lcm = (a * b) / gcd;
printf("LCM(%d, %d) = %d\n", a, b, lcm);
return 0;
}Topshiriq 10 — GitHub'ga
$ cd ~/c-darslari
$ mkdir 4-oy-dars-5
$ # fayllarni shu joyga
$ git add .
$ git commit -m "feat: dars 5 - for loops"
$ git pushAsosiy tushunchalar (lug'at)
| Termin | Qisqacha izoh |
|---|---|
| Loop | Sikl, takrorlash |
| for | Asosiy sikl turi |
| Iteration | Sikl bir bor ishlashi |
| Init | Boshlash (int i = 0) |
| Condition | Shart (i < 10) |
| Update | Yangilanish (i++) |
| break | Sikldan chiqish |
| continue | Keyingi iteratsiyaga o'tish |
| Nested loop | Sikl ichida sikl |
| Off-by-one | 1 ta xato (yana yoki kam) |
| Infinite loop | Cheksiz sikl |
| Factorial | n! = n*(n-1)*...*1 |
| Fibonacci | 0, 1, 1, 2, 3, 5, 8, ... |
| Prime | Tub son |
| GCD | Greatest Common Divisor |
| LCM | Lowest Common Multiple |