You are on page 1of 142

1

PROGRAMLAMAYA GR
Blm 1





1.1. GR

Bilgi dnyasnda youn bir ekilde kullandmz bilgisayarlar ile
ortaya kan programlar gnlk hayatta biz insanlarn ilerinde byk
kolaylklar salamaktadrlar. Al-veri merkezlerindeki kasiyerlerin
kulland paket programlar, ticari ve sanayi alanlardaki makinelerin
bilgisayar destekli kullanlan programlar, eitim alanlarnda kullanlan
otomasyonlar ve bilgisayarlarn kullanld her alanda sayamadmz
bir ok programlar bilgisayar programclar tarafndan programlama
dilleri kullanlarak yazlrlar. Otomasyon yazlmlar, bir matematiksel
ilemin veya bilimsel bir hesaplamann bilgisayarla zlmesi hzl,
daha kolay ve doru yaplmasn salar.
Programlama dilleri zaman ierisinde gelimi, yeni versiyonlar ile
deimi, kaybolmu veya yenileri kmtr. Bu nedenle programlama
bilgisini asla bir programlama diline bal tutmamak gerekir. Eer
programlama mant olduka iyi geliirse, algoritmalar kolay kurup
alglayarak, ok karmak sorunlar zerinde fikir yrtlp zm
retilebilir. Daha sonra da bilinen uygun bir programlama dilinin
formatna uygun yazmak gerekecektir. Programlama temeli ve
mant kavranldktan sonra, ounlukla 1-2 hafta gibi bir srede bir
programlama dilini orta dzeyde renilebilir.


2
BLM -1- PROGRAMLAMAYA GR



Blmn Genel Amac: Programlamay genel olarak tanma ve programlama mantn
kavrayarak, algoritma ve ak diyagramlarn kullanma ve bunlar aklama.


Blmn Davransal Amalar: Kitabnzn bu blmn baaryla bitirip, uygulamalar
yapp, deerlendirme sorularna doru cevap verdiiniz taktirde, blm sonunda;

Program kavramn aklamanz,
Programlama kavramn aklamanz,
Programlama trlerini aklamanz,
Program gelitirme srecindeki admlar ve ilevlerini aklamanz,
Algoritma kavramn aklamanz ve algoritmalar oluturmanz,
Programlarn ak diyagramn izmeniz,
Ak diyagramlarndaki ekilleri ve grevlerini aklamanz,
Programlama dillerini tanmanz ve temel ilevlerini renmeniz,
Bir program yazarken kullanacanz dili bilmeniz beklenmektedir.

Deerlendirme: Modl sonundaki uygulamalar yapmanz sonular uygulama raporu ile
karlatrmanz ve deerlendirme sorularna en az % 75 dzeyinde doru cevap
verebilmeniz gerekmektedir.
3
1.2. PROGRAMLAMA NEDR?
Bilgisayarlarn istee uygun zel ilemler yapmas iin programlanmas gerekir. rnein,
bir irkette kullanlan stok uygulamas, sipari uygulamas yada deiik i takipleri,
hastane otomasyonlar yada eitim kurumlarnn kulland renci otomasyonlar gibi.
Programlamaya ok fazla rnek vermek mmkndr.

Program : Gnlk hayattaki bir sorunu bilgisayarla zmek, rutin ilemleri kolaylatrmak
iin bilgisayarlarn istee uygun olarak zel bir takm ilemleri gerekletirmesi iin
programlanmas gerekmektedir. te yazlan bu yazlmlar ile ortaya kan rn bir
programdr. Bilgisayar oyunu, muhasebe ilem programlar ve ticari irketlerde kullanlan
paket programlar birer programdr.

Programlama Dili : Bilgisayarda zlecek bir sorun iin zmn bilgisayara adm adm
yazlmasn salayan biimsel kurallar olan ve bu kurallara sk skya bamll
gerektiren bir tanmlar kmesidir. Yani, programc ile bilgisayar arasnda bir tercman
durumundadr.
1.3. PROGRAMLAMANIN TARH
Olduka eskiye dayanan programlamann tarihine baktmzda fazla kodlanm makine
komutlar bulunmamaktayd. 1940 1950 yllar arasnda fazla kodlanm makine
komutlaryla yazlan programlar, programclar asndan olduka zordu. Hzn dk
olmas, bellek yetersizlii, ilem saysnn az olmas bilgisayarn kullanm alann snrlyor
ve ilemler basit bir uygulamadan ileri gidemiyordu. Tabi bu durum mikroilemciler ile
alakal idi. Rekabet halinde olan firmalar ilemcilerin mimarilerini gelitirip hzlarn
arttrdka, ilemcilerin ileyebilecei komut saylar artm ve komut setleri daha kullanl
hale gelmitir.

lk programlar makine dili ile hazrlanyordu. Makine dili de bir programlama dilidir ama
makine dili ile program yazmak ok zahmetli bir itir. nk makine dilinde sfrlar (0) ve
birler (1) vardr. Yani ilemlerde DORU (1) yada YANLI (0) durumlarna gre hareket
edilmektedir. Ayrca, makine dili programlar anlalmas zor olan ve tamamyla donanma
hitap eden programlardr. Gnmze baktmzda gelitirilen st dzey programlama
dillerini kullanrken makine dilini bilmeye bile gerek yoktur.

Makine diline yakn Assembly programlama dilinde mikroilemcilerin anlayaca assebly
kodlar kullanlr. Bu ham eklinde bulunan komutlar (MOV, ADD, PUSH gibi)
mikroilemcinin belli bir ilevi yerine getirmesini salamaktadr. Bu komutlara mnemonic
ad verilir. st seviye programlama dillerinin gelitirilmesiyle programlar daha anlalabilir
komutlarla yazlmaya balanmtr (Print, Read, Display, Circle, Get, vb). 1980li yllarda
st seviye programlama dilleri yaygnlaarak, programlar belli bir dilin yaps iinde
tasarlanm ve yazlmtr.

4
1.4. PROGRAMLAMA TRLER
1.4.1 Yapsal Programlama
Programlama dilleriyle ilgilenenler kod yazmaya genellikle kk ve basit kodlar yazarak
balarlar. Bu kodlar sadece bir ana (main) bloundan oluur. Bu blok ierisindeki komut
ve deyimler programn tmnde tanml olan global verileri kullanrlar.









ekil 1.1 Yapsal olmayan programlama

ekilde 1.1de grld gibi yapsal olmayan programlama teknii kullanlarak yazlan
kodlarda, ana program blou, global olarak tanmlanm veriler zerinde ilem yrtr.

Bu programlama teknii olduka byk programlarda byk dezavantajlara sahiptir.
rnein ayn komut ve deyimler bu teknikte yazlan kodlar ierisinde defalarca
tekrarlanmak zorunda kalabilir. Ayn zamanda bu teknikte yazlan kodlarn okunabilirlii
ve anlalabilirlii yazlan kod miktar arttka zorlar. Dolaysyla kod yazarken hata
yapma olasl fazladr ve hata ayklama (debugging) ilemi olduka zordur. Bu nedenle
de doal olarak yazlan programn gvenirlii de dk olacaktr.

Yapsal programa tekniinde ise altprogramlar (procedures) ve fonksiyonlar (functions)
kullanlr. Bylece program aknn kontrolnde byk kolaylklar salanm olur.


















ekil 1.2. Alt programlarn arlmas

ana program alt program
Ana program
Veri
program
5
ekil 1.2deki program ak esnasnda, ana program ierisinden altprogramlar arlyor.
Bu altprogram altrldktan sonra, program ak tekrar geri dnecek ve programn
ileyii kald noktadan devam edecektir. Yapsal programlama tekniinde kod ierisinde
ayn altprogram defalarca arlabilir. Bylece gereksiz kod tekrarda ortadan kalkm
olur.












ekil 1.3. Yapsal Programlama Teknii


1.4.2 Modler Programlama
Modler programlama tekniinde belli altprogramlar ayr ayr modller iinde
gruplandrlr. Her modl ierinde ana program iinde tanml global deikenler geerlidir.
Ayn zamanda her modl kendi verisine de sahiptir.





















ekil 1.4. Modler Programlama


Ana program
veri
program
alt program

alt program

alt program

Ana program
veri
program
alt program

alt program

alt program

modl
1

veri + veri
1

modl
2

veri + veri
2



6

1.4.3 Nesne Tabanl Programlama
Nesne tabanl programlama (Object-Oriented Programming, OOP) dilleri 1980li yllarda
C++ ile ortaya kmtr. Nesneye ynelik programlama, programcnn kendi snfn ve
nesnesini oluturup bunun zerinde ilemler yapmasna olanak salar. Bu programlama
sisteminin zor olmas nedeniyle, ok saydaki nesneler nceden programcya hazr bir
ekilde sunulur. Gnmzdeki programclar ise nesneye ynelik olan ve Visual zellikler
ieren srmleri kullanmaktadr. Visual C++, C++ Builder, Delphi, Java, Visual Basic vb.
gibi rnekler saylabilir.

Bu teknikte nesneler birbirlerine mesaj gndererek etkileim iinde bulunurlar. Nesne
ynelimli programlama tekniinde ak bir biimde altprogramlar armak yerine, direkt
olarak ilgili nesneye bir mesaj gnderilir. Nesne kendine gelen mesaj alr ve ncelikle
nesnenin bir rneini (kopyasn) oluturur. Bu kopya gerekli ilemleri yaptktan sonra
kendini yok eder. Tm bu ilemlerden nesnenin kendisi sorumludur.





















ekil 1.5. Nesneye Ynelik Programlama
1.4.4. Olay Temelli Programlama
Bilgisayarda bir uygulamay kullanrken, ekran zerinde bir nesnenin hareket ettirilmesi
veya bir tua baslarak dmelerin seilmesi ilemleri bir olaya dayanr. Olay temelli
programlama (Event Driven Programmming, EDP) kullanclarn yapacaklar ilemlere
gre programn hareket etmesi temeline dayanr. Daha nceki programlarda ekrana
gelen menlerde daha ok klavyenin fonksiyon ve yn tular aktif olarak kullanlyordu.
Olay temelli programlamada farenin menler ve pencereler zerinde olduka yaygn
olarak kullanlmas salanmtr. Bu ekilde ilemler daha basit, fonksiyonel ve daha
kullanldr.

nesne
1
veri
program
nesne
3
veri

nesne
2
veri

nesne
4
veri

7
1.5. PROGRAM GELTRME SREC
1.5.1. yi Bir Programn Nitelikleri
Yazlan bilgisayar programlarnn basit bir ilevi yerine getirmesi ona iyi bir program
zellii kazandrmaz. Yazlmas dnlen bir programn bir ok adan belli niteliklere
sahip olmas gerekmektedir. Bu nitelikleri u ekilde sralamak mmkndr.
- Estetik olarak grsellii n plana kmaldr.
- Kullanc asndan kullanm kolay olmaldr.
- lem ve hesaplamalar doru yapmaldr.
- Hzl almaldr.
- Kolayca deitirilebilmeli ve gncellenebilmelidir.
- Fazla kod yazlmadan etkin bir kodlamaya sahip olmaldr.
- Yaygn kullanlan iletim sistemlerinde alabilmelidir.
- Byk programlar iin oklu kullanc destei olmaldr.
- Ticari yazlan programlar ise iyi belgelenerek, lisansl satlmaldr.
1.5.2. Program Tasarlama
Bir yazlm gelitirirken takip edilmesi gereken admlar unlardr:
1. Gereksinimlerin belirlenmesi : Problemin tanm verilir.
2. Analiz : Problemin zm iin gerekli tm girdi ve ktlar analiz edilmelidir.
3. Dizayn : Problemin zmnde kullanlacak uygun algoritmann adm adm
tanmlanmas yaplmaldr.
4. Ak Diyagram: Algoritmaya gre uygun ak diyagram izilmelidir.
5. Kod Yazm : Algoritmann herhangi bir programlama dilinde yazlarak kaynak
dosyann hazrlanmas gerekir.
6. Test : Bu basamakta ise yazlan programn blmleri ve tamam alr halde test
edilir.
7. Dorulama : Programn rnek girdilerle doru kt rettii gzlenmelidir.
8. Bakm : Yazlan programda bulunan hatalar ayklanr veya gerekli gncellemeler
yaplr.
9. Belgeleme : Yazlan program iin belgeleme yaplarak, toplu oaltmalara kar
engelleme konulur.

1.5.3. Arabirim Gelitirme ve Programn Grn
Nesne tabanl programlama dillerine baktmzda iyi bir arabirim gelitirmek iin bir ok
nesnenin var olduu grlmektedir. Ara ubuklar, durum ubuklar, menler, iletiim
kutular gibi uygulamalar eklenebilir. Ayrca, fare ve klavye ilemlerini eklemek iin ayrca
ek bir blm yazmaya gerek yoktur.

Program yazma ve arabirim gelitirme ilemi, iyi bir programcln yan sra byk bir
sanatta gerektirir. Program yapmak bir sanattr ifadesini kullanmak pek de yanl
olmayacaktr. Arabirim gelitirme ileminde programn kullanlabilirlii, sadelii,
uyumluluu ve grafik deerleri dikkate alnarak hazrlanmaldr. zellikle nesne tabanl
programlama trlerini kullanrken grsellik byk lde n plana kmaktadr.
Renklendirme, yaz tiplerinin biimleri, glgeleme, parlaklk, menlerin resim
programlaryla sslenmesi gibi konular da dikkate almak gerekmektedir.


8
1.6 ALGORTMALAR ve AKI DYAGRAMLARI
1.6.1 Algoritma Nedir?
Algoritma; Belirli bir grevi yerine getiren sonlu saydaki ilemler dizisidir. Baka bir
deyile; Bir sorunu zebilmek iin gerekli olan sral mantksal admlarn tmne denir.
Bu kavram M.S. 9.yy da, ranl Musaolu Horzumlu Mehmetin (Alharezmi adn araplar
takmtr) problemlerin zm iin genel kurallar oluturmas ile ortaya km olup.
Algoritma Alharezminin Latince okunuudur.

Peki bilgisayarda zlecek bir sorunu nasl algoritma ile ifade ederiz? Bunun iin
ncelikle bir sorun tanmlayalm. Balang ta basit olmas iin yle bir problem zerinde
dnelim: Bilgisayara verilecek iki sayy toplayp sonucu ekrana yazacak bir program
iin algoritma gelitirmek isteyelim. Sorun son derece basit ancak sistem tasarmnn net
yaplabilmesi iin sorun hakknda anlalamayan tm belirsiz noktalar akla
kavuturulmaldr. rnein saylar bilgisayara nereden verilecek, Klavye, Dosya veya
belki baka bir ortam. Bu ve buna benzer soru ve tereddtleriniz varsa sorunun sahibine
bunlar sormal ve sistem analizi yapmalsnz.

Sonra bulacamz zm algoritma haline dntrebiliriz.

1. BALA
2. A saysn oku
3. B saysn oku
4. TOPLAM=A + B ilemini yap
5. TOPLAM deerini ekrana yaz
6. SON

Bir baka rnek; Klavyeden girilecek iki saydan byk olanndan kk olann karp
sonucu ekrana yazacak program iin bir algoritma gelitirelim.

1. BALA
2. A saysn oku
3. B saysn oku
4. Eer A byktr B ise SONUC=A-B deilse SONUC=B-A
5. SONUC deerini ekrana yaz
6. SON

Bu algoritmalar olduka basit algoritmalar olup algoritma kavramnn yerlemesini
salayan rneklerdir.

Algoritmalar doal dille yazlabilecei iin fazlaca biimsel deildir. Algoritmalar belli bir
kurallar btnn ifade ettii iin bir algoritmada aadaki ifadelerin mutlaka
dorulanmas gereklidir;

- Netlik
- Etkinlik
- Sonluluk
- Giri/k Bilgileri
9
NETLK
Algoritmada bulunan anlatm satrlar kesin olmaldr. Kesin olmayan anlatmlar
algoritmada bulunmamaldr. Baka bir deyile her ilem (komut) ak olmal ve farkl
anlamlar iermemelidir.

rnek;

zx + y
saysay + 1

Bu rnekte srasyla; x + y ileminin sonucu zye tanmaktadr. te yandan say + 1
ileminin sonunda elde edilen deer yeni say deeri olmaktadr.
ETKNLK
Algoritmada, her komut, bir kiinin kalem ve kat ile yrtebilecei kadar basit olmaldr.
Algoritmada tekrar anlatmlar olmamaldr. Bir algoritma bnyesinde ne kadar az tekrar
varsa algoritmann etkinlii o kadar artar. Kanlmaz tekrarlarda ise bir algoritmay etkin
hale getirebilmek iin; tekrar anlatmlarn alt algoritma yaplmas gerekmektedir.
SONLULUK
Her trl olaslk iin algoritma sonlu admda bitmelidir. Her algoritmann bir biti ya da
geriye dn noktas olmaldr. Ana algoritmada biti noktas END, alt algoritmalarda ise
geriye dn noktas RETURN komutlar ile salanr. letim sistemleri gibi baz
programlar istisnai olarak sonsuza dek alrlar.
GR/IKI BLGS
Bir algoritmada mutlaka Giri ve k bilgisi olmaldr.Giri bilgisi, algoritmaya dardan
bilgi aktarmn, k bilgisi ise, algoritma iinde oluan sonularn algoritma dna
kartlabilmesi ilemidir.

Genelde Giri ve k ilemleri iin Read ve Write (veya Print) kullanlr. Bir bilginin
okunabilmesi iin deiken kullanlr.

Read Deiken Deiken ile belirtilene dardan deer oku.
Write Deiken Deiken ile belirtilendeki deeri darya yaz.

RNEKLER
rnek 1.1:
ki saynn toplamn yazan bir algoritma
zm:
1. lk sayy oku
2. kinci sayy oku
3. Saylar topla
4. Sonucu grntle.

10

rnek 1.2:
Kullancnn girdii 4 saynn ortalamasn hesaplayp yazdran algoritma
zm:
1. Bala
2. Saya = 0 ve Toplam = 0
3. Sayy Oku
4. Sayy Toplama ekle
5. Saya 1 arttr
6. Saya < 4 ise 3. adma git
7. Ortalamay hesapla (Ortalama = Toplam / 4)
8. Ortalamay yazdr
9. Son

rnek 1.3:
20den 50ye kadar olan saylarn toplamn bulan algoritma
zm:
1. Bala
2. S=20 ve T=0 ata. (Say=20 T=0 ile bala)
3. T=T+S (Tye sayy ekle Tyi gster.)
4. S=S+1 (Sayy bir artr.)
5. S<50 ise A3ye git. (Eer say 50den kk ise Adm 3ye git)
6. Tyi gster. (Tnin deerini gster.)
7. Son

rnek 1.4:
Klavyeden girilen iki saydan en byn bulup gsteren algoritma.
zm:
1. Bala
2. S1=? S2=? (lk sayy gir ;kinci sayy gir.)
3. S1>S2 ise git Adm 5 (Say 1 say 2den kkse Adm 5e git.)
4. S2>S1 ise git Adm 6 (Say 2 say 1den kkse Adm 6e git.)
5. S1i gster git Adm 7 (say 1 deerini gster ve ilemi durdur)
6. S2yi gster. (Say 2 deerini gster)
7. Dur


rnek 1.5:
Klavyeden girilen saydan en byn bulup gsteren algoritma
zm:
1. Bala
2. X, Y, Z deerlerini oku
3. EB = X
4. Y > EB ise EB = Y
5. Z > EB ise EB = Z
6. EB yi yazdr
7. Son

rnek 1.6:
11
1den 100e kadar olan saylarn toplamn veren algoritma.
zm:
1. Bala
2. Toplam T, saylar da i diye arlsn
3. Balangta Tnin deeri 0 ve inin deeri 1 olsun
4. inin deerini Tye ekle
5. inin deerini 1 arttr
6. Eer inin deeri 100den byk deil ise 3. adma git
7. Tnin deerini yaz
8. Son

Algoritmalarn yazm dili deiik olabilir. Gnlk konuma diline yakn bir dil olabilecei
gibi simgelere dayal da olabilir. Ak emas eskiden beri kullanla gelen bir yapdr.
Algoritmay yazarken farkl anlamlar tayan deiik ekildeki kutulardan (Ak emalar)
yararlanlr. Yine ayn ama iin kullanlan programlama diline yakn bir (szde kod =
pseudo code) dil , bu kendimize zg de olabilir, kullanlabilir.
Ayn algoritmay aadaki gibi yazabiliriz.
1. Bala
2. T=0 ve i=0
3. inin deerini Tye ekle
4. iyi 1 arttr
5. i<101 ise 2.adma git
6. Tnin deerini yaz
7. Son


rnek 1.7:
ki tamsaynn arpma ilemini sadece toplama ilemi kullanarak gerekletiren algoritma.
zm;
Girdi : iki tamsay
kt : saylarn arpm
1. Bala
2. a ve b saylarn oku
3. c =0
4. b>0 olduu srece tekrarla
4.2. c=c + a
4.3. b = b-1
5. c deerini yaz
6. Son

rnek 1.8:
Bir tamsaynn faktriyelini hesaplayan algoritma
zm:
Girdi : Bir tamsay
kt : Saynn Faktriyel
lgili forml: Faktriyel(n)=1*2*...*n
1. Bala
2. n deerini oku
3. F=1

12
4. n >1 olduu srece tekrarla
4.1. F=F*n
4.2. n= n-1
5. F deerini yaz
6. Son

rnek 1.9:
ki tamsaynn blme ilemini sadece karma ilemi kullanarak yapan algoritma (Blm
ve kalann ne olduu bulunacak).
zm;
1. Bala
2. a ve b deerlerini oku
3. m=0
4. a>=b olduu srece tekrarla
4.1 a=a-b
4.2 m = m + 1
5. kalan a ve blm m yi yaz
6. Son

rnek 1.10:
100 tane sayy okuyup, ortalamasn bulan algoritma
zm;
1. Bala
2. T=0, i=0
3. i<101 olduu srece tekrarla
3.1 m deerini oku
3.2 T = T + m
3.3 i = i + 1
4. T = T / 100
5. Ortalama T yi yaz
6. Son

1.6.2 Ak Diyagramlar
Ak Diyagram; bir algoritmann belirli bir anlam olan ekillerle ifade edilmesidir. nceki
konuda eer dikkat edildiyse algoritmalarn, doal dille yazld iin herkes tarafndan
anlalamayabilir ya da istenmese de baka anlamlar karlabilir oluudur. Ancak ak
diyagramlarnda her bir ekil standart belli bir anlam tad iin farkl yorumlanp
anlalmas olas deildir. Bir algoritmann ifade edilebilmesi iin sklkla kullanlan ekiller
ve anlamlar unlardr:
13

Bir algoritmann balad veya bittii konumu gsterir.

Bir algoritmada aritmetik ilem yaplmasn salayan
ekildir. Bu drtgen kutu ierisine yaplmak istenen
ilem yazlr.

Algoritmada bir bilginin ekrana yazlaca konumu
gsteren ekildir. Ekrana yazlacak ifade ya da
deiken bu ekil ierisine yazlr.

Bir algoritmada baka bir yerde tanmlanm blokun
yerletii konumu gsteren ekildir. Kutu ierisine
blokun ad yazlabilir.

Klavyeden Bilgisayara bilgi girilecek konumu belirten
ekildir. Girilecek bilginin hangi deikene okunacan
kutu ierisine yazabilirsiniz.

Giri - k komutunun kullanlaca yeri belirler. Kutu
ierisine hangi deiken veya deikenlere okuma m?
yoksa yazma m? yaplacan belirtmeniz gerekir

Bilginin Yazcya yazlaca konumu gsteren ekildir.

14

Bir algoritmann birden fazla alana yaylmas
durumunda balant noktalarn gsteren ekildir. Tek
girili veya tek kl olarak kullanlrlar.

Bir ilemin belli bir sayda veya belli bir koul doru
olduu srece tekrar edilmesini salayan dng
komutunu gsteren ekildir. Bu dngde altgen
ierisine ya koul yada dngnn balang, adm ve
sonlanma deerlerini belirtebilirsiniz. DNG olarak
belirlenen blokta da tekrar edilmek istenen komutlar
yer almaktadr.

Bir algoritmada bir kararn verilmesini ve bu karara
gre iki seenekten birinin uygulanmasn salayan
ekildir. burada ekenar drtgen ierisine kontrol
edilecek mantksal koul yazlr. Program ak
srasnda koulun doru olmas durumunda "Evet"
yazlan ksma Yanl olmas durumunda "Hayr"
yazlan ksma saplr. Tek girili ve ift kl bir
ekildir.
Bu ekiller kullanlarak algoritma ile oluturulan zmler ak diyagramlarna
dntrlr. Bu diyagramlar herkes tarafndan anlalabilir ve doru olarak
yorumlanabilir bir zellik arz ederler.

imdi ak diyagramlarna birka rnek inceleyelim;

rnek 1.11:
ncelikle pek ok kez rnek olarak verilen ak diyagramlarnn banda gelen bir
problemi yapalm. Burada dardan girilen iki sayy yer deitirip kt olarak veren
algoritmann ak diyagramn yapalm.
15
BALA
X,Y
Temp=X
X=Y
Y=Temp
X,Y
SON



rnek 1.12:
kinci olarak dardan girilecek bir N says iin 1 den Nye kadar olan saylarn toplamn
alp kt olarak veren algoritmay ak diyagram olarak ifade edelim;


16
BALA
N
Toplam=0
i=1
Toplam
SON
N>1 ?
Evet
Hayr
Toplam=Toplam+i
i=i+1
i>N ?
Evet
Hayr


rnek 1.13:
imdi de dardan girilen iki sayy bykten ke doru sralayan programn ak
diyagramn izelim;

17
BALA
X,Y
X ve Y
SON
Hayr
Y,X X,Y
X>Y ?
X<Y ?
Hayr
Evet
Evet





rnek 1.14:
Bu rnekte dardan girilen 5 adet saynn aritmetik ortalamasn alp kt olarak veren
ak diyagram grlyor;


18
BALA
Toplam=0
i=1
Dizi[i]
i=i+1
i>5 ?
i=1
Toplam=Toplam+Dizi[i]
i=i+1
i>5 ?
Ortalma=Ortalama/5
Ortalama
SON
Evet
Evet
Hayr
Hayr



rnek 1.15:
Son rneimizde dardan girilen bir saynn Nninci kuvvetini alan bir ak diyagram
grlyor;

19
BALA
Sayi
N
Sonuc=1
i=1
Sonuc
SON
Sonuc=Sonuc*Sayi
i=i+1
i>N ?
Evet
Hayr



1.7 PROGRAMLAMA DLLER
Programlama Dili bilgisayarda zlecek bir sorun iin zmn bilgisayara adm adm
yazlmasn salayan biimsel kurallar olan ve bu kurallara sk skya bamll
gerektiren bir tanmlar kmesidir.


20
Belki daha ksa bir tanm ile sizinle bilgisayar arasnda bir tercmandr demek doru olur.
Bir sorun zlecei zaman ncelikle iyice anlalm olmaldr. Sonra bu sorunu
zebilecek bir zm zihinsel olarak hazrlanr. Bu zm bilgisayara uygun bir zm
olmaldr. yle ki her zm bilgisayarda uygulanamaz. nk her zmn takip ettii
yol yeteri kadar basit olmayabilir. retilen zm son derece basit admlarla
anlatlabilmelidir. Algoritma kavramn hatrlaynz. Bu admlar alt alta yazlmak suretiyle
oluturulan zm bilgisayar iin uygundur. Ancak ihtiya var ise bu admlar ak
diyagramlarna evrilebilir. Algoritmalar doal bir dil ile yazlr ve sk skya kurallar
bulunmaz. Anlalmasnn kolay olmas yeterlidir. Ak diyagramlarnda belirlenmi
semboller yer alr ve bu semboller tm dnyada standarttr. Ksmen biimsel olan bu
diyagramlar, sorunun zmn daha evrensel bir dille ifade eder.

Son adm olarak, ak diyagramlar veya algoritma ile elde edilen zmn bir
programlama dili ile bilgisayar ortamna aktarlmas gerekir. Programlama dili son derece
standart tanmlar ierir ve bir program yazarken bu tanmlardan bir an iin bile
uzaklalamaz. O nedenle de bir program parasndan bakalarnn baka eyler
anlamas mmkn deildir. Yazlan bu programlar bir derleyici vastas ile Makine diline
evrilir varsa hatalarn bulunmasn salar ve kullanc bu hatalar dzeltir.
1.7.1 Programlama Dillerinin Baz zellikleri
fade gc: Dili kullanrken gerek ifadelerin kullanlmas ile ilgilidir. rnein bir
matematiki ve kimyac kodlama yaparken kulland iaretleri ve terimleri kullanmak
isteyecektir.

Veri Trleri ve Yaplar: n tanml deiken trlerinin fazla ve ihtiyalar karlamas, bir
dilden beklenen bir zelliktir.

Giri - k Kolayl: Dosyalara erime, karmak ilemler yapma imkanlarn kasteden
bu zellik, Cde pek gelimemitir. zel ktphaneler gerektirir. Veritaban programlama
dilleri bu konuda olduka gelimitir.

Tanabilirlik: Bir sistemde yazlm kaynak kodun, baka sistemlerde de sorunsuz
derlenebilmesidir. Genellikle dilin seviyesi azaldka tanabilirlik azalr. C dili, orta
seviyelidir ancak tanabilirlik bakmndan stndr.

Alt Programlanabilirlik: Programn daha ufak programcklardan oluturulmasdr.
Bylece kaynak kod ksalr, alglanmas glenir, test olanaklar artar, kodun
gncelletirmesi ve yeniden kullanlmas kolaylar.

Verimlilik: Derlenen kodun hzl ve sorunsuz alabilmesidir.

Okunabilirlik: Kaynak kodun hzl biimde anlalabilmesidir. yi bir programcnn yazd
kaynak kod, ok iyi ilev gren ama kark bir koddan ziyade ak ve anlalabilir
biimdedir. Ancak bu lt dile de baldr.

Esneklik: Dilin, programcy kstlamamasdr. Ancak esnek bir dil, daha az hata
vermesine karn hata oluma riski daha fazladr.

21
renme Kolayl: Dilin konuma diline yaknl, komutlarnn sade ve anlalr olmas
gibi ltler o dilin renilmesini etkiler.

Genellik: Bir dilin herhangi bir alanda kullanlabilmesidir. Baz diller sadece mhendislik
alanlarnda kullanlmasna karn, C genel amal bir dildir.

Yapsal Programlanabilirlik: Programn bloklar halinde yazlmas, atlamasz ak ve
altprogramlarn kullanlmas anlamlarna gelen bir programlama tekniidir. Kodun
okunabilirliini ve verimini artrr.

Nesne Ynelimlilik: Yeni diller ve eski dillerin yeni uyarlamalar artk nesne ynelimli
olmaya baladlar. Verilerin birbirinden daha kesin izgilerle ayrlmasn ngren bir
programlama tekniidir.
1.7.2 Programlama Dillerinin Snflandrlmas
Programlama dilleri, makine dilinde programlama ok zor olduu iin gelitirilmitir.
Programlama dilleri kendi aralarnda snflara ayrlmlardr. nsann en zor
renebilecei, anlayabilecei yani 1100101 gibi makina kodlarna yakn diller en dk
seviyeli (low level) programlama dilleri, insann en kolay anlayp kullanabilecei ve insan
diline yakn zellikler gsteren diller ise en yksek seviyeli (high level) programlama
dilleridir. Yazlan kodlar, zaten makine dilinde deilse, makine diline evirip komaya
hazr hale getirmek, o dilin derleyicisinin veya yorumlaycsnn grevidir. Bu diller
seviyelerine gre aadaki gibi snflandrlabilir;

(renilmesi Kolay, Daha Yava)
ok Yksek Seviyeli Diller (nsana en yakn) FOXPRO, ACCESS, PARADOX,
VB...

Yksek Seviyeli Diller : PASCAL, FORTRAN, COBOL, BASIC...

Orta Seviyeli Diller : C ,C++, C# , Java ,ADA...

Dk Seviyeli Diller: Assembly...

Makine Dilleri (Makineye en yakn diller. 0 ve 1lerin dizilimlerinden oluurlar..)
(renilmesi Daha Zor, Daha Hzl)

Burada insana yakn demekteki kast, insann anlamasna uygun, anlaml szcklerle
kodlama yapmak, makineye yakn demekteki kast ise bilgisayarn alma mantna
uygun, ne yaplaca deil, nasl yaplacan kodlamaktr. Bir dilin seviyesi yksekse, o
dili renmek kolaydr, kaynak kod ksadr ama oluacak altrlabilir dosya uzundur,
uzun ve karmak ilemler ksa kodlarla gerekletirilebilir; Alak seviyeli dillerde ise
programc, makineye daha hakimdir, sorumluluu daha fazladr, kod yazm uzun ve
zahmetlidir.

Programlama dillerinin kendi alanlar vardr ve her dil kendi brannda kullanld srece
baarl ve etkili kullanlm olur. Genel olarak programlama dilleri uygulama alanlarna
gre aadaki snflara ayrlabilir:


22
1. Bilimsel ve Mhendislik Alannda : niversitelerde ve bilimsel kurulularda
mhendislik veya matematik hesaplar iin kullanlrlar. Bu dillere Pascal, C, C++,
Java, Fortran gibi diller rnek olarak verilebilir.
2. Veritaban Kullanmnda : Genellikle personel kaytlar, stok veya depo denetimi
vb gibi veritaban gerektiren ilemlerde kullanlan dillerdir. Bu dillere DBase, Sql,
Foxpro, Paradox gibi diller rnek olarak verilebilir.
3. Sistem Programclnda : letim sistemlerinin ve sistem programlarnn
yazlmnda kullanlan dillerdir. rnek olarak C, C++, Java ve makina dilleri
verilebilir.
4. Genel Amal kullanm : eitli konularda uygulama gelitirmek iin kullanlan
dillere rnek olarak C, C++, Java, VB ve Pascal verebiliriz.
5. Yapay Zeka Kullanmnda: zellikle son zamanlarda popler olan yapa zeka
uygulamalarnda kullanlan dillerdir. rnek olarak Prolog, Lisp gibi diller verilebilir.

Son yllarda programlama dillerinde nesneye ynelik tasarmlar yaplm ve bu dillerin
ounun nesneye ynelik programlama yapabilen uyarlamalar kmtr. Nesneye
ynelik programlama, programcnn kendi snfn ve nesnesini oluturup bunun zerinde
ilemler yapmasna olanak salayan ve programlama dillerinin geldii son aamalardan
birisidir.

OOP (Object Oriented Programming) yani NYP (Nesneye Ynelik Programlama)nn
kullanlmasyla ve Visual (Grsel) programcln da gelimesi ile beraber ortaya olduka
gzel grnml ve kullanl programlar kmaya balamtr. Bu durum bilgisayar
programlarna olan ilgiyi bir hayli arttrm ve bu konulardaki aratrmalar hzlandrmtr.
Sonuta, pek ok dilin artk nesneye ynelik olan ve grsel zellikler ieren srmleri
kullanlmakta ve tercih edilmektedir. rnein: Visual C++, C++ Builder, Delphi, Kylix,
Java, Visual Basic vb. gibi diller.

nternetin de yaygnlamasyla programlama dillerine yeni zellikler eklenmi ve
nternette kullanlabilecek nitelikte grsel zellikli diller karlmtr. rnein web
sayfalarnn gsteriminde kullanlan HTML, kullancnn dikkatini eken, renkli ve hareketli
arabirimiyle her geen gn yeni ekler ile gelimektedir. JavaScript ve VBScript gibi script
diller HTMLye getirdikleri ek zelliklerle oka kullanlr olmutur. te yandan Asp, Php,
Perl vb. ile veri tabanlarn aktif kullanma sunma, sunucu tarafl aktif sayfalar hazrlama
olana elde edilmitir.

Uygulama programlarna, ticari programlara veya iletim sistemlerinin kullanmna ynelik
yazlm gelitirmek isteyen programclarn C, C++, Java, Delphi vb. gibi son zamanlarn
en popler dilleri zerinde almas ve en az bunlardan bir tanesini renmesi gerekir.
zellikle nternetin gelimesi ile birlikte programlama dillerinin, yaplacak ie veya
kullanlacak platforma gre deiik zellikler gsteren varyasyonlar kmtr. Bu
durumda web teknolojisini izleyen ve nternet zerinde yazlm gelitirmek isteyen bir
programcnn javascript, vbscript, HTML gibi dilleri de bilmesi ve bu konularda kendini
gelitirmesi de ayr bir gereklilik olmutur. Ska kullanlan programlama dilleri ksaca
zetlenirse;




23
C
Yapsal programlama dilleri arasndadr. renilmesi zaman almasna ramen olduka
kullanl ve esnek yaps ile adndan yllarca bahsettirmi, bilgisayar programclnn
temel dillerinden biridir. C ile bilgisayarnza bir sistem yazmaktan bir oyun yazmaya
kadar her trl ilem yaplabilir. Bu zellii sayesinde kullanm alan ok geni olan bir
dildir. Bu kitabn odaklanaca dilde bu olacaktr.

C++
Nesneye ynelik programlama yapabilen diller arasndadr. Cnin saydmz tm
zelliklerine ek olarak glendirilmi nesne ynetim zellii ile u anda bilgisayar
dnyasnn en ok kullanlan dillerinden biridir.

Pascal
Yapsal bir dildir, C diline benzerlik gsterir. renilmesinin kolay oluu ve genelde,
bilgisayar eitimi veren okullarda okutulan bir ders olmas sebebiyle kullanm alan daha
ok niversiteler ve bilimsel hesaplamalar yapan kurumlardr.

C#
Nesneye dayal bir programlama dilidir. C++n ve Javann pozitif ynlerini bnyesinde
birletirmi yeni bir dildir. Programcya internet uygulamalar ve yerel uygulamalar
yazmakta baz kolaylklar getirmitir. leriye dnk olarak Microsoft firmasnn Java
teknolojisine rakip olarak ortaya srd bir programlama dilidir ve Microsoftun bu
konulardaki (nternet uygulamalar) yelpazesini geniletmeye ynelik bir atlmdr.
Microsoft teknolojileri kullanacak programclarn C# renmeleri zamanla gerekecektir
ve ncelikle renilmeye balanmas da avantaj getirecei aktr.

Delphi
Pascal tabanl bir dil olup nesneye ynelik programlama yapabilme zellii tar.
reniminin kolay oluu ve genellikle niversitelerde Pascal eitiminin arlkl verilmesi
nedenleriyle ou bilgisayar programlama rencisinin tercih ettii bir dildir. Grsel
programlama zellii tar. u anda nternet zerinde en ok desteklenen ve zerine
bileen (component) gelitirilen dillerin banda yer alr. Geni bir kullanc kitlesi vardr.

Visual Basic
Basic tabanl bir dil olup renilmesi kolay, kullanm alan geni bir dildir. zellikle grsel
uygulamalarda projenin arabiriminin hzl yazlmasn salad iin genelde kullanc
arabirimi tasarmlarnda kullanlr. Kapsaml veya ok kullancl uygulamalarda
kullanlmaz. Kullanc says az olan veya ksa srede bitmesi gereken kk lekli
projelerde tercih edilir. Delphiden sonra youn olarak kullanlmaktadr

VB.NET
Nesneye dayal bir dildir. VisualBasic(VB) teki biok zellik bu dilde yeniden
yaplandrlarak deimitir. Yapsna baklrsa VB den ayr yeni bir dil gelitirilmi
denilebilir. Eklenen baz zellikler ile VB de yaplamayan birok ilem artk
yaplabilmektedir ve OOP nin zellikleri desteklenerek daha verimli kod yazmaya olanak
salanmtr. VB programclarnn VB.NETe geileri kolay olmayacak olsa da VB yerine
VB.NET kullanm gn getike artacaktr. VB.NET internet uygulamalarndan yerel
uygulamalara kadar kullanm imkan geni bir dildir.


24
Java
Ak olmak gerekirse, nternet programcl, esnek programlama mimarileri, OOP gibi
konularda sylenmesi gereken nemli bir nokta; Java dilinin, programlama dnyasna
getirdii nemli bir yeniliktir. Bu yenilik platformdan yani iletim sisteminden bamsz
olarak her sistemde alabilen programlarn yazlabilmesidir. leriye ynelik bir bak
as ile bakldnda cep bilgisayarlarnn, kablosuz cihazlarn, cep telefonlarnn sklkla
kullanlaca ve artk PC dneminin kapanmaya balad dnlrse birok cihazda
alabilecek programlarn yazlmasnn ne derece nemli olduu anlalabilir. Java, son
yllarda programlama dnyasna gelmi en iyi programlama aralarndan biridir ve yeni
kacak programlama dillerinin ou Javann birok zelliinden esinlenmektedir.

Java, nesneye ynelik dillerdendir. Son yllarda gelitirilmi bir dil olup modern ve yenliki
altyaps, grsel zellikleri ve srekli gelien ktphane (library) destei ile gn getike
kullanm artan bir dil olmutur. Java dili platform bamszl zellii ile hemen hemen
her alanda kullanlabilen esnek ve gl bir dildir.

Programlama dillerinin hepsini incelemeye imkan olmadndan burada ok kullanlan bir
ksm dilden bahsedildi. Her dilin kullanm amac ve ynelimi farkl olabilir nemli olan
hedeflediiniz konularda size yardmc olacak dili seip onunla almanzdr.

1.8 DEERLENDRME SORULARI
1. Bir program tasarlama aamalarn adm adm saynz.
2. yi bir program hangi nitelikleri tamaldr, belirterek aklaynz.
3. Girilen N adet saydan en byn ve en kn bulan algoritmay yaznz.
4. Tamsaylarda s alma ilemini gerekletiren algoritmay yaznz.
5. 1-100 arasnda tutulan bir sayy tahmin eden algoritmay yaznz.
6. Binom alm yapan algoritmay yaznz.
7. kinci dereceden 1 bilinmeyenli denklemin kklerini bulan algoritmay yaznz.
8. Bir dik genin girilen iki kenar deerine karlk 3. kenarn uzunluunu bulan
ak diyagramn iziniz.
9. Dardan girilen N elemanl bir dizide istenilen bir deeri arayan ve varsa kanc
deer olduunu bulan algoritmann ak diyagramn iziniz.
10. Dardan girilen N saysnn blenlerini bulup kt olarak veren algoritmann ak
diyagramn iziniz.
11. Girilen saynn tek mi yoksa ift mi olduunu bulan algoritmann ak diyagramn
iziniz.
12. Dardan girilen sayy yazya eviren algoritmann ak diyagramn iziniz.
13. Programlama Dillerinin zelliklerini aklaynz.
14. Programlama Dillerini seviyelerine gre snflandrnz.
15. Programlama Dillerini uygulama alanlarna gre snflandrnz.
25




C DLNN GENEL YAPISI
Blm 2





2.1. GR
Genel amal bir programlama dili olan C, esnek ve basit bir
programlama dilidir. Bu esnek yaps dilin mikro denetleyici
programlamasndan iletim sistemi yazmna, paket programlardan
bilimsel programlara kadar deiik tipteki uygulamalarda
kullanlmasna olanak salamaktadr. Bu dilin basitlii, oluturulan
kodun kkl ve st seviyelerden alt, assembly' ye yaklaan alt
seviyelere kadar programlama kodun yazlabilmesi, ak bir dil
olmas, her eit programlamada kullanlabilmesi, C' yi popler bir dil
yapmtr. Bu prog-ramlama dili gnmzde hemen hemen her
alanda tercih edilen ve esnek bir dil olmas nedeniyle bu kitapta C
programlama dili zerinde durulacaktr. C programlama dilini
anlatmadan nce ilk olarak C dilinin tarihi geliimi zerinde
durulacaktr.

26
BLM -2- C Dilinin Genel Yaps



Blmn Genel Amac: C dilini tanma ve genel yapsn renme


Blmn Davransal Amalar: Kitabnzn bu blmn baaryla bitirip, uygulamalar
yapp, deerlendirme sorularna doru cevap verdiiniz taktirde, blm sonunda;

C Dilinin Tarihi Geliimi
C Dilinin Avantaj ve Dezavantajlar
C Dilinin Temel Kavramlar
C Dilini Genel Program Yaps
C Dilindeki Temel Tanmlamalar bilmeniz beklenmektedir.

Deerlendirme: Modl sonundaki uygulamalar yapmanz sonular uygulama raporu ile
karlatrmanz ve deerlendirme sorularna en az % 75 dzeyinde doru cevap
verebilmeniz gerekmektedir.
27
2.2. C DLNN TARH GELM
Unix iletim sistemi ile C programlama dili bir birleriyle yakndan ilikilidir. Tarihleri 70 lerin
banda balar. Ve k noktas AT&T BELL LABORATUVAR nda Ken Thompson
tarafndan yazlan bir oyun programndan kaynaklanmaktadr. Thompson , yazd oyunu
bir PDP-7 bilgisayarnda kullanm ve kullanlan iletim sistemi (MULTICS) hi houna
gitmemitir ve bu iletim sisteminin basit ve kolay eklini yazmaya karar vermitir. Daha
sonra almalara ortak olan M. Ritchie ve Brain W. Kernighan tarafndan UNICS
(uniplexed Information and Compuing Service) ad verilen iletim sisteminin ilk hali
oluturuldu. Thompson ilk balarda BCPL programlama dilini kullanarak B programlama
dilini tasarlad daha sonra ise UNIX iletim sistemini daha kolay yazmak amacyla ise C
programlama dilini oluturdu ve UNIX iletim sistemini yeniden yazarak daha aktif, esnek
bir iletim sistemi ortaya kmtr. C programlama dili baz ufak tefek deiiklik, eklentiler
ve editrdeki baz kullanc hatalarn azaltmak iin yaplan dzenlemeler haricinde bu
tarihten beri olduu ekliyle kullanlmaktadr. Buda ortaya C dilinin zel olarak retilen bir
dil olmad ve ihtiyalardan doan bir dil olduu, grlmektedir.

2.3. C DLNN AVANTAJ VE DEZAVANTAJLARI
C dili hem st dzey hem de alt dzey programlamay destekleyen bir dil olarak
tasarlanmtr. Programc nceden hazrlanm temel fonksiyonlar kullanarak istedii
ilemleri rahatlkla kullanrken derleyici ve bu fonksiyonlarn anlam hakknda hibir ey
bilmez. Bu fonksiyonlar C programlama dilinin ktphanesini oluturmaktadr. C dili
program yazma aamasnda bu ktphanelerden faydalanr. Dolaysyla bu dile
eklenecek olan yeni ktphaneler C dilinin gcn arttracaktr. C programlama dili az
sayda anahtar szc ve gl ilem operatrlerini iermektedir. Dolaysyla C dilinin
renilmesi koyladr. C dilinde ilem operatrleri makine koduna dntrlrler buda C
dilinin hzl olmasn salamaktadr.
C dili programcnn bilgisayardan bamsz program yazmasna ve programn rahatlkla
baka sistemlere aktarlmasna olanak salayan bir dildir. Bu nedenle C programlama
dilinin ilk kullanld yer olan UNIX iletim sisteminden sonra dier sistemlerde de
kullanlmaya balanmtr.
C programlama dili programcy modler programlamaya tevik eder. Bunun iin eitli
bellek snflar eitli dzeylerde gizlilik salamaktadr. Modler programcln temeli
olan fonksiyonlar C dilinde olduka rahat bir ekilde kullanlmaktadr.
C dilinde yazlan programlarn dezavantajlarndan en nemlisi yazlan programn ierii
arttka ve karmaklatka programn takibinin de zorlamasdr. C dili Basic v.b diller
gibi yrtme zaman destei salamamaktadr ayrca derleyici ilem srasnda alt ifadeleri
ve argmanlarn hesaplanma sralarn deitirebilmektedir.
Gnmzde C dilinin bu dezavantajlarna ramen programcya olduka fazla avantaj
salamasndan dolay tercih edilen ve kullanlan bir dil halini almtr. Ayrca Windows
platformlarnn gelimesi ile birlikte grsel programcln geliimi hzlanmtr. Bununla
birlikte C de grsel ortama tanm ve Visual C olarak programclarn tercih ettii bir dil
halini almtr. Visual C dili, C dili ile temelde ayn fakat grsel ilevler iin ekstra ilevleri

28
bulunmaktadr. Ayrca C dili nesne tabal programlamaya da msait bir dildir ve nesne
tabanl C programlama dili olarak C++ dili gelitirilmitir.
2.4. TEMEL KAVRAMLAR
C dilinin tarihi geliimini , avantaj ve dezavantajlarn inceledikten sonra C dilinin genel
kavramlarn ve kavramlarn nasl kullanldn inceleyelim.

2.4.1.C Dilinde Programn Yaps
Bir programc yazaca program en az sayda komut ile oluturmal ve en iyi algoritmay
oluturmaldr. Programcnn kodu en aza indirebilmesinin tek yolu program yazaca
dilin yapsna ve zelliklerine hakim olmasdr.
Programcla yeni balayanlar iin burada C dilinde bir program yazlrken nelere dikkat
edilmeli ve olmazsa olmazlar nelerdir bunlar inceleyelim.















ekil 2.1: Basit C Program Kodu
Yukarda en basit haliyle bir C program grlmektedir ve bu program satr satr
inceleyelim. Programda grlen ilk iki satr dikkat edilirse /* ve */ iaretleri arasnda
Aklama satrlar Bu bloklar arasna yazlr ifadelerinin bulunduu alan C derleyicisi
tarafndan /* ve */ iaretleri nedeniyle derleyici dikkate alnmaz. Dolaysyla programn
herhangi bir yerinde aklama yazlmas gerekirse /* ve */ iaretleri arasna yazlabilir. /*
ve */ iaretleri bir blok ifade ederken sadece bir satr aklama satr olarak kullanlacaksa
bu durumda satr bana // iaretleri kullanld takdirde derleyici // iretinin bulunduu
satr dikkate almaz(sadece C++ derleyicilerde). Burada akla u soru gelebilir,
/* Aklama Satrlar
Bu bloklar arasna yazlr */
#include <Kullanlan Ktphane>
#define Sabit ve Fonksiyonlar
Deikenler
main()
{
Program Kodlar
Printf(Ayhan Akbal);
.
.
}
29
Aklamalar derleyici tarafndan dikkate alnamadklar halde neden kullanlr?. Bu
sorunun cevab bir programcnn yazd program binlerce satrdan oluabilir, dolaysyla
programc yazd program takibi, kontrolnde veya uzun sre sonra tekrar programn
at zaman ben burada ne dnmtm gibi zorluklarla karlaabilir. Bu nedenle
program yazlrken program kodunun en stne bu programn ne ie yarad hangi
tarihte yazld bilgileri ve program akna gre eitli yerlerde aklayc bilgiler verilerek
skntlarn nne geilmi olunacaktr. Ayrca program kodu alrken baz kodlarn
derleyici tarafndan dikkate alnmayarak ne gibi sonular rettii incelenmek istenebilir, bu
durumda bu kodlarn silinmesi yerine almas istenmeyen kodlar /* ve */ bloklar arasna
alnarak ihmal, istendii zaman da bu iaretler kaldrlarak tekrar aktif edilebilir.
Yazlan programn bir sonraki satrda ise #include <Kullanlan Ktphaneler> komutu
grlmektedir. Bu satr yazlan C program ierisinde birden fazla olabilir. Bu satr
anlayabilmenin yolu C dilinin alma prensibindedir. C dilini oluturanlar herkesin sklkla
kulland ilemleri tekrar tekrar yazlmamas iin tek bir komut haline getirmilerdir. Bu
komutlarn kullanlabilmesi iin bu ktphanelerin programc tarafndan programa
tantlmas gerekmektedir.
Genel Kullanm aadaki gibidir.
#include <stdio.h>
Buradaki stdio.h, standart input output anlamna gelir ve yazlan C kodunda eer
programdan k veya programa giri yaplacaksa bu ktphane kullanlmak zorundadr.
Bu ktphaneleri arttrmak mmkndr. Ayrca C de tanml olmayan fakat ihtiya
duyulan bir ktphane programc tarafndan oluturulabilir ve programlarna dahil edebilir.
Fakat burada yle bir ayrm bulunmaktadr. Kullanc tarafndan oluturulan bir
ktphane kullanlacaksa #include KtphaneAd.h eklinde ifade edilmektedir.
Bir sonraki satrda ise #define Sabit ve Fonksiyonlar satrda ise programda kullanlacak
olan ve sk sk tekrar eden deer veya denklemler bu satrda tanmlanarak programn
istenilen yerinde tekrar tekrar kullanlabilir.
Genel Kullanm aadaki gibidir.
#define PI 3,14
buradaki PI sabite verdiimiz ad 3,14 ise bu sabitin ald deerdir,
#define f(x) x*x+3*x+2
bu tanmlamada f(x) fonksiyonun ad x*x+3*x+2 ise bu fonksiyonun denklemidir ve
programn iinde istenildii yerde x e bir deer verilerek kullanlabilir (a=f(3) eklinde bir
yazlm yazld takdirde C program yukarda Define ile tanmlanm fonksiyona 3
deerini gnderecek ve sonu olarak a=20 olacaktr. ) Define ile yaplacak tanmlamalar
istenildii kadar olabilir.
Bir sonraki satrda ise programda kullanlacak deikenler ve tipleri tanmlanr. Bu
tanmlamalar va tipleri bir sonraki konuda ele alnacaktr.
Bir sonraki satrdan itibaren C dilinde yazlan kodun ana program ksmnn balang
yaplmtr. C dilinde ana program yukardaki ktphane ve tanmlamalar ilemlerinden
sonra main() fonksiyonu ile balar. Derleyici main() ifadesi ile karlatnda ana
programn baladn anlar. Bu main fonksiyonunun iersinde yazlan kodlar C
programn oluturacaktr.

30

Her C programnda bir main() ana fonksiyonu kesinlikle bulunmaldr ve program bu
fonksiyon ile balar ve bu fonksiyon ile son bulur.
C program yazlrken her satr kesinlikle ; noktal virgl ile bitmek zorundadr.
C programnda main() fonksiyonunu takip eden kod, fonksiyonun gvdesini oluturur ve {
} iaretleri arasnda yer alr. Bu iaretlere program blou denir. Esas olarak { parantezi
ile birden fazla fonksiyon birlikte kullanlabilir. Burada dikkat edilmesi gereken nokta her
alan program blou yani { ile balayan kod } ile bitirilmelidir. Aksi takdirde program
derleyicisi hata retecektir.

2.4.2. C Program Tanmlamalar
Deikenler, deyim etiketleri tip isimleri, fonksiyon isimleri v.b. programc tarafndan
oluturulan ifadelerdir. Bu isimlendirmelerde programc baz kurallarla uymak zorundadr.
Bunlar,
- fadeler ya bir harf veya _ ile balamaldr. fadeler rakam ile balayamaz. Ger kalan
karakterler rakam v.b olabilir.
- C tarafndan kullanlan tip isimleri v.b. isimler kullanc tarafndan kullanlamazlar.
rnein bir ifade 12ayhan eklinde kesinlikle olamaz iken ayhan12 veya
_12ayhan eklinde kullanlabilir.
Noktal Virgln levi
Noktal virgl, ifadeyi sonlandrc ilev yapar. yle ki:
x=xx+5;y=yy+5;
gibi iki ifadeyi birbirinden ayrr. Noktal virgl olmadan yazlacak kod, anlamsz olacaktr:
x=xx+5
y=yy+5
fadelerin arasnda istenildii kadar boluk braklabilir, bu satr u hale dntrlebilir:
x=a+2y=b+3 //???
Fakat u asla unutulmamaldr. C programlama dilinde her ifade kesinlikle noktal virgl ile
son bulur. C diline yeni balayanlarn en ok karlaacaklar yazm yanllarndan birisi
budur.Burada u kesinlikle unutulmamaldr. C programlama dilinde byk kk harf
ayrm bulunmaktadr.
Ayhan AYHAN
fade isimleri oluturulurken _ alt izi ile balayan ifadelerden kanlmaldr. nk baz
C derleyicisine zg anahtar szckler ile akabilmektedir.

2.4.2.1. Anahtar Szckler
C dilinde kullanlan en nemli anahtar szckler aada listelenmitir ve hepsi kk
harfle yazlmaktadr. Bu anahtar szckler kullanc tarafndan ifadelerde kendi
31
tanmlamalar olarak kullanamazlar. Bu anahtar szckler, Veri tipleri, bellek snflar,
deyim ifadeleri ve ileler olmak zere gruplara ayrlr. Bunlar aadaki ekilde
snflandrlr,

veritipi char, const, double, enum, float, int, long, short, signed, struct, union, unsigned, void, volatile
deyim break, case, continue, default, do
belleksnf auto, extern, register, static, typdef, else, for, goto, if, return, swtich, while
ile sizeof


2.4.2.2. Deimezler
C dilinde tamsay, gerek say, karakter ve diziler olmak zere deimezler bulunur.
- Tam say deimezler
Tamsay deimezleri, ondalk, sekizli ve onaltlk say tabanlarnda kullanlrlar ve
derleyici programc tarafndan yazlan ekle gre say tabanlarnn ayrmn yapar. C de
bu veri tipleri int, short int ve long int olarak tipde tanmlanabilir.
123 : ondalk say
0123 : Sekizli say= 83 Ondalk sayya karlk gelir
085 : Geersiz bir say
0xFF : onaltlk say=255 ondalkl say
burada belirtilen sekizli say taban 0 ile 7 arasnda ki rakamlardan oluur, onaltlk say
taban ise 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F deerleri alabildii unutulmamaldr. Normalde
programc tarafndan belirtilen bu say tabanlar ne olursa olsun derleyici tarafndan
bunlar ikilik say tabanna evrilerek kullanlr.
- Ondalkl say deimezler
Ondalkl saylarn kullanm aadaki ekilde kullanlabilir. C de bu veri tipleri float,
double ve long double olarak tipde tanmlanabilir.
1.123
1.123E20 =1.123x10
20

1.123e20 =1.123x10
20

1.123e-20 =1.123x10
-20


- Karakter deimezler
Karakter deimezleri tek trnaklar arasna yazlarak C dilinde kullanlr.
A, a, % eklinde kullanlr.

32
- Karakter dizisi deimezler
Karakter dizisi deimezleri ift trnak arasna yazlr. C de Ayhan AKBAL eklinde
kullanlr. Karakter dizileri yazlrken C dilinde kullanlan baz ka sralar da kullanlabilir.
Bu ka sralar aadaki gibi gruplandrlr.
\n :yeni satra ge
\b :geri alma
\r :satrba
\t :1 tab ileri hareket
\f :sayfa ilerletme
\a :beep sesi kart
\ :tek trnak
\ :ift trnak
\? :soru iareti
\\ :ters sla
eklinde kalar bulunur.
rnein C de ekrana adnz soyadnz alt alta yazmak istiyorsunuz bu durumda printf
komutu kullanlarak karakter dizisi kullanlarak yaplabilir ve kullanm ise aadaki
gibidir
Printf (Ayhan \n Akbal )
eklinde bir yazm ifadesinde derleyici \n grd yere kadar normal olarak yazlr ve \n
den sonra bir alt satra geer ve yazar.
Ekran kts




ekil 3.2. Programn Ekran kts
eklinde olacaktr.

2.5. DEKEN KAVRAMI VE TEMEL VER TPLER
Deiken bir programcnn program ierisinde, programn aamasna gre srekli farkl
deerler alabilen ifadeleridir. rnein, F=mxa eklinde bir ilem yaplacak olsun,
F, m, a ifadeleri birer deikendir, nk bu deikenler her zaman farkl deerler
alabilir. F=3x4, F=2x5 v.b eklinde deerler alabilecektir. Dolaysyla programc bu
deikenleri nceden tanmlamas daha sonra programnda kullanmas gerekir.
Ayhan
Akbal
33
Tanmlamada yle bir sknt ortaya kacaktr. Bu deikenler tamsay m?, ondalkl
saym? Yoksa bir karakter veya karakter dizisi mi? olaca nceden programda
belirtilmesi gerekir. Bu belirtmeleri yapabilmek iin C dilinde ne tr veri tipleri bulunduu
ve veri tiplerinin hangi deerleri alabilecei nceden bilinmesi gerekir.

2.5.1. C Dilinde Kullanlan Veri Tipleri
Standart Veri Tipleri
Tm diller bilgileri zerinde alt bilgisayarn belleinde saklanrlar. Saklanan bilgiler
hafzada kaplad yer ve tipine gre float, integer, double v.b. tipler olabilir. Her deiken
bir veri tipi ile kesinlikle ilikilendirilmelidir, bunun nedeni verilerin saklanmas iin gerekli
saklama kapasitesini belirlenmesi ve bellein en iyi ekilde kullanlmasdr. Aada C de
kullanlan ver tipleri tablo halinde verilmitir.
Veri Tipleri
Veri Tipi
zellii
Bit Says
Alabildii Deerler
Minimum Maximum
Unsigned char
aretisiz
Karakter
8 bit 0 255
Char
Tek
Karakter
8 bit -128 127
enum
Sral
Veriler
16 bit -32.768 32.767
Unsigned int
aretsiz
Tam Say
16 bit 0 65.535
Short int
Ksa Tam
Say
16 bit -32.768 32.768
nt Tam Say 16 bit -32.768 32.768
Unsigned long
aretsiz
Uzun Tam
Say
32 bit 0 4.294.967.295
long
Uzun Tam
Say
32 bit -2.147.483.648 2.147.483.647
float
Ondalkl
Say
32 bit 3.4x10
-38
3.4x10
+38

Veri Tipleri

Veri Tipi
zellii

Bit Says
Alabildii Deerler
Minimum Maximum

34
Double
Uzun
Ondalkl
Say
64 bit 1.7x10
-308
1.7x10
+308

Long double
ok Uzun
Ondalkl
Say
80 bit 3.4x10
-4932
3.4x10
+4932

Near pointer
Yakn
areti
16 bit - -
Far pointer
Uzak
areti
32 bit - -
Tablo 3.1: Standart Veri Tipleri

Karakter Tipleri
Tm dillerde anlaml yaplar oluturabilmek iin karakter dizileri kullanrlar. rnein
Trke de 29 harf 10 rakam kullanlr. Ayn ekilde C dilinin de tand bu ekilde
karakterlerde vardr. Bunlar,
Harfler
ABCDEFGHIJKLMNOPRSTUVYZabcdefghijklmnoprstuvyz
Rakamlar
0123456789
zel Semboller
+ - * / = , . _ : ; ? \ $ & { } [ ] ( ) ^ @ < > # %-
ana balklar altnda gruplandrlr. Bir sonraki blmde deikenler ve veri tipleri ayrntl
bir ekilde anlatlacaktr.


2.6. DEERLENDRME SORULARI

S1) C dili ilk olarak nere
kullanlmtr.

a) Bilgisayarda
b) UNIX iletim sisteminde
c) Windows letim sisteminde
d) ICC sistemlerde
S2) C dilinde aklama satrlar nasl
yazlr

a) % ,% iaretleri arasna
b) */ ,*/ iaretleri arasna
c) /* ,*/ iaretleri arasna
d) * ,* iaretleri arasna
S3) C dilinde ktphaneler hangi
komut ile programa tantlr?
a) define
b) #define
c) #include
d) main
S4) Yazlacak olan bir C dilinde
epsilon diye bir sabit tanmlanacak
ve bu sabitin deeri 8,85x10
-12
dir
buna gre C dilinde bu sabit nasl
tanmlanr?
a) #define epsilon= 8.85x10^-12
35
b) #include epislon 8.85x10_12
c) #define epsilon 8.85x10^-12
d) #main epsilon
S5) C diline gre aadaki deiken
tanmlamalarndan hangisi yanltr?
a) int PI
b) char isim
c) float kes123
d) int 123kes
S6) C dilinde tam say sabitler hangi
tip ile ifade edilir?
a) float
b) char
c) integer
d) string
S7) C dilinde ekrana k
yapabilmek iin hangi C komutu
kullanlr?
a) scanf
b) printf
c) ineger
d) void main()
S8) printf komutu kullanlrken
bilgisayarn kere beep sesi
karabilmesi iin yazlmas gereken
kod aadakilerden hangisidir?
a) printf(\n\n\n);
b) printf(\a\a);
c) printf(\a\a\a);
d) printf(\t\t\t);
S9) C dilinde integer deiken tipleri
hafzada ne kadar yer tutarlar?
a) 8 Bit
b) 32 Bit
c) 16 Bit
d) 63 Bit

S10) Bir programlama dilinde
deikenlerin tip tanmlamalar
neden kullanlr?
a) Programn akc olmas iin
b) Programn bilgisayar belleini
optimum olarak kullanlmas iin
c) Programcnn kodu daha iyi
anlayabilmesi iin
d) Programcnn kodu doru
yazabilmesi iin




36
37


DEKEN, SABT VE
OPERATRLER
Blm 3








3.1. GR
ou programlama dilinde olduu gibi C dilinde de deikenler,
sabitler ve operatrler kullanlmaktadr. Herhangi bir program
yazldnda mutlaka bunlardan biri veya daha fazlas mutlaka
kullanlmak zorundadr. nk yaplan ilemler esnasnda kan
sonularn kimi yerde saklanmas, ilemlerde kullanlabilecek baz
sabit deerlerin tanmlanmas ve zellikle ilemleri yapabilmek iin
kullanlmas gereken operatrlerin olmas arttr. Bu ve bunun gibi
nedenlerden dolay deikenlere, sabitlere ve operatrlere ihtiya
duyulur.

Deikenler, sabitler ve operatrlerin neler olduklar, trleri ve nasl
kullanldklar bu blmde detayl olarak aklanm ve rneklerle bu
aklamalarn uygulamalar da gsterilmitir.


38
Blmn Genel Amac : Deikenler, sabit ve operatrleri kullanmak.

Blmn Davransal Amalar : Bu blm baaryla bitirip, rnekleri
anlayarak ve blm sonundaki deerlendirme sorularn cevapladnzda unlar
renmi olacaksnz:

C dilinde kullanlan deikenler
C dilinde kullanlan sabitler
C dilinde kullanlan operatrler
Deikenleri, sabitleri kullanarak program gelitirme
Operatrlerin ilemlerde nasl kullanld
Deikenlerin nemi


Deerlendirme: Blm sonundaki deerlendirme sorularn yapmanz ve
sonularnz uygulama raporlar ile karlatrmanz ve deerlendirme sorularna
en az %75 doru cevap vermeniz gerekmektedir.











39
3.2. DEKENLER
Programlama dillerinin hepsinde kullanlan ok sayda komut sayesinde yzlerce ilem
yaplr. Bu ilemlerin ara admlarnda baz deerleri saklamak gerekebilir. Bu deerler
ilerleyen admlarda kullanlabilir yada baka bir ama iin gerekebilir. te bilgisayar ayn
anda birden fazla ilem yaparken baz verileri kullanrken dier verileri hafzasnda saklar.
C programlama dilinde de verileri saklamak iin verinin trne gre tanmlanabilen ve
kullanlabilen veri alanlar vardr. Bu alanlar trne gre verileri depolar ve baka bir
sonu bu alana aktarlabilir. Yani alan ierisindeki verinin deeri istenirse deitirilebilir.
Bu yzden programlama dillerinde bu alanlara DEKEN ad verilir. ou programlama
dillerinde deikenler belli kurallara gre tanmlanr ve trleri vardr. Programlar yazlrken
bu kurallara uymak gerekir. Aksi halde program altrlamaz. C dilinde de kendine has
kurallar vardr. ncelikle deiken isimleri tanmlanrken baz zel durumlara dikkat
etmek gerekir. Bunlar;

1) Deiken isimleri bir harf veya _ iareti ile balayabilir.
2) lk karakterden sonra harfler, rakamlar veya _ iareti gelebilir.
3) Deiken ismi ierisinde boluk braklmaz.
4) Deiken ad istenildii kadar olabilir, ancak C bunun ilk 32 karakterini geerli
sayar.
5) Deiken adnda byk yada kk harf kullanlabilir. Fakat byk kk harf
duyarll vardr. Yani, adana ile ADANA deikenleri birbirinden farkldr.
6) Kullanlacak deiken ad C diline ait bir komutun ad olamaz.
7) Deiken isimlerinde ingiliz alfabesi kullanlr. Deiken adnda
,,,,,,,,,,, harfleri kullanlmaz.

ekil 3.1de deikenleri anlatabilmek iin kk bir rnek verilmitir.

erii bo bir deiken


AD smi AD olan bir deiken




AD smi AD olan ve ierii BALIKI olan
deiken
ekil 3.1: Deikenler

Yanl deiken isimlerine rnek unlar verebiliriz:
SM ( harfi ieriyor )
Okul no ( boluk ieriyor )
3kisi ( rakamla balyor )
3.kisi ( rakamla balyor ve nokta ieriyor )
SHR ( C dilinde kullanan bir komut )
C dilinde bir deikeni tanmlamak genel olarak yledir;

BALIKI

40
Deiken_tr deiken_ad[=sabit] ;

Burada deiken trlerini bir alt konuda greceiz. Deiken ad ksmnda da nelere
uyulmas gerektiini yukarda sralamtk. Sabit ksm ise istenildii takdirde verilebilir.
Deiken tanmlama srasnda veya sonrasnda deikene uygun bir deer atanabilir. C
dilinde tanml temel deiken tipleri vardr. Bunlar tablo 3.1 de grlmektedir.

TP UZUNLUK DEER ARALII
unsigned char 1 byte 0 / 255
char 1 byte -128 / 127
enum 2 byte -32768 / 32767
unsigned int 2 byte 0 / 65535
short int 2 byte -32768 / 32767
int 2 byte -32768 / 32767
unsigned long 4 byte 0 / 4.294.967.295
long 4 byte -2.147.483.646 / 2.147.483.647
float 4 byte 3,4*10
-38
/ 3,4*10
38

double 8 byte 1,7*10
-308
/ 1,7*10
308

long double 10 byte 3,4*10
-4932
/ 1,1*10
4092

Tablo 3.1: C dilinde tanml temel deiken tipleri ve bunlarn hafzadaki uzunluklar ile
alabilecekleri deer aral
rnek 3.1 Deiken tanmlama

x ve y adnda iki tane tamsay deikeni tanmland. Her bir
deiken 2 byte uzunluunda.
m adnda, hafzada 4 byte yer tutan reel say deikeni
tanmland.
karakter isimli 1 bytelk tek karakterlik deiken tanmland.
tek boyutlu 15 haneli bir karakter dizisi tanmland.
buyuk isimli 4 bytelk bir tamsay deikeni tanmland (int e
gre ok daha byk)

rnek 3.2 Deikenlere deer atama

#include<stdio.h>
#include<conio.h>
void main ( ){
clrscr ( );
int k,m,b;
k=7;
m=12;
b=k+m-2;
printf (sonu=%d \n, b);
k=m=b;
printf (%d %d %d,k,m,b);
getch ( );
}


int x,y;
float m;
char karakter;
char ad[15];
long int buyuk;
41

Programn ileyii:
k,m,b adnda 3 adet tamsay deikeni tanmland.
k deikenine 7 deeri atand. Bu atama tanmlama esnasnda da yaplabilirdi.
m deikenine 12 deeri atand.
matematiksel bir ilem yaplyor. k ile m deikeni ierisindeki deerler toplanyor ve bu
deerden 2 says karlyor. Sonuta elde edilen say b deikenine aktarlm oldu.
b deikeninin ierii ekrana yazdrlyor.
b deikeninin ierii m ve k deikenlerine aktarlyor .
nce k, sonra m ve en son b deikeninin ierii ekrana yazdrlyor.
ekran grnts herhangi bir tua baslana kadar donduruluyor.


Ekran kts:




C dilinde tanmlanan deikenler hafzada aldklar yere gre statik ve dinamik, program
ierisinde kullanld yere gre lokal ve global deikenler olarak gruplandrlabilir.

Statik deikenler, tanmland zaman hemen hafzada yer alrlar ve program sonlanana
kadar yeri sabit kalr. Programn sonlandnda bellekte bu deiken iin ayrlan yerler
boalr. Statik deikenler tanmlandklar anda herhangi bir deer atamas yaplmazsa ilk
deeri balangta sfr olur. Statik deikenlere balang deeri verilirse, o deerler
fonksiyon ilk arldnda deikene atanr; daha sonraki armalarda balang deeri
verilmemi gibi deerlendirilir.Eer deiken tipi pointer (iareti) trnden ise bu
durumda ilk deer sfr deil NULL (bo) olur. Statik deiken static deyimi ile tanmlanr
(rnek 3.3).

rnek 3.3 Statik deiken tanmlama






Dinamik deikenler ise programn altrlmas srasnda oluturulur. Bu deikenler iin
heap bellek blgesi ve bellek adresi kullanlr. C dilinde bu deikenlerin tanm malloc( ),
calloc( ) gibi komutlarla olur. Dinamik deikenler tanmlandktan sonra heap bellek
blgesinden kullanlan alanlarn serbest braklmas gerekmektedir.

Lokal ve global deikenler ise; lokal deikenler tanmlandklar fonksiyon ierisinde
kullanlrlar ve sadece burada kullanlrlar. Bu fonksiyonun dnda programda baka
herhangi bir yerde kullanlamazlar. Yerel deikenler tanmland fonksiyon
altrldnda bellekte yer kaplarlar (rnek 3.4).

Global deikenler, program ierisinde yer alan tm fonksiyonlarn dnda tanmlanrlar
ve programn istenilen her ksmnda kullanlabilirler (rnek 3.5). Bu tr tanmlamalar daha
Sonu=17
17 17 17
static int a;
a=a+k;



42
ok, program ierisinde sklkla kullanlacak bir deiken varsa yaplr. Bu deikeni
global deil de, gerektiinde her fonksiyon ierisinde yerel (lokal) olarak da
tanmlayabiliriz. Ancak bu durumda ok fazla parametre younluu olacandan gereksiz
yere hafza igal edilmi olur. Bu da programn baarszldr. Bu nedenle ayn
deikeni ayr yerlerde lokal olarak tanmlamaktansa, global olarak bir defa tanmlamak
daha doru olacaktr.

rnek 3.4 Lokal deikenler tanmlama ve kullanma




adet tamsay deikeni tanmland (Lokal
deikenler).
a deikenine 2, b deikenine 5 deeri atand.

a ile b tamsay deikenlerinin ierii birbiriyle
arplarak, sonu c tamsay deikenine aktarlmtr.

c deikeninin iindeki deer ekrana yazdrld.



Ekran kts:



rnek 3.5 Global deikenler tanmlama ve kullanma


adet tamsay deikeni tanmland (Global
deikenler).








Ekran kts :






#include<stdio.h>
main ( )
{
int a,b,c;
a=2; b=5;

c=a*b;

printf(sonu=%d,c);

}

sonu=10

#include<stdio.h>
int a,b,c;
main ( )
{
int a,b,c;
a=2; b=5;
c=a*b;
printf(sonu=%d,c);
}

sonu=10
43

3.3. SABTLER
Program ierisinde kullanlacak sabit deerli deikenler olabilir. Bunun iin C dilinde yine
deiken tanmna benzer ekilde sabitlerde tanmlanr. Bunun iin deikenin adnn
nne const deyimi kullanmak gerekir. Sabitler tanmlandklar andan itibaren program
ierisinde ilemlerde kullanlabilir. Ancak ierii deitirilemez (rnek 3.6).

rnek 3.6 Sabit tanmlama

matematikte kullanlan pi says tanmland.
matematikte kullanlan e says tanmland
Adnz giriniz eklinde bir karakter dizisi

3.4. C DLNDE KULLANILAN OPERATRLER
Operatrler, programlama dillerinde matematiksel, mantksal snama ve karlatrma gibi
ilemler iin kullanlan baz alfa nmerik karakterlerdir. Operatrlerin tam olarak ne i
yapt program yazan kii tarafndan ok iyi bilinmelidir. Aksi halde ok kk bir hata,
ok byk problemlere neden olabilir. Operatrler drt temel grupta toplanabilirler. Bunlar;
aritmetiksel, karlatrma, mantksal ve atama operatrleridir.

3.4.1. Aritmetiksel Operatrler
Deikenler veya sabitler zerinde temel aritmetik ilemler iin kullanlrlar. Bu operatrler
unlardr:
+ toplama
karma
* arpma
/ blme
% artk blme (mod ilemi: bir saynn dier bir sayya blmnden
kalann bulma)
bir azaltma
++ bir arttrma

Aritmetiksel operatrler, tamsay veya karakter deikenleri iin kullanlabilir. Ancak
dikkat edilmelidir. nk karakter deikeni iin rnein ++ operatr kullanldnda, bu
deikenin ieriindeki ASCII deeri 1 arttrlr. Bu da farkl bir karakter demektir. Ancak
deiken tamsay deikeni ise bu deiken iindeki say deeri ka ise ++ operatr
kullanldnda, bu say 1 artar. Aritmetiksel operatrler iin deiik kullanmlarn
gsterildii kk program paracklar rnek 3.7 de verilmitir. Operatrn herhangi bir
eitlik ifadesi olmadan tek bana deikenin sonunda veya banda kullanlmasnn bir
fark yoktur.





const float pi=3.142857;
const double e=2.71828182845905;
const char [ ]= " Adnz giriniz";

44
rnek 3.7 Aritmetiksel Operatrleri kullanma




a,b,c tamsay deikenleri tanmland, a ile b ye deerleri atand.
k karakter deikeni tanmland ve iine A karakteri yerletirildi.
a deikeninin ierisi bir azaltld (a=6 oldu.)
b deikeninin ierisi bir arttrld (b=13 oldu).
k deikeninin ierisi bir arttrld (knn ii B oldu, ASCII olarak A
dan sonra B geldiinden dolay a deikeninin ierii b
deikeninin iindeki sayya blnerek, kalan deeri c tamsay
deikenine aktarlm oldu).



3.4.2. Karlatrma Operatrleri
Bu operatrler deiken veya sabitleri birbirleriyle karlatrmada kullanlr. Yani saysal
veya karakter deikenler birbiriyle karlatrlabilir ancak, karakter dizileri
karlatrlamaz. Bylelikle deiik artlarn yerine getirilmesi salanarak dngsel veya
artl ifadelere bal programlarda kullanlabilir. Karlatrma operatrlerini anlatmak iin
rnek 3.8e baklabilir. C dilinde kullanlan karlatrma operatrleri ise unlardr:


> byk m ?
>= byk veya eit mi?
< kk m ?
<= kk veya eit mi?
= = eit mi?
! = farkl m ?


Karlatrma operatrleri az ncede deinildii gibi artl ifadelerde ve dnglerde ok
kullanlrlar. Karlatrma sonucunda doru (true) yada yanl (false) deeri gnderilir.
rnein if li bir ifadede art doru ise blok ierisindeki ilemler yaplrken, artn sonucu
yanl ise bu blok atlanr.


rnek 3.8 Karlatrma Operatrlerini kullanma
Programa bir kiinin dardan bir dersinin vize ve final notunu girmesini isteyerek bu
kiinin ortalamasn hesaplayalm. Ve kiinin ortalama notu 60 dan kkse snfta
kaldn, tam tersi notu 60n stnde ise snfn getin yazsn.

#include<stdio.h>
main ( )
{
int a=7,b=12,c;
char k=A;
a ;
++b;
k++;
c=a%b;
}
45

Kullanlacak ktphaneler tanmland
(ald).
vize, final adnda iki tamsay deikeni
tanmland.
ortalama adnda reel say deikeni
tanmland (sonu tam
kmayabileceinden dolay float
olarak tanmlamakta yarar vardr).
ana fonksiyon tanmland.
ekran temizlendi.
dardan girilen vize notu deeri vize
deikeninde sakland.
dardan girilen final notu deeri final
deikeninde sakland.
ortalama not hesapland, sonu
ortalama deikeninde sakland.
ortalama deikeni mantksal olarak
60 saysyla karlatrld, sonu
doruysa yani ortalama deikeni
iindeki deer 60 dan kkse Snfta
kaldn, deilse Snf getin yazs
yazacaktr.





Ekran kts :




rnek 3.9: Karlatrma Operatrlerini kullanma
Bu program dardan girilen bir tamsaynn pozitif mi?, negatif mi? yoksa sfr m?
olduunu ekrana yazar.


# include<stdio.h>
# include<conio.h>
main ( ){
int sayi;
printf (bir say giriniz :);scanf(%d,&sayi);
if (sayi<0) { printf(say negatif); }
else if (sayi>0) { printf(say pozitif); }
else { printf(saynz sfrdr); }
getch ( );}
# include<stdio.h>
# include<conio.h>

int vize, final;
float ortalama;


main ( ) {

clrscr ( );

printf (Ltfen vize notunuzu giriniz.:);
scanf (%d, &vize);

printf (\n Ltfen final notunuzu giriniz.:);
scanf (%d, &final);

ortalama=vize*0.4+final*0.6;

if (ortalama<60) { printf (\n Snfta kaldn);

else { printf (\n Snf getin); }

getch ( );
}
Ltfen vize notunuzu giriniz.:35
Ltfen final notunuzu giriniz.:60
Snfta kaldn

46
3.4.3. Mantksal Operatrler
Bu operatrler, artl ifadeler ve dnglerde birden fazla snanmas gereken deiken
veya sabit olmas durumunda kullanlrlar. Bu operatrler unlardr:

&& VE ilemi (AND)
| | VEYA ilemi (OR)
! DEL ilemi (NOT)

rnek 3.10: Mantksal Operatrleri kullanma
Programa bir kiinin dardan bir dersinin vize ve final notunu girmesini isteyerek bu
kiinin ortalamasn hesaplayalm. Ve kiinin ortalama notu 60 dan kkse snfta
kaldn, tam tersi notu 60n stnde ise snfn getin yazsn. Ancak bu kez final
notunun da 60 dan kk yada byk olduunu da kontrol etsin.




3.4.4. Atama Operatrleri
Bir deikenin ierisine (kabul edilebilir) herhangi bir deeri eitlemek iin atama
operatrleri kullanlr. Bu deer bir sabit deer olabilecei gibi, herhangi bir ilemin
sonucu da olabilir.


# include<stdio.h>
# include<conio.h>
int vize, final;
float ortalama;

main ( ) {

clrscr ( );

printf (Ltfen vize notunuzu giriniz.:);
scanf (%d, &vize);

printf (Ltfen final notunuzu giriniz.:);
scanf (%d, &final);

ortalama=vize*0.4+final*0.6;

if (ortalama<60 || final<60) { printf (\n Snfta kaldn);

else { printf (\n Snf getin); }

getch ( );
}
47
rnek 3.11 Atama Operatrlerini kullanma

int a; int a=2,b=5,c;
a=30; c=a*b+10;
(a) (b)

rnek 3.11de de grld gibi birinci ksmda (a) verilen atama ekli direkt bir sabit
deerin deikene atanmasdr. kinci ksmda ise (b) matematiksel bir ilemin sonucu bir
deikene aktarlmtr. Burada atama ilemi iin grld gibi tek bana = iareti
kullanlmtr. Ancak C dilinde, sadece tek bana = iareti deil ift (bitiik) atama
operatrleri de sklkla kullanlr. Bu operatrler ve anlamlar unlardr:
OPERATR ANLAMI
+= toplayarak atama
= kararak atama
*= arparak atama
/= blerek atama
%= blerek kalann atama
&= bit dzeyinde VE ilemi yaparak
atama
|= bit dzeyinde VEYA ilemi
yaparak atama
=~ bit dzeyinde tmleme ve atama
<<= sola teleyerek atama
>>= saa teleyerek atama

rnek 3.12 Bitiik atama operatrlerini kullanma
int a=5, b=2; // a ve b adnda iki tamsay deikeni tanmlanarak,
deerleri atand.
b*=a; // b ie a deikeninin ierii arplarak, sonu b
deikenine aktarld.


Bu rnekte b*=a yerine b=b*a; veya b=a*b; de yazlsayd, sonu yine ayn olurdu. Fark,
sadece ilk yazlan deyimde bitiik atama operatr kullanlm ve ifade biraz daha
ksaltlm oldu. C dilinde bu ifadede doru ilem yapmaktadr.

rnek 3.13 Bitiik atama operatrlerini kullanma
1 den 25 e kadar olan ardk saylar toplayan C programn yazalm (Burada kullanlan
for dngs ileride anlatlacaktr).






48
Bu operatrlerin dnda kalan operatr daha vardr. Bunlar ?:, *, & operatrleridir. ?:
operatr ileride anlatlacak olan if-else yapsna benzer ekilde belirtilen arta gre ilem
yaptrmada kullanlr. Bunun genel eklini yle yazabiliriz:
(koul ifadesi) ? deyim1 : deyim2;

Bu ifadeye gre verilen koul ifadesinin sonucu doru (true) ise deyim1, yanl (false) ise
deyim2 icra edilir. Buradaki deyim1 ve deyim2, herhangi bir atama ilemi, matematiksel
bir ilem veya genelde bir fonksiyon olabilir. rnein, aadaki ifadede a deikeninin
ierii 10dan bykse b deikenine 2, deilse -2 deeri aktarlmaktadr.
(a>10) ? b=2 : b=-2;

* operatrnn aritmetiksel operatr olarak arpma ilemi yaptn biliyoruz. Ayn
zamanda bu operatr pointerlarda (iareti), & operatr ile de kullanlr. * operatr
iareti deikenin tanmlanmasnda kullanlr.

rnek 3.14 Pointer deikeni tanmlama
int a, *b; // a adl tamsay deikeni ve bir tamsay atanacak hafza
blgesinin adresinin
// tutulaca b iareti deikeni tanmland.

float *c; // bir reel say atanacak hafza blgesinin adresinin
tutulaca c iareti deikeni tanmland.
Yukardaki rneklerde grld gibi * operatr iareti deikenin tanmlanmasnda
kullanlmtr. Bunun yannda & operatr de vardr ki, bu operatr iaretinin gsterdii
adresle ilgilenir (ieriiyle ilgilenmez).

rnek 3.15 & operatrnn kullanm

int *p, x=4, y;
y=x;
p=&x;

Yukardaki rnekte p iareti deieni, x ve y tamsay deikenleridir. x'in balang
deeri 4 verilmitir. kinci satrda da y ile x eitlenmi ve ynin deeri de 4 olmutur.
nc satrda ise, x deikenin balangta bulunduu hafza blgesinin adresi p
iareti deikenine aktarlmtr.
# include<stdio.h>
# include<conio.h>
main ( ) {
int i,toplam=0;
printf (Bu program 1-25 aras saylarn toplamn verir);
for(i=1;i<=25;i++){ // i deikeni, balang olarak 1 den balayp 1er artarak
toplam+=i; // 25e kadar gider. Dng ierisinde i 1 artar, i nin her deeri toplam
} // deikeninin zerine eklenir. Bylece ardk tm saylar toplam
// deikeni zerine eklenir, toplam deikeni de balangta 0 deerinde
// olduundan sonucu etkilemez.

printf (\n toplama sonucu = %d dir,toplam); // toplama sonucu ekrana yazdrlyor.
getch ( );}
49

* operatr ayn zamanda bir iareti deikeninin gsterdii adresteki deeri, normal bir
deikene aktarmada da kullanlr.

rnek 3.16 * operatrnn kullanm









int *p,m,n;
p=&m; // m nin adresi p ye aktarld.
*p=100; // p nin gsterdii adresin iine 100 deeri atand.
n=*p; // p nin gsterdii adresin ierii n deikenine atand.

50
51




DEYMLER
Blm 4











4.1. GR

C programlama dilinde program kodu yazabilmek dahas bu kodlarn
bizi deiik amalarmza ulamamz salayacak hale getirmek iin
art ve dng deyimlerini iyi bilmemiz ve etkili bir biimde
kullanmamz gereklidir. u bir gerektir ki bir bilgisayar programnn
rutin ve basit ve ilemler yapmas fazla ie yarayacak bir durum
deildir. Bazen programmzn ak bir arta gre deiebilmeli bazen
belli ilemler tekrar tekrar yaplabilmelidir. te bu tr ilemleri
yapabilmek iin bu blmde gereken bilgileri alacak, art ve dng
deyimlerini kullanacaz.

52
BLM -4- DEYMLER



Blmn Genel Amac: Deyimleri bilme ve program ierisinde kullanma.


Blmn Davransal Amalar: Kitabnzn bu blmn baaryla bitirip, rnek
uygulamalar yaptnz taktirde, blm sonunda;

Deyim kavramn aklamanz,
art kavramn aklamanz,
f art deyimini kullanmanz,
Switch deyimini kullanmanz,
Koul operatrn kullanmanz,
Goto deyimini kullanmanz,
While dngsn kullanmanz,
For dngsn kullanmanz,
Break ve continue szcklerini kullanmanz beklenmektedir.

Deerlendirme: Modl sonundaki uygulamalar yapmanz sonular uygulama raporu ile
karlatrmanz ve deerlendirme sorularna en az % 75 dzeyinde doru cevap
verebilmeniz gerekmektedir.
53
4.2. DEYM NEDR?
c' de ifadeler birbirleriyle noktal virgl ile ayrlrlar. fadeleri bitirmesi nedeniyle, noktal
virgle sonlandrc (terminator) da denilmektedir.
Deyim (statement) ifade ile sonlandrcdan oluan gruba verilen addr.
rnein:
c = a * b d bir ifadedir; ancak
c = a * b - d; bir deyimdir.
C'de deyimler 4 blme ayrlr:
1) Yaln deyimler: Bunlar bir ifadenin sonuna sonlandrc (;) getirilerek oluturulan
deyimlerdir.
rnein:
x = y *5;
a++;
b = getch( );
gibi...
2) Bileik deyimler: Birden fazla deyimin bir blok iinde toplanmasyla oluan program
paralarna bileik deyim ad verilir. c' de bloklar ayn zamanda bileik deyimlerdir.
{
deyim1 deyim2 deyim3
}
rnein
{
c = a /2 ; b++;
}
3) Bildirim deyimleri: Bildirim amacyla oluturulmu deyimlerdir:
rnein;
int d,temp, sayi;
char ad;
float uzunluk, genislik;
gibi...
4) Kontrol deyimleri: Program akn kontrol etmek iin kullanlan deyimlerdir. Kontrol
deyimleri en az bir anahtar szck ierir; bir ya da birden fazla blokdan oluabilir.



54


Solunda bir ifade olmakszn yalnzca bir sonlandrcdan oluan deyime, bo deyim (null
statement) denir. Derleyiciler bo deyimler iin hibir ilem yapmazlar.

rnein:
a = b * 2;
;
c = a + 4;
4.3. F DEYM
C' de program akn kontrol etmeye ynelik en nemli deyim if deyimidir. if deyiminin
genel biimi aada verilmitir.


deyim1 ve deyim2, yaln ya da bileik olabilecei gibi baka bir kontrol deyimi de olabilir.

if deyiminin icrasnda, nce derleyici if parantezinin iindeki ifadenin saysal deerini
hesaplar. Hesaplad bu saysal deeri mantksal Doru ya da Yanl olarak yorumlar (0
ise Yanl, 0 dnda bir deer ise Doru). Eer ifadenin sonucu Doru ise, else anahtar
szcne kadar olan ksm; Yanl ise, else anahtar szcnden sonraki ksm icra
edilir.


if (ifade)
deyim1
else
deyim2
55
Ak diyagram ile gsterirsek:



NOT: Deyim3, if deyiminden sonra gelen ilk deyimdir:

rnein aadaki program parasnn ileyiini adm adm grelim;
1. Adm: if parantezinin iindeki ifadenin saysal deeri hesaplanr.
a * 5 =40
40 < 50
Sonu=1= DOGRU

2. Adm: ifade Doru olduuna gre, else anahtar szcne kadar
olan ksm (deyim1) yaplr.

3. Adm: else ksm atlanarak deyim3 yaplr.

if parantezi iindeki ifadeler daha karmak olabilirler:

Yandaki if deyiminde harf karakterinin byk harf olup
olmad test edilmektedir. Eer harf byk harf ise
deyim2, kk harf deilse deyim2 yaplr; daha sonra
ak deyim3 ile devam eder.
1. Adm: if parantezinin iindeki ifadenin saysal deeri
bulunur.
harf >= 'A' ========0 harf <= 'Z========0
0 && 0 =========0
Sonu: YANLI
if (ifade)
deyim1
else
deyim2
deyim3
a=8;
..
if (a * 5 < 50)
deyim1
else
deyim2
deyim3

Deyim1 Deyim2

Deyim3

Doru (Sfr D) Yanl (Sfr)
fade
harf = 'a';

if (harf >= 'A' && harf <= 'Z')
deyim1
else
deyim2
deyim3

56
2. Adm: Sonu yanl olduu iin else ksm (deyim2) yaplr.

3. Adm: Deyim3 ile aka devam edilir.

if deyiminin Doru ve/veya Yanl ksm birden fazla deyimden oluuyorsa (bileik
deyimse) bloklama yaplmaldr.

Bu rnekte c < d - 4 ifadesi Doruysa deyim1 ve deyim2,
Yanlsa deyim3 ve deyim4 yaplr.






Bir if deyiminin else ksm olmayabilir. rnein:



if parantezinin ierisindeki ifade doruysa deyim1 ve deyim2 yaplr; daha sonra
programn ak deyim3 ile devam eder. Eer ifade yanl ise blok atlanarak dorudan
deyim3 yaplr.
Bir if deyimi yalnzca else ksmna sahip olamaz. Bu durumda en uygun yol koul ifadesini
deitirmektir.

if (ifade)
else
deyim1 eklinde bir yazm hataldr


if (ifade) {
deyim1
deyim2
}
deyim3
Deyim1
Deyim2

Deyim3

Doru (Sfr D) Yanl (Sfr)
fade
if (c < d - 4) {
deyim1
deyim2
} else {
deyim3
deyim4
}
57
Yukardaki hatal olan if deyiminin yerine aadaki edeerleri i kullanlabilir:
if (!ifade) if (ifade)
deyim1 ;
else
deyim1

if parantezinin ierisindeki ifadede deiken olmas gibi bir zorunluluk yoktur.
if (10)
deyim gereksiz bir tarz olsa da yandaki gibi bir yazm da kullanabiliriz.
4.4. switch DEYM
if deyimi Doru ya da Yanl olmak zere iki seenee sahiptir. Oysa switch deyimi belli
bir ifadenin eitli saysal deerlerine kar farkl ilemlerin yaplmas iin kullanlmaktadr.
Genel biimi aadaki gibidir:


switch, case ve default birer anahtar szcktr. Derleyici switch parantezinin ierisindeki
ifadenin saysal deerini hesaplar. Eer bu saysal deere eit olan bir case ifadesi
bulursa programn akn oraya ynlendirir. Eer byle bir ifade yoksa programn ak
default ile belirtilen ksma geer. rnein:

burada n=1 ise programn akn case 1: ksmna yneltilir. Ak buradan srasyla
aa inerek devam edecektir. Dolaysyla ekranda:

switch(n) {
case 1: printf("Pazartesi\n");
case 2: printf("Sal\n");
case 3: printf("aramba\n");
case 4: printf("Perembe\n");
case 5: printf( "Cuma \n) ;
default: printf("Hibiri\n");
}
switch (ifade) {
case <sabit ifadesi1>: [break];
case <sabit ifadesi2>: [break];
cas e <sabit ifadesi3>: [break];
[default: ;]
}

58
Pazartesi
Sal
aramba
Perembe
Cuma
Hibiri
yazlarn grrsnz. Dnglerden kmak iin kullanlan break anahtar szc switch
ierisinden kmak iin de kullanlabilir. Bu durumda bir case ifadesi break ile
sonlandrlrsa programn ak dier case ifadelerine gemez. Yukardaki rnekteki her
bir case in sonuna break koyarsak rneimiz u ekilde deiecektir.

bu program bir ncekinin aksine tm ifadeleri deil sadece n deerinin karl olan gn
yazacaktr. Yani n deeri 3 ise aramba, 1 ise pazartesi, 12345 dnda bir deerse
hibiri yazacaktr.
case anahtar szcnn yanndaki ifadenin sabit ifadesi olmas zorunludur. nk
derleyici derleme zamannda case ifadelerinin saysal deerini hesaplamak zorundadr.
Aadaki rnei inceleyiniz:

Buradaki son case sabit ifade olmad iin switch geersizdir.
Birden fazla saysal deer iin ayn ilemlerin yaplmas isteniyorsa aadaki gibi bir
yol izleyebilirsiniz. Bunun daha ksa bir yapl yntemi yoktur.

switch (x - 1) {
case 8 : break;
case 12 : break;
case y-3 : break;
default : ;
}
switch(n) {
case 1: printf("Pazartesi\n");break;
case 2: printf("Sal\n"); break;
case 3: printf("aramba\n"); break;
case 4: printf("Perembe\n"); break;
case 5: printf( "Cuma \n) ; break;
default: printf("Hibiri\n"); break;
}
59

Yukardaki rnekte a deikeninin 3 ve 5 deerleri iin ayn ilemler yaplmaktadr.
default anahtar szcnn sonda olmas ve case sabitlerinin artan srada olmas bir
zorunluluk deildir. Yani yukardaki rnek yle de dzenlenebilirdi.


switch deyiminin son case ifadesi iin break gerekmediine dikkat ediniz. Dier kontrol
deyimlerinde olduu gibi switch deyimi de yalnzca bir deyim ieriyorsa bloklama
yapmaya gerek yoktur. rnein:

burada switch ierisinde yalnzca x = n - 1; deyimi vardr. z = n / 2; dndaki ilk deyimdir.
4.5. KOUL OPERATORU
Koul operatr C'nin karlatrma yapan zgn bir operatrdr. artlar sradan birer
ifade olabilir. Genel kullanm biimi aadaki gibidir:
ifade1 ? ifade2 : ifade3
Koul operatr ? ve : olmak zere ayrk iki sembolden oluur. Derleyici nce ?
karakterinin solundaki birinci ifadenin saysal deerini hesaplar. Genel biimde bunu
ifade1 olarak isimlendirdik. Eer ifade1 sfr d bir saysal deere sahipse bu durum
koul operatr tarafndan Doru olarak ele alnr ve yalnzca ifade2 yaplr. Eer
itade1
switch (a) {
default: printf("Geersiz lem!..\n"); break;
case 8:b=a-c; break;
case 5: case 3:b=a+c;
}
switch (a) {
case 3:
case 5: b=a+c; break;
case 8: b=a-c; break;
default: printf(" geersiz ilem!.. \n");
}
switch(n)
case 11:
case 13: x = n - 1; z = n / 2;

60
in saysal deeri sfr ise bu kez yalnzca ifade3 yaplacaktr. Dier operatrlerde olduu
gibi koul operatrnden de bir deer retilir. Bu deer koulun salanmas durumuna
gre ifade2 ya da ifade3 olabilir. rnein:

y = (x > 3 ? a + 1 : a 1);

Burada nce x > 3 ifadesinin saysal deeri hesaplanr. Bu ifade sfr d bir deerse
(yani doruysa) y deikenine a + 1 sfr ise (yani yanlsa) a - 1 atanacaktr. Ayn ilem if
ile de yaplabilirdi:

if (x > 3)
y = a + 1; else
y = a - 1;

Koul operatr birok durumda okunabilirlii kuvvetlendirmek iin tercih edilir. rnein:

z= (a > b) ? a : b;

z deikenine max(a, b) atanmaktadr. Programclar alglamay kolaylatrd iin koul
operatrrnn ilk operandn parantez ierisine alrlar. Ancak byle bir zorunluluk yoktur.
4.6. go to DEYM
Yapsal programlama dillerinde programn aknn baka blgelere gnderilmesi
alglamay ve tasarm zorlatrd iin pek salk edilmez. goto anahtar szcprogram
akn istenilen bir blgeye ynlendirmek iin kullanlr. goto yanna bir etkiket ismi
verilerek kullanlmaldr.

goto <etiket ismi>;

Etiket, deiken isimlendirme kuralna uygun herhangi bir isim olabilir. Programn ak
etiket ile belirtilen blgeye gider.

goto REPEAT;

REPEAT: goto etiketinin faaliyet alan fonksiyon faaliyet alandr. Yani go to ile baka
bir fonksiyonun bir blgesine atlama yaplamaz. Aadaki rnekte klavyeden alnan
karakter q olduunda iie iki dngden klmtr.
61


4.7. while DNGS

Dier dillerde olduu gibi C'de de while dngleri koul saland srece yinelemeye
neden olmaktadr. while dnglerini iki gruba ayrabiliriz:

1) Kontroln bata yapld while dngleri
2) Kontroln sonda yapld while dngleri (do - while) Srasyla inceleyelim.

4.7.1. Kontroln Bata Yapld while Dngleri

Genel kullanm aadaki gibidir:

while bir anahtar szcktr. C derleyicileri while anahtar szcnden sonra
parantezler arasnda bir ifade bekler. Dng bu ifadenin Doru (sfr d bir deer)
olduu srece


#include <stdio.h>
void main(void) {
int i, j; char ch;
for(i = O; i < 10; ++i)
for (j = O; j < 10;++j){
ch = getch();
if (ch == 'q')
goto EXIT;
printf("i = %d j= %d \n",i ,j ) ;
} EXIT:
}
while (ifade)
deyim


62
yinelenir. Genel biimde belirtilen deyim; yaln, bileik ya da baka bir kontrol deyimi
olabilir. Daha ak bir deyile, if deyiminde olduu gibi, eer bir tek deyim sz konusuysa
bloklama yaplmasna gerek yoktur; ancak birden fazla deyim blok iine alnmaldr.
rnein aadaki while dngsnde yalnzca deyim1 dng ierisindedir. Dng
kndaki ilk deyim ise deyim2' dir.

Aadaki rnekte ise deyim1 ve deyim2' nin her ikisi de dng ierisindedir. deyim3
dngden sonraki ilk deyimdir.

while dngsnn ierisindeki deyim, herhangi bir kontrol deyimi de olabilir.

Bu rnekte bloklama yaplmad iin while ierisinde yalnzca if deyimi vardr. Deyim3,
dng kndaki ilk deyimdir.




while (ifade)
deyim1
deyim2
white (ifade) {
deyim1 .
deyim2
}
deyim3
white (ifade1)
if (ifade2)
deyim1
else
deyim2

deyim3

63
while dngs, "parantez iindeki ifadenin saysal deeri sfr d bir deer (Doru)
olduu srece yinelemeye neden olur" demitik; rneklerle aklayalm:


Yukardaki while dngs t deikeni 20'den kk ya da eit olduu srece
yinelenecektir.

t deeri t<=20 artnn sonucu
1 1 Doru, dngye devam
2 1 Doru, dngye devam
3 1 Doru, dngye devam
... ...
20 1 Doru, dngye devam
21 0 Yanl, dngden k!..

t, dngnn ierisinde artrldna gre 20 yineleme sonra dngnn sonlanacan
syleyebiliriz.

Bir baka while dngsn incelersek:




t =1;
while (t <= 20) {
printf( I/%d\n", t);
++t;
}
while ((tus = getchar( )) ! = q')
printf ("%c\n", tus);

64

Bu rnekte while dngsnn devam edebilmesi iin klavyeden girilen karakterin 'q'
olmamas gerekir. Veya bir baka deyile: Bu dng 'q' karakterine basldnda sonlanr!
4.7.2. Kontroln Sonda Yapld while Dngleri
Bu tr while dnglerinde kontrol sonda olduu iin dng iindeki deyimler en az bir
kere ilem grr. Genel kullanm u ekildedir:


do, dngnn ban gsteren bir anahtar szcktr. Dngnn i blgesi do anahtar
szcnden while anahtar szcne kadar olan blgedir. Dierlerinde olduu gibi, tek
bir deyim iin bloklamaya gerek yoktur; fakat birden fazla deyim iin bloklama
yaplmaldr. rnein:

Burada yalnzca deyim1 dngnn ierisindedir.


Bu rnekte ise bloklama yapld iin deyim1 ve deyim2' nin her ikisi de dngnn
ierisindedir. Deyim3, dngnn dndaki ilk deyimdir.

do
deyim
while (ifade);
do
deyim1
while (ifade);
deyim2
do {
deyim1
deyim2
} while (ifade);
deyim3
65
4.8. for DNGLER
C deki for dngleri dier dillerdekilerle kyaslandnda ok daha geni ilevlere sahiptir.
for dnglerinin genel biimi yledir:

C derleyicileri for anahtar szcnden sonra parantezler ierisinde iki tane sonlandrc
(noktal virgl) beklerler. Bu iki sonlandrc for dngsn ifade1, ifade2 ve ifade3 ile
gsterdiimiz 3 ksma ayrmaktadr. imdi for dngsn oluturan bu 3 ksmn ilevlerini
tek tek ele alp aklayalm:

ifade1: for dngsnn birinci ksm olan bu ifade, dngye ilk girite yalnzca bir kez
yaplr. fade1 uygulamalarda genellikle dng deikenine ilk deer vermek amacyla
kullanllr.
rnein:
for (k = 0; ifade2; ifade3)

ifade2: for dngsnn ikinci ksm olan i fade2 dngye ilk girite ve sonraki her
yineleme de ilem grr. for dngleri ifade2'nin saysal deeri Doru (sfr d bir deer)
olduu srece yinelemeye neden olurlar. Uygulamada ifade2 genellikle yinelenecek
miktar belirleyen ilikisel bir operatrle kullanlmaktadr.
rnein:
for (k =0;k < 100; ifade3)

ifade3: Bu ksm her yinelemenin sonunda bir kez ilem grr. Uygulamada genellikle
dng deikeninin artrlmas amacyla kullanlmaktadr.
rnein:
for (k =0;k < 100; k++)

while dnglerinde olduu gibi for dnglerinde de dng ierisindeki deyim yaln, bileik
ya da baka bir kontrol deyimi olabilir. Yani tek bir deyim iin bloklamaya gerek yoktur;
ancak birden fazla deyim dng ierisine alnacaksa bloklama yaplmaldr.
Aada O' dan 99' a kadar saylar ekranda gsteren bir rnek verilmitir, inceleyiniz:




for (ifade1; ifade2; ifade3)
deyim

66


for dngsnn herhangi bir ya da birden fazla ksm olmayabilir; ancak parantezler
iinde iki sonlandrcnn mutlaka bulunmas gerekir. A.adaki rnei inceleyiniz:

Burada for dngsnn birinci ksm yoktur. Birinci ksm, dngye girite yalnzca bir kez
ilem grdne gre dngnn banda ayr bir deyim olarak da konulabilir. imdi
aadaki rnei inceleyiniz:

Burada ise for dngsnn bir ve nc ksmlar yoktur. nc ksm her yinelemenin
sonunda bir kez ilem grdne gre dng ierisine son deyim olarak yazlabilir.
Gerekten de bu rnek for dngsnn almasn ok iyi bir biimde yanstmaktadr.
Nihayet ksm da olmayan bir for dngs de mmkndr.


bu biimdeki for dngleri sonsuz dng salamak amacyla kullanlrlar.
{int k;
for (k =0; k < 100; ++k)
printf( "%d\n", k);
}
k = 0;
for (; k < 100; ++k)
printf ("%d\n", k);

k = O;
for (; k < 100; ) {
pri ntf<"%d\n", k);
++k;
}
for(;;) {
.
}
67
for dnglerinin iinde bulunan ifadenin aadaki gibi bir iliki iinde olmas zorunlu
deildir.


4.9. break ve continue ANAHTAR SZCKLER
Dnglerin ileyiinde etkili olan iki anahtar szck vardr: break ve continue.break
anahtar szc dngleri sonlandrarak program akn dngnn dndaki ilk deyim e
atlatr.
rnein:

Burada klavyeden girilen karakter 'q' olduunda break anahtar szc ile dng
krlmaktadr. for (;;) sonsuz bir dng olduundan k da ancak break ile mmkn
olabilir!


Bu rnekte ise fonk1 fonksiyonunun geri dn deeri sfrdan kk ise dng
krlmaktadr. Aadaki rnekte de 0' dan 100' e kadar olan tamsaylar ekrana
yazdrlyor.

for (;;) {

ch = getchar ( );
if (ch == 'q')
break;
}

while (k < 100) {
.
if (fonk1 ( ) < 0)
break;
.
}
.

68
continue anahtar szc o anda iinde bulunulan yinelemeyi keserek bir sonraki
yinelemeye geilmesine neden olur. Aadaki rnei inceleyiniz:


Bu rnekte k bir tamsay olduuna gre; k % 5 == 0 koulu salanyorsa k, 5 saysna
tam blnebiliyor demektir. Bu durumda continue ile dngnn devam etmesi
engellenerek sonraki yinelemeye, yani k 1 artarak dngnn bana geilmitir.

for dngs ierisinde continue kullanldnda for dngsnn nc ksm ileme
sokulduktan sonra yineleme yaplr. Dolaysyla yukardaki rnekte continue anahtar
szcnden sonra k, bir artrlarak dngye devam edilir.

4.9. DEERLENDRME SORULARI
1. Klavyeden girilen 1-25 arasndaki bir tamsaynn faktriyelini alan program yaznz.
2. klavyeden ard ardna say girii isteyen ve bu say 10 ile 15 arasnda olmad srece
bu ileme devam eden program yaznz.
3. 1den 25 e kadar olan saylarn kareleri toplamn bulan program yaznz.

4 ile 7. sorularda akrana aadaki ktlar verecek programlar uygun deyimleri
kullanarak yaznz.

4. 1 5. 1 1 1 1 6. 1 1 1 1 7. 4 4 4 4
1 2 1 1 1 1 1 1 1 3 3 3 3
1 2 3 1 1 1 1 1 1 2 2 2 2
1 2 3 4 1 1 1 1 1 1 1 1 1

8. Klavyeden 10 tane tamsay girilmesini isteyen ve bu girilen tamsaylardan ka tanesinin
negatif olduunu bulan program yaznz.
9. a,b,ve c klavyeden girilmek zere, ax
2
+bx+c=0 eklindeki bir denklemin kklerini bulan
program yaznz.
10. Klavyeden girilen 1-12 arasndaki tamsaylarn hangi aya denk geldiini bulup ekrana
yazan program yaznz.
11. Drt ileme birer kod numaras vererek, klavyeden girilen iki sayy yine klavyeden
girilen ilem koduna gre toplayan, karan, arpan veya blen program yaznz.
12. Klavyeden ard ardna girilen saylar toplayan ve girilen say negatif olduunda duran
program yaznz.
for (k = 0; k < 100; ++k){
if (k % 5 == 0)
contnue;
deyim1
}
69
13. Klavyeden bir not girilmesini isteyen ve bu not 0-49 arasndaysa Baarsz, 50-64
arasndaysa Orta, 65-84 arasndaysa yi, 85-100 arasndaysa ok iyi Yazan
program yaznz.
14. Klavyeden girilen iki tamsaydan byk olan bulup ekrana yazdran program yaznz.
15. Klavyeden girilen iki pozitif tamsaydan birincisinin ikincisi cinsinden kuvvetini alan
program hazr fonksiyon kullanmadan yaznz.

70
71




HAZIR KTPHANE
FONKSYONLARI
Blm 5





5.1. GR
C dilinin genel yaps hatrlandnda, #include szc ile
balayan derleyici n bildirilerde program ierisinde kullanlacak standart
fonksiyonlarn bal bulunduu dosyalarn C ktphanesinden programa
eklenmesi gerekir. Bunun anlam program ierisinde kullanlacak bir
fonksiyonun bal bulunduu ktphanenin programa dahil edilmesi
gerekir. Bu blmde C ktphaneleri ve bu ktphanelere bal baz
standart fonksiyonlarn kullanm anlatlacaktr. C dilinde tanml
ktphane dosyalar aada verilmitir.


Ktphane
Dosyas
Aklama
Math.h Matematiksel fonksiyonlar
Stdlib.h Standart ktphane alt programlar
Stdio.h C iin stream alt programlar
Conio.h Ekran ve iskele G/ fonksiyonlar
String.h Karakter dizisi fonksiyonlar
Io.h Dosya ileme ve dk seviyeli G/ fonksiyonlar
Time.h Tarih ve saat fonksiyonlar

Tablo 5.1. Hazr Ktphane Fonksiyonlar

72
BLM -5- HAZIR KTPHANE FONKSYONLARI


Blmn Genel Amac: Hazr ktphane fonksiyonlarn aklama.


Blmn Davransal Amalar: Kitabnzn bu blmn baaryla bitirip, uygulamalar
yapp, deerlendirme sorularna doru cevap verdiiniz taktirde, blm sonunda;

Math.h fonksiyonlarn aklamanz,
Stdlib.h fonksiyonlarn aklamanz,
Stdio.h fonksiyonlarn aklamanz,
Conio.h fonksiyonlarn aklamanz,
String.h fonksiyonlarn aklamanz,
Time.h fonksiyonlarn aklamanz,
Dos.h fonksiyonlarn aklamanz beklenmektedir.


Deerlendirme: Blm sonundaki deerlendirme sorularn yapmanz ve sonularnz
uygulama raporlar ile karlatrmanz ve deerlendirme sorularna en az %75 doru
cevap vermeniz gerekmektedir.



















73

5.2. MATH.H FONKSYONLARI
Bu ktphane geni bir matematik fonksiyon grubuna sahiptir ve matematik, cebir
ve trigonometri ilemlerini yapabilmemize olanak tanr. Bu fonksiyonlar arasnda
trigonometrik fonksiyonlar kullanlrken deikenlerin radyan cinsinden olmas gerektii
unutulmamaldr. Matematiksel fonksiyonlarn ou math.h ktphanesinde verilmi
olmasna ramen matematiksel fonksiyonlardan bazlar stdlib.h da tanmlanmtr. Bu
fonksiyonlar ad geen ktphane blmnde ele alnacaktr. Tablo 5.2de math.h
fonksiyonlarndan en ok kullanlanlar verilmitir.


Fonksiyon
Tipi
Fonksiyonlar
Trigonometrik sin(x), cos(x), tan(x)
Ters Trigonometrik asin(x), acos(x), atan(x), atan2(y,x)
Hiperbolik sinh(x), cosh(x), tanh(x)
Logaritmik log(x), log10(x)
stel exp(x), ldexp(x),pow(x,y), sqrt(x), hypot(x,y), poly(x,d,c[ ] )
Yuvarlatma ceil(x), floor(x)
Mutlak Deer abs(x), labs(x), fabs(x)

Tablo 5.2. Math.h Fonksiyonlar

5.2.1 Trigonometrik Fonksiyonlar

sin (x): Radyan cinsinden verilen x deerinin sins deerini hesaplar.

cos (x): Radyan cinsinden verilen x deerinin kosins deerini hesaplar.

tan (x): Radyan cinsinden verilen x deerinin tanjant deerini hesaplar.

5.2.2 Ters Trigonometrik Fonksiyonlar

asin (x): Verilen x deerinin arg sins deerini hesaplar, x deeri 1 ile +1 arasnda
olmaldr. Sonu -t/2 ile +t/2 arasnda kar. Eer x deeri tanm aralnn dnda bir
deer verilirse errnoya domain hatas anlamna gelen EDOM yerletirilir ve geri dnen
deer 0 olur.

acos (x): Verilen x deerinin arg kosins deerini hesaplar, x deeri 1 ile +1 arasnda
olmaldr. Sonu 0 ile t arasnda kar. Hata durumunda errnoya EDOM yerletirilir.


74
atan (x): Verilen x deerinin arg tanjant deerini hesaplar. kan deer -t/2 ile +t/2
arasndadr.

atan2 (y,x): Bu fonksiyon arctan(y/x) deerini hesaplar.

5.2.3 Hiperbolik Fonksiyonlar

sinh(x): Verilen x deerinin hiperbolik sins deerini hesaplar.
sinh( )
2
x x
e e
x

=
cosh(x): Verilen x deerinin hiperbolik kosins deerini hesaplar.
cosh( )
2
x x
e e
x

+
=
tanh(x): Verilen x deerinin hiperbolik tanjant deerini hesaplar.
tanh( )
x x
x x
e e
x
e e

=
+


5.2.4 Logaritmik Fonksiyonlar

log(x): Verilen x deerinin e tabanna gre doal logaritmasn hesaplar. Matematikte
ln(x) olarak bilinir ve logaritmas alnan deerler sfr ve sfrdan kk olamaz.

log10(x): Verilen x deerinin 10 tabanna gre logaritmasn hesaplar. Yine bu
fonksiyonun x deerleri sfr ve sfrdan kk olamaz.

5.2.5 stel Fonksiyonlar

exp(x): Euler saysnn x inci kuvvetini hesaplar.

ldexp(x,n): Bu fonksiyon 2
n
x deerini hesaplar.

pow(x,y): Bu fonksiyon
y
x deerini hesaplar. x=0 iken y s 0 veya x<0 iken y bir tamsay
deilse hata oluur. Sfrn sfrnc kuvveti iin 1 deeri retilir.

sqrt(x): Verilen x deerinin karekkn hesaplar. Burada x sfra eit ve byk olmaldr.

Hypot(x,y): Hipotens deerini
2 2
x y + hesaplar.

75
5.2.6 Yuvarlama Fonksiyonlar

ceil(x): Verilen x gerel saysn xden kk olmayan tamsayya yuvarlama ilemini
yapar.



rnek 5.1

ceil(5.36) 6
ceil(4.01) 5
ceil(-19.423) -19
ceil(1.000001) 2

floor(x): Verilen x gerel saysn xden byk olmayan tamsayya yuvarlama ilemini
yapar.

rnek 5.2

floor(5.36) 5
floor(4.01) 4
floor(-19.423) -20
floor(1.000001) 1

5.2.7 Mutlak Deer Fonksiyonlar

abs(x): int tipinde verilen x deerinin mutlak deerini hesaplar. int tipindeki bir alan
dndaki say iin yanl sonu elde edilir.

rnek 5.3

abs(-456) 456
abs(23) 23
abs(-32768) -32768 (Yanl sonu, nk int snr dnda bir tamsay)

labs(x): long tipindeki x saysnn mutlak deerini hesaplar.

fabs(x): double tipindeki x saysnn mutlak deerini hesaplar.

5.3. STDLIB.H FONKSYONLARI

Standart ktphane olarak ifade edilen bu ktphanede veri dnm, bellek yerleimi
ve dier ilemleri ieren makro ve bir grup gl fonksiyonlar bulunur. Ayrca Math.h da
bulunmayan baz matematiksel fonksiyonlar bulunmaktadr. Bu fonksiyonlar veya
makrolarn aklamas Tablo 5.3de toplu halde verilmitir.

76



Fonksiyon veya Makro ad
Aklama
exit( ) Programn almasn durdur
lrotl( ) Unsigned long sayy sola dndr
lrorr( ) Unsigned long sayy saa dndr
rotl( ) Tamsayy sola dndr
rotr( ) Tamsayy saa dndr
atexit( ) Fonksiyondan karken kaydet
atof( ) Karakter katarn float sayya evir
atoi( ) Karakter katarn int sayya evir
atol( ) Karakter katarn long int sayya evir
bsearch( ) kili diziyi ara
calloc( ) Dinamik bellek kullanmn balat
ecvt( ) float sayy karakter katarna evir
free( ) Dinamik yerletirilmi diziyi serbest brak

Tablo 5.3. Stdlib.h Ktphanesi Fonksiyonlar


5.3.1 Stdlib.h Ktphanesinde Verilmi Matematiksel Fonksiyonlar

Max(x,y) ve Min(x,y): Bu iki fonksiyon verilen iki say olan x ve y deerlerini
karlatrarak en byk ve en kk olan deeri bulan fonksiyonlardr ve aada
gsterilen makrolar olarak tanmlanmtr.

#define max(x,y) ((x > y) ? (x) : (y))
#define min(x,y) ((x < y) ? (y) : (y))

div(x,y): Verilen iki int tamsayy bler.

rand: Bu fonksiyon 0 ile RAND_MAX arasnda 2
32
peryotlu rastgele bir say retir.
Sembolik sabit RAND_MAX, stdlib.h iinde tanmlanmtr ve deeri 2
15
-1 dir.

Dier rastgele say retme fonksiyonlar random, srand, randomize dir. Bu fonksiyonlar
simlasyon programlarnda belli aralkta rasgele say retmek iin kullanlr.


5.4. STDIO.H FONKSYONLARI

Bu ktphane dosyalarla ilgili bir ktphanedir. En ok kullanlan dosya komutlar Tablo
5.4de verilmitir.

77





Fonksiyon
Anlam
fclose Dosyay kapatr
fcloseall Tm dosyalar kapatr
fgetc Dosyadan karakter alr
Fgetchar Karakter alr
Fgets Dosyadan karakter katar alr
Fopen Dosya aar
Fprintf Dosyaya formatl yaz yazar
Fputc Dosyaya karakter yazar
Fputchar Karakter gsterir
Fscanf Dosyadan formatl okur
Fwrite Yapsal dosyaya veri kaydeder
Getc Dosyadan karakter alr
Getchar Karakter alr
Printf Ekrana formatl yazar
Putc Fputc fonksiyonu ile ayn ilevi yapar, fark makro olmasdr
Putchar Fputchar fonksiyonu ile ayn ilevi yapar, fark makro olmasdr
scanf Ekrandan formatl okur

Tablo 5.4. Stdio.h Ktphanesi Fonksiyonlar


5.5. CONIO.H FONKSYONLARI
Bilgisayar ekrann en iyi kullanmak iin gerekli bir ktphanedir. Pencere ama,
ekran modunu kontrol etme, renk belirleme gibi ekran ilemleri bu ktphanede yaplr.
Tablo 5.5 de en ok kullanlan conio.h fonksiyonlarndan bazlar verilmitir.


Tablo 5.5: Conio.h Ktphanesi fonksiyonlar

Fonksiyon
clreol
clrscr
delline
getch
gotoxy
highvideo
insline
lowvideo
normvideo
textbackground

78
textcolor
wherex
wherey
window

Tablo 5.5. Conio.h Ktphanesi Fonksiyonlar

- clreol( ): Krsrn bulunduu yerden itibaren satrn sonuna kadar olan tm
karekterleri ekrandan siler. Krsr olduu yerde kalr.

- clrscr( ): Ekran temizler. Krsor ilk satr, ilk stuna konumlanr.

- delinle( ): Krsrn bulunduu satr siler.

- getch( ): Karakteri gstermeden, bir karakter girilmesini bekler.

- gotoxy(stun,satr): Krsrn ekranda, istenilen satr ve stuna gitmesini
salar.

- highvideo( ): Karakterlerde parlak tonu seer.

- insline( ): Krsrn bulunduu yere yeni bir satr aar.

- lowvideo( ): Karakterlerde soluk tonu seer.

- normvideo( ): Grnt rengini ilk renge dntrr.

- textbackground(renk): Ekrann zemin rengini, renk ile belirtilen renge evirir.

- textcolor(renk): Ekrann yaz rengini, renk ile belirtilen renge evirir.
- wherex( ): Krsrn o anda bulunduu stun numarasn saklar.

- wherey( ): Krsrn o anda bulunduu satr numarasn saklar.

- window(x1,y1,x2,y2): Ekran zerinde bamsz pencere oluturur. Oluturulan
pencere bal bana bir ekran gibidir.

5.6 STRING.H FONKSYONLARI
Hafzada bulunan karakter dizileri (string) ile ilgili ilemler iin kullanlr. Tablo 5.6
da en ok kullanlan string.h fonksiyonlarnda bazlar verilmitir.


79
Fonksiyon
Tipi
Fonksiyonlar
Birletirme strcat, strncat
Deitirme strlwr, strupr, strset, strrev
Arama strchr
Kopyalama strcpy, strncpy
Karlatrma strcmp, strncmp

Tablo 5.6 String.h Ktphanesi Fonksiyonlar

5.6.1 Birletirme Fonksiyonlar

strcat(s1,s2): s1 ile belirtilen stringin sonuna, s2 ile belirtilen stringi ekler.

Strncat(s1,s2,n): s1 ile belirtilen stringin sonuna, s2 ile belirtilen stringin n tane
karakterini ekler.

5.6.2 Deitirme Fonksiyonlar

strlwr(s1): s1 karakter dizisindeki tm harfleri kk harfe evirir.

strupr(s1): s1 karakter dizisindeki tm harfleri byk harfe evirir.

Strset(s1,karakter): Parametre olarak verilen stringin tm karakterlerini yine parametre
olarak verilen karaktere evirir.

Strrev(s1): s1 stringini tersden okur.

5.6.3 Arama Fonksiyonlar

strchr(s1,karakter): s1 stringi iersinde karakteri arar. Karakter bulununca arama durur
ve ilk bulduu yerin adresini geri dndrr.


5.6.4 Kopyalama Fonksiyonlar

strcpy(s1,s2): s2 stringinin deerini s1 stringine kopyalar.

strncpy(s1,s2,n): Bir stringin batan itibaren n karakterini baka bir stringe kopyalar.


80
5.6.5 Karlatrma Fonksiyonlar

strcmp(s1,s2): ki stringin, ilk karakterden balayarak ASCII kodlarn karlatrr.
Karlatrma sonucu olarak, bu komut 0,-,+ deerlerinden birini retir.

strncmp(s1,s2,n): ki stringin ilk n karakterini karlatrr.

5.7 TIME.H FONKSYONLARI
Zaman ile ilgili ilemler iin kullanlr. En ok kullanlan time.h fonksiyonlarndan
ikisi aada verilmitir.


- clock( ): Fonksiyonun altrld andaki sistemin saatini alr.
- time( ): Gnn saat bilgisini saniye olarak verir.

5.8 DOS.H FONKSYONLARI
En ok kullanlan dos.h fonksiyonlarndan bazlar Tablo 5.7 de verilmitir.


Fonksiyon
delay
sleep
sound
settime
gettime
setdate
getdate

Tablo 5.7. Dos.h Ktphanesi Fonksiyonlar


- delay(x): x milisaniye kadar programn almasn durdurur.
- sleep(x): x saniye kadar programn almasn durdurur.
- sound(x): x frekansnda ses retir.
- settime(z): Sistemin zaman bilgisini deitirmek iin kullanlr.
- gettime(z): Sistemin zaman bilgisini renmek iin kullanlr.
- setdate(z): Tarih bilgisini deitirmek iin kullanlr.
- getdate(z): Tarih bilgisini almak iin kullanlr.

5.9 DEERLENDRME SORULARI

Aadaki program paralar altrldnda ekran ktlar ne olur?

81
1.








2.
#include<stdio.h>
#include<conio.h>
#include<math.h>
int a,b;
void main()
{
clrscr();
a=ceil(-4.00001);
b=ceil(7.892);
printf("a=%d",a);
printf("\nb=%d",b);
getche();
}


3.

#include<stdio.h>
#include<conio.h>
#include<math.h>
int a,b;
void main()
{
clrscr();
a=floor(-4.00001);
b=floor(7.892);
printf("a=%d",a);
printf("\nb=%d",b);
getche();
}


82
#include<stdio.h>
#include<conio.h>
#include<math.h>
int a,b;
void main()
{
clrscr();
a=ceil(-4);
b=ceil(7);
printf("a=%d",a);
printf("\nb=%d",b);
getche();
}


4.
#include<stdio.h>
#include<conio.h>
#include<math.h>
int a,b,c;
void main()
{
clrscr();
a=2;
b=3;
c=pow(a,b);
printf("c=%d",c);
getche();
}



5.
#include<stdio.h>
#include<conio.h>
#include<string.h>
char s1[5],s2[]="FIRAT";
void main()
{
clrscr();
strcpy(s1,s2);
printf("s1=%s",s1);
getche();
}


6.

83
#include<stdio.h>
#include<conio.h>
#include<string.h>
char s1[]="FIRAT",s2[]="UNIV";
void main()
{
clrscr();
strcat(s1,s2);
printf("s1=%s",s1);
getche();
}






7.
#include<stdio.h>
#include<conio.h>
#include<string.h>
char s1[]="FIRAT";
int a;
void main()
{
clrscr();
a=strlen(s1);
printf("a=%d",a);
getche();
}







84
85




FONKSYONLAR
Blm 6





6.1. GR
Bir program bir grevi yerine getirmek iin yazlr. Eer yaplacak i
pek kolay deilse program olduka uzun olabilir. Baz programlar
onbinlerce satr uzunluunda olabilir. Byle durumlarda, esas grevi
daha kk ve kolay idare edilebilir alt grevlere ayrmadan yerine
getirmek hemen hemen olanakszdr.
C, byle alt grevleri ifade etmek ve birbirinden ayrmak iin bir
yntem ngrmektedir. C sadece bir tek altprogram eidi
salamaktadr, bu da fonksiyondr. Bu blmde fonksiyon tanm ve
kullanm hakknda bilgiler edinilecektir.


86
BLM -6- FONKSYONLAR



Blmn Genel Amac: Fonksiyonlarn tanmlanmas ve kullanlabilmesi


Blmn Davransal Amalar: Kitabnzn bu blmn baaryla bitirip, uygulamalar
yapp, deerlendirme sorularna doru cevap verdiiniz taktirde, blm sonunda;

Fonksiyon tanmlamanz
Fonksiyon armanz
Fonksiyonlar program iinde kullanmanz

Deerlendirme: Modl sonundaki uygulamalar yapmanz sonular uygulama raporu ile
karlatrmanz ve deerlendirme sorularna en az % 75 dzeyinde doru cevap
verebilmeniz gerekmektedir.
87
6.2. FONKSYONLAR

Fonksiyon, belirli sayda verileri kullanarak bunlar ileyen ve bir sonu reten komut
grubudur.
Fonksiyonda elde edilen sonu deerinin mutlaka return komutu kullanarak programa
yollanmas gerekir.

Fonksiyonlar, programlarn etkinliini artrmann; kolay yazlmalar ve
okunmalarn salamann, bellekte daha az yer kaplamalarn salamann en
uygun yoludur.
Programn herhangi bir yerinde yazlan bir fonksiyonu, programn her
tarafnda tekrar tekrar ararak altrma olana bulunmaktadr.
Fonksiyonlar, programn btnnden bamsz olarak yazlrsa, dier
programlarda kullanmas iin sadece kopyalamak yeterli olacaktr.


Yazlan tm fonksiyonlar sadece main() fonksiyonu iinden arlarak kullanlabilir.


Geri Dn Deerinin Tr Fonksiyon smi (VeriTipi Parametre Ad.....)
{
blok
return
}


C'de altprogramlara fonksiyon (function) denir. Her fonksiyon faydal birtakm ilemleri (bir
ilevi) yerine getirmek iin tasarlanr ve arlr. Fonksiyonlarn, onlar aran
fonksiyonlardan aldklar girdileri ve yine onlar aran fonksiyonlara gnderdikleri
ktlar vardr.

Fonksiyonlarn girdilerine parametre ya da argman denilir.


6.3 FONKSYON PARAMETRELER

6.3.1 Fonksiyonlarn geri dn deerleri (k)

Bir fonksiyonun arlmas sonunda onu aran fonksiyona dnnde gnderdii
deere geri dn deeri (return value) denir. Geri dn deeri, bir deikene atanabilir
ya da dorudan matematik ilemlerde kullanlabilir.




88


x=fonk(); (deikene atama)
[nce fonk() alr. Geri dnen deer x'e atanr.]

x=fonk() + y; (ilemde kullanma)
[nce fonk() alr. Geri dnen deerle y toplanp, x'e atanr.]

biiminde kullanlabilir.

Fonksiyonlarn geri dn deerlerinin kullanm amalar

- Baz fonksiyonlar bir tek deer elde etmek amacyla tasarlanmtr. Elde
edilen deer, kendilerini aran fonksiyonlara geri dn deeri biiminde iletilir.

a=sqrt(x); sqrt fonksiyonunun amac x saysnn karakkn bulmaktadr. Sonu geri
dn deeri biiminde a deikenine atanmaktadr.

- Baz fonksiyonlarn geri dn deerleri yaplan ilemin baars hakknda
bilgi verir.
Yani bu tr fonksiyonlarn geri dn deerleri test amacyla kullanlmaktadr. Geri dn
deeri: "lem baarl olmu mudur ya da neden baarsz olmutur?..." gibi sorulara
yant verir.

rnein:
p=malloc(size);
ifadesiyle bellekte size byte uzunluunda bir blok tahsis isteyen programc bu ilemin
baarl bir biimde getirilip getirilmediini de test etmek zorundadr. Hemen arkasndan p
deikeninin ald deeri kontrol edecek ve ilemin baars hakknda bir karara
varacaktr.

- Kimi fonksiyonlar hem belli bir amac gerekletirirler hem de buna ek
olarak amalarn tamamlayan bir geri dn deeri retirler.
rnein:
c=printf("Merhaba\n
");
printf fonksiyonu ekrana merhaba yazsn yazmak iin
kullanlmtr. Ancak ekrana yazd karakter saysn da geri dn deeri olarak
vermektedir.

- Bazen geri dn deerlerine hi ihtiya duyulmaz.
rnein, yalnzca ekran silme amacyla tasarlanm olan bir fonksiyonun herhangi bir
geri dn deerine sahip olmas gereksizdir.
clrscr(); clrscr fonksiyonu yalnzca ekran siler; byle bir fonksiyonun geri dn deerine
gereksinimi yoktur.

Fonksiyonlarn geri dn deerleri herhangi bir trden olabilir. Geri dn deerlerinin
trleri fonksiyonlarn tanmlanmas srasnda belirtilir.

Bir fonksiyonun parametresi ve/veya geri dn deeri olmayabilir.

89
float a1(void) { } veya
float a1( ) { } a1 fonksiyonu parametreye (giri deerine) sahiptir.
void x1 (void) { } x1 fonksiyonu geri dn deerine de parametreye de (giri deeri)
sahip deildir.

#include <stdio.h>
#include <math.h>
void uyari(void)
{
puts("Uyari: Negatif sayinin karakoku alinmak
istedi.");
}

float x, sonuc; //Global degisken tanimlamasi
main()
{
printf("Bir sayi giriniz : ");
scanf("%f",&x);
if (x>0.0)
{
sonuc=sqrt(x);
printf("sonuc= %f\n",sonuc);
}
else uyari();
}
kts:
Bir sayi giriniz : -9
Uyari: Negatif sayinin karakoku alinmak istendi.
rnek 6. 1 Fonksiyon Tanmlama

Fonksiyon tanmlarken geri dn deerinin tr yerine hi bir ey yazlmazsa C
derleyicileri geri dn deerinin trnn int olduunu varsayarlar.

rnein:

y1 ( ) { .... }
y1 fonksiyonunun parametresi yoktur; ancak geri dn deeri int trndendir.

C'de fonksiyon iinde fonksiyon tanmlanamaz.







90


Yanl
Fonksiyon iinde fonksiyon
tanmlanmtr.
Doru
nt fonksiyon1 ()
{
....
int fonksiyon2 ()
{
....
}
....
}
int fonksiyon1 ()
{
....
}

int fonksiyon2 ()
{
....
}



arlan fonksiyon ile aran fonksiyon arasnda balant kurma ilemi, balama
aamasnda, balayc program (linker) tarafndan yaplr.

C programlarnn alabilmesi iin mutlaka main fonksiyonunun bulunmas gerekir. main
fonksiyonu yoksa balama aamasnda, balayc program tarafndan bildirilecektir.



return ANAHTAR SZC


ki nemli ilevi vardr.

1. Fonksiyonlarn geri dn deerini oluturur.
2. Fonsiyonlar sonlandrr.

return anahtar szcnn kullanlmas zorunlu deildir. Eer return anahtar szc
yoksa fonksiyon, ana blou bitince kendiliinden sonlanr.

Fonksiyonlarn yalnz bir tane geri dn deeri olabilir. Dier bir deyile kendisi aran
fonksiyona bir tane dn deeri gnderebilir.
Fonksiyonlardan birden fazla geri dn deeri karabilmek gstericiler (pointers) ve
yaplar (structures) ile mmkndr


6.3.2 Fonksiyonlarn giri Deerleri

Fonksiyon parametrelerinin tanmlanmas
91
1. Eski biim 2. Yeni biim
int topla (a, b)
int a, b;
{
return a+b;
}
int topla (int a, int b)
{
return a+b;
}

Arguman listesine, fonksiyona aktarlacak olan deerlerin saklanaca yerel deiken
adlar yazlr. Fonksiyona aktarlan deerlere formal parametre ve sakland
deikenlere de formal deiken denir. Formal deikenler, ayn yerel deikenler gibi
bildirildii fonksiyon yrtld anda geerlidir. Programn ak fonksiyondan kp,
aran yere dnd anda yerel deikenler ve formal deikenler iin kullanlan bellek
alan serbest braklr.



















rnek 6. 2 Fonksiyon Tanmlama



#include<stdio.h>
int topla( int a, int b) /* fonksiyon tanimlanmasi*/
{
int c;
c = a + b;
return c;
}
main()
{
int i=1;

printf("fonksiyon calismadan once i'nin degeri=%d\n", i);

i = topla(i,i); /* fonksiyon calistiriliyor*/

printf(" fonksiyon calistirildiktan sonra i'nin degeri= %d\n",
i);
}


92
int sayac = 0; /*butun bloklarin disinda oldugu icin global
degisken*/

int fonksiyon(void);

main()

{

sayac++; /* global degisken*/

printf("\n\nfonksiyon cagrilmadan once sayacin degeri= %2d\n",
sayac);

fonksiyon(); /* fonksiyon cagrildi*/

printf("fonksiyon cagrildiktan sonra sayacin degeri= %2d\n", sayac);

}

int fonksiyon(void)

{

int sayac = 10; /* yerel degisken*/

printf("\tfonksiyonun icinde sayacin degeri= %2d \n", sayac);

}

rnek 6. 3 Deiken Tanmlama


/*Kombinasyon hesabi*/

/*C(n,r)=n!/(r!*(n-r)!)*/

#include <stdio.h>

#include <conio.h>

int fak (int f);

93
main()

{

int n,r;

float c;

puts("\nkombinasyon hesabi: ");

puts("C(n,r)=n!/(r!*(n-r)!)");

printf("n'in degerini gir...: "); scanf("%d",&n);

printf("r'in degerini gir...: "); scanf("%d",&r);

c=(float) fak(n)/(fak(r)*fak(n-r));

printf("C=%5.2f\n",c);

getch();

}

int fak (int f)

{

int i, fa;

fa=1;

if (f<0) return 0; else if (f==0) return 1;

else

for (i=1; i<=f;i++) fa*=i;

return (fa);

}

kts:


94
/*n'in degerini gir...: 5

*r'in degerini gir...: 2

*C=10.00*/

rnek 6. 4 Kombinasyon Program

/*fibanocci serisi*/

/*1+1+2+3+5+8+13*/

#include <stdio.h>

int fibanocci(int n)

{

int a, b, c, top;

a=1; b=1; c=0; top=1;

do

{

top+=b;

c=a+b;

a=b;

b=c;

} while (b<=n);

printf("toplam=%d ", top);

}

main()

{
95

int nn=15;

/* printf("son sayiyi gir :");

scanf("%d", &nn);*/

fibanocci(nn);

getch();

}

rnek 6. 5 Fibanocci Say Program

/*x^1/1!+x^2/2!+x^3/3!+ ... + x^n/n!*/

#include <stdio.h>

int fak (int f);

int us (int xx, int u);

main()

{

int i,x,n;

float toplam, ara;

puts("hesaplanacak seri: ");

puts("x^1/1!+x^2/2!+x^3/3!+ ... + x^n/n!");

printf("x'in degerini gir..."); scanf("%d",&x);

printf("n'in degerini gir..."); scanf("%d",&n);

toplam=0;

for (i=1;i<=n;++i)


96
{

ara=(float) us(x,i)/fak(i);

printf("Dongu %d.kez calisti. %d^%d/%d!=%5.2f\n",i,x,i,i,ara);

toplam+=ara;

}

printf("sonuc=%5.2f",toplam);

getch();

}

int fak (int f)

{

int i, fa;

fa=1;

if (f<0) return 0; else if (f==0) return 1; else

for (i=1; i<=f;i++) fa*=i;

return (fa);

}

int us (int xx, int nn)
{

int i, son;
son=1;

for (i=1;i<=nn; i++) son *=xx;

return(son);
}

rnek 6. 6 Polinom Hesaplama Program

97
/* Asal Saylarn bulunmas*/
#include <stdio.h>

int asal(int);
main()
{
int i ;
int kac;
int j;

clrscr();
printf("ilk kac asal sayi listelenecek : ");
scanf("%d", &kac);

i = 2;
for (j = 1; j<=kac;i++)
if (asal(i))
{
printf("%d \t", i);
j++;
}
}
int asal(int n)
{
int i;
if (n % 2 == 0)
return (n==2);
if (n % 3 == 0)
return (n==3);
if (n % 5 == 0)
return (n==5);
for (i=7; i*i <= n; i+=2)
if (n % i == 0)
return 0;
return 1; /* say asal ise, 1 deil ise 0 deerini alr */
}
IKTISI:
ilk kac asal sayi listelenecek : 100
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229
233 239 241 251 257 263 269 271 277 281

98
283 293 307 311 313 317 331 337 347 349
353 359 367 373 379 383 389 397 401 409
419 421 431 433 439 443 449 457 461 463
467 479 487 491 499 503 509 521 523 541
rnek 6. 7 Asal Say Bulma Program

C'de fonksiyon iinde fonksiyon tanmlanmaz. Fakat program iinde
tanmlanan bir fonksiyon dier fonksiyon iinde kullanlabilir.
#include<stdio.h>
#include<conio.h>
int carp_topla (int, int); //fonksiyon prototipi
int topla (int, int); /* fonksiyon tanimlanmasi*/ //fonksiyon prototipi

main()
{
int i=1;
clrscr();
printf("fonksiyon calismadan once i'nin degeri=%d\n", i);
i = topla(i,i); /* fonksiyon calistiriliyor*/
printf(" fonksiyon calistirildiktan sonra i'nin degeri= %d\n\n\n", i);

i = carp_topla(i,i); /* fonksiyon calistiriliyor*/
printf(" fonksiyon calistirildiktan sonra i'nin degeri= %d\n", i);
}

int topla(a, b) /* fonksiyon tanimlanmasi*/
{
int c;
c = a + b;
return c;
}

int carp_topla(a, b) /* fonksiyon tanimlanmasi*/
{
int c;
c = topla(a,b)*topla(a,b); //yukarida tanimlanan topla fonksiyonu kullaniliyor
return c;
}
kts
fonksiyon calismadan once i'nin degeri=1
fonksiyon calistirildiktan sonra i'nin degeri= 2
99

fonksiyon calistirildiktan sonra i'nin degeri= 16

C++'da ayn isimli birden fazla fonksiyon tanmlanabilmektedir
(function overloading). Bu durumda C++ derleyicileri ayn isimli
fonksiyonlar parametre saylarna ve trlerine gre birbirlerinden
ayrrlar.
//Ayni isme, farkli parametreye sahip iki fonksiyonun kullanilmasi
#include<stdio.h>
#include<conio.h>

//Ayni isimde iki parametreli fonksiyon tanimlamasi
int topla (int x, int y, int z)
{int d;
x=1; y=2; z=3;
d=x+y+z;
return d;
}
//Ayni isimde uc parametreli fonksiyon tanimlamasi
int topla (int x, int y)
{int d;
x=1; y=2;
d=x+y;
return d;
}
main()
{
int i,a=1,b=2,c=10;
clrscr();
printf ("a = 1\nb = 2\nc = 3\n\n");
i = topla(a,b); /* ayni isime sahip topla fonksiyonunun
iki parametreli olani topla(int, int) calistiriliyor*/
printf ("iki parametreli fonksiyonunu\n"
"calistirildiktan sonra \ni'nin degeri= %d\n\n\n", i);

i = topla(a,b,c); /* ayni isime sahip topla fonksiyonun
Uc parametreli olani topla(int, int, int)calistiriliyor*/

printf("Uc parametreli topla fonksiyonunu\n"
"calistirildiktan sonra \n i'nin degeri= %d\n", i);
}
kts:
a = 1
b = 2

100
c = 3

iki parametreli fonksiyonu
calistirildiktan sonra
i'nin degeri= 3


Uc parametreli topla fonksiyonu
calistirildiktan sonra
i'nin degeri= 6
rnek 6. 8 Fonksiyon Tanmlama
6.3.3 Fonksiyonlarn kendi kendilerini armas (Recursive)

Bir fonksiyonun kendi kendini armas, ilev bakmndan bir baka fonksiyonu
armasndan farkl deildir. Bir fonksiyonun her arlmas, fonksiyonla birlikte
tanmlanm parametrelerin ve dier yerel (local) deikenlerin, yn (stack) zerinde
yeniden yaratlmas ve arlan fonksiyonun almasnn tekrar balamasna neden olur.

#include <stdio.h>

int fakt(int x)
{
int sonuc;
if (x<1) return(0);
if (x==1) return(1);
sonuc=fakt(x-1)*x;
return(sonuc);
}
main()
{
int faktor;
faktor=fakt(5);
printf("Faktoriyel=%d\n",faktor);
}
rnek 6.9 Recursive Fonksiyon

Programn almas srasnda u ilemler olmaktadr.


arm ifadeleri Geri Dnler
1. ilem --> faktor=fakt(5) 11. lem -->faktor=120
2. ilem --> faktor=fakt(4) 10. ilem--> sonuc=24*5; return(120)
101
3. ilem --> faktor=fakt(3) 9. ilem--> sonuc=6*4; return(24)
4. ilem --> faktor=fakt(2) 8. ilem--> sonuc=2*3; return(6)
5. ilem --> faktor=fakt(1) 7. ilem--> sonuc=1*2; return(2)
6. ilem --> arm yok 6. ilem--> sonuc=???; return(1)

6.4 DEERLENDRME SORULARI
1. Klavyeden girilen iki tane sayy recursive fonksiyon kullanarak toplayan program
yaznz.
2. n! deerini hesaplayan program yaznz.
3. 1+4+9+ ... +100= deerini hesaplayan program yaznz.
4. Toplama, karama, arpma ve blme ilemi yapan ve program yaznz.
5. Saatte ortalama 60 km yol giden bir aracn, klavyeden girilen mesafeyi ka saatte
gideceini hesaplayan program yaznz.
6. Klavyeden girilen 10 elemanl bir diziyi bykten ke doru sralayan bir
program yaznz.
7. [1-7] arasnda girilen sayya karlk gelen haftann gnn veren bir program
yaznz.
8. Klavyeden girilen bir saynn sondan ka basamann sfr olduunu bulan bir
program yaznz.
9. Klavyeden girilen iki saynn blmn blme ilem operatrn kullanmadan
gerekletiren bir program yaznz
10. Klavyeden girilen sayya kadar olan saylarn toplamn hesaplayan program
yaznz
11. Verilen dizide aranlan bir elemann ka defa tekrar ettiini bulan bir program
yaznz.
12. Klavyeden girilen bir saynn asal say olup olmadn test eden bir fonksiyon
yaznz
13. Klavyeden girilen bir integer dizinin en byk ve en kk elemann bulan bir
program yaznz.
14. Dardan girilen N adet tamsaynn aritmetik ortalamasn alp ekrana yazdran
program C++ dilinde kodlaynz.
15.

=
+ +
+
+
+ =
1
)) 1 ( ( 1
1
1 ) (
n
n
n
n x
x
x
x f
Serisinin toplamn bulup yazdracak program yaznz.
(x deeri dardan okutulacak ve serinin sadece ilk 75 terimi alnacak)

102
103




DZLER
Blm 7





7.1. GR

Bir dizi benzer elemanlardan oluan bir kmedir. Daha nceki
blmlerde her bir veriyi kaydetmek ve o veriyi tanmlamak iin bir
deiken kullanld, benzer tipte ok fazla veriyi bellee kaydetmek
iin dizilere bavurulur. Diziler bir boyutlu veya ok boyutlu olabilirler,
boyut says arttka ilemler biraz daha karmak hale gelebilir. C
dilinde ok boyutlu dizilere elemanlar dizi olan dizi , dizi dizileri
veya matris denir, tek boyutlu diziler ise genel olarak vektr olarak
adlandrlrlar.

104
BLM -7- DZLER



Blmn Genel Amac: Dizi kavramn anlayabilme ve ihtiyaca bal olarak
kullanabilme.


Blmn Davransal Amalar: Kitabnzn bu blmn baaryla bitirip, uygulamalar
yapp, deerlendirme sorularna doru cevap verdiiniz taktirde, blm sonunda;

Dizi kavramn aklamanz,
Tek boyutlu dizi kavramn aklamanz,
ok boyutlu dizi kavramn aklamanz,
Dizler ile karakter ileme yapabilmeniz,
lemlerde dizi kullanmn yapabilmeniz

Deerlendirme: Modl sonundaki uygulamalar yapmanz sonular uygulama raporu ile
karlatrmanz ve deerlendirme sorularna en az % 75 dzeyinde doru cevap
verebilmeniz gerekmektedir.
105
7.2. TEK BOYUTLU DZLER
Tek boyutlu dizilerin yazm biimi aadaki gibidir,
Tip dizi_ad[eleman_says] ;
Bu gsterimde ilk olarak dizi elemanlarnn bellekte depolanaca verilerin tipi, bu
elemanlara eriim yaplrken kullanlacak dizi ad, ve son olarak keli parantezler
ierisinde dizinin eleman says belirtilir.
rnek olarak; int dersnotu[7] ; gsterilebilir. Bu rnek kullanmnda dersnotu adnda
integer (tamsay) tipinde bir dizi tanmlanmtr. Bu dizinin elemanlar bellekte aadaki
gibi yerleir:
BELLEK
Dersnotu[0] Veri1
Dersnotu[1] Veri2
Dersnotu[2] Veri3
Dersnotu[3] Veri4
Dersnotu[4] Veri5
Dersnotu[5] Veri6
Dersnotu[6] Veri7
ekil 7.2 Tek boyutlu dizi elemanlarn bellekteki grnm
Dizinin ilk elemannn indisi 0 dr. Buna bal olarak dizinin son elemannn indisi de
dizinin eleman saysnn 1 eksiidir.
Dizinin herhangi bir elemanna erimek veya deitirmek iin kanc eleman olduunu
gsterir indis bilgisini vermek gerekir, rnein dersnotu[4] dizinin 5. elemann gsterir.
7.3. OK BOYUTLU DZLER
ok boyutlu bilgileri veya veri tablolarn saklamak iin kullanlr. En ok 2 boyutlu diziler
kullanlrlar, Bellekte satr dzeninde ve art arda depolanrlar. ok boyutlu dizilerin yazm
biimi aadaki gibidir,
Tip dizi_ad[satr_says][stun_says] ;
Bu gsterimde ilk olarak dizi elemanlarnn bellekte depolanaca verilerin tipi, bu
elemanlara eriim yaplrken kullanlacak dizi ad, ve son olarak keli parantezler
ierisinde dizinin satr ve stun eleman says belirtilir. Bu gsterim ekli matrisler iin
kullanlr.

106
rnek olarak; float elemanlar[3][2] ; gsterilebilir. Bu rnek kullanmda elemanlar
adnda float (gerel) tipinde iki boyutlu bir dizi tanmlanmtr.
BELLEK
elemanlar[0][0] Veri1 1. satr 1. stun
elemanlar[0][1] Veri2 1. satr 2. stun
elemanlar[1][0] Veri3 2. satr 1. stun
elemanlar[1][1] Veri4 2. satr 2. stun
elemanlar[2][0] Veri5 3. satr 1. stun
elemanlar[2][1] Veri6 3. satr 2. stun
ekil 7.3 ok boyutlu dizi elemanlarn bellekteki grnm
ok boyutlu diziler iki den fazla boyutlu olabilirler, rnein;
Int a[3][2][2] ;
Double say[2][2][3][1] ;

7.4. DZLERE BALANGI DEER ATANMASI
Dizilere balang deeri verilmesi iin yazm biimi;

Dersnotu[2]=55 ;
Elemanlar[1][0]=10.2;
a[0][1][0]=12 ;

Dizilere ilk deer tanmlama srasnda da verilebilir,

int c[3][3]={{2,4},{1,2},{2,2}};
int c[3][3]={2,4,1,2,2,2};
7.5. KARAKTER LEME (STRINGLER)
C dilinde yazlabilecek programlarda saylarn dnda metinlerle de ilem yaplabilir. Bu
tr verileri saklamak iin char veri tipi kullanlr.
String dizilerini tanmlayabilmek iin aadaki yazm ekli kullanlr;

char string_ad;

char string_dizi_ad[eleman says];

rnein;
char il;
107
char a[8] = {'E','L',,'A','Z','I',''};
char il[8]=Elaz; Bu dizinin elemanlar bellekte aadaki gibi yerleir:
BELLEK
il[0] E
il[1] l
il [2] a
il [3] z
il [4]
il [5]
il [6] \0
il [7]
ekil 7.4 String dizilerinin bellekteki grnm
rnek 7.1 Bir diziye eleman girii ve dizinin elemanlarn ekrana yazdrma

#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
int i;
int dizi[15];
printf("15 adet sayi gir \n");
for (i=0;i<15;i++)
{
printf("\ndizi[%d]=",i);
scanf("%d",&dizi[i]);
}
for (i=0; i<15; i++)
printf("dizinin %d.elemani dizi[%d]=%d\n",i+1,i,dizi[i]);
getch();
}







108

rnek 7.2 Bir diziye ilk deer atama ve dizinin elemanlarn ekrana yazdrma

#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
int i;
int dizi[5]={100,200,300,400,500};
for (i=0; i<5; i++)
printf("\ndizinin %d.elemani dizi[%d]=%d\n",i+1,i,dizi[i]);
getch();
}

Ekran kts
dizinin 0.eleman a[0]=100
dizinin 1.eleman a[1]=200
dizinin 2.eleman a[2]=300
dizinin 3.eleman a[3]=400
dizinin 4.eleman a[4]=500
rnek 7.3 Bir elemann dizide olup olmadn bulan program
#include <stdio.h>
#include <conio.h>
main()
{
int i,j,ara;
int dizi[5];
clrscr();
printf("diziyi giriniz:\n");
for (i=0;i<5;i++) scanf("%d",&dizi[i]);
printf("Sayy giriniz...");
scanf("%d",&ara);
for(i=0;i<5;i++)
if (ara==dizi[i])
{
printf("Aradnz say dizinin %d.ci elemandr\n",i+1);
break;
}
getch();
}


109



rnek 7.4 Bir dizideki en kk yada en byk eleman ve dizideki yerini bulma

#include<stdio.h>
# include<conio.h>
main()
{
int dizi[35],en,i,eleman,konum;
clrscr();
printf ("\nDizinin eleman saysn giriniz...");
scanf("%d",&eleman);
printf("\nDizi elemanlarn giriniz...");
for (i=1; i<=eleman;i++) scanf("%d",&dizi[i]);
i=1;
en=dizi[1];
konum=i;
for(i=1;i<=eleman;i++)
if(en>dizi[i]) // Eer en<dizi[i] yazlrsa en byk eleman bulunabilir
{
en=dizi[i];
konum=i;
}
printf("Dizinin en kk deeri = %d\n", en);
printf("Elemann dizideki yeri=%d\n", konum);
getch();
}










110

rnek 7.5 Eleman says dardan girilen bir dizinin elemanlarn kkten bye
doru sralama
#include<stdio.h>
#include<conio.h>
int eleman,i,,j,b[100],c;
void main()
{
clrscr();
printf(Dizinin eleman saysn giriniz:\n);
scanf(%d,&eleman);
printf(Dizi elemanlarn giriniz:\n);
for(i=0;i<eleman;i++){
printf(b[%d]:,i);
scanf(%d,&b[i]);
}
for(i=0; i<(eleman-1); i++)
for(j=i+1;j<eleman;j++)
if(b[i]>b[j])
{
c=a[i];
a[i]=a[j];
a[j]=c;
}
printf(\nSral Dizi:\n);
for(i=0;i<eleman;i++)
printf(%d\t,b[i]);
getch();
}
rnek 7.6 Elemanlar belli bir matrisi ekrana yazdrma
#include <stdio.h>
int matris[2][3]={1,2,3,4,5,6};
int i, j;
main()
{
for (i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf("%d",matris[i][j]);
printf("\n");
}
}

111


rnek 7.8 Elemanlar dardan girilen iki matrisin toplanmas
#include <stdio.h>
int matris1[3][3];
int matris2[3][3];
int matris3[3][3];
int i, j;
main()
{
for (i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf(\nmatris1[%d][%d]=,i,j);
scanf(%d%d,&matris1[i][j]);
printf(\nmatris2[%d][%d]=,i,j);
scanf(%d%d,&matris2[i][j]);
}
for (i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
matris3[i][j]=matris1[i][j]+matris2[i][j];
printf("%d",matris3[i][j]);
}
printf("\n");
}
}



















112


rnek 7.9 3x3 boyutunda bir birim matris oluturan ve ekrana yazdran program

#include<stdio.h>
#include<conio.h>
int a[3][3];
int i, j;
void main()
{
clrscr();
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j)
a[i][j]=1;
else
a[i][j]=0;
clrscr();
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf(%d,a[i][j]);
}
Printf(\n);
}
getch();
}

Ekran kts:

100
010
001















113

rnek 7.10 3x3 boyutunda a ve b matrislerini dardan okutarak c=a*b matrisini
hesaplatp yazan program:


#include<stdio.h>
#include<conio.h>
int x[2][2], y[2][2], z[2][2];
int i, j,k;

void main()
{
clrscr();
printf(1. matrisin elemanlarn giriniz\n);
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{
printf(x[%d][%d]=,i,j);
scanf(%d,&x[i][j]);
}

printf(2. matrisin elemanlarn giriniz\n);
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{
printf(y[%d][%d]=,i,j);
scanf(%d,&y[i][j]);
}
printf(\n);

for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
z[i][j]= z[i][j]+x[i][k]*y[k][i] ;

for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
printf(z[%d][%d]=%d,i, j, z[i][j]);
printf(\n);
}
getch();
}







114


Ekran kts:

1. matrisin elemanlarn giriniz
x[0][0]=2
x[0][1]=3
x[1][0]=5
x[1][1]=7

2. matrisin elemanlarn giriniz
y[0][0]=1
y[0][1]=2
y[1][0]=3
y[1][1]=4

z[0][0]=11 z[0][1]=16
z[1][0]=26 z[1][1]=38

rnek 7.11 Girilen illeri ekranda gsterme (String dizi rnei)


#include<stdio.h>
#include<conio.h>
char il[3][10];
int i;

void main()
{
clrscr();
printf(lleri giriniz:\n);
for(i=0 ; i<3 ; i++)
{
printf(ilad[%d]:,i);
scanf(%s,il[i]);
}
for(i=0 ; i<3 ; i++)
printf(%s\n,il[i]);
getch();
}

Ekran kts:
lleri giriniz:
Elaz
stanbul
Kahramanmara

Elaz
stanbul
115
Kahramanmara
7.6. DEERLENDRME SORULARI
1. Klavyeden rastgele girilen 10 sayy okuyup bu saylar tersten yazdran bir C
program yaznz?
2. Klavyeden girilen bir metnin uzunluu bulan bir C program yaznz?
3. Bir kare matrisin determinantn bulan bir C program yaznz?
4. Klavyeden girilen bir metni tersten yazdran bir C program yaznz?
5. Klavyeden girilen bir cmledeki kelimelerin sadece ilk harflerini yazdran bir C
program yaznz?
6. Klavyeden girilen bir cmledeki kelimelerin yerini bozmadan tersten yazdran bir
C program yaznz? ( rn: Ali Topu At At Topu Ali )
7. Mevcudu klavyeden girilen bir snftaki rencilerin snav sonularn okutup
ortalamasn ve en yksek notu bulan program yaznz?
8. 25 elemanl bir dizideki negatif elemanlarn toplamn bulan program yaznz?
9. 20 elemanl bir dizide ka negatif, ka pozitif ve ka tane 0 olduunu bulan ve
ekrana yazdran program yaznz?
10. 50 elemanl bir dizide deeri 0dan kk olanlar neg isimli diziye, deeri 0 ya da
0dan byk olanlar poz isimli diziye aktaran program yaznz?
11. Eleman says dardan girilen bir dizideki ift olan elemanlarn ortalamasn
bulan program yaznz?
12. n*n boyutundaki bir dizinin esas kegeni zerindeki elemanlarn ortalamasn ve
toplamn bulan program yaznz?
13. n*n boyutundaki bir matrisin satrlarn ve stunlarn toplayp ayr aryr sonular
ekranda gsteren program yaznz?
14. n*n boyutundaki bir matrisin simetrik olup olmadn bulan program yaznz?
15. n*n boyutundaki bir matrisin en byk elemann en kk elemanna bldren ve
sonucunu ekrana yazdran program yaznz?

116
117




ARETLER
Blm 8






8.1 GR

Tm bilgisayar programlama dillerinin temelinde iaretiler veri
tipleri bulunmaktadr. Turbo C' de iaretilerin kullanm en st
dzeydedir, hatta zorunludur.

Tipik olarak bir bilgisayar, ayr ayr veya bitiik gruplar halinde idare
edilebilen ardk olarak saysallatrlm veya adreslenmi hafza
hcrelerinin bir dizisine sahiptir. aretiler, hafzadaki bir yerin
adresini ( byte sra numarasn ) ieren bir deikendir.


118
BLM 8
ARETLER

Blmn Genel Amac: Turbo C programlama dilinde iaretilerin yeri ve kullanma

Blmn Davransal Amalar: Kitabnzn bu blmn baaryla bitirip, uygulamalar
yapp, deerlendirme sorularna doru cevap verdiiniz taktirde, blm sonunda;

Tanmlanmas ve Kullanm
areti Aritmetii
aretiler ve Diziler
levleri Referans Yoluyla arma
aretiler ve Yaplar
Dinamik bellek kullanm
aretilerle lgili Dier Konular


Deerlendirme: Modl sonundaki uygulamalar yapmanz sonular uygulama raporu ile
karlatrmanz ve deerlendirme sorularna en az % 75 dzeyinde doru cevap
verebilmeniz gerekmektedir.
119
8.2 TANIMLANMASI VE KULLANIMI

Bir veri blounun bellekte bulunduu adresi ieren (gsteren) veri tipidir. Tanmlama
biimi:

veri tipi *p;

p deikeni <veri tipi> ile belirtilen tipte bir verinin bellekte sakland adresi ierir.

int *iptr;
float *fptr;

Bu kadar tanmla sonucunda bellekte p deikeni mevcuttur. Ancak iaret ettii veri blou
yoktur. Bunun iin iki yol vardr. Birincisi kullanlan herhangi bir deikeni iaret etmek,
ikincisi ise veri blounu bo bellei kullanarak oluturmak.

8.2.1. areti deikenin var olan bir deikenin bulunduu adresi gstermesi.

Bu ilemi yapabilmek iin var olan deikenin adresinin bilinmesi gerekmektedir.

& ileci : Bir deikenin adresinin belirlenmesi iin kullanlr. Kullanm biimi:

&deiken

&i : i deikenin adresini verir.



Bellek modeline gre SSSS:OOOO veya OOOO biiminde adres yazar.

8FF8:1000

8.2.2. Veri blounu bo bellei kullanarak oluturmak.

Bu yolla veriler iin dinamik yer ayrlr. Bunun iin malloc ilevi kullanlr
void *malloc(n) : Bo bellekten n byte yer ayrp balang adresini dndrr.
iptr = (*int) malloc(2);
!!!!!!!!! Daha sonra dn yaplacak. sizeof, cast ileci (*tip) ...

main()
{
int i;
int *iptr;
i = 5;
iptr = &i;
clrscr();
printf("i deikeninin adresi %p\n", &i);
printf("iptr deikeninin deeri %p\n", iptr);
}

120
8.2.3. Veriye iareti deiken yoluyla eriim

Bir iaretinin gsterdii adresteki veriye erimek iin iareti deikeninin nne *
karakteri konur.




Ekranda kt :

!!! areti deikenin gsterdii adresin ierii deiken ilklendirmeden kullanlmamaldr

8.3 ARET ARTMET

areti deikenler zerinde toplama ve kartma ilemleri (++, --) geerlidir. Ancak
eklenecek deer tamsay olmaldr.
areti deikenin deeri 1 arttrld zaman deiken bir sonraki veri blounu isaret
eder. Deikenin alaca yeni deer iareti deikenin ne tip bir veri blounu iaret
ettiine baldr.

int *iptr, i;
...
iptr = &i; i deikenin adresinin 1000 olduunu varsayalm. iptr nin deeri
1000 dir.
iptr++; iptr nin deeri 1002 olur. ( int deeri iaret ettii iin)

ayn rnei double iin yaparsak
double *iptr, i;
...
iptr = &i; i deikenin adresinin 1000 olduunu varsayalm. iptr nin deeri
1000 dir.
iptr++; iptr nin deeri 1008 olur. ( double deeri iaret ettii iin)
int *iptr, i, j;
...
iptr = &i; i deikenin adresinin 1000 olduunu varsayalm. iptr nin deeri
1000 dir.
*(iptr+4)=2; 1008 adresinin ieriini 2 yapar.
main()
{
int i;
int *iptr;
iptr = &i;
*iptr = 8;
printf("i deikeninin deeri %d\n", i);
printf("iptr adresinin ierii %d\n", *iptr);
}
i deikeninin deeri 8
iptr adresinin ierii 8
121

!!! Arttrma iaret edilen veri blouna gre yaplr Yani bir sonraki veri blounun
gsterilmesi salanr.

iptr++ ; bir sonraki veri blounu gster
(*iptr)++; iptr deikeninin gsterdii adresteki deeri 1 arttr

8.4 ARETLER VE DZLER

arteiler zerinde geerli aritmetik yardmyla dizilere iareti deikenler ile erimek
mmkndr.





#include <stdio.h>
main()
{
int i[10], j;
int *iptr;

for (j=0; j<10; j++)
i[j]=j;

/* Dizinin balang adresine erimek iin ilk elemann adresi kullanlabilir &i[0] veya
dorudan */

iptr = i;

clrscr();

for (j=0; j<10; j++) {
printf("%d ", *iptr);
iptr++;
}
printf("\n");
/* iptr artk dizinin ban gstermez */

iptr = i;
for (j=0; j<10; j++)
printf("%d ", *(iptr+j));

printf("\n");
/* iptr hala dizinin ban gsterir */
getch();
}

122
rnek 8.1: areti ve dizgi kullanm.


8.5 LEVLER REFERANS YOLUYLA AIRMA

u ana yazdmz ilevlerde gnderilen parametrelerin (diziler hari) deerlerinin
deitirilmesi mmkn deil idi. lev arld zaman parametrelerin bir kopyas
kartlp ileve gnderiliyordu. Bir ilevin birden fazla deer gnderebilmesi iin
iaretilere gereksinimiz vardr.


kt :


void arttir(int);
main()
{
int i;
i = 5;
printf("ncesi %d\n", i);
arttir(i);
printf("sonras %d\n", i);
getch();
}
void arttir(int k)
{
k++;
}
#include <stdio.h>
main()
{
char *a="1234567890";
char b[11];
char *p1, *p2;

printf("%s\n", a);
p1 = a;
p2 = b;
while (*p1 != '\0') {
*p2 = *p1;
p1++;
p2++;
}
printf("%s\n", b);
}
ncesi 5
sonras 5
123
Gnderilen parametrenin kopyas ileve gnderildii iin ilev ierisinde yaplan
deiiklikler ilevin arld yeri etkilemez. Eer parametredeki deiikliklerin ilevin
arld yerde de geerli olmasn istiyorsak ileve parametrenin adresini gndermek
gerekir.


kt :


rnek 8.2: Saysal dizgiyi tamsayya dntren ilevde iyiletirme. Geersiz karakterin
konumu da verilsin.
ncesi 5
sonras 6
void arttir(int*);
main()
{
int i;
i = 5;
printf("ncesi %d\n", i);
arttir(&i);
printf("sonras %d\n", i);
getch();
}
void arttir(int *k)
{
(*k)++;
}

124















rnek 8.3: Sraya dizme. Yer deiiklii ilevde ve parametrelere referans yolu ile eriim.

int deger(char *s, int *konum)
konum = -1 ise tm karakterler rakam
>=0 ise geersiz karakterin konumu
125



!!! Dizilerde iareti olduu iin a deikeni bir dizi(veya iareti ise)
a[i] ile *(a+i) ifadeleri ayn anlam tar.





rnek 8.4: leve gnderilen dizinin ilev ierisinde iareti olarak kullanm.

#include <stdio.h>
#include <conio.h>
#define N 20
void degistir (int *, int *);

main()
{
int s[N];
int i, k;
clrscr();
for (i=0; i<N; i++) {
s[i] = rand() % 100;
printf("%4d",s[i]);
}
printf("\n");
k=1;
do {
k=0;
for (i=0; i<N-1; i++)
if (s[i] > s[i+1]) {
degistir (&s[i], &s[i+1]);
k = 1;
}
} while (k);
for (i=0; i<N; i++)
printf("%4d",s[i]);
printf("\n");
getch();
}

void degistir (int *a, int *b)
{
int gec;
gec = *a;
*a = *b;
*b = gec;
}

126


rnek 8.5: ileve gnderilen iaretinin ilev ierisinde dizi olarak kullanm .

void malloc(n): En az n byte uzunluunda bellekten yer ayrr. levin deeri
>0 ise bloun bellekteki yeri, NULL yer yok demektir.

int *i;
i = (int *) malloc(2000) ; 2000 byte yer ayrp bloun balang adresini i 'ye atar
( 1000 elemanl int dizisi )
double *x;
x = (double *) malloc(8*2000); 2000 elemanl double dizi

sizeof(n) : n ifadesinin/tipinin byte olarak uzunluunu verir.
i = (int *) malloc(1000*sizeof(int)) ; 1000 tane int deer ierecek bellek uzunluu

x = (double *) malloc(2000*sizeof(double)); 2000 elemanl double dizi

void free (void *block) : mallock ilevivi tersi. Block deikenin tuttuu yeri bo bellee
gnderir

#include <stdio.h>
#include <conio.h>
#define N 5

float ort (int *);

main()
{
int s[N];
int i, k;
clrscr();
for (i=0; i<N; i++) {
s[i] = rand() % 100;
printf("%4d",s[i]);
}
printf("\n");
getch();
}
float ort (int *a)
{
int i;
float t = 0;
for (i=0; i<N; i++)
t = t + *(a+i);
return t/N;
}
127


rnek 8.6: Bir dizinin elemanlarnn iareti olmas.

Daha nce yaplan bir rnekte ay isimleri bir dizide saklanmt.




main()
{
char *aylar[] = {"", "Ocak", "ubat", "Mart", "Nisan",
"Mays", "Haziran", "Temmuz", "Austos",
"Eyll", "Ekim", "Kasm", "Aralk"};
int i;
printf("Ayn srasn gir "); scanf("%d", &i);
if (i>0 && i<13)
printf("%s\n", aylar[i]);
getch();
}
#include <stdio.h>
#include <conio.h>
#define N 8
float ort (int []);

main()
{
int *s;
int i, k;
s = (int *) malloc(2*N);
clrscr();
for (i=0; i<N; i++) {
s[i] = rand() % 10;
printf("%4d",*(s+i));
}
printf("\n");
printf("Ortamala = %.2f\n",ort(s));

getch();
}
float ort (int a[])
{
int i;
float t = 0;
for (i=0; i<N; i++)
t = t + a[i];
return t/N;
}

128
Benzer ekilde

float *a[100];

tanmlamas her bir eleman bellekte bir 'float' sayy gsteren iareti olan 100 elemanl
bir dizidir.

rnek 8.7 : Bir iaretinin adresini ieren iaretiler.



Ekrana kt:




8.6 ARETLER VE YAPILAR

Bir iareti ileve parametre olarak gnderildiinde basit deiken gibi deikenin kopyas
alnp gnderiliyordu. Yapnn byk olduu durumlarda bu da sorun kartr. aretinin
bir yap verisini gstermesi.

struct ogrenci{
char no[10];
int notu;
};

struct ogrenci *a
i ve &i : 5 8FDD:1000
*iptr ve iptr : 5 8FDD:1000
*iptrptr ve iptrptr : 8FDD:1000 8FDD:0FFC
main()
{
int i;
int *iptr;
int **iptrptr;
i = 5;
iptr = &i;
iptrptr = &iptr;
clrscr();
printf(" i ve &i : %d %p\n", i, &i);
printf(" *iptr ve iptr : %d %p\n", *iptr, iptr);
printf("*iptrptr ve iptrptr : %p %p\n", *iptrptr, iptrptr);
getch();
}
129

Tanmlamasnda a deikenini oluturan alanlara erimek iin, bilinen yol:

*a.notu=56;
strcpy((*a).no, "95001");

Bunun farkl kullanm:
a->notu=56;
strcpy(a->no, "95001");


rnek 8.8: Yapnn adresinin ileve gnderilmesi.




8.7 DNAMK BELLEK KULLANIMI
boyutlu dizi tanm ve kullanm. boyut --> Gerilim - Akm - Zaman
#include <stdio.h>
typedef struct {
char adi[35];
char adres1[40];
char adres2[40];
char tel[15];
float borc;
}
kisiler;
void yaz(kisiler *z);
main()
{
kisiler a;
clrscr();
printf("Adn gir : "); gets(a.adi);
printf("Adres-1 : "); gets(a.adres1);
printf("Adres-2 : "); gets(a.adres2);
printf("Telefonu : "); gets(a.tel);
printf("Borcu : "); scanf("%f", &(a.borc));
yaz(&a);
}
void yaz(kisiler *z)
{
clrscr();
printf("Ad : "); puts(z->adi);
printf("Adresi : "); puts(z->adres1);
printf(" : "); puts(z->adres2);
printf("Telefonu : "); puts(z->tel);
printf("Borcu : "); printf("%.0f\n", z->borc);
}

130

rnek 8.9: Tek boyutlu diziyi boyutlu gibi kullanma.

131


rnek 8.10:
/* boyutlu dinamik dizi kullanm. Her boyut farkl uzunlukta
Dizi tek boyutlu gzkyor. Ancak indis, hesaplanarak bulunuyor. Yani

*(a + i*y*z + j*z +k)
^ ^
^ ^ 3. boyutun uzunluu
^2. boyutun uzunluu

eklinde kullanlabilir. */

#define x 4
#define y 5
#define z 9
void matris_yaz(int *);
main(){
int *a; int i, j, k;
a=(int *) malloc(x * y * z * sizeof(int)); /* eleman sayisi kadar yer ac */
clrscr();
for (i=0; i<x; i++) {
printf("i = %d \n", i);
for (j=0; j<y; j++) {
for (k=0; k<z; k++) {
*(a + i*y*z + j*z +k) = i*j*k;
printf("%5d ",*(a + i*y*z + j*z +k));
}
printf("\n");
}
}
matris_yaz(a);
}
void matris_yaz(int *m)
{
int i, j, k;
clrscr();
for (i=0; i<x; i++) {
printf("i = %d \n", i);
for (j=0; j<y; j++) {
for (k=0; k<z; k++) {
printf("%5d ",*m);
*m++;
}
printf("\n");
}
getch();
}
}

132


8.8 ARETLERLE LGL DER KONULAR

/* Uc boyutlu dinamik dizi kullanimi. Her boyut farkli uzunlukta
Bu yontem ile diziye normal dizi gibi erismek mumkun
Yani
a[i][j][k]
seklinde kullanilabilir.
*/

#define x 8
#define y 4
#define z 10
main()
{
/*
typedef int *boyut1;
typedef boyut1 *boyut2;
typedef boyut2 *boyut3;
boyut3 a;
*/
double ***a;
int i,j,k;

a=(double *) malloc(x*sizeof(double*)); /* 1. boyut icin yer ayir (iaretiler) */
for (i=0; i<x; i++) /* 2. boyut icin yer ayir. (iaretiler) */
*(a+i)=(double *) malloc(y*sizeof(double*)); /* 1. boyutun her elemani n */
/* elemanli diziyi gosterir */

for (i=0; i<x; i++) /* 3. boyut icin yer ayir (matrisin elemanlar) */
for (j=0; j<y; j++)
*(*(a+i) + j) = (double *) malloc(z*sizeof(double));
clrscr();
for (i=0; i<x; i++)
for (j=0; j<y; j++)
for (k=0; k<z; k++)
*(*(*(a + i) + j) + k) = i*j*k;
for (i=0; i<x; i++) {
printf("i = %d \n", i);
for (j=0; j<y; j++) {
for (k=0; k<z; k++)
printf("%4.1f ",a[i][j][k]);
printf("\n");
}
getch();
}
}
133
aretinin Belirli Bir Adresi Gstermesi


8.8.1. lev aretileri

aretinin bir ilevin bulunduu adresi iermesi durumudur. Normal iareti gibi ilevin
adresini ieren deiken tanm yaplmaldr. rnein;

#include <dos.h>
#include <stdio.h>
char far *ekran;
void kaydir_Y(void);
void kaydir_A(void);
void main()
{
int i, j;
char c;
ekran = MK_FP(0xB800, 0);
clrscr();
for (i=0; i<25; i++)
for (j=0; j<80; j++)
ekran[160*i+2*j] = 65+i;
while (1) {
c = toupper(getch());
switch(c) {
case 'A' : /* yukari */
kaydir_Y();
break;
case 'Z' : /* asagi */
kaydir_A();
break;
case 'Q' : exit(0);
}
}
}
void kaydir_Y(void)
{
int i, j;
for (i=8; i<=12; i++)
for (j=30; j<60; j++)
ekran[160*(i-1) + 2*j] = ekran[160*i + 2*j];
}
void kaydir_A(void)
{
int i, j;
for (i=12; i>=8; i--)
for (j=30; j<60; j++)
ekran[160*(i+1) + 2*j] = ekran[160*i + 2*j];
}

134
int (*fnptr) (int, int)

fnptr deikeni iki tane int parametresi olup bir int deer geri gnderen bir ilevin adresini
ierebilir.

(int *fnptr (int, int) : iki int parametresi olup int iareti geri gnderir )

rnek 8.11: Ayn isim ile farkl iki ilevi arma.



8.8.2. Void aretiler

aretiler void olarak tanmlanabilir. Bu biimde tanmlanan iaretilerin gsterdii
adresteki deere erimek iin veri tipi belirtilmelidir.

int kare(int);
int kub(int);
main()
{
int (*islem)(int); /* bir int deer alp geriye int deer gnderen bir ilevin
adresi */
int i;
char c;
clrscr();
printf("1 / 2 : kare / kb hesab : ");
c = getch();
printf("\nSayy gir : ");
scanf("%d", &i);

if (c == '1')
islem = kare; /* kare ilevinin adresi islem deikenine kopyalanr */
else
islem = kub;
printf("Sonu = %d\n", islem(i));
getch();
}
int kare(int s)
{
return s*s;
}
int kub(int s)
{
return s*s*s;
}
135


main()
{
void *a;
a = (char*) malloc(10);
strcpy(a,"12345");
printf("%s\n", a);
free(a);
a = (double*) malloc(sizeof(double));
*(double*)a = 3.123; /* deere eriirken veri tipi belirt */
printf("%f\n", *(double *)a);
getch();
}

136
NDEKLER
NSZ .............................................................................................................................................I
NDEKLER .............................................................................................................................. II

BLM 1: PROGRAMLAMAYA GR ........................................................................... 1
1.1. GR ........................................................................................................................................ 1
1.2. PROGRAMLAMA NEDR?................................................................................................... 3
1.3. PROGRAMLAMANIN TARH ........................................................................................... 3
1.4. PROGRAMLAMA TRLER ............................................................................................... 4
1.4.1 YAPISAL PROGRAMLAMA .................................................................. 4
1.4.2 MODLER PROGRAMLAMA ................................................................ 5
1.4.3 NESNE TABANLI PROGRAMLAMA ....................................................... 6
1.4.4. OLAY TEMELL PROGRAMLAMA ........................................................ 6
1.5. PROGRAM GELTRME SREC .................................................................................... 7
1.5.1. Y BR PROGRAMIN NTELKLER ...................................................... 7
1.5.2. PROGRAM TASARLAMA ................................................................... 7
1.5.3. ARABRM GELTRME VE PROGRAMIN GRN ........................... 7
1.6 ALGORTMALAR VE AKI DYAGRAMLARI ................................................................ 8
1.6.1 ALGORTMA NEDR? ......................................................................... 8
1.6.2 AKI DYAGRAMLARI ...................................................................... 12
1.7 PROGRAMLAMA DLLER................................................................................................ 19
1.7.1 PROGRAMLAMA DLLERNN BAZI ZELLKLER ................................ 20
1.7.2 PROGRAMLAMA DLLERNN SINIFLANDIRILMASI ............................... 21
1.8 DEERLENDRME SORULARI ..................................................... 24

BLM 2: C DLNN GENEL YAPISI ........................................................................... 25
2.1. GR ...................................................................................................................................... 25
2.2. C DLNN TARH GELM .......................................................................................... 27
2.3. C DLNN AVANTAJ VE DEZAVANTAJLARI ............................................................. 27
2.4. TEMEL KAVRAMLAR ....................................................................................................... 28
2.4.1.C DLNDE PROGRAMIN YAPISI ........................................................ 28
2.4.2. C PROGRAM TANIMLAMALARI ........................................................ 30
2.4.2.1. Anahtar Szckler .................................................................................................... 30
2.4.2.2. Deimezler ............................................................................................................. 31

137
2.5. DEKEN KAVRAMI VE TEMEL VER TPLER ..................................................... 32
2.5.1. C DLNDE KULLANILAN VER TPLER ............................................. 33
2.6. DEERLENDRME SORULARI ....................................................................................... 34

BLM 3:DEKEN SABT VE OPERATRLER ..................................................... 37
3.1. GR ...................................................................................................................................... 37
3.2. DEKENLER .................................................................................................................... 39
3.3. SABTLER ............................................................................................................................. 43
3.4. C DLNDE KULLANILAN OPERATRLER ................................................................. 43
3.4.1. ARTMETKSEL OPERATRLER ....................................................... 43
3.4.2. KARILATIRMA OPERATRLER.................................................... 44
3.4.3. MANTIKSAL OPERATRLER ........................................................... 46
3.4.4. ATAMA OPERATRLER ................................................................. 46

BLM 4: DEYMLER ...................................................................................................... 51
4.1. GR ...................................................................................................................................... 51
4.2. DEYM NEDR? .................................................................................................................... 53
4.3. F DEYM ............................................................................................................................. 54
4.4. SWTCH DEYM ................................................................................................................. 57
4.5. KOUL OPERATORU ......................................................................................................... 59
4.6. GO TO DEYM .................................................................................................................... 60
4.7. WHLE DNGS ............................................................................................................. 61
4.7.1. KONTROLN BATA YAPILDII WHLE DNGLER ......................... 61
4.7.2. KONTROLN SONDA YAPILDII WHLE DNGLER ......................... 64
4.8. FOR DNGLER ............................................................................................................... 65
4.9. BREAK VE CONTNUE ANAHTAR SZCKLER ...................................................... 67
4.9. DEERLENDRME SORULARI ....................................................................................... 68

BLM 5: HAZIR KTPHANE FONKSYONLARI ................................................. 71
5.1. GR ...................................................................................................................................... 71
5.2. MATH.H FONKSYONLARI ...................................................................................... 73
5.2.1 TRGONOMETRK FONKSYONLAR ......................................................................... 73


138
5.2.2 TERS TRGONOMETRK FONKSYONLAR .............................................................. 73
5.2.3 HPERBOLK FONKSYONLAR................................................................................... 74
5.2.4 LOGARTMK FONKSYONLAR ................................................................................. 74
5.2.5 STEL FONKSYONLAR .............................................................................................. 74
5.2.6 YUVARLAMA FONKSYONLARI ............................................................................... 75
5.2.7 MUTLAK DEER FONKSYONLARI .......................................................................... 75
5.3. STDLIB.H FONKSYONLARI .................................................................................... 75
5.3.1 STDLB.H KTPHANESNDE VERLM MATEMATKSEL FONKSYONLAR 76
5.4. STDIO.H FONKSYONLARI ....................................................................................... 76
5.5. CONIO.H FONKSYONLARI ............................................................................................. 77
5.6 STRING.H FONKSYONLARI ............................................................................................ 78
5.6.1 BRLETRME FONKSYONLARI ........................................................ 79
5.6.2 DETRME FONKSYONLARI .......................................................... 79
5.6.3 ARAMA FONKSYONLARI ................................................................. 79
5.6.4 KOPYALAMA FONKSYONLARI ......................................................... 79
5.6.5 KARILATIRMA FONKSYONLARI .................................................... 80
5.7 TIME.H FONKSYONLARI ................................................................................................. 80
5.8 DOS.H FONKSYONLARI ................................................................................................... 80
5.9 DEERLENDRME SORULARI ........................................................................................ 80

BLM 6: FONKSYONLAR ........................................................................................... 85
6.1. GR ...................................................................................................................................... 85
6.2. FONKSYONLAR ................................................................................................................. 87
6.3 FONKSYON PARAMETRELER ...................................................................................... 87
6.3.1 FONKSYONLARIN GER DN DEERLER (IKI) ............................ 87
6.3.2 FONKSYONLARIN GR DEERLER................................................. 90
6.3.3 FONKSYONLARIN KEND KENDLERN AIRMASI (RECURSVE) ....... 100
6.4 DEERLENDRME SORULARI ...................................................................................... 101

BLM 7: DZLER ......................................................................................................... 103
7.1. GR .................................................................................................................................... 103
7.2. TEK BOYUTLU DZLER ................................................................................................. 105
7.3. OK BOYUTLU DZLER ................................................................................................ 105

139
7.4. DZLERE BALANGI DEER ATANMASI ............................................................ 106
7.5. KARAKTER LEME (STRINGLER) ............................................................................. 106
7. 6. DEERLENDRME SORULARI .................................................................................... 115

BLM 8: ARETLER .............................................................................................. 117
8.1. GR .................................................................................................................................... 117
8.2 TANIMLANMASI VE KULLANIMI ................................................................................ 119
8.3 ARET ARTMET ................................................................................................... 120
8.4 ARETLER VE DZLER ............................................................................................ 121
8.5 LEVLER REFERANS YOLUYLA AIRMA .......................................................... 122
8.6 ARETLER VE YAPILAR ........................................................................................... 128
8.7 DNAMK BELLEK KULLANIMI ................................................................................... 129
8.8 ARETLERLE LGL DER KONULAR .............................................................. 132



140




NSZ

Gn getike gelien teknoloji sayesinde insanlar,
eitli problemlerine zm ararken biliim
teknolojilerini byk bir yardmc olarak grmektedir.
Bu dorultuda, hemen her alanda bilgisayarn
karmak problemlerin stesinden gelmesi beklenen
bir durumdur. Beklentilere cevap verecek olan
bilgisayar yazlmlarnn gelitirilmesi phesiz
bilgisayarlarn ve biliim teknolojilerinin varl kadar
nemlidir. Bilgisayarlar, toplumun ve bireylerin
amalarna hizmet eden birer makine haline getirmek,
yazlmlarn ve onlar gelitiren yazlm gelitiricilerin
yani programclarn iidir.

yi bir programc olabilmenin ilk basamaklarn olaylara
deiik alardan bakabilmek, problemlere en ucuz ve
en abuk zkleri retebilmek ve tabiidir ki azimle
almak oluturur. Bu kitapla ilk adm atacanz
programclk dnyasnda program gelitirmenin ilk
admndan programn elde edilmesi ve varsa, bir
problemin zlmesine kadar olan sre enine boyuna
incelenecektir.

Yrd. Do. Dr. Hasan H. BALIK
141

142

EDTR: YRD. DO.DR. HASAN H. BALIK



C LE
PROGRAMLAMAYA
GR



Ahmet TEKN
Ayhan AKBAL
Bahadr SEVN
Fatih ERTAM
Harun H. TUZSUZOLU
hsan SERHATLIOLU
Kemal BALIKI
M. Fatih TALU
Musa IBUK
Ouzhan ZDEMR
Resul DA
Yaman AKBULUT
Zlf GEN




ELAZI - 2003

You might also like