Bölüm 2.1: Programlama
Çoktan Seçmeli · Programlama Dilleri
Soru 1: 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 2: 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 3: 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.0 verir (doğrusu 7.5); yalnızca testle bulunur.
Çoktan Seçmeli · Söz Dizimi ve Anlam
Soru 4: Hata Türü
Ortalama hesaplayan bir programda toplam yanlışlıkla 3 yerine 2'ye bölünüyor. Program derleniyor, çalışıyor ve bir sayı yazıyor; ama sayı yanlış. Bu hangi tür hatadır?
C: Kod dil kurallarına uyduğu için derlenir ve hiçbir işlem geçersiz olmadığı için istisna da oluşmaz. Mantık hataları ancak beklenen sonuçla karşılaştırarak, yani testlerle bulunur. İstisna mekanizması yalnızca ortadaki türü (çalışma zamanı hatalarını) ele alır.
Ç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: İşleç Ö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);
Adım Adım Çalıştırma · Dizgiler ve Tipler
Soru 9: 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");Hata Bulma · Dizgiler ve Tipler
Soru 10: 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 11: Üç 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 12: İ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 13: 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 14: 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 15: 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 16: 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.