Java · 2024-2025 · Vize

2024-2025 Java Vize Sınavı

Cevaplar ve açıklamalar

Soru 1: Parametre olarak verilen dizide en küçük elemanı bulup dizideki konumunu konsola yazdıran fonksiyonu yazınız.

public static void enKucukElemanIndeksi(int[] dizi) {
    if (dizi == null || dizi.length == 0) {
        System.out.println("Dizi boş!");
        return;
    }

    int minIndeks = 0;
    int minDeger = dizi[0];

    for (int i = 1; i < dizi.length; i++) {
        if (dizi[i] < minDeger) {
            minDeger = dizi[i];
            minIndeks = i;
        }
    }

    System.out.println("En küçük elemanın indeksi: " + minIndeks);
}
Dizi: {5, 2, 9, 1, 7, 1}
Çıktı: En küçük elemanın indeksi: 3

Analiz: Dizi bir kez tarandığı için O(n) zamanda çalışır. Aynı minimum değer birden fazla kez bulunursa ilk indeks seçilir.

Soru 2: Parametre olarak verilen sayısal not değerinin harf notu karşılığını konsola yazdıran fonksiyonu yazınız.

Aralıklar: 90-100 A, 80-89 B, 70-79 C, 60-69 D, 50-59 E, 0-49 F

public static void harfNotuYazdir(int not) {
    if (not < 0 || not > 100) {
        System.out.println("Geçersiz not!");
    } else if (not >= 90) {
        System.out.println("Harf notu: A");
    } else if (not >= 80) {
        System.out.println("Harf notu: B");
    } else if (not >= 70) {
        System.out.println("Harf notu: C");
    } else if (not >= 60) {
        System.out.println("Harf notu: D");
    } else if (not >= 50) {
        System.out.println("Harf notu: E");
    } else {
        System.out.println("Harf notu: F");
    }
}
95 → A
85 → B
45 → F

Analiz: Sabit sayıda koşul kontrolü yaptığı için O(1) zamanda çalışır.

Soru 3: Verilen bir sayının faktöriyelini hesaplayan ve sonucu geri döndüren metodu yazınız.

public static long faktoriyelHesapla(int n) {
    if (n < 0) {
        throw new IllegalArgumentException(
            "Faktöriyel negatif sayılar için tanımsızdır."
        );
    }

    long sonuc = 1;

    for (int i = 2; i <= n; i++) {
        sonuc *= i;
    }

    return sonuc;
}
5! = 120
0! = 1

Analiz: O(n) zamanda çalışır. long ile 20! doğru temsil edilebilir; daha büyük değerler için BigInteger gerekir.

Soru 4: Taban ve üs tamsayı değerlerini parametre olarak alan ve üs alma işleminin sonucunu döndüren metodu yazınız.

public static long usHesapla(int taban, int us) {
    if (us < 0) {
        throw new IllegalArgumentException(
            "Bu sürüm negatif üsleri desteklemiyor."
        );
    }

    long sonuc = 1;

    for (int i = 0; i < us; i++) {
        sonuc *= taban;
    }

    return sonuc;
}
2^3 = 8
5^0 = 1

Analiz: Bu basit sürüm O(us) zamanda çalışır. Exponentiation by squaring ile O(log us) yapılabilir.

Soru 5: Aşağıdaki Fibonacci kodu çalıştığında ekran çıktısı ne olur?

int n = 11;
int a = 0, b = 1;

for (int i = 0; i < n; i++) {
    System.out.print(a + " ");
    int gecici = a + b;
    a = b;
    b = gecici;
}

Kod Fibonacci dizisinin ilk 11 elemanını iteratif olarak üretir.

Çıktı: 0 1 1 2 3 5 8 13 21 34 55

Analiz: O(n) zamanda ve O(1) ek bellekle çalışır.

Soru 6: Aşağıdaki kod parçası çalıştığında ekran çıktısı ne olur?

int sayi = 5;
int sonuc = 1;

while (sayi > 0) {
    sonuc *= sayi;
    sayi--;
    System.out.print(sonuc + " ");
}

Her döngü adımında ara faktöriyel sonucu ekrana yazdırılır.

Çıktı: 5 20 60 120 120

Analiz: Döngü 5 kez çalışır. Son adımda 1 ile çarpıldığı için 120 değeri ikinci kez yazdırılır.

Soru 7: Aşağıdaki kod parçası çalıştığında ekran çıktısı ne olur?

int sayi = 2025;
int sonuc = 0;

while (sayi > 0) {
    int abc = sayi % 10;
    sonuc += abc;
    sayi = sayi / 10;
    System.out.print(abc + " ");
}

System.out.print(sonuc + " ");

Kod sayının rakamlarını sağdan sola yazdırır ve rakamların toplamını en sona ekler.

  1. 5 → toplam 5
  2. 2 → toplam 7
  3. 0 → toplam 7
  4. 2 → toplam 9
Çıktı: 5 2 0 2 9

Analiz: Basamak sayısıyla orantılı çalışır; yani O(log n).