Algoritma yazmak çok karışık işlemlerin kolay bir şekilde yapılabilmesine olanak sağlar. Herhangi bir probleme karşı algoritma yazmak problemin çözümüne çok daha kolay bir şekilde ulaşmanızı sağlar. Algoritmalar bir sorunun çözümünün teorik olarak hazırlanmasıdır denilebilir. Bir örnek vermek gerekirse büyük e ticaret web sitelerine girdiğinizde incelediğiniz ürünün biraz düşük fiyatlısı, biraz pahalısı, ürünle eşdeğer diğer ürünler ve ürün kategorisiyle alakalı diğer ürünlerin gelmesini sağlayan kodlar bir algoritma kurularak yazılmıştır.
Algoritmayı çeşitli şekillerde oluşturabilirsiniz. Eğer bir yazılımcıysanız yazmanız gereken bir kodu planlamadan yazmanız imkansızdır. Planlı şekilde yazılmayan herhangi bir kod daha karmaşık ve uzun olacaktır. Örneğin kullanıcının verdiği bir sayının asal olup olmadığını kontrol eden programı kodlamak için kafanızda ya da daha sonra söyleyeceğim şekillerde oluşturduğunuz bir algoritmayı kullanmak zorundasınız. Kafama göre kod yazarım ya da kafama göre problemleri çözerim şeklinde bir yaklaşım tercih etmemeniz gereken bir yaklaşımdır.
Algoritma Nedir?
Algoritma nedir? Bir kod mu ya da bir kodun yazım aşaması mı? İnsanlar söylenen bir cümleyi ya da bir isteği çeşitli şekillerde analiz ederek ne istenildiğini anlayabiliyor. Ancak bilgisayarlarda böyle bir durum söz konusu değil. Aşağıda verdiğim konuşma metninin bilgisayarlara nasıl açıklanacağını düşünelim.
– Merhaba. Bana verdiğim iki sayının ortalamasını söyleyebilir misin?
+ Tabii ki.
– 10 ve 20 sayılarının ortalaması nedir?
+15
Bir insana bu şekilde bir soru yönelttiğinizde gayet normal bir şekilde cevabı alabilirsiniz. Ancak bir bilgisayarın bu tür cümleleri anlaması yapay zekâ değilse imkânsız. Bir bilgisayara verdiğimiz iki sayının ortalamasını nasıl hesaplatacağımızı inceleyelim.
Adım 1: Başla.
Adım 2: a, b ve c değişkenlerini tanımla.
Adım 3: a değişkenini kullanıcının girdiği ilk sayıya, b değişkenini kullanıcının girdiği ikinci sayıya eşitle.
Adım 4: a ve b değişkenlerini topla ve 2’ye böl. (a + b)/2
Adım 5: c değişkenini bulunan sonuca eşitle.
Adım 6: c değişkenini ekrana yaz.
Adım 7: Bitir.
Yukarıdaki algoritmada da gördüğünüz gibi bilgisayarlara bir problemi anlatmak için normalden farklı düşünmemiz gerekiyor. Size bir sayı verilip asal olup olmadığı sorulduğunda verilen sayının asal olup olmadığını en azından belirli bir seviyeye kadar tespit edebilirsiniz. Bir bilgisayara verdiğiniz sayının asal olup olmadığını söylemesi için yazmanız gereken kod gerçekten karmaşık bir hal alabiliyor. Sadece bu şekilde basit kodlardan bahsetmiyorum. Hangi seviyede bir problem çözmek isterseniz isteyin problemin çözümü zorsa bir algoritma yazmak sizi çözüme ulaştıracaktır. Özellikle yazılım sektöründe algoritma yazmak her şeyden daha önemlidir. Dijital olarak kullandığınız herhangi bir cihazın işletim sisteminden içerisindeki programlara kadar her bir ayrıntısında algoritmalarla oluşturulmuş kodlar bulunuyor.
Bir bilgisayara bir insanın 200 yıl yaşasa da hesaplayamayacağı kadar hesabı güçlü bir bilgisayar ile birkaç günde hesaplayabilirsiniz. Ancak bir insana söylediğiniz bir şeyi 200 yıl bir bilgisayara anlatmaya çalışsanız da anlatamazsınız. Bilgisayarlar ve algoritmanın bağlantısını kurduğumuza göre algoritmanın ne demek olduğunu anlamış olduk. Algoritma belirli bir problemi çözmek için tasarladığınız yoldur. Bu yol pratikte problemi daha kolay bir şekilde çözmenizi sağlar.
Algoritmanın tarihini araştırdığınızda Harezmi’den geldiğini görebilirsiniz. Harezmi’nin isminin Latincesinden Algoritma kelimesi üretilmiştir. İlk algoritma el-Harezmi tarafından Hisab el-cebir ve el-mukabala kitabındadır.
Köklü sayıları hesap makinesi nasıl hesaplıyor gibi bir soru daha önce aklınıza gelmiş olabilir. İşin içinde bir hesap makinesi de olsa bilgisayar olduğundan bir algoritma yazılması gerekiyor. Algoritma içerisinde de aşağıda görmüş olduğunuz formül kullanılıyor.
Bu formülün ne işe yaradığını ve nasıl doğru sonucu verdiğini yazıma giderek öğrenebilirsiniz ancak konumuz algoritmalar. Algoritma nedir? Sorusu hakkında umarım kafanızda bir soru işareti kalmamıştır.
Algoritma Nasıl Yazılır?
Algoritma hayatımızın herhangi bir bölümünde karşılaştığımız bir problem için yazılabilir. Yazının devamında kafa karıştırmayacak şekilde yazılımsal algoritmalarla devam edeceğiz. İlk olarak bir problem belirleyelim. Problemimiz girilen bir sayının asal olup olmadığının tespit edilmesi olsun. Asal sayılar sadece kendisine ve 1’e bölünebilen 1’den büyük doğal sayılar olarak tanımlanır. Dolayısıyla bir sayının asal sayı olup olmadığını belirlememiz için kendisinden küçük tüm sayılara o sayıyı bölmeliyiz. Bu şekilde düşünmemin sebebi tabii ki bir bilgisayar için kod yazılacağıdır. Yoksa 17‘nin 16’ya bölünmeyeceğini herkes bilebilir.
Problemimizi belirlediğimize göre artık bu problemi nasıl çözebileceğimizi düşünebiliriz. Verilen sayıyı sayıdan küçük tüm sayılara bölen bir algoritmaya ihtiyacımız olduğundan bize bir döngü gerekiyor. Bu döngünün girilen sayıda 0’a doğru sayıyı sürekli azaltması biraz mantıksız olacağından belirli bir sayıdan başlayıp girilen sayıya kadar gitmemiz daha doğru olacaktır. Bilinen ve tanımlı bir sayıyı sürekli arttırmak daha kolay olacaktır.
Zaten kod yazarken kullanılan for döngüsü sayının kaçtan başlayacağını, ne zaman duracağını ve döngü bir kez çalıştıktan sonra ne yapılacağını belirlememizi sağlıyor. İşin yazılım kısmına girmeyeceğiz ancak algoritma yazma aşamasında kullanacağımız döngüyü tanımak işimizi kolaylaştıracaktır. 0 ve 1’i döngü içerisinde kullanmayacağız. 1 rakamının asallık kontrolünü döngüye girmeden özel bir şekilde halledeceğiz. 0 rakamını da bir sayıyı 0’a bölemeyeceğimizden atlıyorum.
Algoritmamızın en önemli kısımlarından birine geldik. Sayıyı kendisinden küçük herhangi bir sayıya böldüğümüzde verilen sayının tam bölünüp bölünmediğini nasıl anlayacağız? Bu aşamada işe ufak bir matematik giriyor. Sayıyı kendisinden küçük bir sayıya bölüp sonucunu değerlendirmektense modunu alıp modun 0 olup olmadığını kontrol etmemiz gerekiyor. Mod hepimizin bildiği gibi bölme işleminin sonucunda ortaya çıkan kalanı bize veriyor. Eğer kalan 0 ise zaten bu sayı kendisinden küçük bir sayıya bölündüğü için asal değil. Sayının asal olup olmadığı bilgisini tutan bir değişken de tanımlayarak asal olmadığını tespit ettiğimiz an değişkene bunu yazalım.
Kuracağımız algoritmayı kafamızda canlandırdık. Bu şekilde planlar yaparak algoritmayı daha kolay bir şekilde kurabilirsiniz. Planla > Algoritma kur > Algoritmayı pratiğe dök şeklinde bir yol izlemek her zaman sizi daha kolay bir sonuca ulaştıracaktır.
Algoritmayı yazmadan önce bahsetmem gerekir ki algoritma kurularak yazılmış bir kod algoritma kurulmadan yazılmış bir koddan daha kısa ve kolaydır. Bu sebeple planlı ilerlemek her zaman sizi daha kaliteli sonuçlara çıkaracaktır.
Şimdi algoritmamızı yazalım. Yukarıdaki paragraflarda da planladığımız aşamaları algoritma yazmadan önce tekrarlayalım.
1- Verilen sayının asal olup olmadığı bilgisini tutan bir değişkenimiz olacak.
2- Bu değişken true ya da false şeklinde bize doğru ya da yanlış bilgisi tutacak.
3- Program çalıştığında verilen sayıyı true bilgisi ile asal kabul edecek.
4- Algoritma içerisindeki koşullar sağlanırsa değişken false olacak ve program durup kullanıcıya sayının asal olmadığını söyleyecek.
5- Döngü bittiğinde değişkenimiz hala true ise kullanıcıya sayının asal olduğu söylenecek.
Şimdi algoritmayı yazalım.
Adım 1: Başla.
Adım 2: asalmi, deger ve sayac değişkenlerini tanımla.
Adım 3: deger değişkenini kullanıcıdan al.
Adım 4: asalmi = true (asalmi değişkenini true eşitle.)
Adım 5: Eğer deger < 2 ise asalmi = false yap ve Adım 10’a geç.
Adım 6: Eğer deger != 2 ise sayac=2, değilse Adım 10’a geç. (2 asal sayısı için bir kontrol yaptık.)
Adım 7: Eğer deger % sayac == 0 ise asalmi = false yap ve Adım 10’a geç.
Adım 8: sayac++ (sayaç değişkenini bir arttırdık.)
Adım 9: Eğer sayac < deger ise Adım 7’ye geç.
Adım 10: Eğer asalmi == true ise ekrana “Girilen sayı asaldır.”, asalmi == false ise “Girilen sayı asal değildir.” yaz.
Adım 11: Bitir.
Algoritmamızı bu şekilde yazdık. Ben kafanızda daha kolay oturabilmesi için yazılım alanına fazla girmeden ayrıntılı şekilde yazdım. Algoritmalar genellikle onlarca farklı yoldan yazılabilir. Yukarıdaki algoritmanın daha kısa halinin nasıl olabileceğini düşünerek algoritmayı geliştirmeyi denemenizi tavsiye ederim.
bool asalmi=true;
System.Console.WriteLine("Sayı: ");
int sayi = int.Parse(Console.ReadLine());
if(sayi==1){
asalmi=false;
}
for (int i = 2; i < sayi; i++)
{
if (sayi%i==0)
{
asalmi=false;
break;
}
}
if (asalmi==true)
{
System.Console.WriteLine("Asaldır");
}else
{
System.Console.WriteLine("Asal Değildir");
}
Yukarıda vermiş olduğum algoritmanın c# dilinde yazılış şekli yukarıdaki gibidir. Javascript ile yazmak isterseniz kullanıcıdan sayıyı alma şeklinizi ve değişken tanımlama şeklinizi değiştirmeniz yeterli olacaktır. Yazının bu aşamasına kadar geldiyseniz artık algoritmanın ne olduğunu ve nasıl yazıldığını anlamışsınızdır. Birçok şekilde algoritmalar yazabilirsiniz.
1- Arama algoritmaları
2- Bellek yönetimi algoritmaları
3- Bilgisayar grafiği algoritmaları
4- Birleşimsel algoritmalar
5- Çizge algoritmaları
6- Evrimsel algoritmalar
7- Genetik algoritmalar
8- Kripto algoritmaları veya kriptografik algoritmalar
9- Kök bulma algoritmaları
10- Optimizasyon algoritmaları
11- Sıralama algoritmaları
12- Veri sıkıştırma algoritmaları
Gibi birçok algoritma türü vardır. Hepsinin ortak noktası da yukarıdaki adımlardır. Algoritma yazmak çokça düşünce gerektiren bir spordur diyebiliriz. Bu kadar önemli bir konunun da patenti fiziksel değilse ne yazık ki alınamıyor.
Algoritmaları Nerede Yazabilirim?
Algoritmalarınızı not tutabildiğiniz herhangi bir program ya da diyagram sitelerinde yazabilirsiniz. İyi de ben algoritmayı yazdıktan sonra nasıl uygulayabilirim? Şeklinde kafanızda birçok soru olabilir. Bunun çok basit ve etkili bir yolu var. Yazdığınız algoritmaları test etmek için yazılım biliyor olmanız ya da öğrenmeniz zorunlu değil. Scratch eğitimciler için basit bir şekilde oyunlar tasarlamayı sağlayan bir araç. Scratch ile alakalı tüm sorularınızı bir sonraki başlıkta açıklayacağım.
Bu başlık altında diyagramlar ile algoritmaların nasıl yazılabileceğini inceleyeceğiz. Üniversitede aldığım algoritma dersinde verdiğim ödevlerden birisi de aşağıdaki gibiydi.
Resmi düzgün inceleyemiyorsanız yeni sekmede açabilirsiniz. Algoritmalarınızı adım adım yazmanıza gerek yok. Diyagramlar ile de algoritmalar yazabilirsiniz. Akış diyagramlarını kullanarak algoritma yazmak için https://app.diagrams.net web sitesini kullanabilirsiniz. Google’a drawio yazdığınızda karşınıza çıkacaktır. Bu web sitesi ile algoritmaların diyagramlarını çok kolay bir şekilde çizebilirsiniz.
Bu diyagramları çizerken kullanılan şekiller rastlantı değildir. Her bir şeklin bir anlamı var. Veri girişi için farklı bir şekil, başlama için farklı bir şekil ve koşullar için farklı bir şekil gibi birçok şeklin farklı anlamları var.
1- Programın başlangıç ve bitişini belirler. Ödevimde kullanmış olduğum algoritmanın başla ve bitir kısmını kapsıyor.
2- Bilgi giriş veya çıkışı için aşağıdaki şekil kullanılıyor.
3- Eğer gibi koşul ifadelerinin akış şemasındaki karşılığı aşağıdaki gibidir. Karar alma işlemlerinde bu şekil kullanılır.
5- Algoritmanızın izleyeceği adımları aşağıdaki gibi çizgilerle belirtmelisiniz.
6- Ekrana “asal değildir yaz” gibi algoritma adımlarını akış şemasında bu şekilde gösteriyoruz.
Yazdığınız algoritmaların akış şemasına aktarılması aşamasında bu tür şekillerin neleri ifade ettiğini bilmeniz gerekiyor. Bu şekilleri verdiğim web sitesinden kolayca temin edebilirsiniz. Akış şeması oluştururken ödevimde gördüğünüz gibi her aşamasını sırayla takip etmek gerekiyor. Algoritma yazarken yukarıdan aşağı giderek yazılanı takip ettiğimiz gibi akış şemasında da okları ve bağlantıları takip etmeliyiz.
Yazılım Bilmeden Algoritmamı Nasıl Çalıştırabilirim?
Hiçbir programlama dili bilmeseniz bile Scratch ile algoritmalar kullanarak oyunlar programlayabilirsiniz. Scratch eğitim amacıyla oluşturulmuş 8 – 16 yaş aralığında çocukların kullanımı için sunulmuş bir programlama dilidir. https://scratch.mit.edu adresine girerek ya da Google’a Scratch yazarak uygulamanın ana sayfasına gidebilirsiniz. Scratch’ı hem bilgisayarınıza indirebilir hem de tarayıcı üzerinden kullanabilirsiniz.
Ana sayfaya girdikten sonra oluştur butonuna tıklayıp sol üstten dilinizi seçmeniz yeterli olacaktır. Aşağıdaki gibi bir ekranla karşılaşacaksınız. Scratch’ın genel mantığı kukla ve dekorlardan oluşuyor.
Ekranda görmüş olduğunuz kedi bir kukla. Bu kuklaya kodlar yazarak hareket ettirebilir ya da animasyonlar yapabilirsiniz. Scratch’ı öğrenmek çok basit ve hızlıdır. Hiçbir fikriniz olmadan da bir şeyler yapmaya çalışsanız yapabilirsiniz.
Algoritmalarımızı yazarken eğer kelimesini sürekli kullanmıştık. Yukarıda saniyeler içerisinde yazmış olduğum kodu görüyorsunuz. Değişken tanımlayıp bir değere eşitledik ve eğer ile bu değişkenin değerini kontrol ettik. Burada yazdığınız kodların yazılım dünyasıyla benzer olduğunu bilmelisiniz. Eğer ise ve değil ise şeklinde bir kod bloğu görüyorsunuz. Bu kod bloğunun yazılım dünyasındaki karşılığı if ve else şeklindedir.
Erken yaşta yazılıma başlamak istiyorsanız, çocuğunuzun yazılım dünyasına yabancı kalmamasını ve bir yerden başlamasını istiyorsanız, yazılım öğrenecek kadar vaktiniz yoksa ya da bir oyun tasarlamak istiyorsanız hiç hafife alınamayacak çok güzel oyunlar tasarlayabilirsiniz.
Scratch uygulaması ile tasarlanmış onlarca oyun Scratch’ın resmî web sitesinde yayınlanmış şekildedir. Zaten bu uygulama gayet yaygın kullanılan ve kaynağı bol olan bir uygulamadır. Yaşadığınız herhangi bir sorunu arama motorunuzda aratırsanız cevabınızı alırsınız.
Scratch ile kodladığınız oyunları indirip Scratch aracılığı ile istediğiniz ortamda açabilirsiniz. Kullanımı ne kadar basit olsa da detaylıca öğrenmek isterseniz YouTube ya da BTK AKADEMİ üzerinden ücretsiz bir şekilde öğrenebilirsiniz. Yazılım ve algoritma dünyasına ayak basmak için en sağlam Scratch diyebilirim.
Sonuç
Sonuç olarak algoritma yazmak yazılıma başlamak için yapabileceğiniz en güzel hareketlerden birisi olacaktır. Sıfırdan Yazılım Nasıl Öğrenilir? Yazımda da yazılıma nasıl başlanabileceğini detaylıca anlatmıştım. Bu yazıda ne kadar kolay algoritmaları ele almış olsak da çok karmaşık algoritmalar ile karşılaşabilirsiniz. Yazı başında örnek olarak verdiğim e ticaret sitelerinin ürün algoritmaları gibi birçok karmaşık algoritma mevcut.
Programlama mantığını çözdüğünüzde ve bir programlama dili öğrendiğinizde artık başka bir programlama dili daha öğrenmek ya da uygulamalar geliştirmek çok basit olacaktır. Örneğin bir quiz uygulamasının yapılabilmesi için detayı bir algoritma oluşturmalısınız. Verilecek süre, doğru cevaplar, yanlış cevaplar gibi birçok veriyi algoritmalarla değerlendirerek uygulamalar yapabilir ve bu uygulamaları Scratch’a aktarabilirsiniz.
Algoritma konusunda bir eğitim almanız zorunlu değil. BTK AKADEMİ üzerinde birçok algoritma ve yazılım eğitimi mevcut. Bu eğitimlerden birine katılarak ilerleyebilir ve bu alanda çok büyük başarılar elde edebilirsiniz. Ben bir matematik öğretmenliği öğrencisi olmama rağmen yazılım ilgimi çekmişti. Bir şekilde başladım ve şu anda istediğim gibi bir web uygulaması geliştirebiliyorum. Başlamaktan korkmayın ve ilk adımınızı herhangi bir yolla atın.
Güzel bir başlangıç yapabilmek için algoritmalar yazıp bu algoritmaları Scratch üzerinde uyguladıktan sonra javascript ile başlayabilirsiniz. Öğrenebileceğiniz ve neredeyse her uygulamada çalışan en kullanışlı programlama dili javascript diyebilirim. Javascript Öğrenmek Zor mu? Yazımda da zaten her şeyi anlatmıştım. Değişken tanımlamak gibi birçok işlemi javascript aracılığı ile diğer programlama dillerine göre daha kolay bir şekilde yapabiliyorsunuz.