İçeriğe geç
Anasayfa » algoritma

algoritma

Algoritma Öğretimi

Algoritma Temelleri ve Örnekleri

Programlama dünyasına ilk adım

Algoritma Nedir?

Algoritma, belirli bir problemi çözmek veya belirli bir görevi yerine getirmek için tasarlanmış, net bir şekilde tanımlanmış, adım adım talimatlar dizisidir.

Algoritmanın Temel Özellikleri:

  • Kesinlik: Her adım açık ve net olmalıdır.
  • Sonluluk: Algoritma belirli bir sayıda adım sonra sonlanmalıdır.
  • Girdi-Çıktı: Belirli girdilere karşılık beklenen çıktıları üretmelidir.
  • Etkililik: Her adım temel ve uygulanabilir olmalıdır.
  • Genellik: Belirli bir problem sınıfındaki tüm örneklere uygulanabilir olmalıdır.

Günlük Hayattan Algoritma Örnekleri

Algoritmalar sadece bilgisayar bilimlerinde değil, günlük hayatımızda da kullanılır:

Çay Demleme Algoritması:

  1. Çaydanlığı su ile doldur.
  2. Suyu kaynat.
  3. Demliğe çay koy.
  4. Kaynayan suyu demliğe ekle.
  5. 5 dakika demlenmeye bırak.
  6. Çayı bardaklara koy ve servis et.

Algoritma Akış Şemaları

Akış şemaları, algoritmaların grafiksel olarak gösterimidir. Algoritma adımlarını ve karar yapılarını görsel olarak temsil ederler.

Akış Şeması Sembolleri:

  • Oval (Başlangıç/Bitiş): Algoritmanın başlangıç ve bitiş noktalarını gösterir.
  • Dikdörtgen (İşlem): Bir işlem veya atama adımını gösterir.
  • Eşkenar Dörtgen (Giriş/Çıkış): Veri girişi veya çıkışını gösterir.
  • Baklava (Karar): Koşula bağlı dallanmaları gösterir (Evet/Hayır).
  • Oklar: Algoritma akışının yönünü gösterir.

Basit Bir Akış Şeması Örneği: Sayının Tek/Çift Kontrolü

Tek Çift Sayı Kontrolü Akış Şeması
┌─────────────┐
│  Başlangıç  │
└──────┬──────┘
       │
       ▼
┌─────────────┐
│   Sayıyı    │
│   Oku (N)   │
└──────┬──────┘
       │
       ▼
┌─────────────┐
│ Kalan = N % 2│
└──────┬──────┘
       │
       ▼
    ┌──────┐
    │Kalan │
    │ == 0 ?│
    └┬────┬┘
     │    │
  Evet│    │Hayır
     │    │
     ▼    ▼
┌────────┐ ┌────────┐
│"Çift"  │ │ "Tek"  │
│ Yazdır │ │ Yazdır │
└────┬───┘ └────┬───┘
     │          │
     ▼          ▼
    ┌─────────────┐
    │    Bitiş    │
    └─────────────┘

Sözde Kod (Pseudocode)

Sözde kod, algoritmaları programlama diline benzer ancak daha informal bir yapıda tanımlamak için kullanılır. Gerçek bir programlama dilinin sözdiziminden bağımsızdır.

Sözde Kod Avantajları:

  • Algoritmanın mantığına odaklanmayı sağlar.
  • Programlama dilinin sözdizimi detaylarından arındırılmıştır.
  • İnsan tarafından kolayca okunabilir ve anlaşılabilir.
  • Herhangi bir programlama diline çevrilebilir.

İki Sayının Maksimumunu Bulan Sözde Kod:

BAŞLA
    A ve B'yi OKU
    EĞER A > B İSE
        MAX = A
    DEĞİLSE
        MAX = B
    MAX'ı YAZDIR
BİTİŞ

1’den N’e Kadar Sayıları Toplayan Sözde Kod:

BAŞLA
    N'yi OKU
    toplam = 0
    DÖNGÜ i = 1'DEN N'E KADAR
        toplam = toplam + i
    DÖNGÜ SONU
    toplam'ı YAZDIR
BİTİŞ

Temel Algoritma Örnekleri

Programlamaya başlarken sık karşılaşılan temel algoritma örnekleri:

Faktöriyel Hesaplama

n! = n × (n-1) × (n-2) × … × 2 × 1

Akış Şeması:

Faktöriyel Hesaplama Akış Şeması

Sözde Kod:

BAŞLA
    N'yi OKU
    faktöriyel = 1
    DÖNGÜ i = 1'DEN N'E KADAR
        faktöriyel = faktöriyel * i
    DÖNGÜ SONU
    faktöriyel'i YAZDIR
BİTİŞ

Asal Sayı Kontrolü

Bir sayının sadece 1 ve kendisine bölünüp bölünmediğini kontrol eder.

Sözde Kod:

BAŞLA
    N'yi OKU
    EĞER N <= 1 İSE
        "Asal Değil" YAZDIR
        BİTİŞ
    
    asal = DOĞRU
    DÖNGÜ i = 2'DEN KAREKÖK(N)'E KADAR
        EĞER N % i == 0 İSE
            asal = YANLIŞ
            DÖNGÜDEN ÇIK
    DÖNGÜ SONU
    
    EĞER asal İSE
        "Asal Sayı" YAZDIR
    DEĞİLSE
        "Asal Değil" YAZDIR
BİTİŞ

Sıralama Algoritmaları

Sıralama algoritmaları, bir diziyi belirli bir kritere göre (genellikle artan veya azalan) düzenler.

Kabarcık Sıralaması (Bubble Sort)

En basit sıralama algoritmalarından biridir. Yan yana olan elemanları karşılaştırıp gerekirse yerlerini değiştirir.

Algoritma Adımları:

  1. Dizinin ilk elemanından başla.
  2. Sıradaki elemanla karşılaştır. Eğer mevcut eleman bir sonraki elemandan büyükse, yerlerini değiştir.
  3. Dizinin sonuna kadar devam et.
  4. Hiç yer değiştirme yapılmayana kadar tüm diziyi tekrar kontrol et.

Sözde Kod:

BAŞLA
    dizi[n]'yi OKU
    
    DÖNGÜ i = 0'DAN n-1'E KADAR
        yer_değiştirme = YANLIŞ
        
        DÖNGÜ j = 0'DAN n-i-1'E KADAR
            EĞER dizi[j] > dizi[j+1] İSE
                dizi[j] ve dizi[j+1]'i YER DEĞİŞTİR
                yer_değiştirme = DOĞRU
        DÖNGÜ SONU
        
        EĞER yer_değiştirme == YANLIŞ İSE
            DÖNGÜDEN ÇIK
    DÖNGÜ SONU
    
    dizi'yi YAZDIR
BİTİŞ

Örnek:

Başlangıç Dizisi: [5, 3, 8, 4, 2]

1. Geçiş: [3, 5, 4, 2, 8]
2. Geçiş: [3, 4, 2, 5, 8]
3. Geçiş: [3, 2, 4, 5, 8]
4. Geçiş: [2, 3, 4, 5, 8]

Seçmeli Sıralama (Selection Sort)

Her adımda dizideki en küçük (veya en büyük) elemanı bulur ve dizinin başına (veya sonuna) yerleştirir.

Sözde Kod:

BAŞLA
    dizi[n]'yi OKU
    
    DÖNGÜ i = 0'DAN n-1'E KADAR
        min_indeks = i
        
        DÖNGÜ j = i+1'DEN n-1'E KADAR
            EĞER dizi[j] < dizi[min_indeks] İSE
                min_indeks = j
        DÖNGÜ SONU
        
        EĞER min_indeks != i İSE
            dizi[i] ve dizi[min_indeks]'i YER DEĞİŞTİR
    DÖNGÜ SONU
    
    dizi'yi YAZDIR
BİTİŞ

Ortalama Hesaplama Algoritmaları

Veri setlerinin ortalama değerlerini hesaplamaya yönelik algoritmalardır.

Aritmetik Ortalama

Bir veri setindeki tüm değerlerin toplamının eleman sayısına bölünmesidir.

Sözde Kod:

BAŞLA
    dizi[n]'yi OKU
    toplam = 0
    
    DÖNGÜ i = 0'DAN n-1'E KADAR
        toplam = toplam + dizi[i]
    DÖNGÜ SONU
    
    ortalama = toplam / n
    ortalama'yı YAZDIR
BİTİŞ

Örnek:

Dizi: [85, 90, 78, 92, 88]

Toplam: 85 + 90 + 78 + 92 + 88 = 433

Eleman Sayısı: 5

Ortalama: 433 / 5 = 86.6

Ağırlıklı Ortalama

Her elemanın farklı bir ağırlık değeri ile çarpılıp toplandıktan sonra ağırlıkların toplamına bölünmesidir.

Sözde Kod:

BAŞLA
    değerler[n] ve ağırlıklar[n]'yi OKU
    ağırlıklı_toplam = 0
    ağırlık_toplamı = 0
    
    DÖNGÜ i = 0'DAN n-1'E KADAR
        ağırlıklı_toplam = ağırlıklı_toplam + (değerler[i] * ağırlıklar[i])
        ağırlık_toplamı = ağırlık_toplamı + ağırlıklar[i]
    DÖNGÜ SONU
    
    ağırlıklı_ortalama = ağırlıklı_toplam / ağırlık_toplamı
    ağırlıklı_ortalama'yı YAZDIR
BİTİŞ

Örnek:

Değerler: [90, 85, 70]

Ağırlıklar: [3, 2, 1]

Ağırlıklı Toplam: (90*3) + (85*2) + (70*1) = 270 + 170 + 70 = 510

Ağırlık Toplamı: 3 + 2 + 1 = 6

Ağırlıklı Ortalama: 510 / 6 = 85

Algoritma Alıştırmaları

Algoritma becerilerinizi geliştirmek için aşağıdaki problemleri çözmeyi deneyin.

Alıştırma 1: Fibonacci Dizisi

İlk n Fibonacci sayısını hesaplayan bir algoritma yazın.

İpucu: Fibonacci dizisinde her sayı, kendisinden önceki iki sayının toplamıdır. İlk iki sayı 0 ve 1'dir.

Örnek çıktı (n=8):

0, 1, 1, 2, 3, 5, 8, 13

Alıştırma 2: En Büyük Ortak Bölen (EBOB)

İki sayının en büyük ortak bölenini bulan bir algoritma yazın.

İpucu: Öklid Algoritması kullanabilirsiniz.

Alıştırma 3: Palindrom Kontrolü

Bir metnin palindrom (tersten okunduğunda da aynı olan) olup olmadığını kontrol eden bir algoritma yazın.

Örnek:

"Kazak" -> Palindrom

"Kitap" -> Palindrom Değil

Alıştırma 4: Bir Sayının Rakamlarının Toplamı

Kullanıcıdan alınan bir sayının rakamlarının toplamını hesaplayan bir algoritma yazın.

Örnek:

12345 -> 1+2+3+4+5 = 15