Algoritmik Program Tasarımı, Akış Şemaları ve Programlama Bilgisayar Mühendisliğine Giriş 1
I) Algoritmik Program Tasarımı, Akış Şemaları Algoritmik program tasarımı, verilen bir problemin bilgisayar ortamında çözülecek biçimde adım adım ortaya koyulması ve herhangi bir programlama aracıyla kodlanması sürecidir. Akış şeması (flow chart), yapılacak bir işin veya programın şekilsel/grafiksel olarak ortaya koyulması veya başka bir deyişle tanımlanmasıdır. Bilgisayar Mühendisliğine Giriş 2
Yazılım Program Algoritma Program Parçası Komut ve Veri Donanım Bilgisayar Mühendisliğine Giriş 3
Algoritma, genel olarak tek bir problemi çözecek davranışın, temel işleri yapan komutların/deyimlerin adım adım ortaya konulmasıdır. Örn: Yalnızca sıralama veya arama yapan algortimalar. Tüm algoritmaları içerisinde barındırıp günlük veya iş yaşamındaki gereksinimi karşılayacak çözüm ise programdır. Örn: Küme elemanlarının okunması, onların sıralanması, diskte saklanması, istenilen bir elemanın aranması gibi işlemler bütünü programı oluşturur. Bir algoritmanın kısa bir parçacı program parçasıdır. Bilgisayar Mühendisliğine Giriş 4
Yapısal şema (The Structure Chart), genel olarak yazılım veya programın ana parçalarını göstermek için kullanılır. Örn: Öğrenci Otomasyonu Kayıt Sorgulama Ders Kayıt Not İşleme İstatistik Arama Bilgisayar Mühendisliğine Giriş 5
Bir problem çözülürken biri algoritmik, diğeri herustic (sezgisel) olarak adlandırılan iki yaklaşım vardır. Algoritmik yaklaşımda, çözüm için olası yöntemlerden en uygun olanı seçilir ve yapılması gerekenler adım adım ortaya konulur. Herustic yaklaşımda ise, çözüm açıkça ortada değildir. Tasarımcının deneyimi, birikimi ve o andaki düşüncesine göre problemi çözecek birşeylerin şekillendirilmesiyle yapılır. Program tasarımcısı, algoritmik yaklaşımla çözemediği, ancak çözmek zorunda olduğu problemler için bu yaklaşımı kullanır. Bilgisayar Mühendisliğine Giriş 6
Kaba ve Gerçek Kod (Pseudo Code ve Real Code) Pseudo Code (Kaba Kod), bir algoritmanın yarı programlama dili kuralı, yarı konuşma diline dönük olarak ortaya koyulması/ tanımlanmasıdır. Bu şekilde gösterim algoritmayı genel hatlarıyla yansıtır. Real Code (Gerçek Kod), algoritmanın herhangi bir programlama diliyle, belirli bir veri yapısı üzerinde gerçekleştirilmiş halidir. Bir algoritmanın gerçek kodu, yalnızca tasarlandığı veri yapısı üzerinde koşar; veri yapısı değiştirildiğinde algoritmanın gerçek kodu üzerinde oynamalar yapılmalıdır. Bilgisayar Mühendisliğine Giriş 7
Pseudo Kod Örnekleri Pseudo kod örnekleri: assign (ilkdeğer) value (100) if (sayı<x) then (ilk satıra git) else (son satıra git) while (döngü<girilen_değer) do assign (toplam) value (toplam+döngü) Bilgisayar Mühendisliğine Giriş 8
Akış Şemaları (Flow Charts) Akış şeması, algoritmanın görsel/şekilsel olarak ortaya koyulmasıdır. Problemin çözümü için yapılması gerekenleri, başından sonuna kadar, geometrik şekillerden oluşan simgelerle gösterir. Her simge, yapılacak bir işi veya komutu gösterir. Bilgisayar Mühendisliğine Giriş 9
Akış Şemaları için Kullanılan Bazı Semboller Başlama / Bitiş Karar Verme Dosya İşlemi İşlemler Döngü Giriş (Klavyeden..) Çıkış (Ekrana ) Çıkış (Kağıt ) Bilgisayar Mühendisliğine Giriş 10
Örnek Klavyeden girilen iki sayıyı alıp aritmetik ortalamasını hesaplayan ve sonucu ekrana yazan bir algoritmanın akış şeması? Başla A,B Ort=(A+B)/2 Ortalama= Ort Dur Bilgisayar Mühendisliğine Giriş 11
Karar Verme Hayır Koşul Evet Koşul Evet İşlem 1 İşlem 1 İşlem 2 İşlem N a) Koşulun durumuna bağlı olarak 2 farklı işlem vardır. b) Olumsuz koşulda yapılacak işlem yoktur; olumlu olması durumunda ise N adet işlem yapılacaktır. Bilgisayar Mühendisliğine Giriş 12
Karar Verme (Devam) Bu yapıyı art arda birden çok kez kullanıp aşağıdaki gibi bir kaşılaştırma dizisi oluşturulabilir. Hayır Koşul 1 Evet İşlem 1 Hayır Koşul 2 Evet Hayır Koşul (N-1) Evet İşlem (N-1) İşlem N Bilgisayar Mühendisliğine Giriş 13
Hayır Koşul 1 Evet Hayır Koşul 2 Evet İşlem 1 Hayır Koşul (N-1) Evet İşlem 1 İşlem N İşlem (N-1) Olumsuz taraftan içiçe karşılaştırma simgesi örneği Bilgisayar Mühendisliğine Giriş 14
Örnek ax 2 + bx + c = 0 şeklindeki ikinci dereceden bir denklemin köklerini bulan algoritmayı tasarlayıp akış şeması ile gösteriniz. Bilgisayar Mühendisliğine Giriş 15
Başla a,b,c Delta=b2-4ac Delta>0 x1=(-b+ delta)/2a x2=(-b- delta)/2a Delta=0 x1,x2 x1=-b/2a x1 Gerçek Kök Yok Dur Bilgisayar Mühendisliğine Giriş 16
Döngü Yapısı Bu yapı kullanılırken, döngü sayacı, koşul bilgisi ve sayacın artım bilgisi verilmelidir. Döngü sayacı kullanılmıyorsa sadece döngüye devam edebilmek için gerekli olan koşul bilgisi verilmelidir. Genel olarak çoğu programlama dilinin döngü deyimleri ; While Do- while For gibi yapılar üzerine kurulmuştur. Farklı dillerde bu yapılara farklı alternatifler olsa da döngülerin çalışma mantığı genel olarak benzerdir. Bilgisayar Mühendisliğine Giriş 17
While Deyimi Koşul daha çevrim içerisine girmeden sınanır. Koşul olumsuz olduğunda çerime hiç girilmez ve döngü içerisinde yapılması gerekenler atlanır. Döngüye Giriş Koşul İşlem N İşlem 1 Çevrim içerisinde koşulu etkileyen kod olmalıdır. Döngüden Çıkış Bilgisayar Mühendisliğine Giriş 18
Do-While Deyimi Bu döngü deyiminde, çevrim en az bir defa olmak üzere gerçekleşir. Çünkü koşul sınaması döngü sonunda yapılmaktadır. Eğer koşul sonucu olumsuz ise bir sonraki çevrime geçilmeden döngüden çıkılır. Çevrimin devam edebilmesi için her döngü sonunda yapılan koşul testinin olumlu sonuçlanması gerekir. Döngüye Giriş Çevrim içerisinde koşulu etkileyen kod olmalıdır. İşlem 1 İşlem N Koşul Döngüden Çıkış Bilgisayar Mühendisliğine Giriş 19
For Deyimi Diğer deyimlerden farklı olarak, döngü sayacı doğrudan koşul parametreleri düzeyinde verilir. Döngü girmeden önce sayaç değişkenine başlangıç değeri atanmakta ve daha sonra koşula bakılmaktadır. Döngü içerisinde belirtilen işlemler yapıldıktan sonra sayaç değişkeni arttırılmaktadır. Döngüye Giriş Döngüye Giriş Başlangıç Artım İşlem N İşlem N Koşul İşlem 1 Koşul İşlem 1 Döngüden Çıkış Döngüden Çıkış Bilgisayar Mühendisliğine Giriş 20
İçiçe Döngülerin Kullanılması İçiçe döngü kurulurken en önemli unsur, içteki döngü sonlanmadan bir dıştaki döngüye geçilmemesidir. Diğer bir deyişle döngüler birbirlerini kesmemelidir. Döngüye Giriş Başlangıç Koşulu ve Artım Koşul İşlem N En içteki döngü bir dıştaki döngünün her adımında N kez tekrarlanır. Koşul İşlem 1 Döngüden Çıkış Bilgisayar Mühendisliğine Giriş 21
Örnek (Faktöriyel Hesabı) n! = 1.2....(n-1).n şeklinde ifade edilir. Başla Fak=1 N Sayac=2, Sayac <=N Sayac ++ Faktöriyel fak Fak=Fak*Sayac N ile hangi sayının faktöriyelin hesaplanacağı belirlenir ve N çevrimlik bir döngü kurulur. İlk çevrimde 1!, ikinci çevrimde 2! ve sırayla N inci çevrim sonucunda da N! değeri hesaplanmış olur. Sayac>N koşulu oluştuğunda döngüden çıkılır ve elde edilen sonuç dış ortama aktarılır. Dur Bilgisayar Mühendisliğine Giriş 22
Örnek Bankaya aylık getirisi %8 ile 1000 YTL para yatırılmıştır. Buna göre; a)10 ay sonrası için paranın ne kadar olacağını ve bu süre içerisinde her ay sonunda ne kadar olacağını hesaplayıp ekrana yazan programın akış şemasını nasıldır? b)paranın kaç ay sonra 5000 YTL olacağını hesaplayan programın akış şeması nasıldır? Bilgisayar Mühendisliğine Giriş 23
a) Başla Para=1000 ay=1 ay<=10 ay++ Faktöriyel fak Para=para+para*0,08 1000 YTL 10 ay sonra = para Dur Bilgisayar Mühendisliğine Giriş 24
b) Başla Para=1000 ay=0 Ne zaman, para değeri 5000 den eşit veya büyük olduğunda döngü sonlanır ve döngü içerisindeki ay bilgisinin son hali bize istediğimiz değeri verir. Para < 5000 ay, para ay=ay+1 Para=para+para*0,08 Dur Bilgisayar Mühendisliğine Giriş 25
II) Programlama Çözülmesi söz konusu olan bir problem çözümlenip, algoritması ortaya konulduktan sonra sıra bilgisayar programının hazırlanmasına gelir. Programlama, bir işlemin bilgisayarın anlayabileceği bir biçime dönüştürülmesi işlemidir. Bilgisayar Mühendisliğine Giriş 26
Bilgisayarların asıl işlevleri, büyük miktarda verileri işlemektir. Bu yüzden bilgisayar verileri okuyabilmeli, saklayabilmeli, aralarından gerekeni seçebilmeli ve onların üzerinde gereken işlemleri yapabilmelidir. Bütün bu işlemleri, bilgisayara neyi nasıl hangi sırayla yapması gerektiğini gösteren programlar aracılığıyla gerçekleştirir. Programlama işlemi ise programlama dilleri aracılığı ile yerine getirilir. Bilgisayar Mühendisliğine Giriş 27
Programlama Dilleri Farklı problem alanlarına göre farklı dillerden söz etmek mümkündür. Dilin seçimi bu yüzden önemli olabilir. Probleme uygun dilin seçilmesi programın geliştirilmesinde kolaylık ve hızlı çalışma sağlayabilir. Bilgisayar Mühendisliğine Giriş 28
Programlama dillerinin tümü simgeseldir. Yani bilgisayarın anlayacağı işlemleri insanların da anlayabileceği simgelerle ifade ederler. Örnek bir program içersinde yer alan write şeklindeki bir komutun yazma işlemini gerçekleştirdiğini söylemek oldukça kolaydır. Bu gibi komut ve ifadeler özel programlar aracılığı ile bilgisayarın anlayabileceği dile çevirirler. Bu programlara derleyici ya da yorumlayıcı adı verilir. Bilgisayar Mühendisliğine Giriş 29
Programın, bir programlama diline bağlı olarak hazırlanan simgesel kodlardan oluşan kısmına kaynak program (source code) adı verilir. Bu kaynak programın derlenip bilgisayarda çalışabilecek makine kodlarına çevrilmiş koduna ise nesne kodu (object code) ismi verilir. Bilgisayar Mühendisliğine Giriş 30
Programlama dillerini seviyelerine göre dört kısımda sınıflandırmak mümkündür: Makine Dilleri Assembly Dilleri Yüksek Düzey Diller Dördüncü Kuşak Diller Bilgisayar Mühendisliğine Giriş 31
Makine Dilleri Doğrudan işlemcinin komut setinde yer alan makine kodlarından oluşur. En düşük seviyeli dil olarak kabul edilir. Komutlar ve veriler tamamen ikili düzende ifade edilir. Bilgisayar Mühendisliğine Giriş 32
Assembly Dilleri Makine dilinde yer alan kodların anımsatıcı sembollerle (mnemonic symbols) ifade edildiği daha üst düzey bir dildir. Adresler ikilik değil simgesel olarak ifade edilir. Bu programların makine diline çevrilmesini sağlayan programlara assembler adı verilir. Bilgisayar Mühendisliğine Giriş 33
Yüksek Düzeyli Diller Programcıya kolaylık sağlamak üzere geliştirilmiş tüm diller bu gruba girer. Komutlar yapılacak işlemin ingilizce karşılığı anımsatıcı kodlardır. Bu diller bilgisayar donanımından bağımsız olarak çalışabilirler. Yüksek düzey dillerde hazırlanan kodlar ancak makine diline çevrilip çalıştırılabilirler. Bu dillere örnek olarak BASIC, C, C++, COBOL, PASCAL verilebilir. Bilgisayar Mühendisliğine Giriş 34
Dördüncü Kuşak Diller Yüksek seviyeli dillere göre daha esnek yapıya sahip olan dördüncü kuşak diller programcının yapması gereken bir çok kodu otomatik olarak üretebilen özelliklere sahiptirler. Bu dillere en iyi örnek sorgulama dilleridir. Sorgulama dilleri veritabanları üzerinde çok az kod ile karmaşık sorguların yapılabilmesine olanak sağlayan araçlardır. Bilgisayar Mühendisliğine Giriş 35