<div><font face="Century Gothic"><font size="3"><div align="center">Merhaba değerli Turkhackteam üyeleri. Bu konuda Algoritmalar ve Programlamaya C++ ile giriş yapacağız.



İçerik:

Algoritmalar
Problemin Okunması
Akış Diyagramları
Algoritma Örnekleri
Algoritmada İşlem Önceliği
Mantıksal İşlemler
Değişken Tipleri
Döngüler
Döngülerden Çıkılması
İç İçe Döngüler
C++ Programlamaya Rad Studio ile Giriş





Algoritmalar

Öncelikle programlamaya giriş yapmak isteyen fakat yanlış yönlendirilen arkadaşlar için algoritmalardan bahsetmemek doğru olmaz. Algoritmaya kısaca herhangi bir olayın işleyişi diyebiliriz. Yani olayın çalışmasının başlangıcından bitişine kadar tüm adımlarının eksiksiz bir şekilde yazılması demek o olayın algoritması demektir. Açıkçası dünya üzerinde algoritmanın rol oynamadığı herhangi bir iş yok demek yanlış olmaz. Çünkü herhangi bir iş yapmaya kalktığımızda bu işteki bütün adımları doğru yapmazsak ortaya çıkan şey pek sağlıklı olmaz. Örneğin nefes almak adım adım yapılan bir iş. Demek istediğim algoritmanın her şeyde mevcut olması. Algoritmanın adının kaynağı Harezmi?nin (arapça söyleyişiyle el-harezmi) Fransızca ifade edilişinin İngilizceye geçmesi sonucunda ?algorithm? ve Türkçemizde ise ?Algoritma? dan gelmektedir.



Örneğin 14+37?yi toplamaya kalktığımızda ilk yapacağımız işlem 4 ile 7?yi toplamak fakat toplamanın neden sağdan başladığını bile düşünmüyoruz. Veyahut matematiğin önemli buluşlarından birisi ve bir kabul olan 0?ı düşünmüyoruz. Bir başka pek düşünmediğimiz şeylere örnek verecek olursak, matematikte evrensel olarak sağdan sola toplama yapılmasının nedenini düşünmüyoruz. Çoğu kodlama yapan insan deneme yanılma yoluyla yazmakta ve bu şekilde para kazanmakta. Fakat deneme yanılma yolu sizce sağlıklı mı? Bir algoritmayı kurarken en ufak ayrıntıyı bile bilmemiz gerektiğinin farkında olmalıyız. Bir bilgisayar programcısının en önemli yardımcısı kağıt ve kalemdir. Evet, kağıt ve kalem. Aklımızdan yaptığımız ve mantığını kurdum kodu yazmaya geçelim dediğimiz anda yanlışı yaptık bile. İlk defa karşımıza çıkan bir problemi kağıt üstünde çözüp kağıt üstünde yüzde yüz çalıştığından emin olmazsak yazamayız. Kodlama yapıldığı sırada mantık geliştirilmez. Kağıt üstünde kurulduktan sonra kodlamaya geçilir. Tabii bunlardan bahsederken kısa kodlamalardan bahsetmiyorum. Uzun aşamalı kodlamalarda bu şekilde yapmalıyız. Kağıt kalemi vurguladım fakat kağıt ve kalemden kasıt bir Word belgesi veya not defteri de olabilir.



Algoritmalardan bahsediyorsak akış şemalarından da bahsetmemiz gerekir. Akış şeması dediğimiz şey algoritmanın şekillerle gösterilen halidir. Diyelim ki bir dikdörtgen görüyoruz ve o dikdörtgen ekrana çıktı anlamına geliyor. Başka bir şeklinse başka bir anlamı var. Bu akış şemalarından daha önemlisi bizim için yapılacak olan işin en baştan doğru yazılmasıdır. Peki bu işlem nasıl yapılıyor? En önemli şey başlamak. Bu arada başlamak bir işi bitirmenin yarısı değildir. Başlamak başlamaktır. Bir algoritmayı tasarlamadan önce neler yapmalıyız?



Problemin Okunması

Bizden neyin istendiğini anlamamız gerekli. Bununla da kalmayıp ne kadar isteniyor, nasıl bir üretim bekleniyor yani o algoritmanın sonucunda ne çıkması bekleniyor tüm bunların iyice analiz edilmesi gerekli. Hangi ekipmanlara, nelere ihtiyacım var? Bizim ülkemizde programcılıkta algoritma dendiği zaman en ünlü olan standart algoritma çay demleme algoritmasıdır. Bir çay nasıl demlenir şeklinde algoritmalar mevcut. Algoritma geliştirirken belirtilen isteğin özel mi yoksa genel mi olduğunu belirlememiz gerekir. Örneğin çay demleme algoritmasından bahsettik çay demlemek genel bir algoritma fakat yarım saatte çay demlemek özel bir algoritmadır diyebiliriz. Özel algoritmalar her zaman doğru sonucu vermeyebilir. Yazdığımız bütün programları ve bütün kodları, algoritmaları bu mantıkla ve en kısa şekilde yazmaya çalışacağız. Sağlıklı bir program yazılırken en kısa haliyle fakat eksiksiz bir şekilde olmalı.





Akış Diyagramları

Akış diyagramlarından bahsetmeden önce bir algoritmanın test edilmesi için sınır değerler, orta değerler ve özel değerler kullanılmalı. Örneğin iki sayının karelerinin toplamı algoritmasını test etmek. Misal 0,1 gibi değerler önemli, özellikle de 0 çok önemli çünkü matematikte çarpmada yutan elemanken toplamada etkisiz eleman kendisi. Bunları bilerek işlem yapmamız daha sağlıklı olur. Akış diyagramları diyorduk akış diyagramları algoritmaların özel şekillerle çizilmesine denir demiştik. Burada bilmemiz gereken bir başka önemli nokta akış diyagramlarını ayrıntıya inmeden oluşturmaya çalışmak.



Akış diyagramlarımızı oluşturmamız için bu şekilleri iyice öğrenmemiz gerekiyor. Algoritmanın tanımını çoktan yapmıştık fakat bir algoritmanın hangi kriterleri sağlayacağını belirtmedik. Bir algoritma girdi, çıktı, açıklık, sonluluk ve etkinlik kriterlerini sağlamalıdır.

Girdi: Sıfır veya daha fazla değer verilmeli.
Çıktı: En azından bir tane değer üretmeli.
Sonluluk: Her olasılık için algoritma sonlu adımda bitmeli.
Etkinlik: Her komut basit bir şekilde yürütülebilmeli.

Kağıt ve kalemden bahsetmiştim yukarılarda. Şimdi akış diyagramlarındaki o şekilleri üstte vermiştim fakat ısınma açısından ve bir klasik olan iki sayının toplamını bulan algoritmayı birlikte yazalım. Algoritma yazarken adım sayısını belirtmeniz gerekli çünkü bir süre sonra falanca adıma geri dönmek isteyebilirsiniz ve bunu yapmanızın tek nedeni bu değil. Ben 0,1,2,3? şeklinde yapacağım. Başlamadan önce değişkenlerden bahsetmenin tam zamanı. Programlama ve algoritmada bilgisayarda tutulacak türlü türlü bilgileri, bilgisayarın o bilgiyi kavraması ve işlem yapmasını sağlaması, özetle saklamasına yardımcı olan kahramanlarımıza değişken diyoruz. Daha sonra değişken tiplerinden bahsederim şimdilik bu kadarı yeterli.

Kod:
0 Başla
1 Birinci, ikinci sayi, toplam?i tanimla
2 Birinci sayiyi oku
3 İkinci sayiyi oku
4 Sayilari topla ve toplam degiskenine at
5 Toplami goruntule
6 Dur

İki sayının toplamını bulup gösteren algoritmayı yazdık. Tabi bu algoritmayı örnek olması açısından verdik yoksa uzun uzadıya yazmayın. Yani üstte yaptığımız örnek aslında şöyle olmalı:

Kod:
0 Başla
1 t, s1, s2 degiskenlerini tanimla
2 s1=?
3 s2=?
4 t=s1+s2
5 t

Farklı bir örnek daha olması açısından kullanıcının girdiği iki sayının karelerinin toplamını görüntüleyen algoritmayı yazalım.

Kod:
0 Başla
1 sayac=1, sayi=1 degiskenlerini tanimla
2 sayi değerini (al)
3 sayi=sayi*sayi
4 sayac=sayac+1
5 sayac= 50 ise 9.adıma git
7.5 sayac=sayac+1
8 3.adıma git
9 nt ve pt değerlerini yaz
10 dur

<div style="margin:20px; margin-top:5px"> Kod:
<font color="olive">1 başla
2 nt=0, pt=0, gr, sayac=0
3 lutfen rastgele bir sayi giriniz yaz
4 gr degerini al
5 eger gr>0 ise pt=pt+gr
6 eger gr