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=1a=1, yazdır: 1, gecici=1+1=2, a=1, b=2a=1, yazdır: 1, gecici=1+2=3, a=2, b=3a=2, yazdır: 2, gecici=2+3=5, a=3, b=5a=3, yazdır: 3, gecici=3+5=8, a=5, b=8a=5, yazdır: 5, gecici=5+8=13, a=8, b=13a=8, yazdır: 8, gecici=8+13=21, a=13, b=21a=13, yazdır: 13, gecici=13+21=34, a=21, b=34a=21, yazdır: 21, gecici=21+34=55, a=34, b=55a=34, yazdır: 34, gecici=34+55=89, a=55, b=89a=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 = 5sayi = 5 - 1 = 45 sayi = 4, sonuc = 5
sonuc = 5 * 4 = 20sayi = 4 - 1 = 320 sayi = 3, sonuc = 20
sonuc = 20 * 3 = 60sayi = 3 - 1 = 260 sayi = 2, sonuc = 60
sonuc = 60 * 2 = 120sayi = 2 - 1 = 1120 sayi = 1, sonuc = 120
sonuc = 120 * 1 = 120sayi = 1 - 1 = 0120 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 = 5sonuc = 0 + 5 = 5sayi = 2025 / 10 = 2025 sayi = 202, sonuc = 5
abc = 202 % 10 = 2sonuc = 5 + 2 = 7sayi = 202 / 10 = 202 sayi = 20, sonuc = 7
abc = 20 % 10 = 0sonuc = 7 + 0 = 7sayi = 20 / 10 = 20 sayi = 2, sonuc = 7
abc = 2 % 10 = 2sonuc = 7 + 2 = 9sayi = 2 / 10 = 02 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.