Skip to content

erenmente/java-algoritmalar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 

Repository files navigation

🚀 Algoritma ve Veri Yapıları Örnekleri

Bu proje, temel algoritma ve veri yapısı kavramlarını pekiştirmek amacıyla Java dilinde yazılmış uygulamaları içerir. Genel olarak Fatih Özkaynak hocamın kaynaklar kısmındaki oynatma listelerinden ilerledim. Buna ek olarak, merak ettiğim algoritmaları Clean Code prensiplerine sadık kalarak, modüler ve okunabilir şekilde uygulamaya çalıştım.


📂 İçerik Özeti

# Proje Adı Ana Dosya Temel Kavramlar
1 Dinamik Dizi (Binary) KutuphaneKullanmadanDinamikDizi.java Array Resizing, Binary Conversion
2 Matris Oluşturucu Matris.java 2D Arrays, Pattern Generation
3 Taban Dönüştürücü OnlukTabanDonusturme.java Base Conversion (Octal/Binary)
4 Sayı Çözümleyici (V1) SayiCozumleyici1.java Array Return Type
5 Sayı Çözümleyici (V2) SayiCozumleyici2.java Class Structures, DRY Principle
6 Ortalama Hesaplayıcı GirdiyeGoreOrtalama.java Modular Methods, Math Logic
7 Üçgen Çizme UcgenCizme.java Nested Loops, Pattern Printing
8 Dörtgen Çizme DortgenCizme.java Nested Loops, Grid Generation
9 Havalı İsim Yazdırıcı HavaliIsim.java String Manipulation, Creative Output
10 Harf Analizi HarfSay.java Frequency Counting, Bubble Sort, Helper Classes
11 Navigasyon Navigasyon.java 2D Arrays, Path Finding
12 Mayın Tarlası MayinTarlasi.java 2D Arrays, Game Logic, Random Generation
13 Sayıyı Yazıya Çeviri SayiCevirici.java String Arrays, Helper Class
14 Vücut Kitle İndeksi VucutKutleIndeksi.java OOP, Mathematical Logic

🛠️ Proje Detayları

1. Kütüphane Kullanmadan Dinamik Dizi

📌 Dosya: src/KutuphaneKullanmadanDinamikDizi.java

  • Amaç: Girilen onluk (decimal) sayıyı ikilik (binary) tabana çevirmek.
  • Teknik Detay: Java'nın hazır ArrayList sınıfını kullanmak yerine, dizi dolduğunda boyutunu manuel olarak artıran (dinamikDizi) özel bir algoritma yazılmıştır. Bu sayede ArrayList'in arka planda nasıl çalıştığı simüle edilmiştir.

2. Matris Oluşturucu

📌 Dosya: src/Matris.java

  • Amaç: Kullanıcıdan alınan satır sayısına (4-8 arası) göre özel bir sayısal örüntüye sahip 4 sütunlu matris oluşturmak.
  • Teknik Detay: İç içe döngüler kullanılarak, her satırda azalan ve her sütunda artan dinamik bir matematiksel formül uygulanır.

3. Onluk Taban Dönüştürücü

📌 Dosya: src/OnlukTabanDonusturme.java

  • Amaç: Girilen sayının Tek veya Çift olmasına göre farklı tabanlara (Octal veya Binary) dönüşüm yapmak.
  • Özellikler: 'q' tuşu ile çıkış imkanı, hatalı giriş kontrolü (Exception Handling benzeri yapı) ve sonuçları ArrayList ile tersten yazdırma mantığı içerir.

4. Sayı Çözümleyici ve Basamak Analizi (Versiyon 1 - Dizi)

📌 Dosya: src/SayiCozumleyici1.java

  • Amaç: Bir sayının basamaklarını analiz ederek istatistiksel veriler sunmak.
  • Teknik Detay: Verileri taşımak için int[] dizisi kullanılmıştır.
  • Not: Bu yöntem çalışmakla birlikte, dönen dizinin hangi indeksinin ne anlama geldiği (dizi[0] vb.) kod okunabilirliğini düşürmektedir. Gelişim sürecini görmek adına projede tutulmuştur.

5. Sayı Çözümleyici ve Basamak Analizi (Versiyon 2 - Sınıf)

📌 Dosya: src/SayiCozumleyici2.java

  • Amaç: Versiyon 1'deki aynı problemi Clean Code prensiplerine göre çözmek.
  • Clean Code Dokunuşu: Sonuçları taşımak için ilkel bir dizi yerine, özel bir Sınıf (Class) yapısı kullanılmıştır. Bu sayede "Magic Numbers" sorunu çözülmüş ve dizi[0] yerine sonuc.tekToplam gibi kendi kendini açıklayan bir yapı kurulmuştur.

6. Girdiye Göre Ortalama Hesaplayıcı

📌 Dosya: src/GirdiyeGoreOrtalama.java

  • Amaç: Sayının türüne göre farklı ortalama hesapları yapmak.
    • Çift Sayı: Basamakların Aritmetik Ortalaması.
    • Tek Sayı: Basamakların Geometrik Ortalaması.
  • Teknik Detay: Her işlem (ciftTekKontrol, aritmetikOrtalama, geometrikOrtalama) ayrı metotlara bölünerek modülerlik sağlanmıştır.

7. Üçgen Çizme

📌 Dosya: src/UcgenCizme.java

  • Amaç: Kullanıcıdan alınan yükseklik değerine göre yıldızlarla ikizkenar üçgen çizmek.
  • Teknik Detay: İç içe döngüler kullanılarak satır, boşluk ve yıldız sayısı dinamik olarak hesaplanıp konsola bastırılır.

8. Dörtgen Çizme

📌 Dosya: src/DortgenCizme.java

  • Amaç: Kullanıcıdan alınan en ve boy değerlerine göre yıldızlarla dikdörtgen çizmek.
  • Teknik Detay: Basit iç içe döngü mantığı ile kullanıcının belirlediği boyutlarda bir matris görselleştirilir.

9. Havalı İsim Yazdırıcı

📌 Dosya: src/HavaliIsim.java

  • Amaç: Girilen ad ve soyadı, özel bir çerçeveleme mantığıyla ekrana yazdırmak.
  • Teknik Detay: String manipülasyonu ile metin uzunlukları kontrol edilir, gerekirse dolgu karakterleri (* veya +) eklenir ve karakterler belirli bir desen (köşeli veya sarmal benzeri) oluşturacak şekilde yazdırılır.

10. Harf Analizi

📌 Dosya: src/HarfSay.java

  • Amaç: Rastgele üretilen 100 harf üzerinde analiz yaparak; harfleri alfabetik sıralamak, her harfin kaç kez geçtiğini bulmak ve en çok tekrar eden harfi tespit etmek.
  • Teknik Detay: Math.random() ile veri üretimi, Bubble Sort mantığı ile sıralama ve sonuçları döndürmek için yardımcı bir Sınıf (Class) (kutu yapısı) kullanımı içerir.

11. Navigasyon

📌 Dosya: src/Navigasyon.java

  • Amaç: 10x10'luk bir matris üzerinde (0,0) noktasından başlayıp bitiş noktasına ulaşan rastgele bir yol oluşturmak ve bu yolun koordinatlarını tespit etmek.
  • Teknik Detay: İki boyutlu diziler (matrisler) üzerinde rastgele yol üretimi (matrisDoldur) ve matris taraması ile yol koordinatlarının bulunması (yolBul). Matrisın görselliği için iç içe döngülerle yazdırma işlemi yapılır.

12. Mayın Tarlası

📌 Dosya: src/MayinTarlasi.java

  • Amaç: Kullanıcıdan alınan boyutlara göre rastgele mayınlı bir harita oluşturmak ve mayınlara basmadan puan toplamaya çalışmak.
  • Teknik Detay: Math.random() ile 0 (boş) ve 1 (mayın) değerlerinin dağıtımı, koordinat sisteminin kullanıcı dostu hale getirilmesi (indislerin 0 yerine 1-based algılanması), puanlama mantığı ve modüler metot yapısı (Encapsulation denemesi) içerir.

13. Sayıyı Yazıya Çeviri

📌 Dosya: src/SayiCevirici.java

  • Amaç: Girilen 4 basamaklı bir sayıyı (örneğin 1453) Türkçe metin karşılığına (Bin Dört Yüz Elli Üç) dönüştürmek.
  • Teknik Detay: Sayı modüler aritmetik ile basamaklarına ayrılır (basamaklaraBol). Veriler Basamaklar isimli yardımcı bir sınıfta (Helper Class) tutulur ve önceden tanımlanmış String dizileri (birler, onlar) kullanılarak ekrana yazdırılır.

14. Vücut Kitle İndeksi

📌 Dosya: src/VucutKutleIndeksi.java

  • Amaç: Kullanıcıdan alınan boy ve kilo değerlerine göre Vücut Kitle İndeksini hesaplayıp, kişinin durumunu (Zayıf, Normal, Şişman) belirlemek.
  • Teknik Detay: Verilerin Nesne Yönelimli Programlama (OOP) prensiplerine uygun olarak işlenmesi, boy ve kilo değerlerinin sınıf özellikleri (fields) olarak saklanması ve modüler metot yapısı kullanılır.

📚 Kaynakça

About

📊 Veri yapıları ve algoritma çalışmalarım - Java ile implementasyonlar

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages