ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Algoritma : Kısa bir tanım gerekirse şu şekilde tanımlayabiliriz. Algoritma, belli bir problemi çözmek veya belirli bir amaca ulaşmak için tasarlanan yol. Kendime göre anlatmak istesem Düşünceyi görmek diyebilirim. Düşünürken insanlar bir çok şeyi atladıklarını fark etmezler. Düşüncelerini bir kağıda döküp, mantık sırasına sokunca problemleri daha kolay görebilirler.

Bu şekilde baktığımızda, sadece programcı olmak gerekmiyor diye düşünebiliriz. Doğrudur. Hayatımızın her alanında farkında olsak da olmasak da, adına algoritma desek ya da demesek de, biz bunu kullanıyoruz. Yeni bir şey değil.

Belirli amaca giden yol demiştik. Mesela birisi size adres sordu. Siz de buradan düz git sonra bakkalı gördüğünde oradan sağa dön ve 3-5 dükkan sonra sağda göreceksin dersiniz. İŞTE SİZE BİR ALGORİTMA ÖRNEĞİ.

Bazıları ise bu tarifi yaparken, bilmem ne bakkalını biliyor musun der. Amacı oradan tarif etmektir. Fakat bunun başarı şansı karşısındakinin o bakkalı bilmesine bağlıdır. Bilmiyorsa programlarınız gibi sonsuz döngüye girer cevap veremez.
Programlarınızı yaparken, programladığınız cihaza her veriyi vermelisiniz ya da nereden alacağını bildirmelisiniz. Sonrasında doğru veriyle karar aşamasına gelip doğru soruyu sorup, cevabını da tam vermelisiniz. Ancak bu şekilde program çalışırken istediğiniz gibi çalışır.

Algoritmanın bir adım ötesi o programın beyninizde çalıştırılmasıdır. Programladığınız cihaz ancak sizin kadar akıllı olabilir. Sizden daha hızlı hesaplama yapabilir. Bu sizden zeki olduğunu göstermez.

Bunu hayatımızın her alanında kullanıyoruz kullanmamız da gerekir. Mesela yemek tarifi veriyorsunuz. Bu tarifte malzemeleri girdi olarak sıralıyorsunuz, sonrasında ise nasıl yapılacağını adım, adım tarif ediyorsunuz. Bu da algoritma.

Kısacası algoritma illa ki akış diyagramı gibi resimlerle oluşturulacak değildir.  Akış diyagramı dediğimiz kavram ise, Algoritmanın belirli resimlerle bir sıraya dizilmesi demektir.

Herkes hayatında kodlama öğrenmek zorunda değildir. Fakat Algoritma öğrenip bunu hayatına uygulayabilir.

Dünya da bazı matematikçilerin ve programcıların oluşturduğu standart algoritmalar vardır. Bize yol gösterirler. Mesela programımızda kelimeleri ilk harfine göre sıralama yapmak isteriz. Bu durumda nasıl yapabiliriz diye düşünüp, bir şeyler yapabiliriz. Tabii ki bazen bu işlemi nasıl yapacağımız konusunda fikrimiz de olmayabilir. Bu konudaki örneklere bakarız ya da yayınlanmış standart sıralama algoritmasını okuyup, anladıktan sonra programımıza ekleme yaparız.
Algoritma, bir program parçacığı değildir. Başta da dediğimiz gibi o işin nasıl yapılacağını gösteren listedir.

Genelde sorulan sorulardan biri, programlamaya başlayacağım nereden başlayayım ya da hangi kitabı almalıyım. Verilen cevaplar çok farklı olacaktır. Kimisi kendi kullandığı programlama dilinin kitabını önerecektir. Kimisi algoritma kitabını önerecektir.
Sizler bu konuyu bitirdikten sonra DOĞRU SORUYU SORMASINI ÖĞRENİP, sorumuzu doğru bir şekilde sorup, uygun cevapları alabilmelisiniz.

Doğru soru nedir. ( Bunu irdelememiz gerekir. Sorunun faydalı bir şekilde cevaplanmasını istiyorsanız karşı tarafa doğru veriyi vermelisiniz.)

Aşağıdaki şıkları irdeleyip, nasıl bir soru soracağımıza karar vermeliyiz.

1-) Programlamaya başlayacağım ama ne programı yapmak istiyorum.

a-) web programlama
           Seçeneklerinizden bazıları

aa-) java
bb-) php
cc-) asp
dd-) html …

b-) Android programlama
            Seçeneklerden bazıları

aa-) android studio
bb-) B4A
cc-) Mit app inventor

c-) Mikrokontrolcü programlama (PIC,Arduino,Atmega serisi,STM,vs…)

2-) Hangi programlama dilini kullanabilirim ya da kısa zaman da öğrenebilirim.

3-) Bunlarla ilgili ek donanıma ihtiyaç olacak mı?

Bu düşüncelerin doğrultusunda sorumuzu şöyle sorabiliriz.

1-) “Web programlamaya başlayacağım, ilk izlenimlerimde genelde bu programlar (…)  kullanılıyormuş bu konuda bilgi verebilir misiniz ve kaynak önerebilir misiniz?

2-) Android programlama yapmak istiyorum. App inventordan bahsediliyor, başlangıç için bu yeterli mi siz ne önerirsiniz.

3-) Mikrokontrolcü  programlamak istiyorum. PIC kullanmayı düşünüyorum. Hangi programlama dili ile başlayabilirim.Önerinizi destekleyecek kaynak bilgisi verebilir misiniz?

4-) Masaüstü program oluşturmak istiyorum, VB.net kullanıldığını biliyorum. Bunun dışında önerebileceğiniz program var mı?

Gibi sorular sorulabilir. Bunlar daha da detaylandırılabilir. Fakat bu sorularda ortak bir nokta var. Aslında bu nokta tüm programlarınızda olması gereken bölümü oluşturuyor.

Ortak nokta VERİ dir. Siz veriyi karşı tarafa vermeden bir şeyler istediğinizde, bir çöp dağı gibi gelen cevaplar arasında boğuşursunuz. Doğru veriyi verdiğinizde karşı taraftaki kişiler de size doğru bir şekilde cevap vereceklerdir.
Karşınızdaki kişiler siz veri vermeseniz de, bir şeyler söylerler sorunuzu cevaplarlar. Ama doğru ama yanlış. Yoruma açık cevaplardır.

Bilgisayar ve bu gibi programlanabilir sistemlerde, soruyu soran da siz olacaksınız, cevabı verecek olan da siz olacaksınız.

Mesela şu iki sayıyı topla dediğinizde karşınızdaki kişi size hangi iki sayı der. Programcı olarak siz kendi programınıza şu iki sayıyı topla deseniz program sizden veri beklemeye geçer ve sonsuz döngüye girer. Size yanıt vermez.

ALGORİTMA tam da bu durumlar için uygun bir çalışmadır.

Algoritmayı, bir toplama işlemi için yazacaksanız aşağıdaki şekilde yazabilirsiniz.
1. Sayıyı kullanıcıdan al
2. Sayıyı kullanıcıdan al.
3. Bu ikisini topla.
4. Sonucu göster.

Buraya kadar bunu siz anladınız. Birine söyleseniz zaten bunu yapacaktır. Bunu bilgisayara söylediğinizde anlamayacaktır.

Bu istediğimiz sırayı komutlara çevirecek olursak ( Burada genel anlamda yazıyorum birçok dilde farklı komut kullanılabilir.)
GİR 1.sayı
GİR 2. Sayı
1.sayi+2.Sayı=3. Sayi
GÖSTER 3. Sayı

Bu şekilde programınızı oluşturduğunuzda çalışacaktır.

Şimdi daha karmaşık durumlara geçebiliriz.
Algoritmayı iyi öğrendiğimizde karmaşık durumlarda bile başlangıç ve bitiş arasındaki çizgiyi doğru oluşturabilirsiniz. Fakat hiçbir zaman evdeki hesap çarşıya uymayacaktır. Mantık hatası olmasa bile, komut kullanımında her şey istediğimiz gibi gitmeyebilir. Elbette ki program yapılıp çalıştırılırken bazı hatalar oluşabilecektir. Bunlar ise debug denilen hata ayıklama yollarıyla düzeltilecektir.

Bir oyun vardır. Tuttuğum sayıyı bil diye. Bu oyunu, bilgisayarla oynayabileceğiniz bir program haline getirebiliriz.

Algoritmasına başlayalım.
1-) PC bir sayı tutsun.
2-) Kullanıcı tahminini PC ye girsin.
3-) PC tutulan sayı girilen sayıdan büyükse büyük yazsın. Küçük ise küçük yazsın.
4-) 2 nolu seçeneğe git.

Yukarıdaki algoritma da PC yi bir insan olarak düşünürseniz hata olmayacaktır.
Fakat PC de hata verecektir.
Nedeni ise, PC,  her durumu görmeli ve her duruma göre cevap verebiliyor olmalıdır.
3. Seçenek de karşılaştırma sadece büyük mü küçük mü karşılaştırmasıdır. Fakat burada girilen sayının da eşit mi diye karşılaştırılması ve doğru cevap da 5. Adıma gidip cevabı göster seçeneğine sahip olması gerekir.
PC kelimesi her ne kadar bilgisayar olarak kullanılsa da programlama ortamını belirtmektedir. Arduino, stm gibi ortamlar olarak da düşünebilirsiniz. 

Algoritmayı yeniden yazalım
1-) PC iki karakterli bir sayı tutsun.                    (rastlansal sayı tut)
2-) Kullanıcı tahminini PC ye girsin.                 (kullanıcıdan sayı al)
3-) PC tutulan sayı ile girilen sayıyı karşılaştırsın. Girilen sayıdan büyükse büyük yazsın. Küçük ise küçük yazsın. Eşit ise 5. Adıma git      (if then else)
4-) 2 nolu seçeneğe git.                                      (goto)
5-) Tutulan sayıyı göster.                                    (print)

Bunu bir de akış diyagramı ile gösterelim. Akış diyagramı basit işlerde gereksiz olsa da, daha kapsamlı işlerde, akış şeması kullanıldığında, takip etmek ve anlamak çok daha kolay olacaktır.
Akış diyagram sembolleri için bu sayfaya bakabilirsiniz.

Programlamaya başlamak.

Programlama için öncelikle ne yapmak istediğinize veya hangi programlama dilinde çalışmak istediğinize karar verdiğinizi düşünerek, anlatmaya devam edeceğim. Yukarıdaki bilgiler ister web sitesi yapın, ister masaüstü programcılık yapın, isterse mikrokontrolcü programlaması yapın, Ortak bilinmesi gereken bilgilerdir.

Algoritmanızı hazırladınız. Sonrasında bunun programa dökülmesi gerekiyor. Bu durumda kullandığınız dilin komutlarını da öğrenmeniz gerekiyor. Komutlar hiçbir zaman düz bir yazı gibi ezberlenmez. Program yapıldıkça ihtiyaç oldukça bu komutlara ulaşıp uygun olanları kullanırsınız. Önemli olan komut uygulamasıdır.  Standart olan bazı yapılar vardır. Mesela Arduino programlıyorsanız satır sonunda ( ; )  konulması gerekir. Her fonksiyon void ile başlamalı gibi temel bilgilerdir.
Bu gibi temel işlevleri ezberlemeniz gerekir. Mesela UART komutları nelerdir ve yazılımı nasıldır. Bu komutu ezberlemek biraz zor olabilir. Fakat kullanmaya başladığınızda, program içerisinde bir kez kullandıktan sonra bunu hafızaya zaten yerleştirmiş olduğunuzdan, artık diğer satırlarda rahatlıkla kullanacaksanız. Bir kez daha bakmanıza gerek kalmaz. Şayet 15 gün sonra yeni den program yapacaksanız komutu hatırlarsınız, aradaki noktayı hatırlamayabilirsiniz. Program içerisinde hata ayıklama kısmı çalıştığında, size burada hata var der. Siz de hemen hatayı anlayıp düzeltirsiniz.

Tavsiyem şudur. Kullandığınız dilin komut sistemine bakın, hatta birkaç örnek de inceleyin fakat hepsini ezberlemek yerine, ne işe yaradıklarını ya da nerelerde kullanılabileceğini düşünün yeter. Algoritmada bir satıra karşılık gelen komutu yazarken, zaten komut kısmına yeniden dönüp, komutun kullanımını araştırarak öğreneceksiniz ve uzun süre bu aklınızda kalacaktır. Okuyarak kolaylıkla ezberleyemediğiniz bilgileri, sorarak %50 ezberleyebiliyorsanız, kendiniz araştırarak bulduktan sonra bir kaç örnekle pekiştirerek, %100 e yakın şekilde ezberleyebilirsiniz. 

Şimdi algoritmayı program şekline çevirelim. ( Bunu yaparken basit olması için PYTHON dilini kullanacağız. PYTHON konusunda benim de hiçbir tecrübem yok. Sizlerle beraber yeni öğreniyormuşum gibi olacak Bunu videoda gayet net göreceksiniz. )

Son verdiğimiz oyun algoritmasını programlayalım.
1-) PC bir sayı tutsun. (1-99 arası)
2-) Kullanıcı tahminini PC ye girsin.
3-) PC tutulan sayı girilen sayıdan büyükse büyük yazsın. Küçük ise küçük yazsın. Eşit ise 5. Adıma git
4-) 2 nolu seçeneğe git.
5-) Tutulan sayıyı göster

Komut şekline getirilmiş durum

1-)           Bu bölüm 2 karakterli bir sayının seçilmesini sağlar.

import random
tutsay=random.randint(1,99)
print(“maksimum 2 karakterli tutulan sayı “,tutsay)

2-)          Karşılaştırma yaparak sonuca göre davranır.

print (“tuttuğum sayıyı bil oyunu” )   # ekrana yazdırma
while True:                                   # devamlı bir döngü sağlar. Sayı bulunamazsa yeni sayı istenir. En alt satıra
# gidildiğinde sayı bulunamamışsa while kısmından tekrar başlar.
x = input (“Bir sayı giriniz:”)                 # bir sayı girilmesini sağlar
if int(x)==int(tutsay):             # karşılaştırma yapar.
print(int(tutsay))
        break                                  # programı bitirir.
    if int(x)> int(tutsay):                            # karşılaştırma yapar.
        print (“BÜYÜK”)
if int(x)< int(tutsay):       
                  # karşılaştırma yapar.
        print (“KÜÇÜK”)

Burada ki programa bakarak kendi programlama dilinize çevirebilirsiniz. Fakat???
Not: Şunu da unutmayalım. Biz Arduino programlama bilmiyorsak satır, satır yazılan programa bakarak programın nasıl yapıldığını anlayıp kendi programlama dilimize çevirmemiz zor olacaktır. Mutlaka program satırlarında ne olduğunu anlamamız gerekir. Bunun için de Arduino komut yapısını öğrenmemiz lazım ki bu da gereksiz bir zaman kaybıdır.
BUNDAN DOLAYI, YAZILAN PROGRAMIN ALGORİTMASINA BAKMAK, HER ZAMAN İÇİN KENDİ PROGRAMLAMA DİLİMİZE ÇEVİRMEK İÇİN EN KOLAY YOLDUR.

Çeşitli Algoritmalar var dedik. Bunlar bize programın nasıl yapılacağını değil mantığını anlatmak için yardımcı olacaktır. Algoritmalar tüm programlama dillerinde ortak kullanım alanı bulur. Çünkü programdan bağımsız, yapmanız gereken işe en uygun yolu bulmanızı sağlarlar. Sadece yol gösterirler, programını sizin yapmanız gerekir.

Bazı algoritma örneklerine buradan ulaşabilirsiniz. Algoritmayı anlama açısından önemlidir.

Arama algoritması https://tr.wikipedia.org/wiki/Arama_algoritmas%C4%B1

Sıralama algoritması : https://tr.wikipedia.org/wiki/S%C4%B1ralama_algoritmas%C4%B1

Daha birçok algoritma vardır ve zaman içerisinde çeşitli algoritmalar bulunmaya devam etmektedir.

Python online editor kullanmak için, bu linkleri kullanabilirsiniz. https://www.programiz.com/python-programming/online-compiler/?ref=b507ca15

https://www.programiz.com/python-programming/online-compiler/

W3schools tutorial page + online editors:  PYTHON ve diğer dilleri öğrenmek için kılavuz web site.    https://www.w3schools.com/Python/python_user_input.asp

Python online editor 2 : https://repl.it/languages/python3

Python rastlantısal sayı  üret.   https://www.programiz.com/python-programming/examples/random-number
Python rastlantısal sayı  üret.  https://www.yazilimkodlama.com/programlama/python-rastgele-sayi-uretme/

Python veri girişi :  https://www.programiz.com/python-programming/methods/built-in/input

Python karar verme:     https://www.programiz.com/python-programming/if-elif-else

Sonuç yazdırma. python yazdır:     https://www.yazilimbilimi.org/python-print-fonksiyonu-ve-formatlama/

 

1 Comment

  1. Algoritma uzun süredir kafamı meşgul eden ve en yakın boş vaktimde öğrenmeye başlamayı düşündüğüm bir konuydu. Bu güzel ve bilgilendirici giriş yazınız için teşekkür ederim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir