İçeriğe geç
Educora
Orta9. sınıf25 dk33 / 59

Program analizi: çıktıdan girdiye

İz tablosuyla 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 eşitsizliklere çevirerek en küçük ve en büyük girdiyi ve aynı çıktıyı veren girdilerin sayısını bulmak — DİM'in kapalı ve kodlanan soruları gibi.

Kendini test et
Bu derste öğreneceklerin
  • 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?

Tanım
İz tablosu

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.

Tanım
Ters soru

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.

  1. 1
    Sütunları kur

    döngüde değişen tüm değişkenler ve koşul için bir «evet/hayır» sütunu.

  2. 2
    Başlangıç değerlerini yaz

    döngüden önceki atamalar ilk satıra yazılır.

  3. 3
    Koş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. 4
    print satırına bak

    yazdı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.

Python
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
Örnek 1'in programı: önce tabloyu kur, sonra çalıştırıp kontrol et.
Örnek 1. Programın çıktısı

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
k | s < 40? | s
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 = n₀ + k · d s = s₀ · qᵏ
burada:
  • 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.

Örnek 2. Tekrar sayısı

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
1) 5 + 6k = 125 → 6k = 120 → k = 20.
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.

koşul(x₍ₖ₋₁₎) doğru, koşul(xₖ) yanlış
burada:
  • 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.

  1. 1
    k'yı bul

    yazdırılan değerden tekrar sayısını.

  2. 2
    Değişkeni girdiyle ifade et

    örneğin k adımdan sonra s = 25 + k · m.

  3. 3
    İki eşitsizlik kur

    k adımdan sonra koşul yanlış, k − 1 adımdan sonra doğrudur.

  4. 4
    Tam 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.

Python
m = int(input())
n = 2
s = 25
while s <= 900:
    s = s + m
    n = n + 5
print(n)
Örnek 3'ün programı — sınavdaki gibi klavyeden okur.
Örnek 3. En küçük girdi

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
1) n = 2 + 5k = 77 → k = 15.
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ı.
x // q = y ⇔ q · y ≤ x ≤ q · y + q − 1
burada:
  • 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.

Örnek 4. Tam bölmeyi geri almak

Hangi x değerleri için 1) x // 3 = 5; 2) x // 10 = 42; 3) x // 2 = 7?

Çözümü göster
1) 3 · 5 = 15 ≤ x ≤ 17: x = 15, 16, 17.
2) 420 ≤ x ≤ 429 — 10 sayı.
3) 14 ≤ x ≤ 15.
Python
a = int(input())
n = 1
while a > 5:
    a = a // 3
    n = n * 2
print(n)
Örnek 5'in programı — sınavdaki gibi klavyeden okur.
Örnek 5. En büyük ve en küçük girdi (kodlanan soru)

Çı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
n = 2ᵏ = 8 → k = 3. Değerleri sondan başa doğru geri kurarız (a₃, 3 adımdan sonraki değer).
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.

sayı = R − L + 1 1 + 2 + … + k = k(k + 1) / 2sayı = R − L + 1 1 + 2 + … + k = k(k + 1) / 2
burada:
  • 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.

Python
s = int(input())
k = 1
while s < 300:
    s = s + k * 4
    k = k + 1
print(k)
Örnek 6'nın programı — sınavdaki gibi klavyeden okur.
Örnek 6. Kaç pozitif tam sayı 9 verir?

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
k 1'den başlar ve döngüden sonra 9'dur; demek ki döngü 8 kez çalıştı (k = 1, 2, …, 8 ile).
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.
Python
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
Tam kontrol: 77'yi yalnızca m = 59, 60, 61, 62 verir.

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.

Python
y = int(input())
m = 0
n = 0
while y > 0:
    m = m + 3
    n = n + y % 10
    y = y // 10
print(m, n)
Örnek 7'nin programı — sınavdaki gibi klavyeden okur.
Örnek 7. Rakamlardan geriye çözüm (kodlanan soru)

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
m her rakam için 3 artar: 12 / 3 = 4 — sayı dört basamaklıdır. n rakamlar toplamıdır: 21.
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.

Python
n = int(input())
s = 0
p = 1
for i in range(1, n + 1):
    p = p * 2
    s = s + i / p
print(s)
Örnek 8'in programı — sınavdaki gibi klavyeden okur.
Örnek 8. Döngü hangi ifadeyi hesaplıyor?

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
i = 1: p = 2, s = 1/2
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.

Python
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)
Örnek 9'un programı — sınavdaki gibi klavyeden okur.
Örnek 9. Koşulda fonksiyonlar

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
1) k = |−20| = 20, g(20) = 106. Döngü i² ≤ 106 olduğu sürece devam eder: 10² = 100 ≤ 106, 11² = 121 > 106 — durur. 11 yazdırılır. Cevap: B.
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ı.
Alıştırma

Ö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.

Alıştırma · Python
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
Alıştırma

Ö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.

Alıştırma · Python
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

  • while koş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.

1 / 12
while döngüsünde koşul ne zaman kontrol edilir?