C Dersi Bölüm 1 M Bodur 1 Bilgisayar Donanımı Bilgisayarın yapısını ve çalışma prensiplerini bilmemiz Bir bilgisayar programından neler bekleyebileceğimizi anlamamızı sağlar. Bigisayar dört temel birimden oluşur. Bellek birimi, program ve veriyi tutar. Merkezi İşlem Birimi, bellekteki komutları sırasıyla işler. Girdi ve Çıktı birimi, Çeşitli veri giriş ve çıkış araçlarının kullanılmasını sağlar Veri yolları bütün birimlerin bağlantısını sağlar 2 1
Bellek Birimi Bellek, program kodlarını, verilerini ve değişkenleri Programları işlemek için gereken çeşitli tabloları Örneğin yığıt, geçici olarak saklanan adres ve verileri tutan bir çeşit tablodur. Kesme vektörleri tablosu da girdi çıktı birimlerinden gelen servis isteği durumunda servis adresini tutan tablolardır.. İşletim sistemi için gereken veri ve değişkenleri tutan birimdir. Veri yazmak veya okumak üzere birer baytlık milyarlarca veri alanına sıfırdan başlayan tamsayı adreslerle erişilir. Her adreste 0... 255 arası bir sayı saklayabilir. 3 Merkezi İşlem Birimi (CPU) Merkezi İşlem Birimi içinde Komut Çözücü: Bellekten komut okuyup bu komutu işlemek için gerekli sinyalleri MIB içindeki altbirimlere iletir Yazmaçlar: geçici olarak adres ve veri saklar, Aritmetik Mantık Birimi (ALU): Komut çözücünün emrinde yazmaçlardaki değerlerile aritmetik ve mantık işlemleri yapar. Adres ve veri yolları Komut çozücünün emrinde girdi çıktı birimi ve bellekle yazmaçlar arasında veri iletir. 4 2
Bilgisayar Donanımı : Girdi Çıktı Birimi (CPU) Girdi çıktı birimi sıfırdan başlayan adreslerle erişilebilen, ve her seferinde birer bayt veri taşınan port kapılarından oluşur. Sabit diskler, flaşdiskler, monitör maus ve klavye (konsol) birimleri, yazıcılar, okuyuculara giden/gelen veriler ve kodlar portlar üzerinden CPU denetiminde yazmaç ve belleğe aktarılır. 5 Bilgisayar Donanımı : Veri, Program Kodu ve Bilgi Veri (Data), kodlanma detaylarını bilmediğimiz sayılar yığınıdır. Yalnız başına bir işe yaramaz. Program kodu, verilerin nasıl işleneceğine ilişkin komutlar dizisidir. Kaynak program kodu metin (text) biçimindedir. Yürütülebilir makine program kodu CPUnun çözümleyeceği biçimdeki komutlar dizisidir. Bunlara yürütülebilir kod(executable code) da denir. 6 3
Bilgisayar Donanımı : Veri, Program Kodu ve Bilgi Bilgi, verilerin işlenmesi için gereken en üst düzeydeki kurallardır. Örneğin bugünkü hava koşullarından yarınki havanın tahmini için gerekli bilgiler. Bir şirket çalışanlarının çalışma saatleri ve iş tipine göre o hafta alacağı ücreti belirleyen bilgiler. Bilgi, program kodunun yazılmasında kullanılır. Veriler ise program tarafından okunup değerlendirilir. 7 ikili sayılar, BİT Bilgisayar belleği yalnızca iki durumdan birini tutabilen devrelerden oluşur. Bellek devresinde gerilim ya vardır ya da yoktur. Devrenin durumu gerilim varsa 1 yoksa 0 dır. Yalnızca bir devre ile 0 ve 1 sayılarını saklarız. Yalnızca bir devreyle saklanan veriye ikili basamak (binary digit) anlamına gelen bit adını veririz. Iki yazabilmek için ikinci bir basamak gerekir. En sağdan başlayarak sayarsak ilk bit birler bitidir. İkinci bit ikiler bitidir. 8 4
ikili sayılar, BAYT İki bitle en büyük sayı olarak 3 yazabiliriz. (2) (1) 1 1 = 2+1 = 3, Dört yazabilmek üzere üçüncü biti kullanırız. Üç bitle en yüksek 7 yazabiliriz. (4) (2) (1) 1 1 1 = 4+2+1= 7 Bu şekilde devam edersek, dördüncü bit 8, beşinci bit 16, altıncı bit 32, yedinci bit 64, sekizinci bit 128 yazmak için kullanılır. Bir Bayt = 8 bit bellek alanıdır. harfleri kodlamak için yeterli en küçük bellek alanıdır. 8 bit ile 0 ile 1+2+4+8+16+32+64+128=255 arasındaki işaretsiz tamsayıları yazabiliriz. 8 bit ile 128 ile 128 arasındaki işaretli tamsayıları yazabiliriz. 9 ikili sayılar ve Karakter veri tipi Bilgisayarda yazacağımız metinler ingiliz alfabesinde ise ASCII karakter standardını kullanırız. ASCII standardı 32 özel amaçlı karakterle (satır başı, sayfa başı gibi) 195 yazılabilir karakteri ($%(),.01 9 + AB Z ab z gibi) Kodlayan bir tabloyu tanımlar. Türkçe karakterleri de kullanmak için ANSİ, ya da UTF 8 gibi bir karakter kodlama tablosu kullanırız. Metin Düzenleyicilerde Bu kodlama tiplerini seçmek üzere seçenekler bulunur. Böylece her bir harf bir bayt alana kodlanmış olur. 10 5
Tamsayı veri tipleri Bilgisayar ile çözeceğimiz problemlerde kullanılan en büyük tamsayının on basamak (10 000 000 000) civarında olması yeterlidir. 4 bayt (32 bit) ile 2 147 483 648 ile 2 147 483 648 arasındaki sayıları kullanmamız mümkündür. C deki int tipi, sayının 32 bitlik olduğunu bildirir. Daha büyük sayılar kullanmak için 64 bitlik long int tipinde sayılar kullanırız. 11 Kayar noktalı sayı veri tipleri Problem çözerken yalnızca tamsayılar yetmez. Kesirli sayıları bilgisayarda gösterebilmek üzere floatıng poınt (kısaca float) sayı tipi kullanılır. float sayıların standardı 32 bittir. 8 biti 2-127 ile 2 127 arasında bir üstel çarpan için 24 biti 1 ile 2 arasında 8 basamaklı bir kesirli sayı yazmak için kullanılır. Böylece en büyük pozitif sayı 3.4 10 38, en küçük pozitif sayı 3.4 10 38 olabilir. double floating point (kısaca double) tipini daha büyük ve daha küçük sayıları göstermek için kullanırız. Pozitiflerin en büyüğü 1 10 300, en küçüğü 1 10 300 tür. 12 6
Merkezi İşlem Birimi (CPU) Komutları CPU komutları işlemciden işlemciye değişir. Motorola 68020 komutları İntel 80486 dan farklı. Çok basit yapıdadır. İkili sayı biçiminde kodlanmış bir komut sözcüğü ile gerekli işlenenleri tanıtan birkaç adres ya da değerden oluşur. Örneğin Z X+4 işlemi LOAD X ADD 4 STORE Z gibi bir komut dizisiyle yapılır. 13 Bilgisayar Yazılımı: Problem Çözümünü Anlatma Yolları Bilgisayarın bir problemi çözmesi için Bizim problemin nasıl çözüleceğini bilmemiz, Bunu da bilgisayarın anlayacağı komutlar ile ifade etmemiz gerekir. Çözüm yolunu bulmak sistem analizle yapılır. Çözüm yolunu bilgisayar komutlarına dönüştürmeye ise programlama, ya da kodlama denir. 14 7
Algoritma Algoritma bir işin gerçekleştirilmesi için yapılacakları adımlar halinde sırasıyla ve eksiksiz tanımlayan metindir. Algoritma, bir uygulayıcıya yöneliktir, Uygulayıcının yürüteceği komutlar kullanılarak Uygulayıcının anlayacağı biçimde yazılır. Örneğin sayıların ortalamasını bulma algoritması. Başla, Ortalaması alınacak sayıların sayısını n ye oku T değişkenine sıfır koy, iye nyi koy. i=0 oluncaya kadar Sayıyı sdeğişkenine oku syi T ye topla iden bir çıkar Tekrarla T sayısını nye böl, sonucu T de sakla T yi ortalama olarak bastır. İşi sonlandır 15 Sözde kodlama Algoritmanın uygulayıcıya yöneliktir dedik. Bilgisayarda genel amaçlı programlama dillerinde kodlama yapmak için algoritmada belli yapıların dışına çıkmamak gerekir. Sözde kodlama Algoritmanın belli standart ve sınırlı yapılarla genel amaçlı program kodlamaya yönelik yazılmasıdır. 16 8
Algoritma ve Sözde kod Sayıların ortalaması algoritması. Başla, Ortalaması alınacak sayıların sayısını n ye oku T değişkenine sıfır koy, i ye nyi koy. i=0 oluncaya kadar Sayıyı sdeğişkenine oku syi T ye topla idan bir çıkar Tekrarla T sayısını nye böl, sonucu T de sakla T yi ortalama olarak bastır. İşi sonlandır Sayıların Ortalaması Sözde kodu Start Read n T=0; i=n; While n>0 Read s T=T+s i=i 1; End while T=T/n Prınt T End 17 Algoritma ve Akış Şeması Sayıların ortalaması algoritması. Başla, Ortalaması alınacak sayıların sayısını n ye oku T değişkenine sıfır koy, i ye n yi koy. i =0 oluncaya kadar Sayıyı s değişkenine oku s yi T ye topla i den bir çıkar Tekrarla T sayısını n ye böl, sonucu T de sakla T yi ortalama olarak bastır. İşi sonlandır Sayıların Ortalaması Akış Şeması 1. Start 2. Read n 3. T=0; 4. i=n; 5. While n>0 1. Read s 2. T=T+s 3. i=i 1; 4. End while 6. T=T/n 7. Print T 8. End 18 9
Akış Şeması, Işlem ve Komut kutusu işlem (process): Yaptırılmak istenen işlemleri gösterir. kutunun içine işlemleri anlatan komutlar yazılır. Karar (decision): bir koşula bağlı olarak farklı işlemler yapılacaksa kullanılır. Bir girişi Doğru ve Yanlış için iki çıkışı vardır. 19 Akış Şeması, Veri ve Döküman kutusu Veri (Data) Tanımlanan işlemlerin kullanacağı verileri bulunduğu ortamdan okumak üzere kullanılır Döküman: Program sırasında çıktı olarak gosterilmek istenen veriler ve işlemler bu şekil ile tamamlanır. Bir girişi Doğru ve Yanlış için iki çıkışı vardır. 20 10
Akış Şeması, Bağlantı ve Başla/Bitir Bağlantı (Continuation) Bir sayfaya sığmayan ya da sayfa içinde uzağa atlayan okların bağlantısını kolayca göstermeye yarar. Başla/Bitir Akış şeması yapılarının başlangıç ve bitiş noktasını gösterir. 21 Algoritma ve Akış Şeması Sayıların ortalaması algoritması. Başla, Ortalaması alınacak sayıların sayısını n ye oku T değişkenine sıfır koy, i ye nyi koy. i =0 oluncaya kadar Sayıyı sdeğişkenine oku syi T ye topla i den bir çıkar Tekrarla T sayısını nye böl, sonucu T de sakla T yi ortalama olarak bastır. İşi sonlandır Sayıların Ortalaması Akış Şeması BAŞLA OKU n T=0 i=n i>0? OKU s T=T+s i=i-1 T=T/n YAZDIR T BİTİR 22 11
C nin gelişimi 1970 lerde Ken Thompsonun (ABD) Unix sistem dili için yazdığı B dili yetersiz kaldı. 1972 de Dennis M. Ritchie, C yi oluşturdu. 1978 de Dennis M. Ritchie ve Brian W. Kernighan ilk Ckitabını yazdı, C tanıtıldı. 1982 de ANSI C standardı oluşturuldu. Biz ANSI C kullanacağız. 1999 da C 99 standardına yükseltildi. 23 C Ön işlemcisi ve Derleyicisi C dili program bir dosyaya ANSI karakter kümesiyle yazılır. Bu amaçla herhangi bir Metin Düzenleyici (Text Editör) kullanılır. Yazılan bu metine kaynak kod denir. Kaynak kod C gramer hatalarından arındırılır. Kaynak kod C derleyicisine yollanır. Ön işlemci makroları ve eklenti dosyaları kaynak koda ekler. Derleyici kaynak koda karşılık gelen makine kodlarını OBJ (nesne) dosyasına yerleştirir. Bağlayıcı (Linker) OBJ kod içindeki kitaplık etiketlerine bakarak gereken kitaplık fonksiyonlarını makine koduna ekler. Oluşan yürütülebilir EXE kodu CPU tarafından çalıştırıldığında kaynak kodda anlatılan işleri yapar. 24 12
C hata ayıklama işlemi Programın derlenirken C kaynak kodundaki gramer ve yapı hataları ortaya çıkar Derleyicinin bulduğu ilk hatadan başlayarak hatalar birer birer düzeltilir. Bu evreye yazım hatası ayıklama evresi denir. Program işler duruma geldiğinde bir dizi deneme verisi ile sınanır. Mantıksal hatalar nedeniyle doğru sonuç çıkmazsa program elle izlenerek hata ayıklanır. Test verisiyle bulunan hatalar düzelince program kullanıma hazırdır. Ancak, test verilerinin bulamadığı hatalar kalmış olabilir. Kullanıcıya aktarılan program zaman zaman hatalı sonuç çıkarırsa hata izole edilir (hata veren en kısa test verisi oluşturulur) ve hataya sebep olan nedenler bulunarak düzeltilir. 25 C Derleyicisi Bu derste Dev C derleyicisi kullanacağız. Hafif (bellekte az yer kaplar) Hızlı (derlenen EXE hızlı çalışır) Kullanımı kolay (Tümleşik Geliştirme Ortamı var). UNIX, Linux, Windows gibi çoğu işletim sisteminde parasız (GNU ShareWare) olarak kullanılabilir. Diğer derleyiciler arasında Turbo C (Borland), Mikrosoft C, Mikrosoft Visual C derleyicilerini sayabiliriz. ANSI C standardına uyan bütün derleyiciler yazacağımız C kodlarını sorunsuz derleyebilir. 26 13