Bölüm 1: Algoritmalar
Çoktan Seçmeli · Problem Çözme
Soru 1: “Biraz Tuz Ekle”
Bir yemek tarifindeki “biraz tuz ekle” adımı bilgisayar için yeterli değildir. Bu adım algoritmanın hangi özelliğine aykırıdır?
B: Kesinlik, her adımın açık ve tek anlamlı olmasını ister; “biraz” kişiden kişiye değişir. Sonluluk algoritmanın bitmesi, etkinlik her adımın gerçekten yapılabilmesidir.
Çoktan Seçmeli · Problem Çözme
Soru 2: Sınır Durum
Bir metindeki kelime sayısını bulan program için test senaryoları yazılıyor. Hangisi bir sınır durum (edge case) testidir?
D: Boş metin, sıfır, negatif sayı gibi uç girdiler hataların en sık saklandığı yerlerdir; beklenen çıktı önceden yazılır. A, B ve C sıradan girdilerdir.
Adım Adım Çalıştırma · Koda Dönüştürme
Soru 3: Fonksiyon Çağrıları
Program ne yazdırır? Çağrılar hangi sırayla yapılır?
Program main'den başlar. topla çağrılmadan önce argümanları hesaplanır: önce kare(3).
kare için yeni çerçeve: x = 3, 3 · 3 = 9 döndürülür; çerçeve kalkar.
İkinci argüman: kare(4) = 16.
Argümanlar hazır: topla(9, 16) çağrılır, 25 döndürür.
s = 25 olur ve yazdırılır. kare ve topla'nın değişkenleri artık yoktur.
İçteki çağrı önce: topla(1, 2) = 3.
Dönen 3 kare'nin argümanı olur: kare(3) = 9.
9 yazdırılır, main biter. Çıktı: 25 ve 9; en fazla iki çerçeve aynı anda yığındaydı.
static int kare(int x) { return x * x; } static int topla(int a, int b) { return a + b; } public static void main(String[] args) { int s = topla(kare(3), kare(4)); System.out.println(s); System.out.println(kare(topla(1, 2))); }
Çoktan Seçmeli · Koda Dönüştürme
Soru 4: print ve println
Kod ekrana ne yazar?
double a = 7, b = 2; System.out.print(a / b); System.out.println(" " + (int) a / 2);
A: a ve b double olduğu için a / b = 3.5. print alt satıra geçmez, println aynı satıra devam eder. (int) a önce yapılır (7), sonra 7 / 2 tam sayı bölmesi = 3.
Adım Adım Çalıştırma · Örnek Algoritmalar
Soru 5: Asal mı: 91
Program ne yazdırır? Döngü kaç bölen dener?
91 ≥ 2: bayrak true kalır. Döngü sınırı 91 / 2 = 45.
91 % 2 = 1 ≠ 0, devam.
91 % 3 = 1 ≠ 0, devam.
91 % 4 = 3 ≠ 0, devam.
91 % 5 = 1 ≠ 0, devam.
91 % 6 = 1 ≠ 0, devam.
91 % 7 = 0 → tam bölünüyor (91 = 7 · 13). Bayrak indirilir, break ile döngüden çıkılır.
Bayrak false → else kolu. 6 bölen denendi; 8–45 hiç denenmedi.
int sayi = 91; boolean asalMi = true; if (sayi < 2) asalMi = false; for (int bolen = 2; bolen <= sayi / 2; bolen++) { if (sayi % bolen == 0) { asalMi = false; break; } } if (asalMi) System.out.println(sayi + " asal"); else System.out.println(sayi + " asal değil");
Çıktı Sorusu · Örnek Algoritmalar
Soru 6: Fibonacci: n = 8
Program ne yazdırır? for döngüsü kaç kez döner?
int n = 8; int a = 0, b = 1, sonuc; if (n >= 1) System.out.print(a + " "); if (n >= 2) System.out.print(b + " "); for (int i = 2; i <= n - 1; i++) { sonuc = a + b; a = b; b = sonuc; System.out.print(sonuc + " "); }
Cevabı göster
0 1 1 2 3 5 8 13
İlk iki terim (0, 1) döngüden önce yazılır. Döngü i = 2 … 7 için 6 kez (n − 2) döner: 1, 2, 3, 5, 8, 13.
Her turda a = b; b = sonuc; son iki terimi bir adım kaydırır. Bu iki satırın yeri değişirse sonuç bozulur.
Hata Bulma · Örnek Algoritmalar
Soru 7: Faktöriyelde İki Hata
Kod 5! = 120 yazdırmalıydı. Ne yazdırır? İki hatayı bulup düzeltin.
int sayi = 5; int faktoriyel = 0; for (int i = 1; i < sayi; i++) { faktoriyel = faktoriyel * i; } System.out.println(faktoriyel);
Cevabı göster
0
(1) Biriktirici 0 ile başlıyor: her çarpım 0 olur. Çarpmada etkisiz eleman 1'dir: faktoriyel = 1.
(2) i < sayi son çarpanı (5) atlar: i <= sayi olmalıdır. Düzeltilince 120 yazılır. 13! int'e sığmadığı için büyük sayılarda long kullanılır.
Çoktan Seçmeli · Örnek Algoritmalar
Soru 8: Palindromda ==
Palindrom programında temiz.equals(tersGirdi) yerine temiz == tersGirdi yazıldı. Girdi "abcba" iken koşul ne olur?
String temiz = "abcba"; String tersGirdi = new StringBuilder(temiz) .reverse().toString(); if (temiz == tersGirdi) { /* ... */ }
C: tersGirdi StringBuilder ile yeni bir nesne olarak üretilir; içerikleri aynı olsa da iki ayrı nesnedir ve == false verir. Kod derlenir (A yanlış). İçerik karşılaştırması equals ile yapılır.
Çıktı Sorusu · Örnek Algoritmalar
Soru 9: Basamakları Toplama
Program ne yazdırır?
int sayi = 4071, toplam = 0, adim = 0; while (sayi > 0) { toplam += sayi % 10; sayi = sayi / 10; adim++; } System.out.println(toplam + " " + adim);
Cevabı göster
12 4
| tur | sayi % 10 | toplam | sayi |
|---|---|---|---|
| 1 | 1 | 1 | 407 |
| 2 | 7 | 8 | 40 |
| 3 | 0 | 8 | 4 |
| 4 | 4 | 12 | 0 |
% 10 son basamağı verir, / 10 onu atar. adim basamak sayısıdır.
Çoktan Seçmeli · Arama Algoritmaları
Soru 10: Sırasız Dizide İkili Arama
{77, 42, 64, 12, 23, 55, 7, 48, 31} dizisinde ikili arama ile 77 aranıyor. Ne olur?
C: Sırasıyla 23, 7, 48 ve 31'e bakılır: 77 hepsinden büyük olduğu için hep sağa gidilir ve 0. indisteki 77 hiç incelenmez; −1 döner. İkili arama sıralı veri varsayar; bunu denetlemez, uyarı da vermez.
Adım Adım Çalıştırma · Arama Algoritmaları
Soru 11: İkili Arama: 41
{3, 9, 14, 20, 27, 33, 41, 50, 58, 66} dizisinde 41 aranıyor. Hangi öğelere bakılır, metot ne döndürür?
Arama alanı bütün dizi: alt = 0, ust = 9.
orta = (0 + 9) / 2 = 4 → 27. 41 > 27: sağ yarı, alt = 5.
orta = (5 + 9) / 2 = 7 → 50. 41 < 50: sol yarı, ust = 6.
orta = (5 + 6) / 2 = 5 → 33. 41 > 33: sağ yarı, alt = 6.
orta = (6 + 6) / 2 = 6 → dizi[6] = 41: bulundu, return 6. 4 karşılaştırma yetti.
int alt = 0, ust = dizi.length - 1; while (alt <= ust) { int orta = (alt + ust) / 2; if (dizi[orta] == hedef) { return orta; } else if (hedef < dizi[orta]) { ust = orta - 1; } else { alt = orta + 1; } } return -1;
Çoktan Seçmeli · Arama Algoritmaları
Soru 12: En Kötü Durum
100 öğeli sıralı bir dizide aranan öğe yoksa doğrusal ve ikili arama en fazla kaç karşılaştırma yapar?
A: Doğrusal arama her öğeye bakar: 100. İkili arama her adımda alanı yarıya indirir: ⌊log₂ 100⌋ + 1 = 6 + 1 = 7 (100 → 50 → 25 → 12 → 6 → 3 → 1). n iki katına çıkınca ikili aramanın işi yalnızca bir artar.
Çıktı Sorusu · Arama Algoritmaları
Soru 13: Kaç Kez Geçiyor?
Doğrusal aramanın bu çeşidi ne yazdırır?
int[] dizi = {5, 8, 3, 8, 1, 8}; int ilk = -1, son = -1, adet = 0; for (int i = 0; i < dizi.length; i++) { if (dizi[i] == 8) { if (ilk == -1) ilk = i; son = i; adet++; } } System.out.println(ilk + " " + son + " " + adet);
Cevabı göster
1 5 3
8; 1, 3 ve 5. indislerde. ilk yalnızca ilk eşleşmede (−1 iken) atanır; son her eşleşmede güncellenir.
return olmadığı için döngü sonuna kadar sürer: hedef bulunsa bile 6 karşılaştırma yapılır.
Çıktı Sorusu · Sıralama Algoritmaları
Soru 14: Seçimli Sıralama
Seçimli sıralama her dış turdan sonra diziyi yazdırıyor. Çıktı nedir? Toplam kaç karşılaştırma yapılır?
int[] dizi = {40, 15, 32, 8, 21}; int n = dizi.length; for (int i = 0; i < n - 1; i++) { int enKucuk = i; for (int j = i + 1; j < n; j++) if (dizi[j] < dizi[enKucuk]) enKucuk = j; int gecici = dizi[i]; dizi[i] = dizi[enKucuk]; dizi[enKucuk] = gecici; System.out.println(Arrays.toString(dizi)); }
Cevabı göster
[8, 15, 32, 40, 21] [8, 15, 32, 40, 21] [8, 15, 21, 40, 32] [8, 15, 21, 32, 40]
1. tur en küçük 8'i 40 ile yer değiştirir; 2. turda 15 zaten yerindedir (kendisiyle takas); 3. tur 21 ↔ 32; 4. tur 32 ↔ 40.
Karşılaştırma: 4 + 3 + 2 + 1 = 10 = n(n − 1)/2; dizi sıralı olsa da değişmez.
Adım Adım Çalıştırma · Sıralama Algoritmaları
Soru 15: Kabarcık Sıralama
{6, 2, 9, 1, 5} dizisi kabarcık sıralama ile sıralanıyor. Kaç tur, kaç karşılaştırma ve kaç takas yapılır?
Başlangıç. Her turda komşular karşılaştırılır; büyük olan sağa kayar.
tur 0, j = 0: 6 > 2 → yer değiştir.
tur 0, j = 1: 6 ≤ 9, değişiklik yok.
tur 0, j = 2: 9 > 1 → yer değiştir.
tur 0, j = 3: 9 > 5 → yer değiştir. Tur bitti: 9 yerine oturdu.
tur 1, j = 0: 2 ≤ 6, değişiklik yok.
tur 1, j = 1: 6 > 1 → yer değiştir.
tur 1, j = 2: 6 > 5 → yer değiştir. Tur bitti: 6 yerine oturdu.
tur 2, j = 0: 2 > 1 → yer değiştir.
tur 2, j = 1: 2 ≤ 5, değişiklik yok. Tur bitti: 5 yerine oturdu.
tur 3, j = 0: 1 ≤ 2, değişiklik yok.
Bu turda hiç takas olmadı: dizi sıralı, break. Toplam 10 karşılaştırma, 6 takas, 4 tur.
for (int tur = 0; tur < n - 1; tur++) { boolean degisti = false; for (int j = 0; j < n - 1 - tur; j++) { if (dizi[j] > dizi[j + 1]) { int gecici = dizi[j]; dizi[j] = dizi[j + 1]; dizi[j + 1] = gecici; degisti = true; } } if (!degisti) break; }
Çoktan Seçmeli · Sıralama Algoritmaları
Soru 16: Seçimli Sıralamada Karşılaştırma
Seçimli sıralama 8 öğeli bir dizide kaç karşılaştırma yapar? Dizi baştan sıralı olsaydı ne değişirdi?
D: n(n − 1)/2 = 8 · 7 / 2 = 28. Seçimli sıralama en küçüğü bulmak için kalan her öğeye bakmak zorundadır; dizinin sıralı olması bunu değiştirmez. Erken durmayla n − 1'e inen kabarcık sıralamadır (A bunu karıştırır).
Çoktan Seçmeli · Sıralama Algoritmaları
Soru 17: degisti Bayrağı
Kabarcık sıralamadaki degisti bayrağı ne işe yarar?
B: Bir turda hiç yer değiştirme olmadıysa komşuların hepsi doğru sıradadır; break ile kalan turlar atlanır. Sıralı dizide yalnızca n − 1 karşılaştırma yapılır. A seçimli sıralamadaki enKucuk'tur, D ise gecici değişkenidir.