Skip to content

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 steps

C'da:

c
for (int i = 0; i < 10; i++) {
    printf("Iteration %d\n", i);
}

Bir xil g'oya, boshqa sintaksis.

2. Nima uchun sikl?

Sikl'siz:

c
printf("1\n");
printf("2\n");
printf("3\n");
printf("4\n");
printf("5\n");
// ...100 marta...

Sikl bilan:

c
for (int i = 1; i <= 100; i++) {
    printf("%d\n", i);
}

Kod 5 qator, lekin 100 marta ishlaydi.

3. for sikli tuzilmasi

c
for (initialization; condition; update) {
    // body — har iteratsiyada ishlaydi
}

3 ta qism:

Misol — 0 dan 9 gacha:

c
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 chiqadi

4. Asosiy for misollar

1 dan 10 gacha

c
for (int i = 1; i <= 10; i++) {
    printf("%d ", i);
}
// 1 2 3 4 5 6 7 8 9 10

Teskari: 10 dan 1 gacha

c
for (int i = 10; i >= 1; i--) {
    printf("%d ", i);
}
// 10 9 8 7 6 5 4 3 2 1

2 ga qadam

c
for (int i = 0; i <= 20; i += 2) {
    printf("%d ", i);
}
// 0 2 4 6 8 10 12 14 16 18 20

Toq raqamlar

c
for (int i = 1; i <= 20; i += 2) {
    printf("%d ", i);
}
// 1 3 5 7 9 11 13 15 17 19

5. Yig'indi hisoblash

c
int sum = 0;
for (int i = 1; i <= 100; i++) {
    sum += i;
}
printf("1+2+...+100 = %d\n", sum);
// 1+2+...+100 = 5050

6. O'rtacha hisoblash

c
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

c
int n = 5;
int factorial = 1;

for (int i = 1; i <= n; i++) {
    factorial *= i;
}

printf("%d! = %d\n", n, factorial);
// 5! = 120

8. Continue va Break

break — sikldan chiqish

c
for (int i = 0; i < 100; i++) {
    if (i == 5) {
        break;  // sikl tugaydi
    }
    printf("%d ", i);
}
// 0 1 2 3 4

continue — keyingi iteratsiyaga

c
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

c
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

c
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

c
int n = 5;

for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= i; j++) {
        printf("*");
    }
    printf("\n");
}

Natija:

*
**
***
****
*****

Teskari piramida

c
for (int i = n; i >= 1; i--) {
    for (int j = 1; j <= i; j++) {
        printf("*");
    }
    printf("\n");
}

Natija:

*****
****
***
**
*

O'rtali piramida

c
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

c
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 = 6

Bo'sh qismlar

c
int i = 0;
for (; i < 10; ) {
    printf("%d ", i);
    i++;
}

Faqat condition — boshqalari bo'sh.

Cheksiz sikl

c
for (;;) {
    // Cheksiz! Faqat break bilan chiqadi
}

Yoki:

c
for (int i = 0; ; i++) {
    if (i >= 100) break;
    printf("%d ", i);
}

12. Eng katta umumiy bo'luvchi (GCD)

c
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) = 6

13. Tub son tekshirish

Tub son (prime) — faqat 1 va o'ziga bo'linadigan raqam.

c
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

c
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 34

15. Common pitfalls

Off-by-one error

c
// 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

c
// XATO — i hech qachon o'zgarmaydi
for (int i = 0; i < 10; ) {
    printf("%d ", i);
}
// Cheksiz aylanadi!

O'zgaruvchini ichkarida e'lon qilish

c
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 ham

Increment to'g'ri

c
// 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:

c
#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:

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:

c
#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! = 3628800

Topshiriq 4 — Ko'paytirish jadvali

mult-table.c — 9 ta ko'paytirish jadvali:

c
#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:

c
#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:

c
#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:

c
#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:

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:

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

bash
$ cd ~/c-darslari
$ mkdir 4-oy-dars-5
$ # fayllarni shu joyga
$ git add .
$ git commit -m "feat: dars 5 - for loops"
$ git push

Asosiy tushunchalar (lug'at)

TerminQisqacha izoh
LoopSikl, takrorlash
forAsosiy sikl turi
IterationSikl bir bor ishlashi
InitBoshlash (int i = 0)
ConditionShart (i < 10)
UpdateYangilanish (i++)
breakSikldan chiqish
continueKeyingi iteratsiyaga o'tish
Nested loopSikl ichida sikl
Off-by-one1 ta xato (yana yoki kam)
Infinite loopCheksiz sikl
Factorialn! = n*(n-1)*...*1
Fibonacci0, 1, 1, 2, 3, 5, 8, ...
PrimeTub son
GCDGreatest Common Divisor
LCMLowest Common Multiple

Keyingi dars

6-dars: Sikllar — while, do-while →

Master IT o'quv markazi — o'qitish rejasi