PROGRAMLAMAYA GİRİŞ Bir program bilgisayara ne yapması gerektiğini söyleyen bir dizi komuttan oluşmaktadır. Bilgisayar yapılması istenilen komutları anlayabilmesi için, bu komutların bilgisayarın anlayacağı dilde yani makine dilinde yazılması gerekmektedir. Ancak günümüzde bilgisayarın yapması istenilen komutlar bir programcı tarafından makine dili ile girilmez. Bunun yerine komutlar programcı tarafından yapısal bir dil aracılığıyla girilir ve daha sonra bilgisayarın bu komutları anlayabilmesi için makine diline çevrilir. Bu işleme derleme (compiler) denir. 1950'li yıllarda ticari amaçla piyasaya çıkarılan ilk bilgisayarlarda, giriş bilgilerinin uygulanarak bir çıkış bilgisi (çıktı) elde edilmesinde doğrudan doğruya Makine Dili nden yararlanılırdı. Bugün programlama çok daha kolay yapılabilmektedir. Daha önce belirtildiği gibi, bir program kullanıcının isteklerini makineye anlatan ve makinenin ne yapması gerektiğini söyleyen komutlar dizisi olarak ifade edilebilir. Bu komutlar ya makinenin fiziki yapısına uygun olarak verilir ya da kullanıcının anlayacağı dilde komutlar olabilirler. Bunlara makine dili denir. Komutlar bir aracı programla makine diline çevrilir. Makine dili ile program yazmak hemen hemen kalkmış durumdadır. Çok uzun işlemler gerektirir. 1
PROGRAMLAMA Bilgisayar programı bilgisayar sisteminde yapılması gereken işleri tam olarak belirlemeye yarayan tanımlar kümesidir. Diğer bir deyişle program, bilgisayardan yapması istenilenleri tanımlayan işlem konutlarından oluşur. Bu programın yazım kurallarına Programlama Dili denir. Doğal dillerde olduğu gibi, programlama dillerinin de kullanım kuralları ve geliştirme vardır. Çok sayıda programlama dili bulunmakla beraber, hepsinde ortak olan, bilgisayarın işlemlerini yönetmeye yönelik komut tanımları yer alır. Giriş/Çıkış, matematiksel, ve komutları yönlendirmeye yönelik denetim komutları gibi. Sözünü ettiğimiz dil makineden bağımsız, diğer bir deyişle taşınabilir Üst düzey Dillerdir. Bilgisayar programlaması sırasında izlenebilecek bir çok yol ve yöntem vardır. Bilgisayar programcısının problemin ilişkin çözümünü ortaya çıkarabilmesi için problem çözümü ile ilgili bilgileri bilmesi gerekir. Bilgisayar programlamasında genel olarak belirli kalıp ve kurallara uyulur. 2
Bir bilgisayar yazılımının oluşturulması sırasında genel olarak aşağıda sıralanan ana adımlara uyulur. * Problemin tanımı * Çözüm yönteminin belirlenmesi * Programın kodlanması * Programın çalışır duruma getirilmesi * Belgeleme ve güncelleştirme Programlama dillerinin sınıflandırılması Gelişmelere uygun olarak programlama dillerini, alçak seviyeli diller ve yüksek seviyeli diller olarak da ikiye ayırmak mümkündür. Birincisine Assembler, ikincisine FORTRAN, BASIC, PL/l, APL örnek olarak verilebilir. Bir dil, bilgisayarın kullandığı dile ne kadar yakınsa o kadar alçak seviyeli, ne kadar uzaksa (doğal dile yakınsa) o kadar yüksek seviyeli olarak adlandırılır 3
Programlama Dillerinin Sınıflandırılması: a) Makineye uygun programlama dilleri: Sembol ve kodlar kullanılır. Programcı pek çok şeyi ve işi programı içinde sağlamak zorundadır. Assembler çevirici dili bu tip bir programlama dilidir. b) Probleme uygun programlama dili: Kullanıcının bilgisayarı fazla tanımasına gerek yoktur. Kullandığı bilgisayara uygun olarak dil kurallarını bilmesi yeterlidir. Örnek olarak Cobol, RPG II ve PL/I verilebilir. c) İşleme uygun programlama dilleri: abu tür programlama dillerinden kullanıcı bilgisayarın yapısı konusunda hiçbir bilgiye ihtiyacı yoktur. Genellikle kullandığı dilin özelliklerini ve kurallarını bilen bir bilim adamı olabilir ki bilgisayar yapısı ile ilgisi kopuktur. FORTRAN, BASIC, VISUALBASIC, ALGOL gibi programlama dilleri örnek olarak verilebilir. 4
Kullanılan programlama dillerini düzeyleri açısından da aşağıdaki gibi sınıflandırabilir; Birinci Kuşak Diller Makine Dilleri veri ve program komutları, 1 ve 0 'larla ifade edilir. Her bilgisayar türünün kendi makine dili vardır. Kodlamanın zor olduğu, hata yapmaya çok açık dillerdir. Bu durum daha kolay yazılabilir ve anlaşılabilir olan assembly dilinin geliştirilmesini sağlamıştır. İkinci Kuşak Diller Assembly Dili (Birleştitici Dili) günümüzde bu dil çok alçak seviyeli olarak kabul edilir. İngilizce benzeri komutlardan oluşan bir dildir. Assembly dili ile yazılmış bir program, bir çevirici (assembler) ile makine diline çevrilerek çalıştırılır. Oldukça anlaşılabilir gözükmesine karşın çok basit bir iş için bile çok sayıda komut yazmak gerekmektedir. Kullanımı çok daha kolay olan dillerin ortaya çıkmış olması nedeniyle, neredeyse hiç kimse artık assembly ile program kodlamamaktadır. 5
Üçüncü Kuşak Diller Bunlara Yüksek Seviyeli Diller'de denir. 1960'larda yaygınlaşmıştır. İngilizceye benzer ifadelerin kullanıldığı, aritmetik işlemlerde kullandığımız işaretlerin kullanıldığı, daha hızlı ve kolay program yazmayı sağlayan, programcının daha kolay program yazabildiği dillerdir Çok sayıda dil geliştirilmiştir. Bunlar; Pascal, Fortran, Cobol, Algol, PL/I, C, C++ vb. Bu dillerin ifadeleri derleyici tarafından makine diline çevrilirler. Bu kuşak dillere yordamsal (procedural) diller denilmektedir. Bunun nedeni bu dillerle çözümün nasıl yapılacağının ayrıntılı olarak belirtilmesidir. Dördüncü Kuşak Diller Bu kuşak dillere 4GL (Fourth Generation Languages) denir. Çok Yüksek Seviyeli Programlama Dilleridir. 3. kuşak dillerde yüzlerce satır halinde kodlanan bir pogram, 4.kuşak dillerle birkaç satırda ifade edilir. Çünkü bu dillerle sadece ne yapılmak istendiği belirtilir, nasıl yapılacağı ile ilgilenilmez. Dolayısıyla bu dillere yordamsal olmayan diller (non-procedural) denir. Bu dillere örnek olarak; SQL, SPS, php, Asp gibi dilleri verilebilir. 6
Beşinci Kuşak Diller Bu kuşak dillerde amaç tamamen doğal dillerin özelliklerini taşıyan programlama dilleri üretmektir. En önemli örnek PROLOG'dur. Bu diller yapay zeka ve robotik çalışmalarında önemli bir yer almaktadır. Bazı Programlama dillerinin kısa açıklamaları: COBOL: Common Business Oriented Language: RPG: Report Program Generator: PL/I: Program Language One: BASIC: Beginner's All Purpose Symbolic Instruction Code: 7
ALGORİTMA KAVRAMI Algoritma belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir. Bir başka deyişle bir problemin çözümündeki işlemlerin kararların ve bunların icra edildiği sıranın oluşturduğu akış olarak düşünülebilir ve algoritma; bilgisayarlar ile herhangi bir problem çözümü; problemin tarifi, formüle edilmesi, sistem analizi ve program şeklinde yapılması diye özetlenebilir. Herhangi bir problem formüle edildikten sonra problemin çözümü için gerekli bilgilerin tayini ile kısa ve doğru biçimde çözülmesi için yapışması gereken adımların belirlenmesine, programın Algoritması veya Sistem Analizi denir. Her algoritma aşağıdaki kriterleri sağlamalıdır. 1. Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli. 2. Çıktı: En azından bir değer üretilmeli. 3. Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli. 4. Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli. 5. Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır. 8
Algoritmanın İfade Edilmesi Algoritmaları ifade edebilmek için temel olarak üç yöntem kullanılır. Bunlar; Doğal dil ile ifade etmek. Algoritmik dil (Pseudocode) ile ifade etmek. Akış diyagramı (flowchart) ile ifade etmek. Doğal Dil İle İfade Bir problemin çözümü için gerekli olan algoritmanın doğal dil kullanılarak ifade edilmesi en basit yoldur. Ancak doğal dil ile ifadenin sakıncaları olabilir. Bu anlatılanların yanlış yorumlanmasından dolayı yanlış anlaşılmasını doğurabilir. Algoritma, verilen herhangi bir sorunun çözümüne ulaşmak için uygulanması gerekli adımların hiç bir yoruma yer vermeksizin açık, düzenli ve sıralı bir şekilde söz ve yazı ile ifadesidir. Algoritmayı oluşturan adımlar özellikle basit ve açık olarak sıralandırılmalıdır. 9
Algoritmik Dil (Pseudocode) İle İfade Algoritmik dil (Pseudocode), algoritma geliştirmede programcılara yardımcı olan dildir; günlük konuşma dilimizde kullandığımız sözcüklerden oluşur. Bu dille yazılan program bilgisayarda yürütülemez; ancak programcıya geliştirmeye çalıştığı algoritma üzerinde düşünmesini, şekillendirmesini ve oluşturmasını sağlar. İyi yazılmış bir pseudocode'u gerçek bir programlama diline çevirmek oldukça kolaydır. Pseudocode ile sadece yürütülecek cümleler yazılır. Örnek : Verilen bir sayının faktöriyelini hesaplayan programın algoritmasının oluşturulması Sayının faktöriyeli :Fak Faktöriyel degişkeni :X Faktöriyeli hesaplanacak sayı :Y 10
Algoritma: A0 : Başla A1 :Fak=1, X= 0 A2 :Y i gir A3 :Y<0 ise 2. adımı tekrarla A4 :X=X+1 A5 :Fak=Fak*X A6 :X<Y ise 4. adıma geri dön A7 :Fak değerini yaz A8 :Bitir Bu algoritmada 1. adımda X e 0 ve Fak değişkenine 1 değeri atanıyor. 2. adımda Y değeri giriliyor ve 3. adımda Y değerinin 0 dan küçük bir değer olup olmadığı denetleniyor ve denetim sonucuna göre gerekli komut veriliyor. 4. adımda X in değeri 1 arttırılıyor ve 5. adımda X için Fak değeri hesaplanıyor. 6. adımda X in değerinin faktöriyeli hesaplanacak sayıdan küçük olması durumunda 4. adımdan itibaren işlemlerin tekrarlanması komutu veriliyor, X in değerinin Y ye eşit olması durumunda işlemler tamamlanarak hesaplanan değerin yazdırılması işleminden sonra programın çalışması sona ermektedir. 11
Örnek :. ax 2 +bx+c=0 ikinci dereceden bir denklemin köklerini veren algoritmayı algoritmik dilde yazınız. A0 : Başla A1 : a, b ve c katsayılarını giriniz A2 : D=b 2-4ac yi hesaplayınız A3 : D<0 ise gerçel kök yok 7. adıma gidiniz A4 : x1=(-b+(d)^1/2)/(2a) A5 : x2 =(-b-(d)^1/2)/(2a) A6 : x1 ve x2 değerlerini yaz 8. adıma git A7 : Reel Kök Yok. A8 : Bitir 12
Akış Diyagramı İle İfade Akış diyagramları (flowchart) ise algoritmaların içerdiği işlemlerin birer geometrik şekiller ile ifade edilmesi olarak tanımlanabilir. Akış diyagramları programlama aşamasında programı kodlamak, kotrol etmek, açıklamak, gözden geçirmek ve gerekirse güncellemek açısından büyük kolaylıklar sağlamaktadır. Akış Diyagramı için kullanılan şekiller ve bunların anlamları aşağıda verilmiştir. Akış diyagramı sembolleri ANSI (American National Standards Institute) standardı olarak belirlenmiş ve tüm dünyada kullanılmaktadır 13
14
15
Ayrıntılı bir akış diyagramı, yazılımı oluşturan işlemleri ve ilişkilerini en küçük detayına kadar belirler. Bir bilgisayar programının geliştirilmesinde kullanılan programlama dili ne olursa olsun bu programların akış diyagramlarında genel olarak yalnız üç basit mantıksal yapı kullanılır. Bu mantıksal yapılardan en basiti sıralı yapıdır. Sıralı yapı, hazırlanacak programdaki her işlemin mantık sırasına göre nerede yer alması gerektiğini vurgular. Bu yapı sona erinceye kadar ikinci bir işlem başlayamaz Sıralı yapı. 16
Mantıksal yapılardan ikincisi aşağıda görüllen Karar Verme yapısıdır. Programlama sırasında If...Then..., elseif, Else yapısı ile tanıyacağımız bu mantıksal yapılar, birden fazla sıralı yapı seçeneğini kapsayan modüllerde, hangi şartlarda hangi sıralı yapının seçileceğini belirler. Karar verme yapısı. 17
Üçüncü mantıksal yapı çeşidini Tekrarlı Yapılar oluşturmaktadır. Bu yapılara döngü yapısı adı da verilir. Şartlara göre değişik işlem gruplarının yapılmasını sağlar. Bu yapı yukarıda sözü edilen iki yapının çeşitli kombinezonların tekrarlanmasından oluşmuştur. Söz konusu üç değişik yapı, değişik kombinezonlarda kullanılarak istenilen işlevleri yerine getirecek programlar hazırlanabilir. Programların bu üç basit yapı ile sınırlandırılması program modüllerinin daha kolay tasarlanmasını sağlar. Tekrarlı yapı. 18