C Programlama
C Programlama
Alper Bayrak
¨
Abant ˙Izzet Baysal Universitesi
Bolu
2014
C Programlama
Sunuma Genel Bakı¸s
Sunuma Genel Bakı¸s I
1 G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Blok Yapılı Programlama
Giri¸s / C
¸ ıkı¸s
Program Geli¸stirme
Programların C
¸ alı¸stırılması
Kitaplıklar
Standartlar
Derleme A¸samaları
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Blok Yapılı Programlama
Blok yapılı programlamanın temelinde blok kavramı yatar.
Blok, birbiriyle ili¸skili komutların olu¸sturdu˘
gu gruptur.
Her algoritma birbirlerine ¸ce¸sitli ¸sekillerde ba˘
glanmı¸s
bloklardan olu¸sur.
Blokları ba˘glamanın u
¨¸c yolu vardır:
Sıra,
Se¸cim,
Yineleme.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Blok Yapılı Programlama
Sıra:
Bloklar, yukarıdan a¸sa˘
gıya do˘
gru yazıldıkları sırayla
y¨
ur¨
ut¨
ul¨
urler.
Sıra yapısı, komutların yazılı¸s sıralarının ¨
onemli oldu˘gunu
vurgular.
Figure: Sıra tipi blok ba˘
glama
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Blok Yapılı Programlama
Se¸cim:
Bir ko¸sulun do˘gru olup olmamasına g¨
ore farklı bir blo˘gun
y¨
ur¨
ut¨
ulmesidir.
Yani ko¸sul do˘gruysa bir blok, yanlı¸ssa ba¸ska bir blok y¨
ur¨
ut¨
ul¨
ur.
˙Iki bloktan herhangi biri bo¸s olabilir, yani ”ko¸sul do˘gruysa ¸su
blo˘gu y¨
ur¨
ut, yanlı¸ssa hi¸cbir ¸sey yapma” ¸seklinde bir yapı
kurulabilir.
Figure: Se¸cim tipi blok ba˘
glama
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Blok Yapılı Programlama
Yineleme:
Belirli bir ko¸sul sa˘glandı˘
gı s¨
urece (ya da
sa˘glanana kadar) bir blok yinelenebilir.
Akı¸s ¸cizene˘ginden g¨or¨
ulebilece˘
gi gibi, bu
yapıdan ¸cıkılabilmesi i¸cin blo˘
gun ko¸sulu
de˘gi¸stiren bir komut i¸cermesi gerekir, aksi
durumda ko¸sul ba¸slangı¸cta do˘
gruysa hep
do˘gru olaca˘gından yapıdan c¸ıkılamayacaktır.
Yine akı¸s c¸izene˘ginden g¨
or¨
ulebilecek bir di˘
ger
¨ozellik de, ko¸sul ba¸slangı¸cta yanlı¸ssa blo˘
gun
hi¸c y¨
ur¨
ut¨
ulmeyece˘gidir.
Bazı uygulamalarda blok ko¸suldan ¨
once de
yer alabilir, b¨oyle durumlarda ko¸sul ba¸stan
yanlı¸s olsa bile blok en az bir kere y¨
ur¨
ut¨
ul¨
ur.
Figure: Yineleme
tipi blok ba˘glama
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Blok Yapılı Programlama
Bu yapıların ortak bir ¨
ozelli˘
gi, hepsinin bir giri¸s ve bir
¸cıkı¸slarının olmasıdır.
B¨oylelikle bir blo˘gun c¸ıkı¸sı ¨
ob¨
ur blo˘
gun giri¸sine ba˘glanabilir;
ba¸ska bir deyi¸sle, bloklar ardarda eklenebilir.
Ayrıca, bir blo˘gun i¸cinde ba¸ska bir blok yer alabilir.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Blok Yapılı Programlama
Bir programın okunmasını ve anla¸sılmasını en ¸cok zorla¸stıran
etkenlerden biri programda yer alan dallanma komutlarıdır.
S¸imdiye kadar yazdı˘
gımız bazı algoritmalarda ge¸cen ”n. adıma
git” tipi komutlar i¸cin -programlama dillerinde genellikle goto
olarak adlandırılan- bir komut bulunması gerekti˘gi
d¨
u¸su
¨n¨
ulebilir (¨ozellikle yineleme yapıları i¸cin).
Ancak blok yapılı programlamada yineleme i¸cin ¨ozel yapılar
vardır ve goto komutunun kullanılmaması ¨
ozendirilir.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Soyutlama
Programlamanın temel d¨
uzeneklerinden biri soyutlama
kavramıdır.
Soyutlama, programın yapaca˘
gı i¸sin daha k¨
u¸cu
¨k ve birbirinden
olabildi˘gince ba˘gımsız alt-i¸slere b¨
ol¨
unmesidir.
Alt i¸slerde, benzer ¸sekilde, yapacaklarını alt-alt-i¸slere
b¨olebilirler.
Bu tip tasarıma yukarıdan a¸sa˘
gıya tasarım adı verilir.
Figure: Ana i¸sin alt i¸slere b¨
ol¨
unmesi.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Soyutlama
Her i¸s bir yordam (C dilindeki adıyla fonksiyon ) tarafından
ger¸ceklenir.
Ana-yordamın g¨orevi, alt-i¸sleri ger¸cekleyen yordamları
ba¸slatmak ve bunlar arasında e¸sg¨
ud¨
um¨
u sa˘
glamaktır.
Bir u
¨st-yordam, kullandı˘
gı alt-yordamların nasıl ¸calı¸stıklarıyla
de˘gil, yalnızca sonu¸clarıyla ilgilenir.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Soyutlama
Soyutlamanın kazandırdıkları ¸s¨
oyle ¨
ozetlenebilir:
Bir i¸si ger¸cekleyen yordam yazılırken, kullandı˘gı
alt-yordamların ayrıntılarıyla u˘
gra¸sılmaz; alt-yordamın do˘gru
¸calı¸stı˘gı varsayılarak yordamın kendi i¸sine yo˘
gunla¸sılabilir.
B¨oylelikle b¨
uy¨
uk ve ¸c¨
oz¨
ulmesi zor olan bir sorunla u˘gra¸smak
yerine, her biri k¨
u¸cu
¨k ve ¸c¨
oz¨
ulebilir sorunlarla u˘gra¸sılır ve
bunlar daha sonra biraraya getirilir.
Programın bakımı kolayla¸sır. Alt-yordamların c¸alı¸smaları
birbirlerinden ba˘gımsız oldu˘
gundan bir alt-yordamda bir
de˘gi¸siklik yapıldı˘gında bunu kullanan u
¨st-yordam
(¨
ust-yordamla olan etkile¸sim de˘
gi¸smedi˘
gi s¨
urece) de˘gi¸siklikten
etkilenmez.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
Soyutlama
Yordamlar olabildi˘
gince genel ama¸clı yazılmalıdır.
S¨ozgelimi bir yordamın i¸si ”Matematik dersini alan
¨o˘grencilerin yılsonu sınav notlarının en b¨
uy¨
u˘
gu
¨n¨
u bulmak”
¸seklinde tanımlanabilir.
Oysa i¸si ”herhangi bir dizinin en b¨
uy¨
u˘
gu
¨n¨
u bulmak” olarak
tanımlanan bir yordam geli¸stirmek ve bu yordamı kullanırken
hangi dizinin en b¨
uy¨
u˘
gu
¨n¨
un bulunmasının istendi˘gi belirtmek
daha etkin bir c¸alı¸sma bi¸cimidir.
Bu durumda hangi dizi u
¨zerinde i¸slem yapılaca˘gı bilgisi
yordamın giri¸s parametresi olur.
Yordam, ¸calı¸sması sonucu u
¨retti˘
gi de˘
geri c¸ıkı¸s parametresi
olarak d¨ond¨
ur¨
ur.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
3. En B¨uy¨uk Ortak B¨olen Bulma
˙Iki sayının en b¨
uy¨
uk ortak b¨
olenini bulma i¸si ¸su ¸sekilde alt i¸slere
b¨ol¨
unebilir:
1
2
Birinci sayıyı asal ¸carpanlarına ayır.
˙Ikinci sayıyı asal ¸carpanlarına ayır.
3
Sayıların ortak ¸carpanlarını belirleyerek en b¨
uy¨
uk ortak b¨olenin
asal ¸carpanlarını bul.
4
Bir ¨onceki adımda belirledi˘
gin asal ¸carpanlardan en b¨
uy¨
uk
ortak b¨oleni hesapla.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
3. En B¨uy¨uk Ortak B¨olen Bulma
Sayıların 9702 ve 945 oldukları varsayılırsa:
9702= 2 * 3 * 3 * 7 * 7 * 11= 21 * 32 * 72 * 111
945= 3 * 3 * 3 * 5 * 7= 33 * 51 * 71
3 ortak ¸
carpanlar: 32 * 71
4 en b¨
uy¨
uk ortak b¨
olen: 63
1
2
1. ve 2. adımlar i¸cin herhangi bir sayıyı asal c¸arpanlarına
ayıran bir yordam yazılabilir ve asal ¸carpanlarına ayrılacak sayı
bu yordama parametre olarak yollanabilir.
Benzer ¸sekilde, 3. adımdaki ortak ¸carpanların bulunması i¸si de
bir alt-yordama verilebilir.
4. adımda ortak ¸carpanlardan en b¨
uy¨
uk ortak b¨olenin
hesaplanması i¸slemleri i¸cin alt-yordam kullanmanın fazla bir
anlamı yoktur, ana yordama bırakmak daha yerinde olur.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
3. En B¨uy¨uk Ortak B¨olen Bulma
Bahsedilen yapı a¸sa˘gıdaki gibi g¨
osterilebilir.
Figure: En b¨
uy¨
uk ortak b¨
olen hesaplama algoritmasının yukarıdan a¸sa˘gıya
tasarımı.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
3. En B¨uy¨uk Ortak B¨olen Bulma
¨
Ornek
sayılar u
¨zerinde yordamların hangi giri¸s ve c¸ıkı¸s
parametreleriyle c¸alı¸stıkları a¸sa˘
gıda verilmi¸stir.
¨
Figure: Ornek
sayılar u
¨zerinde en b¨
uy¨
uk ortak b¨
olen hesaplama
algoritmasının i¸sleyi¸si.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
3. En B¨uy¨uk Ortak B¨olen Bulma
Asal ¸carpanlara ayırma algoritmasında g¨
or¨
ulen ”bir sonraki
asal sayıyı bulma i¸si” de asal c¸arpanlarına ayırma i¸sinin bir
alt-i¸si olarak d¨
u¸su
¨n¨
ulerek bir ba¸ska yordama bırakılabilir.
Bu yordam kendisine parametre olarak g¨
onderilen sayıdan bir
sonraki asal sayıyı bularak sonucu geri yollayacaktır.
Benzer ¸sekilde bu yordam da bir sayının asal olup olmadı˘gını
sınamak u
¨zere ba¸ska bir yordamdan yararlanmak isteyebilir.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
4. Euclides Algoritması
Bir ¨onceki ¨ornekte verilen algoritmanın en ¨
onemli sorunu,
¨ozellikle b¨
uy¨
uk sayıları asal c¸arpanlarına ayırmanın zorlu˘gudur.
Bilinen en eski algoritma ¨
orneklerinden biri olan Euclides
algoritması, iki sayının en b¨
uy¨
uk ortak b¨
oleninin c¸arpanlara
ayırmadan hızlı bi¸cimde hesaplanmasını sa˘
glar.
En b¨
uy¨
uk ortak b¨
oleni bulunacak sayılardan b¨
uy¨
uk olanına a,
k¨
u¸cu
¨k olanına b dersek:
a = q1 b + r1
¸seklinde yazılabilir.
Burada r1 = 0 ise iki sayının en b¨
uy¨
uk ortak b¨oleni b’dir.
De˘gilse a ile b sayılarının en b¨
uy¨
uk ortak b¨
oleni b ile r1
sayılarının en b¨
uy¨
uk ortak b¨
olenine e¸sittir.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
4. Euclides Algoritması
Dolayısıyla, b¨ol¨
umden kalan 0 olana kadar a¸sa˘gıdaki e¸sitlikler
yazılabilir:
b = q2 r1 + r2
r1 = q3 r2 + r3
···
rn−2 = qn rn − 1 + rn
rn−1 = qn+1 rn + rn+1 (rn+1 = 0)
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
4. Euclides Algoritması
Bu durumda a ile b’nin en b¨
uy¨
uk ortak b¨
oleni rn ’dir.
Yine a = 9702 , b = 945 ¨
orne˘
gini alırsak:
9702 = 10 ∗ 945 + 252
945 = 3 ∗ 252 + 189
252 = 1 ∗ 189 + 63
189 = 3 ∗ 63 + 0
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
4. Euclides Algoritması
Her denklem i¸cin en b¨
uy¨
uk ortak b¨
oleni alınacak sayılardan
b¨
uy¨
uk olanını a , k¨
u¸cu
¨k olanını b de˘
gi¸skeninde, bu ikisinin
b¨ol¨
um¨
unden kalan de˘
geri de r de˘
gi¸skeninde tutarsak (kalan
i¸slemi % i¸saretiyle g¨
osterilsin), bu algoritma bir yineleme
yapısıyla ger¸ceklenebilir.
Bir b¨olme i¸sleminde her zaman kalan, b¨
olenden k¨
uc¸u
¨k olaca˘gı
i¸cin her yinelemede a de˘
gi¸skeni b’nin, b de˘
gi¸skeni de r ’nin
de˘gerini alarak ilerlenir ve b 0 oldu˘
gunda en b¨
uy¨
uk ortak b¨olen
a de˘gi¸skeninde elde edilmi¸s olur.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
4. Euclides Algoritması
a
9702
945
252
189
b
945
252
189
63
r
252
189
63
0
Table: Euclides algoritmasının
ornek de˘
¨
gerlerle i¸sleyi¸si.
Figure: Euclides algoritmasının akı¸s
¸cizene˘
gi.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
5. Asal C
¸ arpanların Bulunması
Herhangi bir sayının asal
¸carpanlarına ayrılması i¸cin
kullanılabilecek olan algoritma
a¸sa˘
gıda verilmi¸stir.
Bu algoritmada x asal
¸carpanlarına ayrılacak sayıyı, c
¸carpan olup olmadı˘gı o anda
sınanmakta olan asal sayıyı, u
da sıradaki ¸carpanın kuvvetini
g¨
osterir.
Figure: Bir sayıyı asal c¸arpanlarına
ayırma algoritması.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
5. Asal C
¸ arpanların Bulunması
x
945
c
2
3
x>1
D (945>1)
D (945>1)
5
D (35>1)
7
D (7>1)
11
Y (1=1)
315
105
35
7
1
x%c=0
Y (945 mod 2=1)
D (945 mod 3=0)
D (945 mod 3=0)
D (315 mod 3=0)
D (105 mod 3=0)
Y (35 mod 3=2)
D (35 mod 5=0)
D (35 mod 5=0)
Y (7 mod 5=2)
D (7 mod 7=0)
D (7 mod 7=0)
Y (1 mod 7=1)
¸carpan
u
3
0
1
2
3
5
0
1
7
0
1
Table: Asal ¸carpanlarına ayırma algoritmasının i¸sleyi¸si.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
6. Ortak C
¸ arpanların Bulunması
˙ sayının ¸carpanlarından en b¨
Iki
uy¨
uk ortak
b¨
olenin ¸carpanlarını bulma i¸sini yapacak
yordamın algoritması geli¸stirilirken, asal
c¸arpanlara ayırma yordamının c¸alı¸sma
¸sekli nedeniyle ¸carpanların k¨
uc¸u
¨kten
b¨
uy¨
ug
˘e do˘
gru sıralı oldukları varsayılabilir.
Bu varsayıma g¨
oren c¸alı¸san algoritma
yanda verilmi¸stir.
Bu algoritmada carpanlar1 birinci sayının
asal c¸arpanları dizisini, carpanlar2 ikinci
sayının asal sayı ¸carpanları dizisini, c1
birinci sayının sıradaki asal c¸arpanını, c2
de ikinci sayının sıradaki asal c¸arpanını
g¨
osterir.
Figure: Ortak c¸arpanları bulma algoritması.
Her iki dizinin elemanlarına eri¸smek i¸cin
de sırasıyla i1 ve i2 saya¸c de˘
gi¸skenleri
kullanılmı¸stır.
C Programlama
G˙IR˙IS
¸
Akı¸s C
¸ izgeleri
¨
Ornek
6. Ortak C
¸ arpanların Bulunması
c1
21
32
72
111
c2
33
51
71
-
taban
2<3
3=3
7>5
7=7
u
¨s
¸carpan
2<3
32
1<2
71
Table: Ortak ¸carpanları bulma algoritmasının i¸sleyi¸si.
C Programlama
G˙IR˙IS
¸
Giri¸s / C
¸ ıkı¸s
Giri¸s / C
¸ ıkı¸s
Bir programlama dilinin kullanılabilir olması i¸cin dilde blok yapılı
programlamanın kavramlarını desteklemenin dı¸sında bazı
gereklilikler de yerine getirilmelidir:
Giri¸s:
Bir program her seferinde aynı veri de˘
gerleri u
¨zerinde ¸calı¸smaz,
i¸sleyece˘gi verileri c¸alı¸sma sırasında bir ¸sekilde ¨o˘grenmesi
gerekir.
Bunun en sık kar¸sıla¸sılan y¨
ontemi verileri programı kullanan
ki¸siye sormak olmakla birlikte verileri bir dosyadan okumak ya
da ortamdan ¨o˘grenmek (s¨
ozgelimi odanın sıcaklı˘gını ¨ol¸cen bir
duyargadan almak) gibi se¸cenekler de bulunabilir.
Programlama dillerinin girdi komutları giri¸s birimlerinden
aldıkları de˘gerleri de˘
gi¸skenlere aktarırlar.
Aksi belirtilmedik¸ce standart giri¸s birimi kullanıcının tu¸s
takımıdır.
C Programlama
G˙IR˙IS
¸
Giri¸s / C
¸ ıkı¸s
Giri¸s / C
¸ ıkı¸s
C
¸ ıkı¸s
Program, verilerin i¸slenmesi sonucu elde etti˘
gi sonu¸cları bir
¸sekilde de˘gerlendirmelidir.
En sık g¨or¨
ulen y¨ontem sonucun kullanıcının ekranına
yazılmasıdır ama giri¸ste oldu˘
gu gibi sonu¸cların bir dosyaya
yazılması ya da ortama g¨
onderilmesi (oda sıcaklı˘gını denetleyen
klimaya bir sinyal yollanması gibi) s¨
ozkonusu olabilir.
Programlama dillerinin ¸cıktı komutları, de˘
gi¸sken de˘gerlerini
istenen ¸cıkı¸s birimine y¨
onlendirirler.
Aksi belirtilmedik¸ce standart c¸ıkı¸s birimi kullanıcının ekranıdır.
C Programlama
G˙IR˙IS
¸
Giri¸s / C
¸ ıkı¸s
Giri¸s / C
¸ ıkı¸s
Programın ¸calı¸sması sırasında kar¸sıla¸sılan hata durumlarının
bildirilmesi de c¸ıktının bir par¸casıdır.
Ancak, hataların daha kolay fark edilmelerini sa˘glamak
amacıyla, bu iletilerin normal ¸cıktı iletilerinden ayrılabilmeleri
istenir.
Bu nedenle, hata iletileri hata birimine y¨
onlendirilir.
Aksi belirtilmedik¸ce bu birim -standart ¸cıkı¸sta oldu˘gu gibikullanıcının ekranıdır.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Program Geli¸stirme
Bir programın geli¸stirilmesi c¸e¸sitli a¸samalardan olu¸sur:
Tasarım
Bu a¸samada yazılacak program ”ka˘
gıt u
¨zerinde” tasarlanır.
Yani programın algoritmasına, hangi programlama dilinin
kullanılaca˘gına, kullanıcıyla nasıl bilgi alı¸sveri¸sinde
bulunulaca˘gına, kısacası neyin nasıl yapılaca˘
gına karar verilir.
Dikkatli bir tasarım, programın hem geli¸stirilmesinde hem de
bakımında b¨
uy¨
uk kolaylıklar sa˘
glar.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Program Geli¸stirme
Kodlama
Bu a¸samada program tasarım sırasında verilen kararlara g¨ore
bir programlama diliyle yazılır.
Bunun sonucunda yazılımın kaynak kodu olu¸sur.
Kaynak kodunu bilgisayar ortamında olu¸sturmak i¸cin edit¨or adı
verilen yazılımlar kullanılır.
Sınama
Bu a¸samada program c¸alı¸stırılarak ¸ce¸sitli senaryolar i¸cin do˘gru
sonu¸clar u
¨retip u
¨retmedi˘
gine, beklendi˘
gi gibi davranıp
davranmadı˘gına bakılır.
Bu i¸slemin etkinli˘
gi g¨
oz¨
on¨
une alınan senaryoların ger¸cekte
olu¸sabilecek durumların ne kadarını ¨
ortt¨
u˘
gu
¨yle ba˘glantılıdır.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Program Geli¸stirme
Hata Ayıklama
Bu a¸samada sınama a¸samasında bulunan hataların nedenleri
belirlenerek gerekli d¨
uzeltmeler yapılır.
Programların ilk yazıldıkları ¸sekliyle do˘
gru olmaları neredeyse
olanaksızdır.
Hatta u
¨st¨
une c¸ok c¸alı¸sılmı¸s, pek c¸ok hatası bulunup
d¨
uzeltilmi¸s programlarda bile b¨
ut¨
un hataların bulunup
d¨
uzeltilmi¸s olması son derece d¨
u¸su
¨k bir olasılıktır.
Ayrıca programlara yeni yetenekler eklendik¸ce yeni hatalar
olu¸saca˘gından a¸sa˘
gı yukarı hi¸cbir program hi¸cbir zaman tam
olarak hatasız olmayacaktır.
Hata ayıklama i¸slemine yardımcı olmak u
¨zere hata ayıklayıcı
adı verilen yazılımlar kullanılır.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Program Geli¸stirme
Programlarda kar¸sıla¸sılabilecek hatalar ¸su ¸sekilde verilebilir:
Syntax Error:
Yazılan programda programlama dili kurallarına aykırı bir
takım ifadelerden dolayı kar¸sıla¸sılabilecek hatalardır.
D¨
uzeltilmesi son derece basit hatalardır.
Hatanın bulundu˘gu satır derleyici tarafından rapor edilir.
Hatta bazı derleyiciler hatanın ne oldu˘
gunu ve nasıl
d¨
uzeltilmesi gerekti˘
gini dahi bildirebilirler.
Bazen Syntax Error tipi hataları Ba˘
glama zamanında da
ortaya c¸ıkabilir.
E˘ger bir derlemede Syntax Error alındı ise obje kod
u
¨retilememi¸stir demektir.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Program Geli¸stirme
Run-time Error:
Programın ¸calı¸stırılması sırasında kar¸sıla¸sılan hatalardır.
Programcının ele almadı˘
gı bir takım aykırı durumlar ortaya
¸cıktı˘gında programın i¸sletim sistemi tarafından kesilmesi ile
ortaya c¸ıkar.
Bu tip hatalarda hata mesajı ¸co˘
gunlukla ¸calı¸san i¸sletim
sisteminin dili ile verilir.
E˘ger bu tip hataları kullanıcı ele almı¸ssa, program
programcının verece˘
gi mesajlarla ve uygun ¸sekilde
sonlandırılabilir.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Program Geli¸stirme
Bu tip hataların nerelerde ve hangi ¸sartlarda ortaya
¸cıkabilece˘gini bazen kestirmek zor olabilir.
C
¸ o˘gunlukla i¸sletim sistemi ve donanım kaynakları ile ilgili
sorunlarda bu tip hatalar ortaya ¸cıkar.
¨ gin olamayan bir dosya a¸cmaya ¸calı¸smak, var olan bir
Orne˘
dosyanın u
¨zerine yazmaya c¸alı¸smak, olmayan bir bellek
kayna˘gından bellek ayırtmaya c¸alı¸smak, olmayan bir donanıma
ula¸smaya ¸calı¸smak vs. gibi.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Program Geli¸stirme
Logical Error:
Kar¸sıla¸sabilece˘giniz en tehlikeli hatadır.
Programlama mantı˘
gında bir takım ¸seylerin yanlı¸s
d¨
u¸su
¨n¨
ulmesinden kaynaklanır.
Hata test a¸samasında ortaya ¸cıkar.
Hesaplanması gereken veya bulunması gereken de˘gerlerin eksik
veya yanlı¸s hesaplanması ile tespit edilir.
Bu sorunun giderilebilmesi i¸cin Tasarım hatta ¸c¨oz¨
umleme
a¸samasına geri d¨on¨
ulmesi gerekebilir.
Bazen bu hatanın nereden kaynaklandı˘
gını bulabilmek c¸ok zor
olmaktadır.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Program Geli¸stirme
Bug:
Logical Error diyebilece˘
gimiz Mantıksal hatalara verilen adlar
bug yani b¨ocek diye de tanımlanabilir.
Bu tip hatalar e˘ger ¸cok net de˘
gil ve zamanla ortaya ¸cıkabiliyor
ise veya nedeni ¸cok net olarak anla¸sılamamı¸ssa bug diye
adlandırılır.
Gerek serbest yazılım gerek ticari yazılımların t¨
um¨
unde bug
dedi˘gimiz mantıksal hatalar bulunur. C
¸u
¨nk¨
u hatasız program
yazabilmek c¸ok zordur.
˙Ilk seferde yazılan bir programın tamamen hatasız olmasını
beklemek son derece hatalıdır.
G¨
un¨
um¨
uzde en me¸shur yazılım firmaları bile yazılımlarında bug
oldu˘gunu kabul eder ve zaman zaman bu bugları giderebilmek
i¸cin ya yazılımlarına yama yazılımı u
¨retirler yada o yazılımın
yeni bir versiyonunu piyasaya s¨
urerler.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Program Geli¸stirme
Debug:
Mantıksal hataları giderebilmek ve yazılımdaki bug’ları
bulabilmek i¸cin yapılan i¸slemin adıdır.
Genellikle yazılan programın adım adım ve denetim altında
¸calı¸stırılmasıdır.
Programın her adımında ilgili de˘
gi¸skenlerin hangi de˘gere sahip
oldu˘gunu g¨ormeyi ve anormal bir durumu daha kolay izleyip
bulmanızı sa˘glar.
Bu i¸slemi ger¸cekle¸stirebilmek i¸cin bazı IDE ortamlarında
debugger dedi˘gimiz yardımcı komut veya yazılımlar kullanılır.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Programların De˘gerlendirilmesi
Bu a¸samalar sonucunda ortaya ¸cıkan bir programın iyi bir program
olup olmadı˘gının, ya da ne kadar iyi bir program oldu˘gunun
de˘gerlendirilmesinde ¸su ¨
ol¸cu
¨tlere ba¸svurulur:
Etkinlik:
Bu konu algoritmaların kar¸sıla¸stırılmalarında kullanılan
¨ol¸cu
¨tlerle aynıdır.
Program ne kadar hızlı ¸calı¸sıyor? D¨
uzg¨
un kullanılabilmesi i¸cin
ne kadar sistem kayna˘
gı gerekiyor (hangi i¸slemci, ne kadar
bellek, ne kadar disk, v.b.?).
Sa˘
glamlık:
Program, kullanıcının yapaca˘
gı kullanım hatalarına kar¸sı
dayanıklı mı?
S¨ozgelimi, kendisine bir yıl bilgisi soruldu˘
gunda kullanıcı
yanlı¸slıkla (ya da k¨
ot¨
u niyetle) bir isim yazarsa ne oluyor?
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Programların De˘gerlendirilmesi
Ta¸sınabilirlik:
Program, u
¨zerinde fazla de˘
gi¸siklik yapılması gerekmeden,
ba¸ska bir donanım ve ba¸ska bir i¸sletim sistemi u
¨zerinde
¸calı¸sacak hale getirilebiliyor mu?
Anla¸sılabilirlik:
Ba¸ska biri programı okudu˘
gunda anlayabilecek mi? Hatta
u
¨st¨
unden bir s¨
ure ge¸ctikten sonra kendiniz baktı˘gınızda
anlayabilecek misiniz?
Bakım kolaylı˘
gı:
Programda hata oldu˘
gunda hatanın kayna˘
gının belirlenmesi ve
d¨
uzeltilmesi kolay mı?
Geli¸stirilebilirlik:
Program yeni yeteneklerin eklenmesiyle geli¸stirilmeye a¸cık mı?
Bu tip eklemelerin yapılması kolay mı?
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Programların De˘gerlendirilmesi
Geli¸stirme a¸samalarında daha az sorunla kar¸sıla¸smak ve daha
kaliteli yazılımlar u
¨retmek i¸cin c¸e¸sitli y¨
ontemler geli¸stirilmi¸stir.
Bu y¨ontemlerin temel farkı, problemin nasıl modellenece˘gine
ili¸skin yakla¸sımlarıdır.
Blok yapılı yakla¸sım, nesneye dayalı yakla¸sım, fonksiyonel
yakla¸sım gibi y¨ontemler c¸e¸sitli alanlarda yaygın olarak
kullanılmaktadır.
Se¸cti˘giniz programlama dili hangi programlama yakla¸sımını
kullanaca˘gınızı da belirler.
S¨ozgelimi C dili blok yapılı, Java dili nesneye dayalı, Haskell
diliyse fonksiyonel dillerdir.
C++ dili hem blok yapılı hem de nesneye dayalı ¨ozellikler
g¨osteren karma bir dildir.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Programların C
¸ alı¸stırılması
Bilgisayarların ¸calı¸stıracakları programların belli bir bi¸cimi
olması zorunludur.
Bu bi¸cim, bilgisayardan bilgisayara ve i¸sletim sisteminden
i¸sletim sistemine g¨
ore farklılıklar g¨
osterir.
S¨ozgelimi, bir ki¸sisel bilgisayar u
¨zerinde Windows i¸sletim
sisteminde ¸calı¸san bir program, Sun marka bir i¸sistasyonunda
Solaris i¸sletim sisteminde ¸calı¸smaz.
Hatta, yine aynı ki¸sisel bilgisayar u
¨zerinde Linux i¸sletim
sisteminde de c¸alı¸smaz.
Programların bu ¸calı¸stırılabilir bi¸cimine makine kodu adı verilir.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Programların C
¸ alı¸stırılması
Makina kodu, insanların anlaması ve u
¨zerinde c¸alı¸sması son
derece zor bir bi¸cim oldu˘
gundan programcılar programları
do˘grudan bu kod ile yazmazlar.
˙Insanın anlaması daha kolay (insan diline daha yakın) ”y¨
uksek
d¨
uzeyli” bir dil ile kaynak kodunu olu¸sturup yardımcı yazılımlar
aracılı˘gıyla makina koduna c¸evirir ve ¸calı¸stırırlar.
Kaynak kodunun makina koduna ¸cevrilmesi ve c¸alı¸stırılması
i¸slemi u
¨¸c farklı yakla¸sımla ger¸cekle¸stirilebilir:
Yorumlama,
Derleme,
Karma.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Programların C
¸ alı¸stırılması
Yorumlama:
Programın komutları bir yorumlayıcı tarafından teker teker
okunur, Makine koduna c¸evrilir ve ¸calı¸stırılır.
Yani yorumlayıcı, ¨
once birinci komutu okur, makina koduna
¸cevirir ve ¸calı¸stırır.
Sonra ikinci komutu alır ve aynı i¸slemleri yapar.
Programın her c¸alı¸smasında ¸cevirme i¸slemi yeniden yapılır.
Herhangi bir komutun ¸cevrilmesinde ya da c¸alı¸stırılmasında bir
hatayla kar¸sıla¸stı˘gında bunu kullanıcıya bildirir ve ¸calı¸smayı
durdurur.
Basic, Perl, Tcl gibi diller genellikle yorumlayıcılar aracılı˘gıyla
kullanılırlar.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Programların C
¸ alı¸stırılması
Derleme:
Derleme Program bir derleyici tarafından bir b¨
ut¨
un halinde
okunur ve makina koduna ¸cevrilerek bir ¸calı¸stırılabilir dosya
olu¸sturulur.
Bu dosya daha sonra istendi˘
gi zaman c¸alı¸stırılır, yani c¸evirme
ile ¸calı¸stırma i¸slemleri birbirinden ayrılır.
B¨oylelikle ¸cevirme i¸slemi yalnızca bir kere yapılır.
Herhangi bir komutta hata varsa c¸evirme i¸slemi
tamamlanmaz, yani c¸alı¸stırılabilir kodun olu¸sması i¸cin hi¸cbir
yazım hatası olmaması gerekir; ancak program daha sonra
¸calı¸stırılırken c¸alı¸sma-zamanı hatalarıyla kar¸sıla¸sılabilir.
Fortran, Pascal, C gibi diller genelde derleyicilerle kullanılırlar.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Programların C
¸ alı¸stırılması
Karma:
Hem derleme hem de yorumlama tekni˘
gi kullanılır.
Bu tip c¸alı¸smada kaynak kodu sanal bir bilgisayarın makina
koduna (bytecode) c¸evrilir ve daha sonra bu sanal bilgisayarı
ger¸cekleyen bir program yardımıyla yorumlanarak ¸calı¸stırılır.
¨ gin Java dilinde yazılmı¸s bir kaynak kodu ¨once Java
Orne˘
derleyicisinden ge¸cirilerek Java sanal makinasının (Java Virtual
Machine - JVM) makina koduna d¨
on¨
u¸st¨
ur¨
ul¨
ur; sonra da bu
sanal makinayı ger¸cekleyen bir Java c¸alı¸sma ortamı (Java
Runtime Environment - JRE) yardımıyla ¸calı¸stırılır.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Programların C
¸ alı¸stırılması
Yorumlama y¨onteminde kodun okunması ve ¸cevrilmesi
programın ¸calı¸sması sırasında yapıldı˘
gından hız d¨
u¸su
¨kt¨
ur.
Ayrıca yorumlayıcı yalnızca kar¸sıla¸stı˘
gı ilk hatayı rapor edebilir.
Bu hata d¨
uzeltildi˘
ginde sonraki ¸calı¸smada da program ancak
bir sonraki hataya kadar ilerleyebilir.
Oysa derleyici kaynak kodundaki b¨
ut¨
un hataları bulabilir.
Buna kar¸sılık hata ayıklama i¸slemi yorumlayıcılarla daha
kolaydır.
Ayrıca derleyicilerle gelen bazı sınırlamaların kalkması
nedeniyle daha esnek bir ¸calı¸sma ortamı sa˘
glanır.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Kitaplıklar
Bir programcıya gerekebilecek her ¸seyi programlama dilinin
i¸cine almak o dili i¸sleyecek ara¸cların hantalla¸smalarına neden
olur.
C dili bu nedenle olduk¸ca ık¨
u¸cu
¨kı bir dil olarak tasarlanmı¸stır.
¨ gin basit aritmetik i¸slemlerin ¨
Orne˘
otesindeki matematik
i¸slemleri dilin tanımı i¸cinde yer almaz; s¨
ozgelimi karek¨ok alma
i¸slemi i¸cin bir C komutu yoktur.
Bununla birlikte, pek ¸cok programcının bu tip i¸slemlere
gereksinim duyacakları da a¸cıktır.
B¨oyle bir durumda programcı, isterse karek¨
ok alma i¸slemini
yapacak kodu kendisi yazabilir.
Ancak programcının bu tip i¸slemler i¸cin kendi kodlarını
yazmasının ¨onemli sakıncaları vardır:
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Kitaplıklar
Bu sakıncalar ¸su ¸sekilde sıralanabilir.
1
Her programcının aynı i¸sleri yapan kodlar yazması b¨
uy¨
uk
zaman kaybına yol a¸car.
2
Programcının yazaca˘
gı kod hatalı olabilir, yani yanlı¸s sonu¸c
u
¨retebilir. Ya da do˘
gru sonu¸c u
¨retse bile, yeterince etkin
olmayabilir, yani i¸slemi yapmak i¸cin gere˘
ginden fazla zaman ya
da sistem kayna˘gı harcayabilir.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Kitaplıklar
Hem dilin tanımını k¨
uc¸u
¨k tutmak hem de bu sakıncaları
giderebilmek i¸cin, ¸co˘
gu programcıya gerekebilecek i¸slemler
(yordamlar) kitaplık adı verilen ar¸sivlerde toplanmı¸stır.
Bir sayının karek¨ok¨
un¨
u almak isteyen bir programcı matematik
kitaplı˘gındaki sqrt yordamını kullanabilir.
Kitaplı˘gın kullanılması yukarıda s¨
oz¨
u ge¸cen sakıncaları giderir,
yani programcıya zaman kazandırdı˘
gı gibi, do˘
gru ve etkin
¸calı¸stı˘gı sınanmı¸s oldu˘
gundan dikkatini programın di˘ger
kısımlarına yo˘gunla¸stırma fırsatı verir.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Standartlar
C dilinin geli¸stirilmesinde g¨
ozetilen ana hedeflerden biri
ta¸sınabilirliktir.
Bunun i¸cin de˘gi¸sik ortamlardaki ara¸clar arasında bir standart
olması gerekti˘gi a¸cıktır.
C dilinde yapılan standartla¸sma ¸calı¸smaları sonucunda olu¸san
ANSI C standardı, hem C dilinin kurallarını belirler, hem de bir
C geli¸stirme ortamında bulunması zorunlu olan standart
kitaplıkları ve bu kitaplıklarda yer alacak yordamları tanımlar.
Uluslararası Standartlar Organizasyonu’nun (ISO) C++ dili
i¸cin hazırladı˘gı ISO-C++ standardı da son yıllarda yazılmı¸s
b¨
ut¨
un C/C++ geli¸stirme ortamları i¸cin en temel kaynaklardan
birini olu¸sturmaktadır.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Standartlar
Di˘ger ¨onemli bir standart olan POSIX standardı ise
programlama dili ile i¸sletim sistemi arasındaki ba˘glantıları
belirler.
¨ gin dosya silmek, dosya adı de˘
Orne˘
gi¸stirmek, sistemdeki ba¸ska
bir programla haberle¸smek gibi i¸slemler i¸cin gereken yordamlar
bu standartta yer alırlar.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Standartlar
Yine de sık¸ca gereksinim duyulan b¨
ut¨
un i¸slemler i¸cin b¨
ut¨
un
kitaplıklarda bir standart hen¨
uz sa˘
glanamamı¸stır.
¨ gin grafik bir ara y¨
Orne˘
uze sahip uygulamalardaki grafik
i¸slemlerini yapacak kitaplıklar standartla¸stırılmamı¸s
oldu˘gundan ¸ce¸sitli firma ve kurumlar bu i¸slemleri yapan farklı
kitaplıklar geli¸stirmi¸slerdir.
Dolayısıyla bu kitaplıklar kullanılarak yazılan programlar tam
anlamıyla ta¸sınabilir olmamakta, yalnızca bu kitaplı˘gın
destekledi˘gi ortamlara ta¸sınabilmektedir.
Son zamanlarda farklı i¸sletim sistemlerinde ¸calı¸sabilen grafik
kitaplıkları yaygınla¸stı˘
gı i¸cin do˘
gru ara¸clar se¸cildi˘ginde bu
sorunun da u
¨stesinden gelinebilmektedir.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Derleme A¸samaları
Kaynak koddan u
¨retilecek olan ¸calı¸stırılabilir makine kodunda
hem programcının kendi yazdı˘
gı yordamların, hem de
yararlandı˘gı kitaplık yordamlarının makine koduna ¸cevrilmi¸s
hallerinin bulunması gerekir.
Bu nedenle, kaynak kodunun makine koduna ¸cevrilmesi iki
a¸samada ger¸cekle¸sir.
Figure: Tek kaynak kodlu projelerin derleme a¸samaları.
C Programlama
G˙IR˙IS
¸
Program Geli¸stirme
Derleme A¸samaları
Derleme:
˙Ilk a¸samada kaynak kodu derlenerek bir ara koda d¨on¨
u¸st¨
ur¨
ul¨
ur.
Bu kod, kullanıcının yazdı˘
gı yordamların makina kodu
kar¸sılıklarını i¸ceren bir dosyadır.
Ancak, programcının kullanmı¸s oldu˘
gu kitaplık yordamlarını
i¸cermedi˘ginden hen¨
uz ¸calı¸stırılabilir durumda de˘gildir.
Ba˘
glama:
˙Ikinci a¸samada ara kod ile programcının kullandı˘gı kitaplık
yordamları arasında ba˘
glantılar kurulur ve ¸calı¸stırılabilir dosya
u
¨retilir.
S¨ozgelimi, programcı karek¨
ok alma i¸cin matematik
kitaplı˘gındaki bir yordamı kullandıysa, ba˘
glayıcı ara kodda
karek¨ok yordamının kullanıldı˘
gı yerlerde gerekli d¨
uzenlemeleri
yapar.
Download

C Programlama - Alper BAYRAK - Abant İzzet Baysal Üniversitesi