Bir problemin ideal çözümüne giden yola algoritma denir. Yazılacak programın dili değil de, algoritması en önemli kısmıdır. Programı çalıştıracak algoritmayı en iyi şekilde çözümledikten sonra, kullanılacak dilin yapısına göre kodlama aşamasına geçilir.
Programlama ihtiyacı duyulan her konuda, çözümleri koda aktarırken en temel algoritmalar kullanılır. Örneğin bir listenin sıralanması işleminde, sıralama algoritması kullanılmalıdır. Veya bir liste içinde en yüksek sayısal değeri bulmak için programcı en büyük elemanı bulma algoritmasını kullanmalıdır.
Algoritma belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.
Her algoritma aşağıdaki kriterleri sağlamalıdır:
- Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.
- Çikti: En azından bir değer üretilmeli.
- Açiklik: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.
- Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli.
- Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.
Her program için sonluluk özelliği geçerli değildir. Örneğin isletim sistemleri sonsuza dek çalışan programlara örnektir.
Bir dizi içerisindeki en büyük sayıyı bulmak için izlenecek yol şu şekilde olabilir:
- Dizinin ilk elemanı en büyük sayı kabul edilir.
- Bir sonraki eleman ile karşılaştırılır.
- Eğer karlılaştırılan eleman daha büyükse, artık en büyük eleman odur.
- Dizi sonlana kadar bu işleme devam edilir.
En küçük elemanı bulmak için ise yine benzer bir yöntem izlenir.
- Dizinin ilk elemanı en küçük sayı kabul edilir.
- Bir sonraki eleman ile karşılaştırılır.
- Eğer karlılaştırılan eleman daha küçükse, artık en küçük eleman odur.
- Dizi sonlana kadar bu işleme devam edilir.
Algoritma belirli bir görevi yerine getiren sonlu sayidaki islemler dizisidir.
Her algoritma asagidaki kriterleri saglamalidir.
- Girdi: Sifir veya daha fazla deger disaridan verilmeli.
- Çikti: En azindan bir deger üretilmeli.
- Açiklik: Her islem (komut) açik olmali ve farkli anlamlar içermemeli.
- Sonluluk: Her türlü olasilik için algoritma sonlu adimda bitmeli.
- Etkinlik: Her komut kisinin kalem ve kagit ile yürütebilecegi kadar basit olmalidir.
Her program için sonluluk özelliği geçerli değildir. Örneğin isletim sistemleri sonsuza dek çalisan programlara örnektir.
Örnek: 1'den 100'e kadar olan sayilarin toplamini veren algoritma.
- Toplam T, sayilar da i diye çagirilsin.
- Baslangiçta T'nin degeri 0 ve i'nin degeri 1 olsun.
- i'nin degerini T'ye ekle.
- i'nin degerini 1 arttir.
- Eger i'nin degeri 100'den büyük degil ise 3. adima git.
- T'nin degerini yaz.
Algoritmaların yazim dili değişik olabilir. Günlük konuşma diline yakın bir dil olabilecegi gibi simgelere dayalı da olabilir. Akış şeması eskiden beri kullanıla gelen bir yapıdır. Algoritmayı yazarken farklı anlamlar taşıyan değişik şekildeki kutulardan yararlanılır. Yine aynı amaç için kullanılan programlama diline yakın bir
(sözde kod = pseudo code) dil , bu kendimize özgü de olabilir, kullanılabilir.
Aynı algoritmayı asağıdaki gibi yazabiliriz:
- T=0 ve i=0
- i'nin degerini T'ye ekle.
- i'yi 1 arttir.
- i<101 ise 2.adıma git.
- T'nin değerini yaz.
Algoritmayı bir de akış şemasi ile gerçekleyelim.
: ax 2 +bx+c=0 tipi bir denklemin köklerini veren algoritma.
[FONT=Verdana, Arial, Helvetica, sans-serif]ALGORITMA NEDIR?[/FONT][FONT=Verdana, Arial, Helvetica, sans-serif]
(Adim adim islem basamaklarinin yazilmasidir.)[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Programlamaya Giris[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanilarak yazilmis deyimler dizisi.
Önceki bölümde bir problemin çözümü ile ilgili teknikler sunmustuk. Bir problemi bilgisayar ile çözmek için gelistirecegimiz programin yaziminda izleyecegimiz adimlar:[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
i) Problemin ne oldugunu kavra. Çözüm için gereksinimleri belirle.
ii) Problemin girdilerini, çiktilarini ve diger kisitlama ve gereksinimleri belirle ( bilgilerin giris ve çikis biçimlerinin nasil olacagina kadar).
iii) Problemin çözümünü veren algoritmayi yaz.
iv) Algoritmayi bir programla dili ile yaz.
v) Programin dogru çalisip çalismadigini test et. Bu testi degisik veriler (girdiler) için tekrarla.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Problem Çözme ve Algoritmalar
[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
1.1 Problem Çözme
Problem çözmede, soruna hemen girismek yerine, dikkatli ve sistematik yaklasim ilke olmalidir. Problem iyice anlasilmali ve mümkün oldugu kadar küçük parçalara ayirilmaladir.
Descartes tarafindan "Discourse on Method" isimli kitabinda anlatilan problem çözme teknikleri;[2][/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
1. Dogrulugu kesin olarak kanitlanmadikça, hiçbir seyi dogru olarak kabul etmeyin; tahmin ve önyargilardan kaçinin.
2. Karsilastiginiz her güçlügü mümkün oldugu kadar çok parçaya bölün.
3. Düzenli bir biçimde düsünün; anlasilmasi en kolay olan seylerle baslayip yavas yavas daha zor ve karmasik olanlara dogru ilerleyiniz.
4. Olaya bakisiniz çok genel, hazirladiginiz ayrintili liste ise hiçbir seyi disarida birakmayacak kadar kusursuz ve eksiksiz olsun.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
1.2 Algoritmalar
Belirli bir görevi yerine getiren sonlu sayidaki islemler dizisidir.
I.S. 9.yy da Iranli Musaoglu Horzumlu Mehmet
(Alharezmi adini araplar takmistir) problemlerin çözümü için genel kurallar olusturdu. Algoritma Alharezmi'nin Latince okunusu.
Her algoritma asagidaki kriterleri saglamalidir.
1. Girdi: Sifir veya daha fazla deger disaridan verilmeli.
2. Çikti: En azindan bir deger üretilmeli.
3. Açiklik: Her islem (komut) açik olmali ve farkli anlamlar içermemeli.
4. Sonluluk: Her türlü olasilik için algoritma sonlu adimda bitmeli.
5. Etkinlik: Her komut kisinin kalem ve kagit ile yürütebilecegi kadar basit olmalidir.
Not: Bir program için 4. özellik geçerli degil. isletim sistemleri gibi program sonsuza dek çalisirlar .[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]Örnek: Iki sayinin toplamini yazan algoritmayi yaziniz.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Çözüm: Adim 1 --> Ilk sayiyi oku, Sembolik olarak A1 S1=?
Adim 2 --> Ikinci sayiyi oku A2 S2=?
Adim 3 --> Sayilari topla A3 T S1+S2
Adim 4 --> Sonucu görüntüle. A4 T'yi göster.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
1.Soru : Kullanicinin girdigi iki sayinin karelerinin toplamini görüntüleyen algoritmayi yaziniz.
Çözüm
A0 --> Basla
A1 --> Sayaç=0 (Sayaç'in ilk sayisi 0 olarak baslar.)
A2 --> Sayi=? : TßT+Sayi (Sayiyi giriniz. T'ye sayiyi ekle veT'yi göster.)
A3 --> Sayaç=Sayaç+1 (Sayaç'a bir ekle ve sayaci göster.)
A4 --> Sayaç<4 ise A2'ye git. (Eger sayaç 4'ten küçükse Adim 2'ye git.)
A5 --> O=T/4 (Ortalama için T degerini 4'e böl)
A6 --> O'yu göster. (Ortalamayi göster.)
A7 --> Dur
[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
2.Soru : 20'den 50'ye kadar olan sayilarin toplamini bulan algoritma yaziniz. BASLA
Çözüm A0 --> Basla
A1 --> S=20 : T=0 (Sayi 20 T degeri 0 ile basla)
A2 --> TßT+S (T'ye sayiyi ekle T'yi göster.)
A3 --> S=S+1 (Sayiyi bir artir.)
A4 --> S<50 ise A2'ye git. (Eger sayi 50'den küçük ise Adim 2'ye git)
A5 --> T'yi göster. (T'nin degerini göster.)
A6 --> Dur Akis Semasi à[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
3.Soru : 30 ile 90 arasindaki çift sayilarin toplamini bulan algoritma yaziniz.
Çözüm:
A0 --> Basla
A1 --> S=0 : T=0 (Sayi 0, Toplam degeri 0 olsun)
A2 --> S=S+1 (Sayiyi bir artir, sayiyi göster.)
A3 --> T=T+2S+28 (28 sayisina çift sayi olmasi için sayiyi 2 ile çarp ve toplama ekle, toplami göster)
A4 --> 2S+28<90 ise git A2 (Eger Çift sayi 90 degerinden küçük ise Adim 2'ye git)
A5 --> O=T/S (Toplam degeri sayiya böl ve ortalamayi bul)
A6 --> O'yu yaz. (Ortalamayi göster)
A7 --> Dur[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
4.Soru : Klavyeden girilen 10 adet sayidan çift sayilarin toplaminin tek sayilarin toplamina oranini bulan algoritma yaziniz.
Çözüm:
A0 --> Basla
A1 --> S=0 : T=0 : Ç=0 (Sayi, tek ve çift sayilar 0 degerini alsin)
A2 --> Sayi? (Sayiyi giriniz)
A3 --> (-1)sayi=1 ise Ç=Ç+Sayi (Eger -1'in sayi üssü 1 sayisina esitse sayiyi çift sayiya ekle ve çift sayiyi bul.)
A4 --> (-1)sayi=+1 ise T=T+Sayi (Eger -1'in sayi üssü +1 sayisina esitse sayiyi tek sayiya ekle ve tek sayiyi bul.)
A5 --> S=S+1 (Sayaça 1 ekle ve sayaci göster)
A6 --> S<10 ise A2'ye git. (Eger Sayaç 10'dan küçük ise Adim 2'ye git.)
A7 --> V ß Ç/T (Çift sayilarin toplamini tek sayilarin toplamina böl.)
A8 --> V'yi göster. (Bölme sonucunu göster.)
A9 --> Dur[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
5.Soru : Klavyeden girilen iki sayidan en büyügünü bulup gösteren algoritmayi yaziniz.
Çözüm :
A0 --> Basla
A1 --> S1=? : S2=? (Ilk sayiyi gir ; ;Ikinci sayiyi gir.)
A2 --> S1>S2 ise git A4 (Sayi 1 sayi 2'den küçükse Adim 4'e git.)
A3 --> S2>S1 ise git A5 (Sayi 2 sayi 1'den küçükse Adim 5'e git.)
A4 --> S1'i göster git A6 (sayi 1 degerini göster ve islemi durdur)
A5 --> S2'yi göster. (Sayi 2 degerini göster)
A6 --> Dur[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
6.Soru : Klavyeden girilen üç sayidan en büyügünü bulup gösteren algoritmayi yaziniz.
Çözüm :
A0 --> Basla : EB=-¥ : S=0 (Basla olabilecek EB:en küçük sayi olsun, Sayi 0 olsun)
A1 --> Sayi? (Sayiyi giriniz.)
A2 --> Sayi>EB ise EB=Sayi (Eger Sayi EB'den küçükse EB sayiyla ayni degeri alsin.)
A3 --> S=S+1 (Sayaca 1 ekle ve sayaci göster)
A4 --> S<3 ise git A1 (Eger sayac 3'ten küçükse adim 1'e git.)
A5 --> EB'yi göster (En büyük sayiyi göster.)
A6 --> Dur[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Örnek 1.2.1 : 1'den 100'e kadar olan sayilarin toplamini veren algoritma.
1. Toplam T, sayilar da i diye çagirilsin.
2. Baslangiçta T'nin degeri 0 ve i'nin degeri 1 olsun.
3. i'nin degerini T'ye ekle.
4. i'nin degerini 1 arttir.
5. Eger i'nin degeri 100'den büyük degil ise 3. adima git.
6. T'nin degerini yaz.
[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Algoritmalarin yazim dili degisik olabilir. Günlük konusma diline yakin bir dil olabilecegi gibi simgelere dayali da olabilir. Akis semasi eskiden beri kullanila gelen bir yapidir. Algoritmayi yazarken farkli anlamlar tasiyan degisik sekildeki kutulardan yararlanilir. Yine ayni amaç için kullanilan programlama diline yakin bir (sözde kod = pseudo code) dil , bu kendimize özgü de olabilir, kullanilabilir.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Ayni algoritmayi asagidaki gibi yazabiliriz.
1. T=0 ve i=0
2. i'nin degerini T'ye ekle.
3. i'yi 1 arttir.
4. i<101 ise 2.adima git.
5. T'nin degerini yaz.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Algoritmayi bir de akis semasi ile gerçekleyelim.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
T=0
I=0[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
I'nin Degrini T'ye ekle[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
I'yi bir arttir[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
I<101[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
T'yi yaz[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Örnek 1.2.2 : ax2+bx+c=0 tipi bir denklemin köklerini veren algoritma.
Girdi : a, b ve c katsayilari Çikti : denklemin kökleri
1. a, b ve c katsayilarini al.
2. D = b2-4ac degerini hesapla.
3. D<0 ise gerçel kök yok. 7. adima git.
4.
5 .
6. degerlerini yaz.
7. Dur.
Döngü Gösterimi
Tekrarlanan adimlar
n. Kosul saglandigi sürece
n.1 ...
n.2 ... tekrarlanan adimlar
n.3 ...[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Örnek 1.2.3 : Iki tamsayinin çarpma islemini sadece toplama islemi kullanarak gerçekleyin.
Girdi : iki tamsayi
Çikti : sayilarin çarpimi
1. a ve b sayilarini oku
2. c =0
3. b>0 oldugu sürece tekrarla
.3.1. c=c + a
3.2. b = b-1
4. c degerini yaz ve dur[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Örnek 1.2.4 : Bir tamsayinin faktoriyelini hesaplayiniz.
Girdi : Bir tamsayi
Çikti : sayinin faktoriyel
Ilgili formul: Faktoriyel=1*2*...*n
1. n degerini oku
2. F=1
3. n >1 oldugu sürece tekrarla
.3.1. F=F*n
3.2. n= n-1
4. F degerini yaz
[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Örnek 1.2.5 : Iki tamsayinin bölme islemini sadece çikarma islemi kullanarak gerçekleyin. Bölüm ve kalanin ne oldugu bulunacak.
1. a ve b degerlerini oku
2. m=0
3. a>=b oldugu sürece tekrarla
3.1 a=a-b
3.2 m = m + 1
4. kalan a ve bölüm m 'yi yaz[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Örnek 1.2.6 : 100 tane sayiyi okuyup, ortalamasini bul
1. T=0, i=0
2. i<101 oldugu sürece tekrarla
2.1 m degerini oku
2.2 T = T + m
2.3 i = i + 1
3. T = T / 100
4. Ortalama T 'yi yaz
5. Dur[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Örnek 1.2.7 : Bir sinava giren ögrencilerin not ortalamasinin hesaplanmasi
1. Tüm sinav kagitlarini inceleyip notlarin toplamini hesapla
2. Ortalamayi notlarin toplamini incelenen sinav kagidina bölerek hesapla
3. Ortalamayi yaz.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
1. Notlarin toplamini ve incelenen sinav kagidi sayisini sifir kabul et
2. Siradaki sinav kagidinin notunu notlarin toplamina ekle
3. Incelenen sinav kagidi sayisini Bir arttir
4. Incelenecek sinav kagidi var ise 2. Adima git
5. Ortalamayi notlarin toplamini incelenen sinav kagidina bölerek hasapla
6. Ortalamayi yaz[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
1. Notlarin toplamini ve incelenen sinav kagidi sayisini sifir kabul et
2. Her bir sinav kagidi için
3. 1. Siradaki sinav kagidinin notunu notlarin toplamina ekle
4. 2. Incelenen sinav kagidi sayisini bir arttir
5. Ortalamayi notlarin toplamini incelenen sinav kagidina bölerek hesapla
6. Ortalamayi yaz[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Kosul Gösterimi[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
n. Kosul dogru ise
n.D.1
n.D.2 dogru oldugunda islenen adimlar
n.D.3
aksi halde
n.Y.1
n.Y.2 yanlis oldugunda islenen adimlar
n.Y.3[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Kök bulma örneginde 3. Adimi tekrar yazarsak
3. D>=0 ise
3.D.1
3.D.2
aksi halde
3.Y.1 Reel kök yoktur
[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Sorular:
* Girilen üç sayidan en büyügünü bulan algoritmayi yaziniz.
* Tamsayilarda üs alma islemini gerçeklestiren algoritmayi yaziniz ( ab ).
* 1-100 arasinda tutulan bir sayiyi tahmin eden algoritmayi yaziniz.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Örnek 1.2.8 : Aracin otopark ücretinin hesaplanmasi. Araçlarin en fazla 24 saat kaldigini varsayin.
0 - 2 saat 150 bin
2 - 8 saat 300 bin
8-24 saat 500 bin[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
1. Aracin kaç saat kaldigini ögren ( t olsun ).
2. t <= 2 ise
2.D.1. ücret = 150 bin
Aksi halde
2.Y.1. t<=8 ise
2.Y.1.D.1. ücret = 300 bin
Aksi halde
2.Y.1.Y.1. ücret = 500 bin
3. ücreti yaz
4. Dur[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Örnek 1.2.9: Sinavdaki en büyük notun bulan algoritma.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
1. En büyük = ilk sinav kagidindaki not (ya da olabilecek en düsük deger kabul edilebilir).
2. Incelenecek sinav kagidi var ise
3. 1 Sinav kagidindaki not > En büyük ise En büyük = Sinav kagidindaki not
4. En büyük degerini yaz.
5. Dur[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Algoritmanin yazimi daha simgesel olabilir. Ni i. Ögrencinin notu olsun.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
1. EB = N1
2. i = 2
3. Incelenecek sinav kagidi var ise
4. 1 Ni>EB => EB = Ni
5. 2 i = i + 1[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
6. EB' yi yaz.
7. Dur[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
Örnek 1.2.10 : Programin C dili ile yazilip çalisir hale getirilmesi.[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif]
1. Programi bilgisayara gir
2. Kaynak dosya olarak kaydet
3. Kaynak dosyayi derle ( compile)
4. Derleme sonucunda hata var ise
5. 1 Hatalari düzelt
6. 2 3. Adima git
7. Olusan amaç dosyasina diger dosyalari bagla (link)
8. Baglama sonucunda hata var ise
9. 1. Hatalari düzelt
10. 2. Hatalar kaynak dosya ile ilgili ise 2. adima aksi halde 5. adima git
11. Program çalistirilmaya hazir
:dnc: :dnc: :dnc: :dnc: :dnc: :dnc:
[/FONT][FONT=Verdana, Arial, Helvetica, sans-serif]
:dnc: :dnc: :dnc: :dnc: :dnc: :dnc:
[/FONT] [FONT=Verdana, Arial, Helvetica, sans-serif]
:dnc: :dnc: :dnc: :dnc: :dnc: :dnc:
[/FONT] [FONT=Verdana, Arial, Helvetica, sans-serif]
:dnc: :dnc: :dnc: :dnc: :dnc: :dnc:
[/FONT]
:-x:-x:-x:-x:-x:-x:-x:-x