Bölüm 2: Programlama

Bölüm 2: Programlama · Çalışma Soruları
Derleme ve JVMParadigmalarHata türleriİşlem önceliğiAtamaKoşullu ifadelerDizgi birleştirmeTiplerİfade ve deyim
Sercan KÜLCÜ

Ç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?

a5

a için yer ayrılır, içine 5 yazılır.

a5b15

Sağ taraf: 5 · 3 = 15 → yeni değişken b. a değişmez.

a10b15

Önce sağ taraf, a'nın eski değeriyle: 15 − 5 = 10; sonra a'ya yazılır.

a10b1

15 / 10 = 1 (tam sayı bölmesi, 0,5 atılır).

a12b1

* önce: 1 · 2 = 2, sonra 10 + 2 = 12.

a12b1

Çı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?

x1y2z3gecici

Amaç değerleri sola döndürmek: x ← y, y ← z, z ← x.

x1y2z3gecici1

Üzerine yazılacak ilk değer (x = 1) önce saklanır.

x2y2z3gecici1

x = 2. Eski 1 gecici'de güvende.

x2y3z3gecici1

y = 3.

x2y3z1gecici1

z, saklanan eski x'i alır: 1.

x2y3z1gecici1

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

Son

Bölüm 2: Programlama: Çalışma Soruları
Konu anlatımı: Programlama sunumu · Terim sözlüğü
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.