Bölüm 2: Programlama
Çoktan Seçmeli · Programlama Dilleri
Soru 1: javac Ne Üretir?
javac Merhaba.java komutu hatasız çalıştığında ne üretir?
B: javac kaynak kodu denetler ve hiçbir işlemciye özgü olmayan bytecode'a çevirir; java Merhaba JVM'i başlatır, JVM bytecode'u yorumlar ve sık çalışan kısımları JIT ile makine koduna çevirir. Hata varsa .class dosyası oluşmaz.
Çoktan Seçmeli · Programlama Dilleri
Soru 2: Dil ve Paradigma
Aşağıdaki dil–paradigma eşleştirmelerinden hangisi doğrudur?
A: Haskell hesaplamayı matematiksel fonksiyonların değerlendirilmesi olarak ele alır. Prolog mantıksaldır (olgular ve kurallar), C buyruksaldır, Lisp fonksiyonel dillerin atasıdır.
Çoktan Seçmeli · Programlama Dilleri
Soru 3: Yorumlanan Dil
Hangisi yorumlanan (interpreted) bir dil için doğrudur?
C: Yorumlayıcı kaynak kodu okur ve komutları sırayla çalıştırır; hatalı bir satır ancak sırası gelince fark edilir (Python, JavaScript). A ve B derlenen dillerin özelliğidir; yorumlanan diller genellikle daha yavaştır (D).
Hata Bulma · Söz Dizimi ve Anlam
Soru 4: Hata Türünü Bulun
Her parça ayrı bir programda. Hata türünü (söz dizimi, statik anlam, çalışma zamanı, mantık) ve ne zaman fark edildiğini söyleyin.
int n = 4.5; // (a) System.out.println("Merhaba"; // (b) int[] a = new int[3]; a[3] = 1; // (c) int x = 7, y = 8; double ort = (x + y) / 2; // (d)
Cevabı göster
- (a) Statik anlam, derlemede:
possible lossy conversion from double to int. - (b) Söz dizimi, derlemede:
')' or ',' expected. - (c) Çalışma zamanı: derlenir, çalışırken
ArrayIndexOutOfBoundsException(geçerli indisler 0–2). - (d) Mantık: derlenir ve çalışır, ama 7 ile 8 için 7 verir (doğrusu 7.5); yalnızca testle bulunur.
Çoktan Seçmeli · Söz Dizimi ve Anlam
Soru 5: Sayıyı Dizgiye Bölmek
double sonuc = 2.3 / "abc"; satırındaki hata hangi türdendir?
B: <değer> <işleç> <değer> kalıbı söz dizimine uygundur, ama bir sayıyı dizgiye bölmenin anlamı yoktur. Derleyici tip denetiminde yakalar: bad operand types for binary operator '/'. İngilizcedeki “I are big” örneğinin karşılığıdır.
Hata Bulma · Söz Dizimi ve Anlam
Soru 6: Hata Mesajını Okumak
Hesap.java derlenince Hesap.java:7: error: cannot find symbol … symbol: variable Toplam mesajı alınıyor. Hata nerede, nedeni ne, nasıl düzeltilir?
public class Hesap { public static void main(String[] args) { int toplam = 0; for (int i = 1; i <= 3; i++) { toplam += i; } System.out.println(Toplam); } }
Cevabı göster
Hesap.java:7: 7. satır; ^ işareti Toplam'ın başını gösterir. Tanımlanan değişken toplam, kullanılan Toplam: Java büyük/küçük harf duyarlıdır, ikisi farklı adlardır.
Derleme (statik anlam) hatasıdır; .class dosyası oluşmaz. Düzeltme: System.out.println(toplam); → çıktı 6.
Çıktı Sorusu · İfadeler ve Değişkenler
Soru 7: İşlem Önceliği
Program ne yazdırır?
System.out.println(10 - 4 - 3); System.out.println(2 + 3 * 4 % 5); System.out.println(20 / 3 * 3); System.out.println(20 / 3.0 * 3); System.out.println(-17 % 5); System.out.println((1 + 2) * 3 / 2);
Cevabı göster
3 4 18 20.0 -2 4
Aynı öncelikte soldan sağa: (10 − 4) − 3 = 3. * ve % aynı öncelikte: 3 · 4 = 12, 12 % 5 = 2 → 2 + 2 = 4.
20 / 3 = 6 (tam sayı), 6 · 3 = 18; 20 / 3.0 gerçek bölmedir → 20.0. Kalan bölünenin işaretini alır: −17 % 5 = −2. 9 / 2 = 4.
Adım Adım Çalıştırma · İfadeler ve Değişkenler
Soru 8: Atamaları İzlemek
Program ne yazdırır?
a için yer ayrılır, içine 5 yazılır.
Sağ taraf: 5 · 3 = 15 → yeni değişken b. a değişmez.
Önce sağ taraf, a'nın eski değeriyle: 15 − 5 = 10; sonra a'ya yazılır.
15 / 10 = 1 (tam sayı bölmesi, 0,5 atılır).
* önce: 1 · 2 = 2, sonra 10 + 2 = 12.
Çıktı 12 1. Atama iki adımdır: sağ taraf hesaplanır, sonra eski değerin üzerine yazılır.
int a = 5; int b = a * 3; a = b - a; b = b / a; a = a + b * 2; System.out.println(a + " " + b);
Çoktan Seçmeli · İfadeler ve Değişkenler
Soru 9: Geçerli Değişken Adı
Aşağıdakilerden hangisi Java'da geçerli bir değişken adıdır?
D: Harf, rakam ve alt çizgi içerebilir, rakamla başlamaz. 2sayi rakamla başlar, “ogrenci sayisi” boşluk içerir, class anahtar kelimedir. Gelenek yine de camelCase'tir: toplam2, ortalamaNot.
Çoktan Seçmeli · İfadeler ve Değişkenler
Soru 10: && ile ||
int x = 7; iken System.out.println(x > 5 && x < 7 || x == 7); ne yazdırır?
A: && önceliği ||'den yüksektir: (7 > 5 && 7 < 7) = false, ardından false || (7 == 7) = true. Karşılaştırmaların sonucu boolean'dır, sayı değil (D). Parantez yazmak okunurluğu artırır ama gerekli değildir (C).
Adım Adım Çalıştırma · Dizgiler ve Tipler
Soru 11: Birleştirme Soldan Sağa
Program ne yazdırır? ('a' = 97)
İki int değişken.
Soldan sağa: 2 + 3 iki int → 5, sonra 5 + "!" birleştirme → 5!.
Sol işlenen dizgi: "!" + 2 → "!2", "!2" + 3 → !23. Toplama hiç yapılmaz.
Parantez toplamayı öne alır: 2 + 3 = 5 → !5.
2 + 3 = 5, 5 + "" = "5"; artık hep birleştirme: "52", 523.
char bir sayısal koddur: 'a' + 3 = 97 + 3 = 100, sonra "c" eklenir → 100c.
int a = 2, b = 3;
System.out.println(a + b + "!");
System.out.println("!" + a + b);
System.out.println("!" + (a + b));
System.out.println(a + b + "" + a + b);
System.out.println('a' + b + "c");Çıktı Sorusu · Dizgiler ve Tipler
Soru 12: Dizgi Metotları
Program ne yazdırır?
String s = "Programlama";
System.out.println(s.length());
System.out.println(s.indexOf('a'));
System.out.println(s.toUpperCase());
System.out.println(s.contains("ram"));
System.out.println("Ad:\t\""
+ s.charAt(0) + "\"");Cevabı göster
11 5 PROGRAMLAMA true Ad: "P"
11 karakter. indexOf ilk eşleşmenin indisini verir, sayım 0'dan başlar: P0 r1 o2 g3 r4 a5.
“ram” 4. indisten başlar → true. \t sekme, \" çift tırnak yazar.
Çoktan Seçmeli · Dizgiler ve Tipler
Soru 13: Değer Atanmamış Dizgi
Yerel bir değişken için String s; System.out.println(s); yazılıyor. Ne olur?
C: Java, yerel değişkenin değer almadan okunmasına izin vermez; hata derlemede yakalanır. String s = null; yazılsaydı null, String s = ""; yazılsaydı boş satır yazılırdı: boş dizgi, null ve atanmamış üç farklı şeydir.
Hata Bulma · Dizgiler ve Tipler
Soru 14: Farklı Tipleri Karşılaştırmak
Hangi satırlar derlenmez? Derlenen satırlar ne yazdırır?
int sayi = 5; String metin = "5"; // (1) System.out.println(sayi == metin); // (2) System.out.println(metin.equals(sayi)); // (3) System.out.println( Integer.parseInt(metin) == sayi); // (4) System.out.println(3 + true);
Cevabı göster
- (1) derlenmez:
bad operand types for binary operator '=='(int ile String). - (2) derlenir, false: String hiçbir zaman bir Integer'a eşit değildir.
- (3) derlenir, true: önce aynı tipe dönüştürülür ("5" → 5).
- (4) derlenmez:
bad operand types for binary operator '+'; boolean sayıya eklenemez.
Adım Adım Çalıştırma · Program ve Algoritma
Soru 15: Üç Değişkeni Döndürmek
Program ne yazdırır? gecici neden gerekli?
Amaç değerleri sola döndürmek: x ← y, y ← z, z ← x.
Üzerine yazılacak ilk değer (x = 1) önce saklanır.
x = 2. Eski 1 gecici'de güvende.
y = 3.
z, saklanan eski x'i alır: 1.
Çıktı 2 3 1. gecici olmadan z = x satırı x'in yeni değerini (2) alırdı: 2 3 2.
int x = 1, y = 2, z = 3; int gecici = x; x = y; y = z; z = gecici; System.out.println(x + " " + y + " " + z);
Çoktan Seçmeli · Program ve Algoritma
Soru 16: İfade mi Deyim mi?
Aşağıdakilerden hangisi bir etki yaratan deyim değil, yalnızca değer üreten bir ifadedir?
D: x > 3 bir boolean değer üretir; tek başına satır olarak yazılırsa not a statement hatası verir. Atama, tanım ve println etki yaratır ve ; ile biten deyimlerdir.
Hata Bulma · Program ve Algoritma
Soru 17: Fahrenhayt'tan Celsius'a
f = 100 için 37,77… beklenirken program ne yazdırır? Nedenini açıklayıp iki farklı biçimde düzeltin.
double f = 100; double c = 5 / 9 * (f - 32); System.out.println(c);
Cevabı göster
0.0
5 / 9 iki int'in bölümüdür: 0. 0 × 68.0 = 0.0. Hata derleyici tarafından yakalanmaz: anlam (mantık) hatasıdır.
Düzeltme: 5.0 / 9 * (f - 32) ya da önce çarpma, (f - 32) * 5 / 9; ikisi de 37.77777777777778 yazar.
Kod Yazma · Program ve Algoritma
Soru 18: Vücut Kitle İndeksi
Kullanıcıdan boyu (m) ve kiloyu (kg) kesirli sayı olarak alıp vücut kitle indeksini (VKİ = kilo / boy²) hesaplayan ve yazdıran programı yazın. Formül kilo / boy * boy diye yazılsaydı ne olurdu?
Cevabı göster
import java.util.Scanner; public class Vki { public static void main(String[] args) { Scanner giris = new Scanner(System.in); System.out.print("Boy (m): "); double boy = giris.nextDouble(); System.out.print("Kilo (kg): "); double kilo = giris.nextDouble(); double vki = kilo / (boy * boy); System.out.println("VKİ: " + vki); } }
- Boy 1,75 ve kilo 65,2 için:
VKİ: 21.289795918367346. /ile*aynı önceliktedir ve soldan sağa işlenir:kilo / boy * boy=(kilo / boy) * boy= kilo. Program 65.2 yazar; derleyici bu mantık hatasını yakalamaz.
Çoktan Seçmeli · Program ve Algoritma
Soru 19: Girdide Ondalık Ayırıcı
Bilgisayarın yerel ayarı Türkçe. Kullanıcı istemdeki örneğe uyup 1.75 yazıyor. Ne olur?
Scanner giris = new Scanner(System.in); System.out.print("Boy (örn: 1.75): "); double boy = giris.nextDouble();
D: Scanner sayıları yerel ayarın biçimiyle okur; Türkçede ondalık ayırıcı virgüldür. 1,75 kabul edilir, 1.75 double olarak tanınmaz. Kaynak koddaki sabitler (65.2) ve println çıktısı ise yerel ayardan bağımsız olarak hep noktalıdır. Çözüm: giris.useLocale(Locale.US); ya da istemdeki örneği 1,75 yapmak.
Çoktan Seçmeli · Popüler Diller
Soru 20: Kotlin
Kotlin için hangisi doğrudur?
A: Kotlin, Java gibi bytecode'a derlenir ve JVM'de çalışır; Android geliştirmede yaygındır. B JavaScript'i, C Swift'i, D SQL'i anlatır.