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);
}{5, 2, 9, 1, 7, 1}Çıktı:
En küçük elemanın indeksi: 3Analiz: 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 → A85 → B45 → FAnaliz: 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! = 1200! = 1Analiz: 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 = 85^0 = 1Analiz: 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.
0 1 1 2 3 5 8 13 21 34 55Analiz: 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.
5 20 60 120 120Analiz: 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.
- 5 → toplam 5
- 2 → toplam 7
- 0 → toplam 7
- 2 → toplam 9
5 2 0 2 9Analiz: Basamak sayısıyla orantılı çalışır; yani O(log n).