Bölüm 2.1: Programlama

Bölüm 2.1: Programlama · Çalışma Soruları
Derlenen ve yorumlanan dillerParadigmalarHata türleriİşleç önceliğiDeyim sırasıDizgi birleştirmeTiplerİfade ve deyim
Sercan KÜLCÜ · Giresun Üniversitesi · Bilgisayar Mühendisliği

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

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);

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?

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

Son

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