BÖLÜM 1 1.C DİLİNİN TARİHİ 1969 yılında Cambridge Üniversitesinde, BCPL (Basic Combined Programming Language) isimli bir programlama dili geliştirildi. Sistem programları yazmak için kullanılan BCPL, Bell Laboratuvarlarında geliştirilen B isimli başka bir programlama dilinin öncüsü oldu. B dili çok kısa süre için geçerliliğini korudu ve C dilinin öncüsü oldu. Dennis M. Ritchie, 1972 yılında Bell Laboratuvarlarında, C Programlama Dilini geliştirdi. UNIX işletim sistemi C ile yazıldı.
1.2.PROGRAMLAMA DİLİ NEDİR Programlama nedir? Günümüzde “programlama” terimi bilgisayarlar ve diğer bazı elektronik araçlar için kullanılmaktadır. Bu tür araçların, bir ya da birden çok komut (emir) verilerek, bazı işlemleri otomatik olarak yerine getirmesi istendiğinde, programlanması gerekir. “Bilgisayar programlama” sıkça kullanılan ifadelerden bir tanesidir. Bilgisayar programlama, bilgisayarların istenilen bazı işlemleri, istendiği şekilde yerine getirmelerini sağlayacak emirler dizisinin yani “bilgisayar programının” üretimi işlemidir.
1.3.Programlama Dilleriyle İlgili Genel Kavramlar En basit programlama dilinde değişkenler, operatörler, ifadeler ve döngüler o dili oluşturan temel öğelerdir. Bunların ne anlama geldiğini ilerleyen bölümlerde göreceğiz. Bu aşamada bilmeniz gereken şey, bunların programlama yapmak için yeterli olmasıdır. Şu anda son derece gelişmiş bir oyunu oynadığınızı varsayın. Böyle bir oyunu, bu dört öğeyi kullanarak programlamak, teorik olarak mümkündür. Ancak pratikte bu neredeyse imkansızdır. Binlerce değişken, birbirine girmiş kavramlar... Sonuca ulaşmak için labirentte peynir arayan fareden daha çok “köşe dönmeniz” gerekir. Bu tür durumlar için “Nesne-Tabanlı Programlama Dilleri” (“Object-Oriented Coding Languages”) dediğimiz diller mevcuttur. Ayrıca bu nesneleri ve nesnelerin elemanlarını belirleyebilmemiz için “Structure” yani “Yapı” içeren diller vardır. Bu iki özelliğin bir arada olduğu dillerden en ünlüsü, en gelişmişi ve en çok kullanılanı C++’dır.
1.4.Bilgisayar Donanımı ve Yazılımlarının tanıtılması Bilgisayar, mantıksal ve aritmetiksel işlemleri çok hızlı biçimde yapan bir araçtır. Günümüzün bilgisayarları, saniyede milyonlarca aritmetiksel işlemi yapabilecek kapasitededir. İlk üretilen bilgisayarlar, oldukça büyük ve yavaştı. Ama gün geçtikçe küçüldüler ve güçleri de hızla arttı. Örneğin, yirmi-otuz yıl önceki ancak bir odaya sığabilecek bir bilgisayarın yaptığı işlerden çok daha fazlasını, bugünkü kişisel bilgisayarlar, daha hızlı bir şekilde yapabilmektedir. Bu yüzden, bilgisayarlar günümüzde çok değişik alanlarda ve ortamlarda kullanılmaktadır. Hemen hemen her evde ve işyerinde artık bir bilgisayar görmek mümkün olasıdır.
1.5.Bilgisayar Donanımı Gördüğümüz ve dokunabildiğimiz bütün parçalar bilgisayar donanımını oluşturur. Modern bir bilgisayar donanımı, aşağıdaki beş ana parçadan oluşur : CPU (Central Processing Unit-Merkezi İşlem Birimi): Bu, bilgisayarın çalışmasını düzenleyen ve programlardaki komutları tek tek işleyen birimdir. İşlem hızına göre çeşitli modelleri vardır. Örneğin, Pentium işlemci, 486 işlemci ya da Sparc işlemci dediğimizde, bilgisayarın Merkezi İşlem Birimini (MİB) anlaşılmalıdır. Ana Bellek : Ana bellek, programların ve verilerin, kullanıldıkları zaman depolandıkları yerdir. MİB işlemlerini, ana bellekte saklanan bu verilere ulaşarak yapar. Ana bellekteki bilgiler sistemin elektrik gücü kesildiğinde kaybolur. Bir belleğin tutabileceği bilgi kapasitesi megabyte (MB - milyon byte) biçiminde ifade edilir. Yaklaşık olarak bir MB, bir milyon harfi depolayabilecek bir alandır. Tipik bir kişisel bilgisayarın ana belleği, 256-512 MB’dır.
Dış Bellek Birimleri (Secondary Memory Devices) : Ana bellekteki bilgiler (elektrik gücüne bağlı olarak), geçici süre saklanabildiği için, uzun süre kalıcı olarak saklamak istediğimiz bilgileri dış bellek birimlerinde depolarız. Bu araçlardan bazıları, disketler, sabit diskler ve teyplerdir. Burada saklanan bilgiler, elektrik kesilmesinden etkilenmez. Tipik bir kişisel bilgisayarın sabit diski, gigabyte (GB) cinsinden ölçülen milyarlarca harfe denk gelen verileri saklayabilir. Girdi Birimleri (Input Devices) : Kullanıcı, bu birimler aracılığıyla, bilgisayara verileri girer. Girdi birimlerinden bazıları, klavye, fare ve joysticktir. Çıktı Birimleri (Output Devices): Bilgisayarın kullanıcıya ileteceği sonuçları göstermek için kullandığı birimlerdir. Bunlardan bazıları ekran ve yazıcıdır.
1.6Bilgisayar Yazılımı Bilgisayar yazılımı (program), bilgisayara bir işi yaptırmak için verdiğimiz komutlar kümesidir. Yazılımları genel olarak iki kategoride sınıflandırabiliriz : İşletim sistemleri : Kullanıcı ile bilgisayar arasındaki iletişimi sağlayan programlardır. Bilgisayar sisteminin bütün hareketlerini denetler ve sistemdeki MİB ve ana bellek gibi kaynakların yönetimi ile ilgilenirler. Örneğin, sizin kullandığınız Windows’95 ya da Windows NT birer işletim sistemidir. Diğer bazı işletim sistemleri şunlardır : UNIX, DOS, Solaris, MacOS. 1.6.1.Uygulama Programları : İşletim sistemi dışında kalan diğer programlara verilen genel bir addır. Örneğin, MSWord, havayolları rezervasyon sistemi, bilgisayar oyunları, programlama dillerinin derleyicileri, birer uygulama programıdır. 1.6.2.Programlama Dilleri : Bir problemi çözmek için gerekli olan komutlar çok değişik programlama dilleri kullanılarak yazılabilir. Bazı programlama dillerinde yazılan programlar, doğrudan bilgisayarın MİB’i tarafından anlaşılabilir. Diğer bazı dillerde yazılan programlar ise o dilin derleyicisi tarafından MİB’in anlayacağı dile çevrilir.
1.7.Programlama dillerini üç genel kategoriye ayırabiliriz : Makina dilleri Assembly dilleri Yüksek seviyeli programlama dilleri (high-level languages) 1.7.1.Makina dili : Her bilgisayar MİB’inin anlayacağı kendi makina dili vardır. Örneğin, Pentium işlemcinin makina dili, Sparc işlemciden farklıdır. Makina dilindeki bir komut, bit (0 ya da 1) gruplarından oluşur. Örneğin, makina dilinin bir komutu iki değerin toplanması ya da bir değerin ana belleğin bir bölgesinde saklanması gibi basit işlemleri içerir. İnsanların makina dilinde program yazması hemen hemen olanaksızdır. Örneğin, makina dilinde iki sayının toplanması, 01000110011101000111101010000010010101101000010 biçiminde ifade edilir.
1.7.2.Assembly dili : Bir assembly dili, makina dilindeki komutları İngilizce benzeri bir dille ifade eder. Genelde assembly dilindeki her komut makina dilindeki bir komuta denk düşer. Assembly dilindeki bir program assembler diye bilinen bir yazılım tarafından makina diline çevrilir. Assembly dilinde program yazmak da makina dilinde olduğu gibi zor ve zaman alıcıdır. Assembly dilinde iki sayının toplanması, LOAD A ADD B STORE C biçiminde ifade edilir. 1.7.3.Yüksek Seviyeli Programlama Dilleri ( YSPD ) : Makina dilinde çok sayıda komutla yapılabilecek bir iş, yüksek seviyeli programlama dilinin bir komutu ile yapılabilir. Bu yüksek seviyeli diller, İngilizce ya da Türkçe gibi doğal bir dil değil, kendi yapısı ve dilbilgisi kuralları olan, insanlar için anlaşılması kolay olan dillerdir.
1.8. ORTA SEVIYELİ BİR DİLDİR : C yüksek seviyeli FORTRAN, PASCAL, APL, ADA gibi dillerin özelliklerini taşımasına rağmen, ASSEMBLER’A özgü makine düzeyinde düşük düzeyli işlemler yapabildiği için orta seviyeli olarak tanımlanır. Pascal gibi temel veri birimlerinden daha yüksek sevide veri yapıları inşa etmeye olanak sağlar. Pascal, veri türlerinin uyumu konusunda esneklik tanımazken, C veri türleri arası geçici kolaylıkla sağlar. Yani kolaylıkla bir 'INT' değişken 'CHAR' değişkene yüklenebilir. Ancak bir çok C uygulaması gerektiğinde LINT adli ON-DERLEYICI ile programcılara tur denetiminde yardımcı olur. FORTRAN'da olduğu gibi veri türleri arası geçiş otomatiktir. APL gibi anlaşılmaz bir kod hazırlama imkanı da böylece doğabilir. C dili ADRES ve POINTER işlevlerine sahiptir ve bunları yaygın bir şekilde kullanır.
1.9.DERLEYİCİLER VE C DİLİNİN ÖZELLİKLERİ 1.9.1Derleyici: Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. DevCpp de böyle bir derleyicidir. DevCpp ücretsiz dağıtılan, Windows ve Linux tabanlı işletim sistemlerinde kullanılabilen bir IDE’dir. C dilini diğerlerinden ayıran özellikleri şöyle sıralayabiliriz. a) C dili orta sınıf bir dildir. b) C dili yapısal bir dildir. c) C dili gerçek programcıların kabul ettiği bir dildir. d) C dili değişik bilgisayarlara kolayca adapte olan bir dildir.
1.11.C PROGRAM YAPISI Komutlar : Bütün C programları, bir dizi komutttan oluşurlar. Genellikle bir komut tek bir eylem olarak düşünülebilir. Komutlar bir dizi sözcükten oluşurlar. Her komut C’de ";" karakteri ile bitirilir. ÖRNEK int a; a=a+1; while(z<23) a=a+54; Her satıra tek bir komut yazılırsa, komutları birbirinden ayırmak daha kolay olur. Bu derleyici için bir zorunluluk değildir. Komutlar genellikle iki gruptan birine girerler. işletilebilen bildirim
İşletilebilen komutlar, işlem yapabilen sözcükleri içerirler İşletilebilen komutlar, işlem yapabilen sözcükleri içerirler. Bu tür komutların bir blok içine ( { } parantezleri içine) yerleştirilmeleri gerekir. Bildirim komutları, programın işletmek zorunda olduğu yapıları belirlerler. Aşağıdaki özel bildirim komutu, bütün C programlarında bulunmalıdır. Main( ) Bu komut, programın nerede çalışmaya başlayacığını gösterir.
1.12.Bloklar Komutlar, blok adı verilen birimlerde bir araya toplanırlar. Bir blok, herhangi bir komut veya blok grubundan oluşabilir. Blokun başlangıcını ve bitişini göstermek için küme parantezleri ( { } ) kullanılır. Blokları birbirinden ayırmak, programı anlamak açısından oldukça önemlidir.
1.13.DERLEME KOMUTLARI Bir C programı, komutlara ek olarak, derleyici için komutlar da içerebilir. Derleyici komutları adı verilen bu komutlar, gerçek programın bir parçası değildir. Programda bulunan diğer komutların çevirisini yönetirler. Bu komutlar her zaman numara sembolü (#) ile başlarlar. Programın herhangi bir yerinde, tek bir satırda, yalnız başlarına olmalıdırlar.
1.14.AÇIKLAMALAR Açıklamalar herhangi bir yerde olabilir, /* karakterleri ile başlamalı ve */ karakterleri ile bitmelidir. Örnek : # include <stdio.h> /* standart girdi/çıktıyı dahil et */ //açıklama main ( ) { printf ("Merhaba, Dünya\n"); printf ("Bu benim ilk C programım\n"); }