Programlama öğrenmeye başlayan hemen herkes, tabiri caizse "Kod yazmak için yanıp tutuşur".🤩Ancak kod yazma aslında bu işin son bacağıdır. Öncesinde farklı veri yapıları ve algoritma ⚙️ çeşitlerini inceleyerek kafanızda oturtmaya çalışmalısınız. Farklı algoritmalar ile çalışması gerektiğini kavrayan biri için sırada küçük kod blokları yazmaya geçmek gelebilir tabi ama benden öyle kolay kurtulamazsınız.🤪Bir yazımda algoritmanın öneminden bahsetmeye çalışmıştım. O yazıdan algoritmanın ne olduğu ile ilgili yazdığım birkaç cümleyi aşağı ekliyorum.
Tarih boyunca büyük dehaların, öncekilerin karmaşık bir şekilde kısmen toparladığı, ancak basit şekli ile kimsenin fark edemediği kavramları yakaladıklarını düşünürüm. El-Hârizmî, bu şekilde algoritmayı yakalayan cebir ilminin kurucusu olan matematikçi bilim adamıdır. Haliyle algoritmayı da zaten bilimsel terimleri ile binlerce kaynaktan bulabilirsiniz; o yüzden burada tanımından bahsetmeyeceğim ama şunu özellikle belirtmek istiyorum. İlk defa duysanız bile aslında algoritmanın ne olduğunu biliyorsunuz. Çok ciddiyim, şu an bu yazıyı okurken dahi "algoritma motorunuz" zaten çalışıyor. Bu kısma gelene kadar açıkladıklarıma belki hak verdiniz, belki saçma buldunuz. İşte bunun kararını size verdiren, şu an seçeneği düşünürken beyninizin size verdirdiği kararların bütününe algoritma diyoruz. Bu motor sık sık çalıştırılarak ve arada yüksek devirlerde zorlanarak gelişir, mümkün olduğunca çok çalıştırmalı ve arada gazı köklemelisiniz.🥴
Bunu bir programlama diline bağımlı kalmadan anlayabilmeye yardımcı olacak en eski ve basit program olan Flow Chart Visual Programming kullanımını sade bir şekilde göstereceğim.
Programı rar dosyasından çıkardığınızda ister kurabilir, ister direk support dizini altındaki exe dosyasından çalıştırabilirsiniz. Yalnız içindeki örnekleri doğru görüntüleyebilmek için "Yönetici olarak çalıştır" demeyi unutmayın. Her defasında bununla uğraşmamak için exe dosyasına sağ tıklayıp Özellikler < Uyumluluk < Bu programı yönetici olarak çalıştır kutucuğunu işaretleyebilirsiniz. Programımızın ana ekranı yukarıda.
Üst menüdeki bilindik ibareler dışında, sol taraftaki menüde diyagramı oluştururken asıl işimize yarayacak nesneler bulunmaktadır. Bu nesnelerin şekilleri birebir olmasa da büyük çoğunluğu algoritma sembollerinden alınmıştır. Programı kullandıkça algoritma görsellerine olan göz aşinalığınız da artacaktır.
Her algoritmanın bir başlangıç ve bitiş noktası olmak zorundadır. Yani tahmin ettiğiniz gibi başlangıç noktamız. Ortadaki çalışma alanına taşıdıktan sonra çift tıklarsanız uygulama boyunca kullanacağınız değişkenler oluşturabilirsiniz.
Action
, algoritmadaki işlem sembolüdür. Yaptırmak istediğimiz aritmetik hesaplama işlemlerini gireceğimiz bölümdür. Aşağıdaki örnekte sum=1
ifadesi ile bu değişkene 1 sayısını atama işlemi yapılıyor. "Değişken nedir, atama da neyin nesi, matematikten bildiğimiz eşittir değil mi o?" gibi sorular aklınıza geliyorsa Temel Veri Tipleri başlıklı makaleyi inceleyebilirsiniz.
Input
, algoritmadaki veri giriş-çıkış sembolünün aynıdır.
Output
, algoritmadaki yine veri giriş-çıkış sembolünün aynıdır. Aşağıdaki örnekte ekrana çıktı olarak faktöriyel sonucu basılmaktadır.
Conditional Junction
, algoritmadaki karar sembolüdür. Karşılaştırma işlemlerini gösterir. İşlem sembolünden farklı olarak, karar sembolünde çıkış çizgileri bulunur. Verdiğiniz şartın doğruluğu ya da yanlışlığına göre program akışına devam eder.
Connection
, algoritmadaki bağlantı sembolüdür. Aslında kullanımı zorunlu değildir ama oluşturduğumuz şemalarda görsel düzen açısından lazım olabilir. Bazen ekranı komple kaplayan öyle şemalar olur ki varsın bağlantı sembolü de olmayıversin diyecek hale gelebilirsiniz. Kaldırdığınızda 90 ͦ lik açılar yerine çapraz oklar blokları takip edecektir. Birbirine bağlı olan 2 nesneden birini silmeye çalıştığınızda hata mesajı vermesi gerekir ama boş bir ekran geliyor. Bu ekran önce aradaki bağlantıyı(çizgiyi) sildikten sonra nesneyi silebileceğinizi bildirir.
Function
, her ne kadar algoritmadaki döngü sembolüne benzese de içinde kullanıma hazır üs alma, logaritma, tarih ve metin işlemleri gibi hazır fonksiyonlar bulunur.
Window
, hazırlanan şemaya dışarıdan veri girişi yapılabilmesi için Textbox, Button gibi kontroller veya çeşitli görseller eklenebileceği gibi bunların çeşitli olaylarında gerçekleşmesini istediğiniz fonksiyonları tanımlamamızı sağlar.
Her algoritmanın bir bitiş noktası olmak zorundadır. Yine tahmin ettiğiniz gibi bitiş noktamız.
Şemadaki akış normalde çok hızlı gerçekleşmektedir. Yani işlemcinizin hızına göre ilerler. Bunu gözle takip edebilmek imkansızdır. Gözle takibi kolaylaştırmak açısından, milisaniye cinsinden hızı ayarlayabilmek için böyle bir kolaylık düşünülmüş işte. Aslında birebir aynı olmasa da şimdilik debug gibi düşünülebilirsiniz.
Olası en basit ve sade örneği yapalım; 2 sabit değişkeni toplayıp dışardan girdiğimiz 3.değişken ile çarpalım. Değişkenlerimiz num1, num2, num3, result
olsun. start
çalışma alanına sürükledikten sonra çift tıklayarak bunları virgül ile Yerel değişkenler
metin kutusuna girelim. Daha sonra 2 adet Action
sürükleyerek num1
ve num2
sabit değişkenlerin atamalarını 10
ve 5
olarak yapalım. Daha sonra bir Input
sürükleyerek Mesaj
alanına "3.sayıyı girin" yazıp Değişken Adı
alanına num3
yazalım. Böylelikle algoritmamız çalışırken gireceğimiz sayı dinamik olarak num3
değişkenine atanacak. Sonra yine 2 adet Action
sürükleyip ilkinde toplama ikincisinde çarpma işlemleri yapıp 1 adet Output
sürükleyerek Mesaj
alanına "Sonuç:" yazıp Değişken Adı
olarak result
yazalım. Son olarak bir end
sürükleyip tümünü sırasıyla bağlayalım. Sonuçta aşağıdakine yakın bir ekran elde etmiş olmalıyız. Bu örneğin hazırladığım gurkantuna.com.fpp
dosyasını indirdiğiniz rar dosyasının Support
dizinininde ve Flow Chart Visual Programming programını kurduktan sonra ise Examples
dizininde bulabilirsiniz. Windows ayarlarında fpp uzantısı için programı gösterirseniz çift tıkladığınızda direk çalışacaktır ya da Dosya > Aç
adımından bu dosyayı seçerek de çalıştırabilirsiniz.
Örneğin aşağıdaki faktöriyel hesaplamasında kullanıcının girdiği sayıya kadar ardışık çarpım yapılmaktadır. Bu küçük örneği, programdaki Dosya > Örnekler > Faktöriyel Hesabı(Döngü)
adımından açabilirsiniz. Genelde faktöriyel soruları yinelemeli fonksiyonla istenir ama başlangıç için bu algoritma daha anlaşılırdır. Kullanıcının girdiği string
tipindeki değer ardışık tam sayı şeklinde düşürülerek bir önceki sayı ile çarpılıyor. Çarpmanın değişme özelliği olduğu için tam tersi artırarak da yapılabilir, fark etmez.
Algoritma adımları ise şu şekilde ilerliyor. Kullanıcının girdiği değer num
değişkenine atılıyor. Değer exit
ise hiçbir işlem yapılmadan program sonlanıyor. Negatif bir sayı girilirse "Bilinmiyor" mesajı veriliyor. Bir nevi exception handling yapılmış. Yapılmış güzel ama alfanümerik girişler düşünülmemiş. Yani hiçbir şey girmeden enter tuşuna basarsanız ya da mesela "merhaba" girerseniz program hata fırlatacak ve kullanıcı bu hatayı kabak gibi görecektir. Dahası değişkenleriniz, fonksiyonlarınız, mesela veri tabanı alanlarınız; kısacası bütün nesneleri gerçek isimleriyle görecektir ve bu 'hatayı göstermek üzere yaptığınız hata' asla kabul edilemez bir yaklaşımdır.
İşte bir yerlerden duymuş olabileceğiniz Test Driven Development kavramının temelini bu ihtiyaç oluşturur. Biz programımıza dönelim. sum
değişkenine 1
atanıyor. sum 0
ise direk 1
sonucu yazdırılıyor. Diğer pozitif sayılar için girilen tam sayı sum
değeri ile çarpılarak yine sum
değişkenine atılıyor ve num
değeri 1 düşürülüyor. Bu işlem num 0
olana kadar tekrarlanıyor. Sonuçta; çıkan sum
sonucu yazılıyor.
/
|-- A1. START/
|-- A2. PRINT "Enter integer or 'exit' to stop";/
|-- A3. IF num='exit' r= 0;/
|-- A4. IF r=0/
| `-- STOP;/
|-- A5. IF num < 0 PRINT "Unknown" GOTO A1;/
|-- A6. sum=1;/
|-- A7. IF num=0 GOTO A11;/
|-- A8. IF num > 0 sum=sum*num;/
|-- A9. num=num-1;//assign to num variable by reducing the current value
|-- A10. IF num > 0 GOTO A6;/
|-- A11. PRINT "Result: {sum}";/
|-- A12. OUT;/
|-- A13. GOTO A1;/
"Ama biz hep Türkçe gördük"😏 derseniz :
/
|-- A1. BAŞLA/
|-- A2. YAZDIR "Bir tam sayı ya da çıkış için 'exit' girin";/
|-- A3. EĞER num='exit' İSE r= 0;/
|-- A4. EĞER r=0 İSE/
| `-- BİTİR;/
|-- A5. EĞER num < 0 İSE YAZDIR "Bilinmiyor" GİT A1;/
|-- A6. sum=1;/
|-- A7. EĞER num=0 İSE GİT A11;/
|-- A8. EĞER num > 0 İSE sum=sum*num;/
|-- A9. num=num-1;//mevcut değeri düşürerek num değişkenine ata/
|-- A10. EĞER num > 0 İSE GİT A6;/
|-- A11. YAZDIR "Sonuç: {sum}";/
|-- A12. ÇIKTI;/
|-- A13. GİT A1;/
Yukarıdaki algoritma iş görür görmesine ama bu goto anahtar kelimeler, bir sürü if-else kullanımı falan mazide kaldı. Aslında birebir algoritmanın aynını; label atayıp goto
ile ona git gibi de yazılabilir ama orta seviye dillerde öyle bir kodu çözmek hem anlamsız hem işkencedir. Bu, ancak en düşük seviye diller için bir yere kadar makul olabilir. Merak ederseniz en bariz örneklerini 'spagetti kod' diye aratarak bulabilirsiniz. Kısacası bunları kullanmadan yazdığım; yukarıdaki algoritmanın mesela C# kodu aşağıda.
Flow Chart Visual Programming İndir
Farklı algoritma örnekleri ile ilgili birçok makale bulunduran linkler aşağıda:
Towards a visual programming environment for software developmentVisual programming labs for introducing computer
misafir
8 yıl öncekusura bakmayın ama hiç güzel olmamış
mutluarici
6 yıl önceIt's in point of fact a nice and useful piece of information. I am happy that you simply shared this helpful info with us. Please keep us informed like this. Thank you for sharing.
erdem saygun
bir yıl öncebununla ilgili bir sürü şey okudum ama böyle güzel aktarana rastlamamıştım.harika
ali kerem çelik
bir yıl önceçok iyi uygulama
yusuf ali ozbey
bir yıl önceders işlerken bilişim hocam "yunus doğan" bu uygulamayı bilgiseyarınızdan yapmamızı istedi.
ibrahim kadir
bir yıl önceaynı hoca :) ben de yavuz selim denim 6/l yim
ismini vermek istemeyen öğrenci :-P
11 ay önceBu yazı bizim üniversitedeki bilimsel programlamaya giriş dersindeki yazılardan bile daha güzel :-)
gürkan tuna
9 ay önceDersin linkine kadar paylaşmışsınız ama üniversite ve hoca ile uğraşmak istemediğim için linki maalesef kaldırdım.
Yazının istatistiklerine baktığımda Türkiye'den gelmeyen üniversite, resmi kurum yok gibi; üstelik ben bu yazıyı bilimsel olabilecek nitelikte yazmadan durum böyle. Cebren ve hile ile eğitim kalitemizin getirildiği durum içler acısı... Yani bu yazıyla ilgili duruma üzüleyim mi sevineyim mi ben de bilemedim :(