- iz tablosu kurup programın ne yazdırdığını bulmak
- yazdırılan değerden döngünün kaç kez çalıştığını belirlemek
- döngü koşulunu iki eşitsizliğe çevirip en küçük ve en büyük girdiyi ve uygun girdilerin sayısını bulmak
- rakamlardan geriye çözmek, döngünün hangi ifadeyi hesapladığını ve fonksiyonlu koşulları çözümlemek
Sıradan bir soruda program ve girdi verilir, çıktıyı sen bulursun. DİM ise çoğu zaman tersini sorar: «77 yazdırıldıysa m'nin en küçük değeri nedir?», «Her seferinde 9 yazdırılması için kaç pozitif tam sayı girilebilir?». 2025–2026'daki dört sınavın her birinde en az bir böyle «ters» soru vardı; bunların üçü, cevabı kendin yazdığın kodlanan sorulardı. Bu derste önce iz tablosunu, sonra çıktıdan girdiye doğru düşünmenin dört adımlı yöntemini öğreneceksin. Döngülerin kuralları «Döngü deyimleri: for, while, adım, break, continue ve iç içe döngüler» ve «Sayılar üzerinde işlemler: rakamlar, bölenler ve asal sayılar» derslerindedir.
İz tablosu: program ne yazdırır?
Programın çalışmasını adım adım gösteren tablo: her sütun bir değişkendir (bir de döngü koşulu), her satır ise döngünün bir tekrarıdır.
Program ve çıktısı verilir, girdi değeri aranır (en küçük, en büyük ya da uygun değerlerin sayısı).
while döngüsünde koşul gövdeden önce kontrol edilir: koşul yanlış olur olmaz döngü biter ve program döngüden sonraki satıra geçer. Bu yüzden döngüden sonra değişkenler son tekrardaki değerlerini korur.
- 1Sütunları kur
döngüde değişen tüm değişkenler ve koşul için bir «evet/hayır» sütunu.
- 2Başlangıç değerlerini yaz
döngüden önceki atamalar ilk satıra yazılır.
- 3Koşulu kontrol et
«evet» — gövdeyi yukarıdan aşağıya satır satır çalıştır ve yeni satır aç; «hayır» — dur.
- 4
printsatırına bakyazdırılan ifade değişkenin kendisi olmayabilir (
n + k,m * 10 + k);print(a, b)iki değeri boşlukla ayırarak yazdırır.
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)▸ Beklenen çıktı
7 65
Yukarıdaki programın çıktısını belirleyin.
A) 6 65 B) 7 65 C) 7 29 D) 6 29 E) 8 65
Çözümü gösterÇözümü gizle
1 | evet | 0 + 1 = 1
2 | evet | 1 + 2 · 2 = 5
3 | evet | 5 + 3 = 8
4 | evet | 8 + 4 · 4 = 24
5 | evet | 24 + 5 = 29
6 | evet (29 < 40) | 29 + 6 · 6 = 65
7 | hayır (65 < 40 yanlış) — döngü biter.
Yazdırılan: 7 65. Cevap: B. Tuzak: döngüden sonra k zaten 7'dir, 6 değil.
Döngü kaç kez çalıştı? Çıktıdan tekrar sayısına
Ters sorunun ilk adımı hep aynıdır. Yazdırılan değişken her tekrarda aynı kurala göre değişiyorsa (her seferinde aynı sayı ekleniyor ya da aynı sayıyla çarpılıyorsa), son değerinden tekrar sayısı k bulunur. Bu adımda girdi henüz gerekmez.
- n₀, s₀döngüden önceki değerler
- dher adımda eklenen sayı (
n = n + d) - qher adımda çarpılan sayı (
s = s * q) - ktekrar sayısı
Toplama aritmetik, çarpma ise geometrik dizi verir.
Döngü kaç kez çalıştı?
1) Döngüden önce n = 5, gövdede n = n + 6, döngüden sonra 125 yazdırıldı.
2) s = 1, gövdede s = s * 3, 243 yazdırıldı.
3) n = 2, gövdede n = n * 4, 2048 yazdırıldı.
4) Sayaç k = 1, gövdede k = k + 1, döngüden sonra 8 yazdırıldı.
Çözümü gösterÇözümü gizle
2) 3ᵏ = 243 = 3⁵ → k = 5.
3) 2 · 4ᵏ = 2048 → 4ᵏ = 1024 = 4⁵ → k = 5.
4) 1 + k = 8 → k = 7. Sayaç 1'den başlıyorsa yazdırılan değer tekrar sayısından 1 fazladır.
Koşuldan eşitsizliğe: en küçük ve en büyük girdi
Döngü tam k kez çalıştıysa iki gerçek doğrudur: (k − 1)'inci tekrardan sonra koşul hâlâ doğruydu (yoksa k'ncı tekrar başlamazdı), k'ncı tekrardan sonra ise yanlış oldu (döngü durdu). Bu iki cümle girdi için iki eşitsizlik verir.
- xₖdöngü değişkeninin k tekrardan sonraki değeri, girdiyle ifade edilir (örneğin s₀ + k · m)
Döngünün tam k kez çalışmasının koşulu.
- 1k'yı bul
yazdırılan değerden tekrar sayısını.
- 2Değişkeni girdiyle ifade et
örneğin k adımdan sonra s = 25 + k · m.
- 3İki eşitsizlik kur
k adımdan sonra koşul yanlış, k − 1 adımdan sonra doğrudur.
- 4Tam sayı çözümlerini seç
en küçük ya da en büyük pozitif tam değer; uygun girdilerin toplam sayısı ise R − L + 1.
m = int(input())
n = 2
s = 25
while s <= 900:
s = s + m
n = n + 5
print(n)Programın 77 yazdırması için m'nin en küçük hangi pozitif tam değeri girilmelidir? Uygun en büyük m kaçtır?
A) 58 B) 59 C) 60 D) 62 E) 63
Çözümü gösterÇözümü gizle
2) k adımdan sonra s = 25 + k · m.
3) 15 adımdan sonra döngü durdu: 25 + 15m > 900 → 15m > 875 → m > 58,3. 14 adımdan sonra koşul hâlâ doğruydu: 25 + 14m ≤ 900 → m ≤ 62,5.
4) 59 ≤ m ≤ 62. En küçük 59 (cevap B), en büyük 62; 77'yi 4 girdi verir.
Kontrol: m = 58 olsaydı 15 adımdan sonra s = 895 ≤ 900 olurdu; döngü 16. kez çalışır ve 82 yazdırılırdı.
- qbölen (
a = a // q) - ytam bölmenin sonucu
Tam bölmede geri adım: en küçük x = q · y, en büyük x = q · y + q − 1.
Hangi x değerleri için 1) x // 3 = 5; 2) x // 10 = 42; 3) x // 2 = 7?
Çözümü gösterÇözümü gizle
2) 420 ≤ x ≤ 429 — 10 sayı.
3) 14 ≤ x ≤ 15.
a = int(input())
n = 1
while a > 5:
a = a // 3
n = n * 2
print(n)Çıktının 8 olması için 1) a'nın en büyük pozitif tam değerini; 2) en küçük pozitif tam değerini; 3) bu değerlerin sayısını bulun.
Çözümü gösterÇözümü gizle
1) Döngü durdu: a₃ ≤ 5, en büyüğü a₃ = 5. Her adımda en büyük x = 3y + 2: a₂ = 17, a₁ = 53, a = 161. Koşullar sağlanır: 161, 53, 17 > 5.
2) 3. tekrar gerçekleşti: a₂ > 5, yani a₂ ≥ 6 (6 // 3 = 2 ≤ 5 — döngü durur). En küçük x = 3y: a₁ = 18, a = 54.
3) 54 ≤ a ≤ 161: 161 − 54 + 1 = 108 değer. Kodlanan soruda «en büyük ve en küçük değerin farkı» sorulursa cevap 161 − 54 = 107 olur.
Kaç girdi aynı çıktıyı verir?
Burada hem en küçük (L) hem de en büyük (R) girdiyi buluruz. Aradaki tüm tam sayılar uygunsa cevap R − L + 1'dir (iki uç da sayılır). Gövdede eklenen sayı değişiyorsa (s = s + k * 4), k adımın toplamı aritmetik dizinin toplamı olarak hesaplanır.
- L, Ruygun en küçük ve en büyük girdi
- k(k + 1) / 2k(k + 1) / 2ilk k pozitif tam sayının toplamı
Bir aralıktaki tam sayıların sayısı ve artan adımlı toplam.
s = int(input())
k = 1
while s < 300:
s = s + k * 4
k = k + 1
print(k)Her seferinde 9 yazdırılması için klavyeden kaç pozitif tam sayı girilebilir?
A) 31 B) 32 C) 33 D) 144 E) 30
Çözümü gösterÇözümü gizle
8 adımda eklenen: 4 · (1 + 2 + … + 8) = 4 · 36 = 144; 7 adımda: 4 · 28 = 112.
8 adımdan sonra döngü durdu: s + 144 ≥ 300 → s ≥ 156.
7 adımdan sonra koşul doğruydu: s + 112 < 300 → s < 188, yani s ≤ 187.
156 ≤ s ≤ 187: 187 − 156 + 1 = 32. Cevap: 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)▸ Beklenen çıktı
59 60 61 62
Rakamlar, formüller ve fonksiyonlar
Program sayıyı rakamlarına ayırıyorsa çıktı iki şey söyler: kaç rakam olduğunu ve rakamlarla ilgili bir bilgiyi (toplam, çarpım…). En büyük sayıyı kurmak için büyük rakamları sola yazarız; en küçük sayıda ilk rakam en az 1 olmalı, toplamın geri kalanı ise sağda 9'larla toplanmalı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)Program 12 21 yazdırdı. y için girilmiş olabilecek en büyük ve en küçük pozitif tam sayıyı bulun.
Çözümü gösterÇözümü gizle
En büyük: soldan olabildiğince büyük rakamlar — 9, 9, sonra 21 − 18 = 3, sonda 0: 9930.
En küçük: ilk rakam 1, kalan 20 sağdan toplanır: 9, 9, sonra 2 — 1299.
Kontrol: 9 + 9 + 3 + 0 = 21, 1 + 2 + 9 + 9 = 21. Fark sorulursa: 9930 − 1299 = 8631.
«Program hangi ifadeyi hesaplıyor?» sorusunda ilk 2–3 tekrarı iz tablosuna yazar ve terimlerin düzenini görürüz. Sonra seçenekleri n = 1 ve n = 2 için deneriz.
n = int(input())
s = 0
p = 1
for i in range(1, n + 1):
p = p * 2
s = s + i / p
print(s)Program hangi ifadenin değerini hesaplar?
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
Çözümü gösterÇözümü gizle
i = 2: p = 4, s = 1/2 + 2/4
i = 3: p = 8, s = 1/2 + 2/4 + 3/8
Her adımda p = 2ⁱ olur, payda ise i durur: terim i/2ⁱ. Cevap: B.
Kontrol: n = 3 için program
1.375 yazdırır ve 0,5 + 0,5 + 0,375 = 1,375.Döngü koşulunda bir fonksiyon olabilir (bkz. «Fonksiyon: def, parametreler ve return»). Önce fonksiyonun hangi ifadeyi döndürdüğünü yaz, sonra koşulu sıradan bir eşitsizlik gibi çöz.
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) Klavyeden −20 girilir. Ne yazdırılır?
A) 10 B) 11 C) 12 D) 106 E) 9
2) Kaç pozitif tam k için 11 yazdırılır?
Çözümü gösterÇözümü gizle
2) 11 yazdırılması için 10² ≤ g(k) < 11² olmalı, yani 100 ≤ 5k + 6 ≤ 120 → 18,8 ≤ k ≤ 22,8 → k = 19, 20, 21, 22 — 4 sayı.
Örnek 6'yı kontrol et: programını s = 1, 2, …, 400 değerlerinin her biri için çalıştır ve 9 veren en küçük s'yi, en büyük s'yi ve bu değerlerin sayısını bir satırda yazdır.
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)▸ Beklenen çıktı
156 187 32
Örnek 7'yi kontrol et: 1000'den 9999'a kadar olan y'ler arasında programın 12 21 yazdırdığı en büyük sayıyı bul ve yazdır.
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)▸ Beklenen çıktı
9930
Önemli noktalar
whilekoşulu gövdeden önce kontrol edilir; döngüden sonra değişkenler son tekrarın değerlerini korur.- Ters soruda önce k'yı bul: n = n₀ + k · d ya da s = s₀ · qᵏ.
- Tam k tekrar: k − 1 adımdan sonra koşul doğru, k adımdan sonra yanlış — iki eşitsizlik.
- Tam bölmeden geri: x // q = y ⇔ q · y ≤ x ≤ q · y + q − 1; uygun girdilerin sayısı R − L + 1'dir.
- En büyük sayı için büyük rakamları sola, en küçük sayı için 9'ları sağa yaz; cevabı seçeneklerle ya da tam taramayla kontrol et.
Kendini test et
12 soru. Her doğru cevap XP kazandırır.
while döngüsünde koşul ne zaman kontrol edilir?