ALGORİTMA KAVRAMI Bir sorunu / problemi çözmek veya belirli bir amaca ulaşmak için gerekli olan sıralı mantıksal adımların tümüne algoritma denir. Algoritma bir sorunun çözümü için izlenecek yolun tanımıdır. Kısaca algoritma en basit ifadeyle, bir problemi çözmek için takip edilecek sonlu sayıda adımdan oluşan bir çözüm yoludur. Bir algoritmanın özellikleri şu şekildedir: 1) Başlangıcı olmalı 2) Basit olmalı 3) Problemin çözümünü, mümkün olan en az adım ile en kısa sürede gerçekleştirmeli 4) Sonu olmalı Algoritmanın Temel Özellikleri: 1. Kesinlik : algoritma içindeki ifadeler herkes tarafında aynı şekilde anlaşılabilir olmalı, farklı anlamlara gelebilecek bulanık ifadeler içermemeli. 2. Sıralı olma : adımların hangi sırada gerçekleştirileceği çok önemlidir ve net bir şekilde belirtilmelidir. 3. Sonluluk: algoritma sonlu sayıda adımdan oluşmalı, sınırlı bir zaman diliminde tamamlanmalıdır. Problem çözmek: Problemi çözmek için çözüm yolu (algoritma) geliştirmenin temel adımları: * Problemin tanımı * Çözüm yönteminin belirlenmesi * Programın kodlanması * Programın çalışır duruma getirilmesi * Belgeleme ve güncelleştirme Problemin tanımı: Problemin normal yazı diliyle tanımlanması işlemlerini Kapsamaktadır. Problem çözümüne ilişkin iyi bir program yapabilmek için, problemin iyi bir şekilde tanımlanması gerekir. Çözüm Yönteminin Belirlenmesi: Bu adımda çözümün genel yaklaşımı, temel giriş/çıkışlar belirlenir ve problem çözümü adim adım program akis diyagramlarıyla gösterilir. Programın kodlanması: Program ayrıntılı olarak tanımlanıp çözüm yolları açıkça Belirtildikten sonra program kodlama çalışmalarına başlanabilir. Programın bastan sona Yapısal bir düzende hazırlanması ve uygun bir programlama dili seçilmesi secim işleminin ilk aşamasını oluşturur. Programın çalışır Hale Getirilmesi: Programın kodlanması sırasında yapılan imla hataları, kodlama ve mantık hatalarının giderilmesi işlemlerini kapsar. İyi bir bilgisayar programının doğruluğundan emin olmak için defalarca test edilmiş olması gerekmektedir.
Belgeleme ve güncelleştirme: Oluşturulan bir yazılımı, sadece o yazılımı geliştiren Kişilerin kullanabilmesi gibi bir kısıtlamanın önüne geçmek için ayrıntılı referanslar Hazırlanmalı ve programla ilgili bilgiler verilmelidir. ALGORİTMA GELİŞTİRMEK Bir problemi çözmek üzere algoritma geliştiriyorsak, satır algoritma yazabilir ya da akış diyagramı çizebiliriz. İkisini aynı anda da yapabiliriz. Böylece problemin çözümünü programlamadan önce net bir şekilde ifade ederiz. Algoritmanın Temel Öğeleri: 1. Tanımlayıcı: değişken sabit gibi programlama birimlerine programcı tarafından verilmiş isimler. 2. Değişken: programın akışı içinde farklı değerler tutmak için ayrılmış bellek bölümleri. 3. Sabit: program her çalıştığında ve programın içinde herhangi bir anda hep aynı değeri döndüren tanımlayıcılara sabit denir (Ör: Pi=3.14) 4. Aritmetik işlemler: programdaki en temel işlemlerdir. 5. Mantıksal işlemler: bir programın akışı içerisinde, belirli bir koşula göre akışın hangi yönde ilerleyeceğine karar vermekte kullanılırlar. ALGORİTMA YAZIMI
Algoritmayı yazılı hale getirmenin üç yöntemi vardır: Satır algoritma Akış diyagramı Sözde kod (pseudo kod) Sözde kod tamamen bilgisayar programlamaya yönelik bir gösterimdir. Algoritma yazımıyla kod yazımı arasında kalan bir kısımdır ama Kodlamaya daha yakındır. 1. Satır algoritma: Satır algoritma, problemlerin günlük konuşma diliyle ifade edilerek ve numaralandırılarak oluşturulur. Algoritma ifade etmede en kolay yöntemdir. Ör.1 / ekrana sırasıyla 1,2,3 değerlerini yazdıran algoritmayı tasarlayın: 2.yaz 1 3.yaz 2 4.yaz 3 5.dur Ör.2 / kullanıcıdan 2 sayı alıp, bu iki sayının toplamını ekrana yazdıran algoritma : 2. Oku (A,B) 3. C = A + B 4.yaz C 5.dur Burada A ve B değişkenleri girdi, C değişkeni ise çıktıdır. Oku işlemi girilen değerleri hafızaya alır yaz işlemi ise C nin soncunu ekrana yazdıracak olan işlemdir. Ör.3/ kullanıcıdan bir kenarı alınan karenin çevresini hesaplayan algoritma 2. Oku (K) 3. C = 4 * K 4.yaz C 5.dur Burada k değişkenimiz bir kenarı gösteriyor oku işlemi ile değeri alıyoruz. Çevre ise C ile gösterilmiş. C = 4 * K ile çevreyi buluyor ve yaz işlemi ile C yi ekrana yazdırıyoruz
Ör.4/ kullanıcıdan yaş girmesini isteyip. Girilen yaş 18 den büyükse Reşitsiniz, değil ise reşit değilsiniz yazdıran algoritma 2. Oku yaşınız? (Y) 3. Eğer 3.1. (Y >=18) yaz Reşitsiniz 3.2(DEĞİLSE) yaz Reşit değilsiniz 4. Dur Burada girdi olarak yaş (Y) değişkenini alıyoruz. Çıktı olarak da yaz işlemini kullanarak reşitsiniz yâda reşit değilsiniz yazısını ekrana yazdırıyoruz. Bu algoritma kullanıcıdan yaşını girmesini ister. 3.1 de olduğu gibi yaş 18 den büyük ve 18 e eşitse ekrana Reşitisniz. 18 den küçük ise de 3.2 olduğu gibi reşit değilsiniz işlemini yapar. Eğer ve değilse fonksiyonları bu koşulu yerine getirmek için kullanılır. Ör.5 / Klavyeden girilen değere göre 45 e eşit ve 45 ten büyükse ekrana geçti değilse kaldı yazacak algoritmayı oluşturalım. 1. Başla 2. Yaz Not giriniz: 3. Oku (N) 4. eğer4 4.2 (N >= 45) Yaz Geçtiniz 4.3 (Değilse) Yaz Kaldınız 5. Dur Klavyeden not girmemizi isteyecek, girdiğimiz notu oku işlemiyle alacak ve girilen not 45 e eşit ve büyük olduğunda ekrana geçtiniz değilse kaldınız yazacaktır. Burada yine eğer ve değilse fonksiyonunu kullanıyoruz Ör.6/ Klavyeden girilen sayıyı 1 den başlayıp girdiği sayıya kadar toplayacak algoritmayı yazalım. 1. Başla 2. Sayac = 0, Toplam = 0 3. Oku (A) 4. eğer Dongu >= A, 8. adıma git 5. Toplam = Toplam + Dongu 6. Sayac = Sayac + 1 7. 4. adıma git 8. Yaz Toplam
9. Dur Burada girdi olarak sayı alıcaz bunu da A ile belirttik. Algoritmanın yapacağı işlem ise, girdiğimiz sayıya kadar olan sayıları 1 sayısından başlayarak toplayarak ekrana yazdırır. Dikkat etmemiz gereken kısım toplama işleminin girdiğimiz sayıya kadar olması yani örnek olarak girdiğim sayı 10 ise sonucu 11 olan işlem sonucun ekrana yazdırmayacak. Bu koşulu da 4. eğer Dongu >= A, 8. adıma git işlemi ile sağlıyoruz. Yani toplama işlemi girdiğimiz sayıdan büyükse işlem yapma ve 8.adımdan devam et. 2. Akış diyagramları: Akış diyagramları problemin şekillerle ifade edilmesidir.
Sıralı algoritmada yaptığımız 1 ve 2 nolu örneklerin akış diyagramları aşağıdaki gibidir.
Kareni çevresini bulan sıralı algoritmayı yapmıştık 3.örneğimizde. şimdi akış diyagramına bakalım Sıralı işlemler için algoritma geliştirmek Algoritma geliştirme işleminin en kolay kısmıdır. Burada yapılması gereken en önemli işlem algoritma adımlarının tamamı belirlendikten sonra bunların hangi sırada yapılması gerektiğini belirlemektir. Örneğin; 2.yaz 2 YANLIŞ 2.yaz 1 3.yaz 2 DOĞRU 3.yaz 1 4.yaz 3 5.dur 4.yaz 3 5.dur
ÖR / kişiye adını soracak, daha sonra da adını kullanarak cinsiyet (bay/bayan) soracak ve kullanıcının cinsiyetiyle birlikte adını birleştirerek merhaba X bay/bayan şeklinde ekrana yazdıracak algoritmayı tasarlayalım İlk önce algoritma adımlarını çıkaralım Kişinin adını sor Kişinin adını al Kişinin adını kullanarak cinsiyetini sor Cinsiyetini al Kişinin adı ve cinsiyetini birleştirerek ekran memnun oldum X bay/bayan yazdır Şimdi de bunu satır algoritmaya çevirelim: Sonra da akış diyagramına çevirelim. :
Basit koşul yapıları Program akışı içerisinde belirli bir duruma göre bir işin yapılıp yapılmamasına karar verirken basit koşul yapıları kullanırız. Ör: kullanıcıdan adını alıp, eğer karakter sayısı 7 den büyükse ekrana uzun bir isme sahipsiniz mesajı yazdıran algoritmayı tasarlayalım. İki alternatifli koşul yapıları Bu yapıda eğer komutundan sonra gelen koşul ya da durum ifadesinin sonucu doğru (true) ise şarttan sonra gelen komut çalışır. Koşul yanlış (false) ise else'den sonra gelen komut çalışır. if ( koşul ) komut 1; else komut 2; Ör.4/ kullanıcıdan yaş girmesini isteyip. Girilen yaş 18 den büyükse Reşitsiniz, değil ise reşit değilsiniz yazdıran algoritma 2. Oku yaşınız? (Y) 3. Eğer
4. Dur 3.1. (Y >=18) yaz Reşitsiniz 3.2(DEĞİLSE) yaz Reşit değilsiniz Ör: kullanıcıdan bir sayı alarak, sayının pozitif ya da negatif olduğunu yazdıran algoritmayı tasarlayınız. Sıfır sayısı pozitif olarak kabul edilsin. Örnek satır algoritma 5. dur 1. Başla 2. Yaz bir sayı giriniz 3. Oku (sayı) 4. Eğer 4.1. (Sayı >= 0) Yaz ( Girdiğiniz Sayı Pozitiftir ) 4.2. (Değilse) Yaz ( Girdiğiniz Sayı Negatiftir)
İçiçe Döngülerin Kullanılması İçiçe döngü kurulurken en önemli unsur, içteki döngü sonlanmadan bir dıştaki döngüye geçilmemesidir. Diğer bir deyişle döngüler birbirlerini kesmemelidir. En içteki döngü bir dıştaki döngünün her adımında N kez tekrarlanır.
Örnek: Bankaya aylık getirisi %8 ile 1000 YTL para yatırılmıştır. Buna göre; a)10 ay sonrası için paranın ne kadar olacağını ve bu süre içerisinde her ay sonunda ne kadar olacağını hesaplayıp ekrana yazan programın akış şemasını nasıldır? b)paranın kaç ay sonra 5000 YTL olacağını hesaplayan programın akış şeması nasıldır?
Tekrarlı yapılar: Bir veya bir grup program cümlesi işletilip sona erdikten sonra tekrar işletilmesi gerektiği durumlarda tekrarlı yapılar kullanılır. Tekrarlı işlemler için kullanılan metotlar şunlardır. 1. Başka işlem sorgulaması 2. Sayaç Metodu 3. Son kart metodu 4. Döngü metodu 1.Başka işlem sorgulaması: Bu metot da işlem gerçekleştirilip sona erdikten sonra kullanıcıya işlemin yeni değerler için tekrarlanıp tekrarlanmayacağı sorulur kullanıcı evet cevabını verirse işlem tekrarlanır hayır cevabını verirse program akışı bir sonraki program cümlesine geçer. Örnek 8: Kullanıcının girdiği sayılar toplamını bulan program her defasında kullanıcıya devam edip etmeyeceğini sorar ve kullanıcı hayır cevabını verdiğinde o ana kadar girilen sayılar toplamını ekrana yazar. Program algoritmasını yazınız. 1. Başla
2. Tanımla Sayi,Toplam 0,Cevap 3. Oku Sayi 4. Toplam Toplam+Sayi 5. Yaz Devam E/H? 6. Oku Cevap 7. Eğer Cevap= E ise Git 3 8. Yaz Sayılar Toplamı=, Toplam 9. DUR Kullanıcı hayır cevabı verene kadar girilen sayıların toplamını bulan prg algoritması Soru3a:Vize ve final notu girilen öğrencinin ortalamasını bulan program algoritmasını yazınız. Soru3b:Soru3a daki soruyu başka işlem sorgulaması ile tekrarlanacak şekilde düzenleyiniz. Soru4:Kullanıcı hayır cevabını verene kadar girilen her ismi ekrana yazan prg algoritmasını yazınız. 2.Sayaç metodu: Bu metot işlemin tekrarlanma sayısının belli olduğu durumlarda kullanılır. Bu metot da ayrı bir sayaç değişkeni kullanılır ve işlem her tekrarlandığında değeri bir artırılarak istenen değere ulaşıp ulaşmadığına bakılır. İstenen değere ulaşılmış ise işlem sona erdirilir aksi halde işlem tekrarlanır. Örnek 9: Klavyeden girilen 4 sayının toplamını bulan program algoritmasını yazınız. Ör : kullanıcıdan 100 adet sayı alarak, bu sayıların toplamlarını ekrana yazdıran algoritmayı tasarlayınız. Satır algoritması
1. Başla 2. Toplam =0, Sayac =1 3. Yaz bir sayı giriniz 4. Oku sayı 5. Eger (sayaç <=100) 5.1 Toplam = toplam + sayı 5.2.Sayaç = sayaç + 1 5.3.Git 4 6. Yaz toplam 7. Dur Koşullu tekrar yapıları Tekrarlı işlemlerde, tekrar edilecek işlem adımlarının kaç kez çalıştırıcağını bazen önceden bilemeyiz. Örneğin şu problemi ele alalım.
Kullanıcıların girdiği sayıları toplayan bir algoritmayı tasarlayın. Algoritma sıfır girilene kadar girdiği sayıları alıp toplasın ve sıfır girildiği zaman kullanıcıdan sayı alma işlemini kesip, girilen sayıların toplamını ekrana yazdırın. Sözde-Kod Algoritma adımlarının programlama diline benzeyen bir şekilde ancak günlük dil ile anlatılmasıdır. Yapılacak eylemler günlük hayatta kullanılan sözcüklerle ifade edilir. Sözde kodlar; yapısı itibariyle kullanılacak olan programlama dilinin esnetilmiş halidir. Programlama dilindeki gibi katı kuralları ve kalıpları yoktur. Program yazılmadan önce algoritma oluşturulurken kullanılan dile bağlı olarak sözde kodlar tasarlanır. Satır algoritmalardan sözde kod oluşturma Ör.1 / ekrana sırasıyla 1,2,3 değerlerini yazdıran algoritmayı tasarlayın: 2.yaz 1 3.yaz 2 4.yaz 3 5.dur
Display 1 Display 2 Display3 Ör.2 / kullanıcıdan 2 sayı alıp, bu iki sayının toplamını ekrana yazdıran algoritma : 2. Oku (A,B) 3. C = A + B 4.yaz C 5.dur Get A Get B C = A + B Display C Ör.3/ kullanıcıdan bir kenarı alınan karenin çevresini hesaplayan algoritma 2. Oku (K) 3. C = 4 * K 4.yaz C 5.dur Get (K) C = 4 * K Display C Ör.4/ kullanıcıdan yaş girmesini isteyip. Girilen yaş 18 den büyükse Reşitsiniz, değil ise reşit değilsiniz yazdıran algoritma 2. Oku yaşınız? (Y) 3. Eğer 3.1. (Y >=18) yaz Reşitsiniz 3.2(DEĞİLSE) yaz Reşit değilsiniz 4. Dur Display Yaşınız Get Y
İf Y >= 18 Display Resitsiniz Else Display Resit Degilsiniz Endif Örnek satır algoritmaları 1. Başla 2. Toplam =0, Sayi =1 3. Sayaç (x=1 to 100 step 1) 4. Oku bir sayı giriniz 5. Toplam = toplam + sayı 6. Sayaçsonu 7. Yaz Toplam 8. Dur Örnek sözde kod Toplam =0 For(x=0 to 100 step 1) Toplam = toplam + X Endfor Display Toplam Akış diyagramlarından sözde kod oluşturmak
Sayaç = 0, Toplam =0 Get sayi For sayaç = 1 to sayi step 1 Toplam = toplam + sayaç Endfor Display Toplam Display bir sayı giriniz Get sayı İf sayı >0 Display girdiğiniz sayı pozitif End if sayı < 0 Display girdiğiniz sayı negatif Else Display girdiğiniz sayı sıfırdır Endif
Temel algoritma örnekleri 1. Klavyeden girilen 5 adet not bilgisinin ortalamasını alan programı yapınız. Klavyeden girilen 10 adet notun en büyük ve en küçüğünü bulan programı yapınız..klavyeden 0 sayısı girilene kadar sayılar okutunuz. Girilen sayıların 2 katını alarak ekrana sonucu yazdırınız.
Derste yapılan örnekleri koda dökmek Ör.1 / ekrana sırasıyla 1,2,3 değerlerini yazdıran algoritmayı tasarlayın: 2.yaz 1 3.yaz 2 4.yaz 3 5.dur Console.WriteLine( 1 ); Console.WriteLine( 2 ); Console.WriteLine( 3 ); Ör.2 / kullanıcıdan 2 sayı alıp, bu iki sayının toplamını ekrana yazdıran algoritma : 2. Oku (A,B) 3. C = A + B 4.yaz C 5.dur int a = 0;
int b = 0; int c = 0; string girilen = ""; a = int.parse(girilen); b = int.parse(girilen); c = a + b; Console.WriteLine(c); Ör.4/ kullanıcıdan yaş girmesini isteyip. Girilen yaş 18 den büyükse Reşitsiniz, değil ise reşit değilsiniz yazdıran algoritma 2. Oku yaşınız? (Y) 3. Eğer 3.1. (Y >=18) yaz Reşitsiniz 3.2(DEĞİLSE) yaz Reşit değilsiniz 4. Dur int Y = 0; string girilen = null; Console.Write( Yaşınız? ); Y = int.parse(girilen); if (Y >= 18) { Console.WriteLine("Reşitsiniz."); } else { Console.WriteLine("Reşit değilsiniz."); } Ör : kullanıcıdan 100 adet sayı alarak, bu sayıların toplamlarını ekrana yazdıran algoritmayı tasarlayınız. Satır algoritması
1. Başla 2. Toplam =0, Sayac =1 3. Yaz bir sayı giriniz 4. Oku sayı 5. Eger (sayaç <=100) 5.1 Toplam = toplam + sayı 5.2.Sayaç = sayaç + 1 5.3.Git 4 6. Yaz toplam 7. Dur int toplam = 0; int x = 0; for (x = 1; x <= 100; x++) { toplam = toplam + x; } Console.WriteLine(toplam); Kullanıcıların girdiği sayıları toplayan bir algoritmayı tasarlayın. Algoritma sıfır girilene kadar girdiği sayıları alıp toplasın ve sıfır girildiği zaman kullanıcıdan sayı alma işlemini kesip, girilen sayıların toplamını ekrana yazdırın. int toplam = 0; int sayi = 0; string girilen = ""; do { Console.Write("Bir sayı girin: "); sayi = int.parse(girilen); toplam = toplam + sayi; } while ((sayi > 0)); Console.WriteLine(toplam); Ekrana girilen 2 adet sayıyı toplayan kodu yazınız int sayi1 = 0; int sayi2 = 0; int toplam = 0; string girilen = ;
Console.Write("Birinci sayıyı girin: "); sayi1 = int.parse(girilen); Console.Write("İkinci sayıyı girin: "); sayi2 = int.parse(girilen); toplam= sayi1 + sayi2; Console.WriteLine("Toplama sonucu = " + toplam); Ekrana girilen 2 sayıyı bölen işlemin kodunu yazınız decimal sayi1 = 0M; decimal sayi2 = 0M; decimal bolum = 0M; string girilen = ; Console.Write("Birinci sayıyı girin: "); sayi1 = decimal.parse(girilen); Console.Write("İkinci sayıyı girin: "); sayi2 = decimal.parse(girilen); bolum = sayi1 / sayi2; Console.WriteLine("Bölme sonucu = " + bolum); Tabanı ve yüksekliği verilen bir üçgenin alanını hesaplayarak ekrana yazdıran kodu yazınız. decimal yukseklik = 0M; decimal taban = 0M; decimal alan = 0M; string girilen = ; Console.Write("Taban uzunluğu = "); taban = decimal.parse(girilen); Console.Write("Yükseklik = "); yukseklik = decimal.parse(girilen); alan = taban * yukseklik / 2; Console.WriteLine("Alan = " + alan);
Yarıçapı verilen bir dairenin alanını ve çevresini hesaplayarak ekrana yazdıran kodu yazınız. decimal yaricap = 0M; decimal cevre = 0M; decimal alan = 0M; const decimal PI = 3.14; string girilen = ; Console.Write("Yarıçap = "); yaricap = decimal.parse(girilen); alan = PI * Math.Pow(yaricap, 2); cevre = 2 * PI * yaricap; Console.WriteLine("Çevre = " + cevre); Console.WriteLine("Alan = " + alan); Yarıçapı ve yüksekliği verilen bir koninin hacmini hesaplayarak sonucu ekrana yazdıran kodu yazınız. decimal yaricap = 0M; decimal yukseklik = 0M; decimal hacim = 0M; string girilen = ; const decimal PI = 3.14; Console.Write("Yarıçap = "); yaricap = decimal.parse(girilen); Console.Write("Yükseklik = "); yukseklik = decimal.parse(girilen); hacim = PI * yaricap * yaricap / yukseklik; Console.WriteLine("Hacim = " + hacim);