Cevaplar ve Açıklamalar
Açıklama:
Bu soruda, bir tamsayı dizisi parametre olarak alınacak ve dizideki en küçük elemanın indeksi konsola yazdırılacak. Java’da diziler sıfır tabanlı indekslenir, yani ilk elemanın indeksi 0’dır. En küçük elemanı bulmak için diziyi tarayıp her elemanı karşılaştıracağız. Eğer birden fazla en küçük eleman varsa, genellikle ilk karşılaşılanın indeksi döndürülür (soru başka bir durum belirtmediği için).
int[]
tipinde bir dizi parametresi alır.System.out.println
ile yazdırılır.Çözüm:
Test Kodu:
Örnek Çıktı:
Dizi: {5, 2, 9, 1, 7, 1}
Çıktı: En küçük elemanın indeksi: 3
Açıklama: En küçük eleman 1, ilk olarak indeks 3’te bulunuyor (1 ikinci kez indeks 5’te, ama ilk karşılaşılan seçilir).
Analitik Perspektif: Metot, O(n) zaman karmaşıklığına sahiptir, n dizi uzunluğudur. Boş dizi kontrolü, sağlamlığı artırır. Gerçek dünyada, birden fazla en küçük eleman için tüm indeksleri döndüren bir varyasyon veya hata mesajlarının daha ayrıntılı olması düşünülebilir.
Not Aralığı: 100-90: A, 89-80: B, 79-70: C, 69-60: D, 59-50: E, 49-0: F
Açıklama:
Bu soruda, bir sayısal not (tamsayı) parametre olarak alınacak ve verilen aralıklara göre harf notu konsola yazdırılacak. Notun 0-100 aralığında olduğunu varsayıyoruz, ancak soru geçersiz notlar (örneğin, negatif veya 100’den büyük) için bir kural belirtmediği için basit bir çözüm sunulacak. Çoklu if-else
yapısı kullanılarak not aralığı kontrol edilecek.
int
tipinde bir not parametresi alır.System.out.println
ile yazdırılır.Çözüm:
Test Kodu:
Örnek Çıktı:
Not: 95
→ Harf notu: A
Not: 85
→ Harf notu: B
Not: 45
→ Harf notu: F
Analitik Perspektif: Metot, O(1) zaman karmaşıklığına sahiptir, çünkü sabit sayıda koşullu kontrol yapar. Gerçek dünyada, notun ondalıklı olabileceği durumlar için double
kullanılabilir veya geçersiz notlar için daha ayrıntılı hata yönetimi eklenebilir.
Açıklama:
Bu soruda, bir tamsayının faktöriyelini hesaplayan bir metot yazılacak ve sonuç döndürülecek. Faktöriyel, bir sayının kendisinden 1’e kadar olan tüm pozitif tamsayıların çarpımıdır (örneğin, 5! = 5 × 4 × 3 × 2 × 1 = 120). 0! = 1 olarak tanımlıdır. Negatif sayılar için faktöriyel tanımsızdır. Java’da büyük sayılar için long
kullanılabilir, ancak çok büyük faktöriyeller (örneğin, 20!’den sonrası) long
sınırını aşar. Soru, veri tipi belirtmediği için long
kullanacağız ve negatif sayılar için hata yönetimi ekleyeceğiz.
int
tipinde bir parametre alır.long
tipinde döndürülür.Çözüm:
Test Kodu:
Örnek Çıktı:
5! = 120
0! = 1
-1! = -1
(Hata göstergesi)
Analitik Perspektif: Metot, O(n) zaman karmaşıklığına sahiptir. long
, 20!’ye kadar doğru sonuç verir; daha büyük sayılar için BigInteger
kullanılabilir. Negatif sayılar için istisna fırlatma (IllegalArgumentException
) daha uygun olabilir.
Açıklama:
Bu soruda, taban ve üs değerleri tamsayı olarak alınacak ve tabanın üssü hesaplanıp döndürülecek (örneğin, 2³ = 8). Üs alma, tabanın kendisiyle üs sayısı kadar çarpılmasıdır. Negatif üsler için sonuç ondalıklı olabilir (örneğin, 2⁻¹ = 0.5), ancak tamsayı sonucu döndürmek için long
kullanacağız ve negatif üsleri dikkate almayacağız (soru bunu belirtmediği için). Büyük sonuçlar için long
uygun, ancak taşma riski var.
int
parametresi alır: taban ve üs.long
olarak döndürülür.Çözüm:
Test Kodu:
Örnek Çıktı:
2^3 = 8
5^0 = 1
3^-1 = -1
(Hata göstergesi)
Analitik Perspektif: Metot, O(n) zaman karmaşıklığına sahiptir, n üs değeridir. Daha verimli bir çözüm için karekök algoritması (O(log n)) kullanılabilir. long
taşma riski taşır; büyük sayılar için BigInteger
düşünülebilir.
Kod:
Açıklama:
Bu kod, Fibonacci dizisinin ilk 11 elemanını yazdırır. Fibonacci dizisinde her sayı, önceki iki sayının toplamıdır: 0, 1, 1, 2, 3, 5, 8, ... Kodun işleyişini adım adım inceleyelim:
a = 0
, b = 1
, n = 11
.for (int i = 0; i < n; i++)
, 11 kez çalışır (i = 0, 1, ..., 10).System.out.print(a + " ")
: Mevcut a
yazdırılır.int gecici = a + b
: Bir sonraki Fibonacci sayısı hesaplanır.a = b
: a
, bir sonraki sayıya geçer.b = gecici
: b
, yeni hesaplanan sayıya geçer.Adım Adım Hesaplama:
a=0
, yazdır: 0
, gecici=0+1=1
, a=1
, b=1
a=1
, yazdır: 1
, gecici=1+1=2
, a=1
, b=2
a=1
, yazdır: 1
, gecici=1+2=3
, a=2
, b=3
a=2
, yazdır: 2
, gecici=2+3=5
, a=3
, b=5
a=3
, yazdır: 3
, gecici=3+5=8
, a=5
, b=8
a=5
, yazdır: 5
, gecici=5+8=13
, a=8
, b=13
a=8
, yazdır: 8
, gecici=8+13=21
, a=13
, b=21
a=13
, yazdır: 13
, gecici=13+21=34
, a=21
, b=34
a=21
, yazdır: 21
, gecici=21+34=55
, a=34
, b=55
a=34
, yazdır: 34
, gecici=34+55=89
, a=55
, b=89
a=55
, yazdır: 55
, gecici=55+89=144
, a=89
, b=144
Çıktı: 0 1 1 2 3 5 8 13 21 34 55
Örnek Çıktı:
0 1 1 2 3 5 8 13 21 34 55
Analitik Perspektif: Kod, Fibonacci dizisini O(n) karmaşıklıkla üretir. Büyük n değerleri için int
taşabilir; long
veya BigInteger
kullanılabilir. Kod, basit ve etkilidir, ancak rekürsif bir çözüm daha az tercih edilir (O(2ⁿ) karmaşıklık).
Kod:
Açıklama:
Bu kod, 5’in faktöriyelini hesaplar ve her adımda ara sonucu yazdırır. Faktöriyel, sayının kendisiyle 1’e kadar olan sayıların çarpımıdır (5! = 5 × 4 × 3 × 2 × 1 = 120). Ara sonuçlar, çarpımın her adımında yazdırılır.
sayi = 5
, sonuc = 1
.while(sayi > 0)
, sayi sıfır olana kadar devam eder.sonuc *= sayi
: Sonuca sayıyı çarpar.sayi--
: Sayıyı bir azaltır.System.out.print(sonuc + " ")
: Ara sonucu yazdırır.Adım Adım Hesaplama:
sayi = 5
, sonuc = 1
sonuc = 1 * 5 = 5
sayi = 5 - 1 = 4
5
sayi = 4
, sonuc = 5
sonuc = 5 * 4 = 20
sayi = 4 - 1 = 3
20
sayi = 3
, sonuc = 20
sonuc = 20 * 3 = 60
sayi = 3 - 1 = 2
60
sayi = 2
, sonuc = 60
sonuc = 60 * 2 = 120
sayi = 2 - 1 = 1
120
sayi = 1
, sonuc = 120
sonuc = 120 * 1 = 120
sayi = 1 - 1 = 0
120
sayi = 0
, döngü biter.Çıktı: 5 20 60 120 120
Örnek Çıktı:
5 20 60 120 120
Analitik Perspektif: Kod, O(n) karmaşıklıkla faktöriyel hesaplar ve ara sonuçları gösterir. Son çarpım (1 ile çarpma) gereksizdir, ancak çıktıya dahil edilir. Büyük sayılar için long
veya BigInteger
gerekebilir.
Kod:
Açıklama:
Bu kod, 2025 sayısının rakamlarını sağdan sola yazdırır ve rakamların toplamını hesaplayıp en son toplamı yazdırır. İşlemi adım adım inceleyelim:
sayi = 2025
, sonuc = 0
.while(sayi > 0)
, sayi sıfır olana kadar devam eder.abc = sayi % 10
: Son rakamı alır.sonuc += abc
: Rakamı toplama ekler.sayi = sayi / 10
: Son rakamı siler.System.out.print(abc + " ")
: Rakamı yazdırır.System.out.print(sonuc + " ")
toplamı yazdırır.Adım Adım Hesaplama:
sayi = 2025
, sonuc = 0
abc = 2025 % 10 = 5
sonuc = 0 + 5 = 5
sayi = 2025 / 10 = 202
5
sayi = 202
, sonuc = 5
abc = 202 % 10 = 2
sonuc = 5 + 2 = 7
sayi = 202 / 10 = 20
2
sayi = 20
, sonuc = 7
abc = 20 % 10 = 0
sonuc = 7 + 0 = 7
sayi = 20 / 10 = 2
0
sayi = 2
, sonuc = 7
abc = 2 % 10 = 2
sonuc = 7 + 2 = 9
sayi = 2 / 10 = 0
2
sayi = 0
, döngü biter.sonuc = 9
, yazdır: 9
Çıktı: 5 2 0 2 9
Örnek Çıktı:
5 2 0 2 9
Analitik Perspektif: Kod, O(log n) karmaşıklıkla çalışır, n sayının değeridir (basamak sayısı log₁₀(n)). Rakamları sağdan sola yazdırması, sayının ters sırasını verir. Toplamın yazdırılması, kodun işlevselliğini artırır.