Məzmuna keç
Educora
Orta8–9-cu sinif25 dəq31 / 59

Dövr operatorları: for, while, dövr addımı, break, continue və iç-içə dövrlər

`for` və `range(a, b, d)`, iterasiyaların sayı, sayğac və toplayıcı, ilkin şərtli `while`, izləmə cədvəli, Fibonaççi kimi rekurrent ardıcıllıqlar, `break`, `continue` və iç-içə dövrlər — DİM tipli həll olunmuş tapşırıqlarla.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • range(a, b, d) ilə for dövrü qurmaq və iterasiyaların sayını dövrü açmadan tapmaq.
  • Sayğac, toplayıcı və hasil dəyişənləri ilə dövrün içində şərtləri yoxlamaq.
  • while dövrünü və rekurrent ardıcıllıqları izləmə cədvəli ilə izləmək.
  • break, continue və iç-içə dövrlərin nəticəsini müəyyən etmək.

Tutaq ki, 1-dən 1000-ə qədər 7-yə bölünən ədədləri saymaq lazımdır. Min dəfə if yazmaq? Əsla! Dövr operatoru eyni əmrlər qrupunu lazım olan qədər təkrarlayır. DİM-in 2025–2026-cı illərdəki dörd variantında ən çox rast gəlinən mövzu məhz «Dövr operatoru. Ədədlər üzərində əməllər» olub: 120 informatika tapşırığından 14-ü. Bu dərsdə dövr qurmağı və, ən əsası, onu izləmə cədvəli ilə səhvsiz izləməyi öyrənəcəksən.

for dövrü və range(): dövr addımı

Tərif
Dövr operatoru, dövrün gövdəsi, iterasiya

Dövr operatoru əmrlər qrupunu təkrar-təkrar icra edir. Təkrarlanan əmrlər dövrün gövdəsidir (onlar girinti ilə yazılır), gövdənin bir dəfə icrası isə iterasiya adlanır. for dövründə dövr dəyişəni hər iterasiyada ardıcıllığın növbəti qiymətini alır: for i in range(1, 6): dövründə i ardıcıl olaraq 1, 2, 3, 4, 5 olur.

range funksiyası tam ədədlər ardıcıllığı yaradır və üç formada yazılır: range(b) — 0, 1, …, b − 1; range(a, b) — a, a + 1, …, b − 1; range(a, b, d) — a, a + d, a + 2d, … Üçüncü ədəd d dövr dəyişəninin dəyişmə addımıdır. d > 0 olduqda ədədlər b-yə çatana qədər artır, d < 0 olduqda b-yə çatana qədər azalır. Son qiymət b heç vaxt daxil deyil — «b-yə qədər, b olmadan».

ÇağırışQiymətlərİterasiya
range(5)0, 1, 2, 3, 45
range(3, 8)3, 4, 5, 6, 75
range(1, 20, 4)1, 5, 9, 13, 175
range(10, 0, -3)10, 7, 4, 14
range(20, 121)20, 21, …, 120101
range(8, 3)boş ardıcıllıq0
N = ⌈(b − a) / d⌉N = ⌈(b − a) / d⌉
burada:
  • Niterasiyaların sayı; ifadə 0-dan kiçik və ya ona bərabərdirsə, dövr heç icra olunmur
  • abaşlanğıc qiymət
  • bson qiymət (daxil deyil)
  • daddım (mənfi də ola bilər)
  • ⌈x⌉x-i yuxarıya, ən yaxın tam ədədə yuvarlaqlaşdırmaq

range(a, b, d)-də iterasiyaların sayı. Dövr dəyişəninin son qiyməti a + (N − 1) · d-dir. Addım 1 olanda sadəcə N = b − a; [a; b] parçasındakı bütün tam ədədlər üçün range(a, b + 1) yazılır və N = b − a + 1.

Nümunə 1. Dövr neçə dəfə icra olunur?

Dövrün gövdəsi neçə dəfə icra olunur və dövr dəyişəninin son qiyməti nədir? 1) range(3, 20, 4); 2) range(15, 2, -4); 3) range(20, 121); 4) range(1, 10, -1).

Həllini göstər
1) (20 − 3) / 4 = 4,25 → N = 5; son qiymət 3 + 4 · 4 = 19 (3, 7, 11, 15, 19).
2) (2 − 15) / (−4) = 3,25 → N = 4; son qiymət 15 + 3 · (−4) = 3 (15, 11, 7, 3).
3) Addım 1: N = 121 − 20 = 101; son qiymət 120.
4) (10 − 1) / (−1) = −9 < 0 → N = 0: addım mənfidir, amma başlanğıc sondan kiçikdir, dövr heç bir dəfə icra olunmur.
Python
for i in range(10, 0, -3):
    print(i)
print(len(range(3, 20, 4)), len(range(20, 121)))
▸ Gözlənilən nəticə
10
7
4
1
5 101
Mənfi addımla dövr azalan qiymətlər verir. len(range(…)) iterasiyaların sayını yoxlamağa kömək edir.

for yalnız range üzərində deyil, istənilən ardıcıllıq üzərində işləyir: for ch in 'Baku': sətrin simvollarını, for x in [4, 9, 2]: isə siyahının elementlərini bir-bir götürür. Bu imkan «Sətirlər və onlar üzərində əməllər» və «Siyahılar və onlar üzərində əməllər» dərslərində geniş işlədiləcək; bu dərsdə isə ədədlərlə — range ilə işləyirik.

Sayğac və toplayıcı: dövrün içində şərt

Dövr çox vaxt nəyi isə sayır və ya toplayır. Bunun üçün dövrdən əvvəl dəyişənə başlanğıc qiymət verilir, dövrün içində isə o, hər uyğun iterasiyada yenilənir. Şərt operatoru dövrün içində «filtr» rolunu oynayır: yalnız şərti ödəyən qiymətlər sayılır və ya toplanır.

  • sayğac: k = 0, dövrdə k = k + 1 — şərt neçə dəfə ödəndi;
  • toplayıcı (cəm): s = 0, dövrdə s = s + x — qiymətlərin cəmi;
  • hasil: p = 1 (0 yox — əks halda nəticə həmişə 0 olar), dövrdə p = p * x.
Python
s = 0
p = 1
k = 0
for i in range(1, 11):
    if i % 2 == 1:
        s = s + i
    else:
        p = p * i
    if i % 3 == 0:
        k = k + 1
print(s, p, k)
▸ Gözlənilən nəticə
25 3840 3
1-dən 10-a qədər: tək ədədlərin cəmi s = 1 + 3 + 5 + 7 + 9, cüt ədədlərin hasili p = 2 · 4 · 6 · 8 · 10 və 3-ə bölünənlərin sayı k (3, 6, 9).

Eyni qəliblə ən böyük (və ya ən kiçik) qiymət də tapılır: dövrdən əvvəl mx dəyişəninə ilk qiymət (və ya mümkün olandan kiçik ədəd) yazılır, dövrdə isə if x > mx: mx = x yoxlanır. Beləliklə, dövr bitəndə mx indiyə qədər görülən qiymətlərin ən böyüyünü saxlayır. Bütün bu qəliblərdə dövr hər qiymətə bir dəfə baxır və nəticəni addım-addım «yığır».

K = b // m − (a − 1) // m
burada:
  • K[a; b] parçasında m-ə bölünən natural ədədlərin sayı
  • a, bparçanın ucları (natural ədədlər)
  • mbölən

Dövrsüz sayma: [1; b]-də m-ə bölünənlər b // m qədərdir, [1; a − 1]-dəkiləri çıxırıq. Böyük aralıqlı dövrləri izləmək əvəzinə məhz belə sayırıq.

Nümunə 2. Dövr yazmadan saymaq

Tapın: 1) [20; 120] parçasında 7-yə bölünən ədədlərin sayını; 2) [25; 95] parçasında tək ədədlərin sayını; 3) [1; 100] parçasında 3-ə və ya 5-ə bölünən ədədlərin sayını.

Həllini göstər
1) 120 // 7 − 19 // 7 = 17 − 2 = 15 (21, 28, …, 119).
2) Tək ədədlər 2 addımla gedir: (95 − 25) : 2 + 1 = 36.
3) 3-ə bölünənlər 33, 5-ə bölünənlər 20; həm 3-ə, həm 5-ə (yəni 15-ə) bölünən 6 ədəd iki dəfə sayılıb: 33 + 20 − 6 = 47.
Python
k = 0
for n in range(30, 131):
    if n % 2 == 0 and n < 100:
        if n % 7 == 0 or n % 9 == 0:
            k = k + 1
    else:
        k = k + 2
print(k)
▸ Gözlənilən nəticə
141
Nümunə 3-ün proqramı.
Nümunə 3. DİM tipli qapalı tapşırıq: dövrün içində iç-içə şərt

Yuxarıdakı proqramın nəticəsini müəyyən edin.
A) 141 B) 75 C) 132 D) 150 E) 139

Həllini göstər
n [30; 130] parçasında 131 − 30 = 101 qiymət alır. 101 iterasiyanı izləmək əvəzinə ədədləri iki qrupa bölürük.
1) Xarici şərt doğrudur (n cüt və n < 100): 30, 32, …, 98 — (98 − 30) : 2 + 1 = 35 ədəd. Bunlardan yalnız 7-yə və ya 9-a bölünənlər k-nı 1 artırır. Cüt olub 7-yə bölünən = 14-ə bölünən: 42, 56, 70, 84, 98 (5 ədəd); cüt olub 9-a bölünən = 18-ə bölünən: 36, 54, 72, 90 (4 ədəd); ikisinə birdən bölünən yoxdur. Cəmi +9.
2) Xarici şərt yalandır: 101 − 35 = 66 ədəd, hər biri +2 verir: +132.
k = 9 + 132 = 141, cavab A. Tələ: else-in xarici if-ə aid olduğunu görməyən onu daxili şərtə bağlayır və başqa cavab alır.

while dövrü və izləmə cədvəli

while şərt: dövrü gövdəni şərt doğru olduqca təkrarlayır. Şərt hər iterasiyadan əvvəl yoxlanır, ona görə bu, ilkin şərtli dövrdür: şərt əvvəldən yalandırsa, gövdə bir dəfə də icra olunmur. Gövdədə şərtə daxil olan dəyişən mütləq dəyişməlidir, yoxsa dövr sonsuz olar. Dövr bitəndə şərt yalandır: dəyişən şərti pozan ilk qiyməti saxlayır. while təkrarların sayı əvvəlcədən bilinməyəndə seçilir: «cəm 1000-i keçənə qədər», «ədədin rəqəmləri bitənə qədər».

İstənilən for dövrünü while ilə yazmaq olar: for i in range(a, b, d): (d > 0) dövrü i = a, while i < b:, gövdə və gövdənin sonunda i = i + d ilə eynidir. Bu çevirmə blok-sxemlərdəki dövrləri başa düşməyə kömək edir: orada da dövr dəyişəninə başlanğıc qiymət verilir, şərt yoxlanır, gövdədən sonra dəyişən addım qədər dəyişir (bax: «Dövri alqoritmlər və izləmə cədvəli»).

Python
n = 0
k = 1
while k <= 15:
    n = n + k
    if k % 4 == 0:
        k = k + 1
    else:
        k = k + 3
print(n + k)
▸ Gözlənilən nəticə
68
Nümunə 4-ün proqramı.

İzləmə cədvəli hər iterasiyada dəyişənlərin qiymətlərini sətir-sətir yazır: şərtin yoxlandığı andakı qiymət, şərtin nəticəsi və gövdədən sonrakı qiymətlər. Yuxarıdakı proqram üçün:

kk <= 15nk % 4 == 0yeni k
1✓1✗4
4✓5✓5
5✓10✗8
8✓18✓9
9✓27✗12
12✓39✓13
13✓52✗16
16✗52—dövr bitir
Hər sətir bir iterasiyadır. Son sətirdə şərt yalandır və gövdə icra olunmur.
Nümunə 4. while dövrünün nəticəsi

Nümunə 4-ün proqramı nə çap edir?
A) 52 B) 64 C) 68 D) 71 E) 55

Həllini göstər
Cədvələ görə 7 iterasiya olur: k 1, 4, 5, 8, 9, 12, 13 qiymətlərini alır və hər dəfə n-ə əlavə olunur: n = 52.
Son iterasiyada k = 13 + 3 = 16 olur, 16 <= 15 ✗ — dövr bitir.
print(n + k) → 52 + 16 = 68, cavab C. A variantı (52) dövrdən sonra k-nın da cəmə daxil olduğunu unudanlar üçündür.

Dövrdə yeni qiymət əvvəlki qiymətlərdən hesablanırsa, bu, rekurrent ardıcıllıqdır. Ən məşhuru Fibonaççi ardıcıllığıdır: 1, 1, 2, 3, 5, 8, …, burada hər hədd əvvəlki ikisinin cəmidir. Proqramda iki dəyişən son iki həddi saxlayır və hər iterasiyada «bir addım irəli sürüşür»: c = a + b, a = b, b = c. Mənimsətmələrin sırası vacibdir: a = b-ni c-ni hesablamadan əvvəl yazsaq, köhnə a itər.

Python
a = 1
b = 1
for i in range(3, 11):
    c = a + b
    a = b
    b = c
print(b)
▸ Gözlənilən nəticə
55
Nümunə 5-in proqramı: hər iterasiyada a və b son iki həddi saxlayır.
Nümunə 5. Fibonaççi ardıcıllığı

Nümunə 5-in proqramı nə çap edir və bu, Fibonaççi ardıcıllığının (1, 1, 2, 3, 5, …) neçənci həddidir?

Həllini göstər
Başlanğıcda a = 1, b = 1 — 1-ci və 2-ci hədlər. i-nin hər qiymətində b i-ci həddə çevrilir:
i = 3: b = 2; i = 4: 3; i = 5: 5; i = 6: 8; i = 7: 13; i = 8: 21; i = 9: 34; i = 10: 55.
range(3, 11) 8 iterasiya verir, son i = 10. Çap olunur 55 — ardıcıllığın 10-cu həddi.

break və continue

break dövrü dərhal və tamamilə dayandırır: qalan iterasiyalar ləğv olunur və proqram dövrdən sonrakı sətrə keçir. continue isə dövrü dayandırmır — yalnız cari iterasiyanın qalanını keçir və növbəti iterasiyaya keçir (for-da dövr dəyişəni növbəti qiyməti alır, while-da şərt yenidən yoxlanır). İç-içə dövrlərdə hər ikisi yalnız ən daxili dövrə təsir edir. break ilə dayanan for-da dövr dəyişəni dayandığı andakı qiyməti saxlayır.

Python
s = 0
for i in range(1, 50, 3):
    if i % 5 == 0:
        continue
    if s > 40:
        break
    s = s + i
print(i, s)
▸ Gözlənilən nəticə
19 41
Nümunə 6-nın proqramı.
Nümunə 6. break və continue birlikdə

Nümunə 6-nın proqramı nə çap edir?

Həllini göstər
i qiymətləri: 1, 4, 7, 10, 13, 16, 19, …
i = 1: s = 1; i = 4: s = 5; i = 7: s = 12.
i = 10: 10 % 5 == 0 ✓ → continue, s dəyişmir (12).
i = 13: s = 25; i = 16: s = 41.
i = 19: 19 % 5 = 4, sonra 41 > 40 ✓ → break, 19 əlavə olunmur.
Dövr dayandı, i = 19 qalır. Çap: 19 41.
Python
n = 100
while True:
    n = n + 1
    if n % 7 == 0 and n % 13 == 0:
        break
print(n)
▸ Gözlənilən nəticə
182
while True: özü dayanmır — çıxışı break təmin edir. Proqram 100-dən böyük, həm 7-yə, həm 13-ə bölünən ilk ədədi tapır: 91 · 2 = 182.

İç-içə dövrlər

Dövrün gövdəsində başqa dövr də ola bilər — bunlar iç-içə dövrlərdir. Xarici dövrün hər iterasiyasında daxili dövr əvvəldən sona qədər icra olunur və daxili dəyişən hər dəfə yenidən başlayır. Saat kimi düşün: dəqiqə əqrəbi (xarici dövr) bir bölgü irəliləyəndə saniyə əqrəbi (daxili dövr) tam dövrə vurur. Daxili dövrün sərhədi xarici dəyişəndən asılı ola bilər (range(i, 6)) — onda hər xarici iterasiyada daxili dövr fərqli sayda icra olunur.

N = N₁ · N₂
burada:
  • Ndaxili gövdənin ümumi icra sayı
  • N₁xarici dövrün iterasiyaları
  • N₂daxili dövrün bir keçiddəki iterasiyaları

Daxili dövr xarici dəyişəndən asılı deyilsə, hasil düsturu işləyir. Asılıdırsa, hər xarici iterasiya üçün daxili sayı ayrıca tapıb toplayırıq.

Nümunə 7. Daxili gövdə neçə dəfə icra olunur?

1) for i in range(4): və içində for j in range(1, 6):
2) for i in range(1, 5): və içində for j in range(i, 6):
3) for i in range(1, 6): və içində for j in range(i):

Həllini göstər
1) Asılı deyil: 4 · 5 = 20.
2) i = 1: j 1…5 (5 dəfə); i = 2: 4; i = 3: 3; i = 4: 2 → 5 + 4 + 3 + 2 = 14.
3) i = 1: 1 dəfə; i = 2: 2; … i = 5: 5 → 1 + 2 + 3 + 4 + 5 = 15.
Python
for a in range(1, 25):
    for b in range(a, 25):
        if a * b == 24:
            print(a, b)
▸ Gözlənilən nəticə
1 24
2 12
3 8
4 6
Hasili 24 olan bütün (a, b) cütləri, a ≤ b. Daxili dövr a-dan başlayır ki, (8, 3) kimi təkrar cütlər çap olunmasın.
Python
k = 0
for i in range(1, 5):
    for j in range(i, 6):
        if j % 4 == 0:
            break
        k = k + i
print(k)
▸ Gözlənilən nəticə
10
Nümunə 8-in proqramı.
Nümunə 8. DİM tipli qapalı tapşırıq: daxili dövrdə break

Nümunə 8-in proqramının nəticəsini müəyyən edin.
A) 10 B) 20 C) 3 D) 14 E) 30

Həllini göstər
break yalnız daxili dövrü dayandırır; j 4-ə çatanda daxili dövr bitir, xarici dövr isə davam edir.
i = 1: j = 1, 2, 3 → k-ya 3 dəfə 1 əlavə olunur (k = 3); j = 4 → break.
i = 2: j = 2, 3 → 2 dəfə 2 (k = 7); j = 4 → break.
i = 3: j = 3 → k = 10; j = 4 → break.
i = 4: j = 4 → dərhal break.
Cavab: A) 10. break-i nəzərə almayan 30-u (E), onun hər iki dövrü dayandırdığını düşünən isə 3-ü (C) seçir.
Tapşırıq

[20; 120] parçasındakı ədədlərdən 3-ə bölünən, amma 5-ə bölünməyənlərin sayını for dövrü və sayğacla tap və çap et.

Tapşırıq · Python
k = 0
# for n in range(...):

print(k)
▸ Gözlənilən nəticə
27
Tapşırıq

Fibonaççi ardıcıllığının (1, 1, 2, 3, 5, …) 1000-dən böyük olan ilk həddini while dövrü ilə tap və çap et.

Tapşırıq · Python
a = 1
b = 1
# while ...:

print(b)
▸ Gözlənilən nəticə
1597

Əsas fikirlər

  • range(a, b, d) a-dan başlayır, d addımla gedir, b daxil deyil; iterasiyaların sayı ⌈(b − a) / d⌉, müsbət deyilsə — 0.
  • Sayğac (k = 0), toplayıcı (s = 0) və hasil (p = 1) dövrdən əvvəl başlanğıc qiymət alır, dövrün içində şərtə görə yenilənir.
  • while ilkin şərtli dövrdür: şərt hər iterasiyadan əvvəl yoxlanır, dövrdən sonra dəyişən şərti pozan ilk qiyməti saxlayır.
  • break dövrü tamamilə dayandırır, continue yalnız cari iterasiyanı keçir; iç-içə dövrlərdə hər ikisi ən daxili dövrə aiddir.
  • İç-içə dövrlərdə daxili gövdə N₁ · N₂ dəfə (asılı sərhəddə daxili sayların cəmi qədər) icra olunur; böyük dövrləri izləmə cədvəli və qruplarla say.

Özünü yoxla

12 sual. Hər düzgün cavab XP qazandırır.

1 / 12
range(2, 11, 3) hansı qiymətləri verir?