- izləmə cədvəli qurub proqramın nəyi çap etdiyini tapmaq
- çap olunan qiymətə görə dövrün neçə dəfə işlədiyini müəyyən etmək
- dövr şərtini iki bərabərsizliyə çevirib ən kiçik və ən böyük girişi və uyğun girişlərin sayını tapmaq
- rəqəmlərə görə geri həll etmək, dövrün hansı ifadəni hesabladığını və funksiyalı şərtləri təhlil etmək
Adi tapşırıqda proqram və giriş verilir, nəticəni sən tapırsan. DİM isə tez-tez əksini soruşur: «Nəticədə 77 çap olunubsa, m-in ən kiçik qiyməti nədir?», «Neçə natural ədəd daxil etmək olar ki, hər dəfə 9 çap olunsun?». 2025–2026-cı illərin dörd variantının hər birində belə «tərs» tapşırıq ən azı bir dəfə olub, üçü isə cavabı özün yazdığın kodlaşdırılan tapşırıq idi. Bu dərsdə əvvəlcə izləmə cədvəlini, sonra nəticədən girişə doğru düşünməyin dörd addımlı üsulunu öyrənəcəksən. Dövrlərin qaydaları «Dövr operatorları: for, while, dövr addımı, break, continue və iç-içə dövrlər» və «Ədədlər üzərində əməllər: rəqəmlər, bölənlər və sadə ədədlər» dərslərindədir.
İzləmə cədvəli: proqram nə çap edir?
Proqramın icrasını addım-addım göstərən cədvəl: hər sütun bir dəyişən (və dövrün şərti), hər sətir isə dövrün bir iterasiyasıdır.
Proqram və onun nəticəsi verilir, giriş qiyməti (ən kiçik, ən böyük və ya uyğun qiymətlərin sayı) axtarılır.
while dövründə şərt gövdədən əvvəl yoxlanılır: şərt yalan olan kimi dövr bitir və proqram dövrdən sonrakı sətrə keçir. Ona görə dövrdən sonra dəyişənlər son iterasiyadakı qiymətlərini saxlayır.
- 1Sütunları qur
dövrdə dəyişən bütün dəyişənlər və şərt üçün «Hə/Yox» sütunu.
- 2İlkin qiymətləri yaz
dövrdən əvvəlki mənimsətmələr birinci sətrə yazılır.
- 3Şərti yoxla
«Hə» — gövdəni yuxarıdan aşağı sətir-sətir icra et və yeni sətir aç; «Yox» — dayan.
- 4
print-ə baxçap olunan ifadə dəyişənin özü olmaya bilər (
n + k,m * 10 + k);print(a, b)iki qiyməti boşluqla çap edir.
s = 0
k = 1
while s < 40:
if k % 2 == 0:
s = s + k * k
else:
s = s + k
k = k + 1
print(k, s)▸ Gözlənilən nəticə
7 65
Yuxarıdakı proqramın nəticəsini müəyyən edin.
A) 6 65 B) 7 65 C) 7 29 D) 6 29 E) 8 65
Həllini göstərHəllini gizlət
1 | Hə | 0 + 1 = 1
2 | Hə | 1 + 2 · 2 = 5
3 | Hə | 5 + 3 = 8
4 | Hə | 8 + 4 · 4 = 24
5 | Hə | 24 + 5 = 29
6 | Hə (29 < 40) | 29 + 6 · 6 = 65
7 | Yox (65 < 40 yalandır) — dövr bitir.
Çap olunur: 7 65. Cavab: B. Tələ: dövrdən sonra k artıq 7-dir, 6 yox.
Dövr neçə dəfə işləyib? Nəticədən iterasiyaların sayına
Tərs tapşırığın ilk addımı həmişə eynidir. Çap olunan dəyişən hər iterasiyada eyni qayda ilə dəyişirsə (hər dəfə eyni ədəd əlavə olunur və ya eyni ədədə vurulur), onun son qiymətinə görə iterasiyaların sayını — k-nı tapırıq. Bu addımda giriş qiyməti hələ lazım deyil.
- n₀, s₀dövrdən əvvəlki qiymətlər
- dhər addımda əlavə olunan ədəd (
n = n + d) - qhər addımda vurulan ədəd (
s = s * q) - kiterasiyaların sayı
Toplama arifmetik, vurma isə həndəsi silsilə verir.
Dövr neçə dəfə işləyib?
1) Dövrdən əvvəl n = 5, gövdədə n = n + 6, dövrdən sonra 125 çap olunub.
2) s = 1, gövdədə s = s * 3, çap olunub 243.
3) n = 2, gövdədə n = n * 4, çap olunub 2048.
4) Sayğac k = 1, gövdədə k = k + 1, dövrdən sonra 8 çap olunub.
Həllini göstərHəllini gizlət
2) 3ᵏ = 243 = 3⁵ → k = 5.
3) 2 · 4ᵏ = 2048 → 4ᵏ = 1024 = 4⁵ → k = 5.
4) 1 + k = 8 → k = 7. Sayğac 1-dən başlayırsa, çap olunan qiymət iterasiyaların sayından 1 çoxdur.
Şərtdən bərabərsizliyə: ən kiçik və ən böyük giriş
Dövr düz k dəfə işləyibsə, iki fakt doğrudur: (k − 1)-ci iterasiyadan sonra şərt hələ doğru idi (yoxsa k-cı iterasiya başlamazdı), k-cı iterasiyadan sonra isə yalan oldu (dövr dayandı). Bu iki cümlə giriş qiyməti üçün iki bərabərsizlik verir.
- xₖdövr dəyişəninin k iterasiyadan sonrakı qiyməti, girişlə ifadə olunur (məsələn, s₀ + k · m)
Dövrün düz k dəfə işləməsinin şərti.
- 1k-nı tap
çap olunan qiymətdən iterasiyaların sayını.
- 2Dəyişəni girişlə ifadə et
məsələn, k addımdan sonra s = 25 + k · m.
- 3İki bərabərsizlik qur
k addımdan sonra şərt yalan, k − 1 addımdan sonra doğrudur.
- 4Tam həlləri seç
ən kiçik və ya ən böyük natural qiymət; bütün uyğun girişlərin sayı isə R − L + 1.
m = int(input())
n = 2
s = 25
while s <= 900:
s = s + m
n = n + 5
print(n)Proqramın icrası nəticəsində 77 çap olunması üçün m-in hansı ən kiçik natural qiyməti daxil edilməlidir? m-in ən böyük uyğun qiyməti neçədir?
A) 58 B) 59 C) 60 D) 62 E) 63
Həllini göstərHəllini gizlət
2) k addımdan sonra s = 25 + k · m.
3) 15 addımdan sonra dövr dayandı: 25 + 15m > 900 → 15m > 875 → m > 58,3. 14 addımdan sonra şərt hələ doğru idi: 25 + 14m ≤ 900 → m ≤ 62,5.
4) 59 ≤ m ≤ 62. Ən kiçik: 59 (cavab B), ən böyük: 62; 77-ni 4 giriş verir.
Yoxlama: m = 58 olsa, 15 addımdan sonra s = 895 ≤ 900 — dövr 16-cı dəfə işləyər və 82 çap olunar.
- qbölən (
a = a // q) - ytam bölmənin nəticəsi
Tam bölmədə geriyə addım: ən kiçik x = q · y, ən böyük x = q · y + q − 1.
Hansı x ədədləri üçün 1) x // 3 = 5; 2) x // 10 = 42; 3) x // 2 = 7?
Həllini göstərHəllini gizlət
2) 420 ≤ x ≤ 429 — 10 ədəd.
3) 14 ≤ x ≤ 15.
a = int(input())
n = 1
while a > 5:
a = a // 3
n = n * 2
print(n)Nəticədə 8 çap olunması üçün 1) a-nın ən böyük natural qiymətini; 2) ən kiçik natural qiymətini; 3) belə qiymətlərin sayını tapın.
Həllini göstərHəllini gizlət
1) Dövr dayandı: a₃ ≤ 5, ən böyüyü a₃ = 5. Hər addımda ən böyük x = 3y + 2: a₂ = 17, a₁ = 53, a = 161. Şərtlər ödənir: 161, 53, 17 > 5.
2) 3-cü iterasiya baş verdi: a₂ > 5, yəni a₂ ≥ 6 (6 // 3 = 2 ≤ 5 — dövr dayanır). Ən kiçik x = 3y: a₁ = 18, a = 54.
3) 54 ≤ a ≤ 161: 161 − 54 + 1 = 108 qiymət. Kodlaşdırılan tapşırıqda «ən böyük və ən kiçik qiymətlərin fərqi» soruşulsa, cavab 161 − 54 = 107 olar.
Neçə giriş eyni nəticəni verir?
Bu sualda həm ən kiçik (L), həm də ən böyük (R) girişi tapırıq. Aradakı bütün tam ədədlər uyğun gəlirsə, cavab R − L + 1-dir (iki ucu da sayırıq). Gövdədə əlavə olunan ədəd dəyişirsə (s = s + k * 4), k addımın cəmini arifmetik silsilənin cəmi kimi hesablayırıq.
- L, Rən kiçik və ən böyük uyğun giriş
- k(k + 1) / 2k(k + 1) / 2ilk k natural ədədin cəmi
Parçadakı tam ədədlərin sayı və dəyişən addımlı cəm.
s = int(input())
k = 1
while s < 300:
s = s + k * 4
k = k + 1
print(k)Klaviaturadan neçə natural ədəd daxil etmək olar ki, hər dəfə 9 çap olunsun?
A) 31 B) 32 C) 33 D) 144 E) 30
Həllini göstərHəllini gizlət
8 addımda əlavə olunan: 4 · (1 + 2 + … + 8) = 4 · 36 = 144; 7 addımda: 4 · 28 = 112.
8 addımdan sonra dövr dayandı: s + 144 ≥ 300 → s ≥ 156.
7 addımdan sonra şərt doğru idi: s + 112 < 300 → s < 188, yəni s ≤ 187.
156 ≤ s ≤ 187: 187 − 156 + 1 = 32. Cavab: B.
for m in range(1, 101):
n = 2
s = 25
while s <= 900:
s = s + m
n = n + 5
if n == 77:
print(m)▸ Gözlənilən nəticə
59 60 61 62
Rəqəmlər, düsturlar və funksiyalar
Proqram ədədi rəqəmlərinə ayırırsa, nəticə iki şey deyir: rəqəmlərin sayı və rəqəmlər haqqında bir fakt (cəm, hasil…). Ən böyük ədədi qurmaq üçün böyük rəqəmləri sola yazırıq; ən kiçik ədəddə birinci rəqəm ən azı 1 olmalı, cəmin qalanı isə sağda 9-larla yığılmalıdır.
y = int(input())
m = 0
n = 0
while y > 0:
m = m + 3
n = n + y % 10
y = y // 10
print(m, n)Proqram 12 21 çap edib. y üçün daxil edilmiş ola biləcək ən böyük və ən kiçik natural ədədi tapın.
Həllini göstərHəllini gizlət
Ən böyük: soldan mümkün qədər böyük rəqəmlər — 9, 9, sonra 21 − 18 = 3, sonda 0: 9930.
Ən kiçik: birinci rəqəm 1, qalan 20 sağdan yığılır: 9, 9, sonra 2 — 1299.
Yoxlama: 9 + 9 + 3 + 0 = 21, 1 + 2 + 9 + 9 = 21. Fərq soruşulsa: 9930 − 1299 = 8631.
«Proqram hansı ifadəni hesablayır?» sualında izləmə cədvəlinə ilk 2–3 iterasiyanı yazırıq və hədlərin qanunauyğunluğunu görürük. Sonra variantları n = 1 və n = 2 üçün yoxlayırıq.
n = int(input())
s = 0
p = 1
for i in range(1, n + 1):
p = p * 2
s = s + i / p
print(s)Proqram hansı ifadənin qiymətini hesablayır?
A) 1/2 + 1/4 + … + 1/2ⁿ
B) 1/2 + 2/4 + 3/8 + … + n/2ⁿ
C) 1/2 + 2/3 + … + n/(n + 1)
D) 2 + 4/2 + 8/3 + … + 2ⁿ/n
E) 1 + 1/2 + … + 1/n
Həllini göstərHəllini gizlət
i = 2: p = 4, s = 1/2 + 2/4
i = 3: p = 8, s = 1/2 + 2/4 + 3/8
p hər addımda 2ⁱ olur, surətdə isə i dayanır: hədd i/2ⁱ. Cavab: B.
Yoxlama: n = 3 üçün proqram
1.375 çap edir və 0,5 + 0,5 + 0,375 = 1,375.Dövr şərtində funksiya ola bilər (bax: «Funksiya: def, parametrlər və return»). Onda əvvəlcə funksiyanın hansı ifadəni qaytardığını yaz, sonra şərti adi bərabərsizlik kimi həll et.
def f(x):
return x * x
def g(x):
return 5 * x + 6
k = abs(int(input()))
i = 1
while f(i) <= g(k):
i = i + 1
print(i)1) Klaviaturadan −20 daxil edilir. Nə çap olunar?
A) 10 B) 11 C) 12 D) 106 E) 9
2) Neçə natural k üçün 11 çap olunar?
Həllini göstərHəllini gizlət
2) 11 çap olunması üçün 10² ≤ g(k) < 11², yəni 100 ≤ 5k + 6 ≤ 120 → 18,8 ≤ k ≤ 22,8 → k = 19, 20, 21, 22 — 4 ədəd.
Nümunə 6-nı yoxla: s = 1, 2, …, 400 qiymətlərinin hər biri üçün onun proqramını icra et və 9 çap olunan ən kiçik s-i, ən böyük s-i və belə qiymətlərin sayını bir sətirdə çap et.
lo = 0
hi = 0
c = 0
for x in range(1, 401):
s = x
k = 1
# the loop of Example 6 here
# if k == 9, update lo, hi and c
print(lo, hi, c)▸ Gözlənilən nəticə
156 187 32
Nümunə 7-ni yoxla: 1000-dən 9999-a qədər y-lər arasında proqramın 12 21 çap etdiyi ən böyük ədədi tap və çap et.
best = 0
for x in range(1000, 10000):
y = x
m = 0
n = 0
# the loop of Example 7 here
# remember x if the program would print 12 21
print(best)▸ Gözlənilən nəticə
9930
Əsas fikirlər
whileşərti gövdədən əvvəl yoxlanılır; dövrdən sonra dəyişənlər son iterasiyanın qiymətlərini saxlayır.- Tərs tapşırıqda əvvəlcə k-nı tap: n = n₀ + k · d və ya s = s₀ · qᵏ.
- Düz k iterasiya: k − 1 addımdan sonra şərt doğru, k addımdan sonra yalan — iki bərabərsizlik.
- Tam bölmədən geri: x // q = y ⇔ q · y ≤ x ≤ q · y + q − 1; uyğun girişlərin sayı R − L + 1-dir.
- Ən böyük ədəd üçün böyük rəqəmlər sola, ən kiçik ədəd üçün 9-lar sağa; cavabı variantlarla və ya tam yoxlama ilə yoxla.
Özünü yoxla
12 sual. Hər düzgün cavab XP qazandırır.
while dövründə şərt nə vaxt yoxlanılır?