Bilgisayar Nedir? Bilgisayar belli komutlara göre verileri işleyebilen ve çeşitli ortamlarda depolayabilen bir makinedir. Bilgisayar basit olarak bir işlemci, ana bellek, giriş birimleri, çıkış birimleri ve depolama birimlerinden oluşmaktadır. Temel bilgisayar mimarisini Şekil 1 de görülmektedir. Ana Bellek (RAM) Giriş İşlemci (CPU) Çıkış Depolama Şekil 1. Temel bilgisayar mimarisi Bilgisayar en genel haliyle yazılım ve donanım olarak iki kısma ayrılabilir. Donanım bilgisayarın tüm fiziksel parçalarıdır. Yazılım ise bilgisayar donanımının çalışabilmesi için gerekli olan komutlar bütünüdür. Program Nedir? Program bir bilgisayarın belli bir hedefi/işlemi gerçekleştirmesine yönelik komutlar bütünüdür. Bilgisayarlar aslında oldukça gelişmiş elektronik devrelerdir. Örneğin gelişmiş bir işlemcinin içerisinde yaklaşık 1.000.000.000 civarında transistör bulunmaktadır. Burada söz konusu transistörlerin çalışması bir anahtara benzer. Yani ya iletimdedir veya yalıtımdadır. Bu nedenle bilgisayarlar sayısal elektronik mantığına göre (ikili sayı sistemine göre) çalışırlar. Sayısal elektronikte bir anahtarın kapalı olması (iletim) 1 ile açık olması (yalıtım) 0 ile ifade edilir. Benzer şekilde bir lambanın yanması 1, sönük olması 0 ile ifade edilir. Bilgisayarların ikili sayı sistemine göre çalışması yapılarından kaynaklanmaktadır. Örneğin A harfinin 1
bilgisayardaki karşılığı 8 bitlik 0110 0101 ifadesidir. Yani arka planda her şey 0 ve 1 lerle ifade edilir. Bilgisayar programları da aynı şekilde ikili sayı sistemiyle çalışır. İkili sayı sistemiyle yazılmış bir programa makine dili adı verilir. İşlemci tarafından çalıştırılan bütün programlar makine dilinde yazılmıştır. Üst düzey programlama dilleri kullanılarak geliştirilmiş bir program makine diline dönüştürüldükten sonra çalıştırılır. Programlama Dilleri Yukarıda da açıklandığı gibi işlemci tarafından çalıştırılan programa makine dili veya makine kodu denir. Makine dili 0 ve 1 lerden oluşan ve insan tarafından yazılması, okunması, anlaşılması ve değişiklik yapılması oldukça zor olan bir dildir. Makine dilinde yazılmış örnek bir program aşağıda yer almaktadır. 1. 00010000000000000000010000000000 2. 00100100000000000000010000000001 3. 00100011000000000000010000000010 4. 00010001000000000000010000000011 Bu program 1024. ve 1025. adreslerdeki verileri çarpıp üzerine 1026. adresteki veriyi ekleyen ve sonucu 1027. adrese kaydeden bir programdır. Makine dili okunabilirliği ve yazılmasının kolaylaştırılması amacıyla 16 lık sayı sisteminde (hex : hexadecimal) ifade edilir. Aşağıda 16 sayı düzeninde kodlanmış örnek bir makine dili programı görülmektedir. 2
:1000000083161F3085000730860083120301950197 :10001000A401A5019401A101A201A3011130A20034 :100020006128A20115109510910192019301061DFE :10003000A1280518282885182B2805192E28851988 :100040003128051A34280618432886184A286D28AE :100050000130A20037280230A20037280330A20066 :1000600037280430A20037280530A2003728910B2A :100070001728920B17289514930A1308093C031D9F :10008000172815148615910B1728920B1728940A18 :1000900074201128910B1728920B172894037420B1 :1000A000112815109510220889001408880083165D :1000B000081555308900AA30890088140811831268 :1000C0000800151095108312220889008316081461 :1000D00083120808940074201128861115185120E5 :1000E00095186128742011281408A100211882286D :1000F00086120617A50B7928A5010613A50B7D28E6 :10010000A501842886167928A10C21189128861229 :100110000617A50B8828A5010613A50B8C28A50199 :10012000932886168828A40A2408073C031D8428DF :10013000A4018617A50B99288613A50B9C28A50159 :1001400008001130A2001408A30051200000A628C6 :00000001FF Makine dilinde program yazılması ve hata takibi çok zor olduğu için komutlar kısaltmalarla (mnemonic) ifade edilebildiği bir dil geliştirilmiştir. Bu dil assembly dilidir. Assembly dilinde yazılan programlar assembler adı verilen programlarla makine diline dönüştürülür. Makine diline göre daha anlaşılır ve kolay olan assembly dilinde de program yazmak çok kolay değildir. Yukarıda örnek olarak verilen 4 satırlık programın assembly dilinde yazılmış hali aşağıdadır. 1. MOV A, ACC 2. MUL B, ACC 3. ADD C, ACC 4. STO ACC, X Buradaki komutlar mov (move : taşı), mul (multiply : çarp), add (add : ekle), sto (store : depola) şeklinde kısaltmalardır. Ekrana Enerji yazdıran bir programın assembly kodu aşağıda verilmiştir. 3
msg: len: SECTION.data db "Enerji",10 equ $-msg SECTION.text main: global main mov edx,len mov ecx,msg mov ebx,1 mov eax,4 int mov mov int 0x80 ebx,0 eax,1 0x80 Örnekten de anlaşılacağı gibi assembly dilinde de program yazmak oldukça zor ve zahmetlidir. Bu nedenle daha çok günlük hayatta kullanılan kelimelerin yer aldığı programlama dilleri geliştirilmiştir. Makine dili ve assembly diline alt düzey diller denirken günlük hayatta kullanılan kelimelerle programların yazıldığı dillere üst düzey diller denir. Üst düzey dillere Fortran, Basic, Pascal, C gibi diller örnek olarak verilebilir. Şekil 2. Üst düzey ve alt düzey programlama dilleri Hangi dilde yazılmış olursa olsun bütün programlar çalıştırılabilmesi için makine koduna dönüştürülmek zorundadır. Bu işlem yapılırken assembly dilinde yazılan programların dönüştürülmesinde assembler adı verilen programlar kullanılır. Üst düzey dillerde yazılan programların makine koduna dönüştürülmesinde ise derleyici (compiler) ve yorumlayıcılar (interpreter) kullanılır. Bazı diller hem derleyici hem de yorumlayıcıya sahiptir. Derleyiciler bir programı bütünüyle ele alarak hatalara karşı denetler ve makine koduna dönüştürür. Yorumlayıcılar ise programın o anda çalıştırılacak satırını makine koduna dönüştürür. 4
Program Geliştirmenin Aşamaları Problemin Belirlenmesi Bilgisayar programı geliştirilmesinde birinci aşama geliştirilecek programın hangi problemle ilgili olduğudur. Problemin iyi belirlenmesi, eldeki verilerin ve istenen verilerin anlaşılması gerekmektedir. Analiz Problemin belirlenmesinden sonra çözüm metodunun belirlenmesi gerekmektedir. Bu amaçla benzer problemlerin çözümünden de yararlanılabilir. Tasarım Analiz safhasında belirlenen çözüm metodunun adımları detaylandırılır. Programın ne tür bir akış mantığıyla ilerleyeceği belirlenir. Kodlama Tasarım safhasında detaylandırılan adımlar programın yazılacağı dilin komutları ve kuralları göz önünde bulundurularak program yazılır. Test İşletimi Yazılan program çalıştırılarak, bütün olasılıklara göre testleri yapılır ve eksiklikleri hataları giderilerek son şekli verilir. Algoritma ve Akış Şemaları Algoritma bir problemin çözümünde izlenecek yol anlamına gelir. Algoritma, matematikte ve bilgisayar biliminde bir işi yapmak için tanımlanan, bir başlangıç durumundan başladığında, açıkça belirlenmiş bir son durumunda sonlanan, sonlu işlemler (adımlar) kümesidir. Algoritma kelimesi, Özbekistan'ın Harezm, bugünkü Türkmenistan'ın Khiva kentinde doğmuş olan Ebu Abdullah Muhammed bin Musa el Harezmi isimli matematikçinin adından gelir. 5
Batılılar, el Harezmi (Al-Khwarizmi)(Latincede Algoritmi) sözcüğünü telaffuz edemedikleri için terim bu şekilde kalmıştır. Algoritmanın bir problemin çözümünde izlenecek yol anlamına geldiği açıklanmıştı. Buradaki problem sorun anlamından ziyade yapılması gereken bir iş anlamına gelir. Yani günlük hayatta yaptığımız her işin bir algoritması vardır. İşe gitmek, yemek yapmak, çay demlemek, yemek yemek, ev temizlemek konularında algoritmalar yazılabilir. Örnek olarak çay demleme algoritması aşağıdaki yer almaktadır. 1. Kişi sayısına uygun çay miktarını demliğe koy 2. Demlikteki çayı yıka 3. Çaydanlığa su koy 4. Çaydanlık ve demliği ocağa yerleştir ve ocağı yak 5. Çaydanlıktaki su kaynayınca demliğe uygun miktarda aktar 6. Çaydanlığa tekrar su ekle 7. Tekrar ocağa koy ve kaynamasını bekle 8. Kaynadıktan sonra demlenmesi için bekle 9. Çayı bardağa doldurarak iç Çayın demlenmesinde farklı yöntemler de kullanılabilir. Bir problemin çözümünde birden fazla yöntem izlenebilir. Her bir yöntem ayrı bir algoritmadır. Basit bir örnek olarak klavyeden girilen üç sayının ortalamasını bulan bir programın algoritması ise aşağıda yer almaktadır. 1. Başla 2. 1. Sayıyı gir 3. 2. Sayıyı gir 4. 3. Sayıyı gir 5. Girilen sayıları topla 6. Toplamı 3 e böl 7. Sonucu ekrana yazdır 8. Son Bir önceki örnekten farklı olarak burada algoritmanın birinci satırında Başla ve son satırında ise Son ifadeleri yer almaktadır. Bu ifadeler algoritmanın başlangıç ve sonunu belirtmek amacıyla kullanılır. 6
Akış şemaları algoritmaların şema halinde gösterilmesi amacıyla kullanılır. Bu amaçla kullanılan bazı semboller vardır. Bu sembollerden en çok kullanılanları Tablo 1 de yer almaktadır. Tablo 1. Akış şemalarında yaygın olarak kullanılan semboller Başla, Son (Akış şemasının başlangıç ve sonunda yer alır) İşlem, hesaplamalar (Yapılan bütün işlem ve hesaplamalarda kullanılır) Giriş, Çıkış (Veri giriş ve çıkış işlemleri için kullanılır) Karar noktası (Akışın bir noktada bir sorunun cevabına bağlı olarak yön değiştirmesi amacıyla kullanılır) Elle giriş (Klavyeden giriş amacıyla kullanılır) Ekran (Herhangi bir değerin ekranda görüntülenmesini sağlar) Döngü (Tekrarlı olarak çalıştırılacak bölümleri belirtmek için kullanılır) Alt program Oklar (Akışın yönünü belirtmek, blokları birbirine bağlamak için kullanılır) Sayfa içi bağlantı noktası (Akışı sayfa içerisinde başka bir noktaya bağlamak için kullanılır) Sayfa dışı bağlantı noktası (Akışın başka bir sayfadan devam ettiğini gösterir) 7
Bilgisayar Programlarında Akış Türleri Bilgisayar programlarındaki akış türlerini üç ana grupta toplamak mümkündür. Bunlar sıralı akış, şartlı akış ve tekrarlı akıştır. Sıralı Akış (Sequential Flow) Sıralı akışta işlemler bir kez yapılır ve akış sona erer. Aşağıda üç sayının ortalamasını hesaplayan programın akış şeması yer almaktadır. Başla sayı1, sayı2, sayı3 Ortalama=(sayı1+ sayı2+sayı3)/3 Ortalama Başla sayı1, sayı2, sayı3 Ortalama=(sayı1+ sayı2+sayı3)/3 Ortalama Soldaki akış şeması ile sağdaki arasında bazı küçük farklar bulunmaktadır. Soldakinde sayılar klavyeden girilmiş, sağ taraftakinde ise genel veri giriş/çıkış simgesi kullanılarak giriş yapılmıştır. Ayrıca soldakinde sonuç ekrana yazdırılırken sağdakinde sonucun yazdırıldığı çıkış aygıtı belirtilmemiştir. Son Son Şartlı Akış (Conditional Flow) Şartlı akış mantığında akışın bir noktasında yapılan bir sorgulamaya göre akışın yön değiştirmesi durumu söz konusudur. 8
Başla Örneğin girilen bir sayının pozitif veya Bir sayı giriniz (X) negatif olduğunu ekrana yazdıran bir programı düşünelim. Böyle bir programın E X < 0? H akışında girilen sayının pozitif veya negatif olmasına göre yapılacak işlemler farklılık göstermektedir. Programa ait örnek akış şeması aşağıda görülmektedir. Girilen sayı negatiftir Girilen sayı pozitiftir Son Tekrarlı Akış (Repetitive Flow) Programın belli bir kısmının bir şarta bağlı olarak veya belli bir sayıda tekrarını içeren akış türüdür. Başla Başla Bir sayı giriniz (X) Sonuç = 0 K = 1'den X e döngü Sonuç = Sonuç + K Bir sayı giriniz (X) Sonuç = 0 Sonuç = Sonuç + X X = X 1 Klavyeden girilen bir tam sayıya kadar olan sayıların toplamını bulan programa ait iki farklı akış şeması yanda görülmektedir. Her iki akış şemasında da yapılan işlem aynıdır. Sol taraftakinde döngü simgesi ile yapılan işlemler sağ taraftakinde karar noktası ile yapılmıştır. E X > 0? H Sonuç Sonuç Son Son 9
Sıralı akış örnekleri : Başarı notu hesaplayan program Dairenin alanını ve çevresini hesaplayan program Şartlı akış örnekleri : Başarı notuna göre ders geçmeyi hesaplayan program İkinci dereceden denklemin köklerini hesaplayan program Tekrarlı akış örnekleri : Faktöriyel hesaplayan program Toplam hesaplayan program 10