Algoritma Örnekleri
Bu bölümde Lordex ile yazılmış çeşitli algoritma örneklerini bulabilirsiniz.
Matematiksel Algoritmalar
Faktöriyel Hesaplama
Bir sayının faktöriyelini hesaplar (n!).
fonksiyon faktoriyel(n) {
eger (n <= 1) {
geri_don 1
}
geri_don n * faktoriyel(n - 1)
}
// Test
yaz("5! = " + faktoriyel(5)) // 120
yaz("10! = " + faktoriyel(10)) // 3628800
İteratif Versiyon:
fonksiyon faktoriyel_iteratif(n) {
sonuc = 1
i = 2
iken (i <= n) {
sonuc = sonuc * i
i = i + 1
}
geri_don sonuc
}
yaz(faktoriyel_iteratif(6)) // 720
Fibonacci Dizisi
fonksiyon fibonacci(n) {
eger (n <= 1) {
geri_don n
}
geri_don fibonacci(n - 1) + fibonacci(n - 2)
}
// İlk 10 Fibonacci sayısı
yaz("Fibonacci Dizisi:")
i = 0
iken (i < 10) {
yaz("F(" + i + ") = " + fibonacci(i))
i = i + 1
}
Optimize Edilmiş Versiyon:
fonksiyon fibonacci_hizli(n) {
eger (n <= 1) {
geri_don n
}
a = 0
b = 1
sayac = 2
iken (sayac <= n) {
temp = a + b
a = b
b = temp
sayac = sayac + 1
}
geri_don b
}
yaz(fibonacci_hizli(20)) // 6765
Asal Sayı Kontrolü
fonksiyon asal_mi(n) {
eger (n < 2) {
geri_don hayir
}
eger (n == 2) {
geri_don evet
}
eger (n % 2 == 0) {
geri_don hayir
}
i = 3
iken (i * i <= n) {
eger (n % i == 0) {
geri_don hayir
}
i = i + 2
}
geri_don evet
}
// 1-100 arası asal sayılar
yaz("1-100 arası asal sayılar:")
sayi = 2
iken (sayi <= 100) {
eger (asal_mi(sayi)) {
yaz(sayi)
}
sayi = sayi + 1
}
En Büyük Ortak Bölen (EBOB)
fonksiyon ebob(a, b) {
iken (b != 0) {
temp = b
b = a % b
a = temp
}
geri_don a
}
yaz("EBOB(48, 18) = " + ebob(48, 18)) // 6
yaz("EBOB(100, 50) = " + ebob(100, 50)) // 50
En Küçük Ortak Kat (EKOK)
fonksiyon ebob(a, b) {
iken (b != 0) {
temp = b
b = a % b
a = temp
}
geri_don a
}
fonksiyon ekok(a, b) {
geri_don (a * b) / ebob(a, b)
}
yaz("EKOK(12, 18) = " + ekok(12, 18)) // 36
Sıralama Algoritmaları
Bubble Sort (Kabarcık Sıralaması)
fonksiyon bubble_sort(dizi) {
n = uzunluk(dizi)
i = 0
iken (i < n) {
j = 0
iken (j < n - i - 1) {
eger (dizi[j] > dizi[j + 1]) {
// Swap
temp = dizi[j]
dizi[j] = dizi[j + 1]
dizi[j + 1] = temp
}
j = j + 1
}
i = i + 1
}
}
sayilar = [64, 34, 25, 12, 22, 11, 90]
yaz("Önce: " + sayilar)
bubble_sort(sayilar)
yaz("Sonra: " + sayilar)
Selection Sort (Seçmeli Sıralama)
fonksiyon selection_sort(dizi) {
n = uzunluk(dizi)
i = 0
iken (i < n - 1) {
min_idx = i
j = i + 1
iken (j < n) {
eger (dizi[j] < dizi[min_idx]) {
min_idx = j
}
j = j + 1
}
// Swap
eger (min_idx != i) {
temp = dizi[i]
dizi[i] = dizi[min_idx]
dizi[min_idx] = temp
}
i = i + 1
}
}
sayilar = [29, 10, 14, 37, 13]
selection_sort(sayilar)
yaz(sayilar) // [10, 13, 14, 29, 37]
Arama Algoritmaları
Linear Search (Doğrusal Arama)
fonksiyon linear_search(dizi, aranan) {
i = 0
iken (i < uzunluk(dizi)) {
eger (dizi[i] == aranan) {
geri_don i
}
i = i + 1
}
geri_don -1 // Bulunamadı
}
sayilar = [10, 23, 45, 70, 11, 15]
indeks = linear_search(sayilar, 70)
eger (indeks != -1) {
yaz("70 sayısı indeks " + indeks + " konumunda bulundu")
} degilse {
yaz("Sayı bulunamadı")
}
Binary Search (İkili Arama)
fonksiyon binary_search(dizi, aranan) {
sol = 0
sag = uzunluk(dizi) - 1
iken (sol <= sag) {
orta = int((sol + sag) / 2)
eger (dizi[orta] == aranan) {
geri_don orta
} degilse_eger (dizi[orta] < aranan) {
sol = orta + 1
} degilse {
sag = orta - 1
}
}
geri_don -1
}
// Sıralı dizi gerekli!
sirali = [2, 5, 8, 12, 16, 23, 38, 45, 56, 67, 78]
sonuc = binary_search(sirali, 23)
yaz("23 sayısı indeks " + sonuc + " konumunda")
String Algoritmaları
Palindrom Kontrolü
fonksiyon palindrom_mu(metin) {
n = uzunluk(metin)
i = 0
iken (i < n / 2) {
eger (metin[i] != metin[n - 1 - i]) {
geri_don hayir
}
i = i + 1
}
geri_don evet
}
yaz(palindrom_mu("kayak")) // evet
yaz(palindrom_mu("merhaba")) // hayir
Karakter Sayma
fonksiyon karakter_say(metin, aranan) {
sayac = 0
i = 0
iken (i < uzunluk(metin)) {
eger (metin[i] == aranan) {
sayac = sayac + 1
}
i = i + 1
}
geri_don sayac
}
metin = "merhaba dünya"
yaz("'a' harfi " + karakter_say(metin, "a") + " kez geçiyor")
Dizi İşlemleri
Dizi Ters Çevirme
fonksiyon ters_cevir(dizi) {
sol = 0
sag = uzunluk(dizi) - 1
iken (sol < sag) {
temp = dizi[sol]
dizi[sol] = dizi[sag]
dizi[sag] = temp
sol = sol + 1
sag = sag - 1
}
}
sayilar = [1, 2, 3, 4, 5]
yaz("Önce: " + sayilar)
ters_cevir(sayilar)
yaz("Sonra: " + sayilar) // [5, 4, 3, 2, 1]
En Büyük ve En Küçük Bulma
fonksiyon min_max_bul(dizi) {
eger (uzunluk(dizi) == 0) {
yaz("Dizi boş!")
geri_don
}
en_kucuk = dizi[0]
en_buyuk = dizi[0]
icin (sayi in dizi) {
eger (sayi < en_kucuk) {
en_kucuk = sayi
}
eger (sayi > en_buyuk) {
en_buyuk = sayi
}
}
yaz("En küçük: " + en_kucuk)
yaz("En büyük: " + en_buyuk)
}
sayilar = [45, 23, 67, 12, 89, 34]
min_max_bul(sayilar)
Dizi Ortalaması
fonksiyon ortalama_hesapla(dizi) {
eger (uzunluk(dizi) == 0) {
geri_don 0
}
toplam = 0
icin (sayi in dizi) {
toplam = toplam + sayi
}
geri_don toplam / uzunluk(dizi)
}
notlar = [85, 92, 78, 90, 88]
ort = ortalama_hesapla(notlar)
yaz("Ortalama: " + ort)
Oyun Algoritmaları
Tahmin Oyunu
fonksiyon tahmin_oyunu() {
hedef = int(rastgele() * 100) + 1
tahmin_sayisi = 0
max_tahmin = 7
yaz("=== SAYI TAHMİN OYUNU ===")
yaz("1 ile 100 arasında bir sayı tuttum!")
yaz("Maksimum " + max_tahmin + " tahmin hakkınız var.")
iken (tahmin_sayisi < max_tahmin) {
yaz("\nTahmininiz (" + (tahmin_sayisi + 1) + "/" + max_tahmin + "):")
tahmin = int(oku())
tahmin_sayisi = tahmin_sayisi + 1
eger (tahmin == hedef) {
yaz("🎉 TEBRİKLER! " + tahmin_sayisi + " tahminde buldunuz!")
geri_don
} degilse_eger (tahmin < hedef) {
yaz("⬆️ Daha büyük bir sayı deneyin")
} degilse {
yaz("⬇️ Daha küçük bir sayı deneyin")
}
}
yaz("\n😢 Tahmin hakkınız bitti!")
yaz("Doğru sayı: " + hedef)
}
tahmin_oyunu()
Taş Kağıt Makas
fonksiyon tas_kagit_makas() {
secenekler = ["taş", "kağıt", "makas"]
bilgisayar = secenekler[int(rastgele() * 3)]
yaz("=== TAŞ KAĞIT MAKAS ===")
yaz("Seçiminiz (taş/kağıt/makas):")
oyuncu = oku()
yaz("\nSiz: " + oyuncu)
yaz("Bilgisayar: " + bilgisayar)
eger (oyuncu == bilgisayar) {
yaz("🤝 Berabere!")
} degilse_eger (
(oyuncu == "taş" ve bilgisayar == "makas") veya
(oyuncu == "kağıt" ve bilgisayar == "taş") veya
(oyuncu == "makas" ve bilgisayar == "kağıt")
) {
yaz("🎉 Kazandınız!")
} degilse {
yaz("😢 Kaybettiniz!")
}
}
tas_kagit_makas()
Pratik Uygulamalar
Basit Hesap Makinesi
fonksiyon hesap_makinesi() {
devam = evet
iken (devam) {
yaz("\n=== HESAP MAKİNESİ ===")
yaz("1. Toplama")
yaz("2. Çıkarma")
yaz("3. Çarpma")
yaz("4. Bölme")
yaz("5. Çıkış")
secim = int(oku("Seçiminiz: "))
eger (secim >= 1 ve secim <= 4) {
a = float(oku("Birinci sayı: "))
b = float(oku("İkinci sayı: "))
eger (secim == 1) {
yaz("Sonuç: " + (a + b))
} degilse_eger (secim == 2) {
yaz("Sonuç: " + (a - b))
} degilse_eger (secim == 3) {
yaz("Sonuç: " + (a * b))
} degilse {
eger (b != 0) {
yaz("Sonuç: " + (a / b))
} degilse {
yaz("HATA: Sıfıra bölme!")
}
}
} degilse_eger (secim == 5) {
devam = hayir
yaz("Hoşça kalın!")
} degilse {
yaz("Geçersiz seçim!")
}
}
}
hesap_makinesi()
Not Ortalaması Hesaplama
fonksiyon not_sistemi() {
yaz("=== ÖĞRENCİ NOT SİSTEMİ ===")
yaz("Kaç öğrenci var?")
ogrenci_sayisi = int(oku())
i = 0
iken (i < ogrenci_sayisi) {
yaz("\n--- Öğrenci " + (i + 1) + " ---")
ad = oku("Ad: ")
notlar = []
j = 0
iken (j < 3) {
yaz("Not " + (j + 1) + ":")
not = float(oku())
ekle(notlar, not)
j = j + 1
}
toplam = 0
icin (not in notlar) {
toplam = toplam + not
}
ortalama = toplam / uzunluk(notlar)
yaz("\n" + ad + " - Ortalama: " + ortalama)
eger (ortalama >= 90) {
yaz("Harf Notu: AA")
} degilse_eger (ortalama >= 80) {
yaz("Harf Notu: BA")
} degilse_eger (ortalama >= 70) {
yaz("Harf Notu: BB")
} degilse_eger (ortalama >= 60) {
yaz("Harf Notu: CB")
} degilse_eger (ortalama >= 50) {
yaz("Harf Notu: CC")
} degilse {
yaz("Harf Notu: FF - Kaldı")
}
i = i + 1
}
}
not_sistemi()
İpuçları
Performans
- Büyük veri setlerinde ikili arama doğrusal aramadan çok daha hızlıdır
- Recursive fonksiyonlar zarif ama iteratif versiyonlar genellikle daha hızlıdır
- Gereksiz döngülerden kaçının
Dikkat
- Sıralama algoritmalarını kullanmadan önce dizinin sıralı olup olmadığını kontrol edin
- Binary search sadece sıralı dizilerde çalışır
- Recursive fonksiyonlarda exit koşulu unutmayın
Sonraki Adımlar
- Veri Yapıları - Stack, Queue gibi yapılar
- Projeler - Tam proje örnekleri
- Optimizasyon - Kod optimizasyonu
Pratik
Bu algoritmaları çalıştırın ve değiştirerek kendi versiyonlarınızı oluşturun!