You are on page 1of 155

2011 coz@sakarya.edu.

tr 1

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar








ALGORTMA VE
PROGRAMLAMAYA GR I


Yazar:
Do.Dr. Cemil z
Sakarya niversitesi



















Sakarya 2011

2011 coz@sakarya.edu.tr 2

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
nsz

Bir problemin zm iin program gelitirme ve yazma ok nemli bir aamadr.
Programlama, renmeye balayanlar iin byk bir admdr. Bu admn doru atlmas,
kiinin hzl renmesini, programlamay sevmesini ve daha verimli ve zgn program
yazmasn salayacaktr.

Program yazmn renecek kiilerin doru adm atarak ncelikle zlecek problemlerin
algoritmalarnn nasl tasarlanacan renmeleri gerekir. Programn algoritmas
hazrlanabiliyorsa, bilgisayarda bu problemin zm yaplm demektir. Tasarlanan
algoritma, btn programlama dillerinde yazlm saylr. Kodlama aamasnda bir
programlama dilinin komutlar kullanlarak gerekletirilir. Gnmzde, yzlerce derleyici,
yani programlama dili vardr. Bu programlama dillerinin komutlar kullanlarak algoritma
kolaylkla programrama dntrlebilir.

Bu kitabn amac, ok sayda rnek ile algoritma gelitirme mantnn verilmesidir. Bir
programlama dili retmek amacnda deildir. Ancak gelitirilen algoritmalarn programa
dntrlmesinde c/c++ programlama dili kullanlmtr. Bu dan dolay arlkl olarak c
programlama dili komutlar ve programlama dili de anlatlmaktadr.

c/c++ programlama dilleri, gerek zamanl programlama sistemleri, gml sitemler, oyun
programlama vb amala kullanlan en yaygn dillerdir. Belirtilen konularda yllardr
kullanldndan dolay, programlama esnasnda gemiten gelen yaygn hazr srcler ve
ktphanelerle kolaylkla yazlm gelitirilmektedir.

Bu kitap, Algoritma ve programlamaya Giri I dersinde izlenecek temel kitap olarak
dzenlenmitir. Dolays ile ncelikli kitlesi programlama renmeye balayan rencilerdir.

Kitabn, okuyuculara faydal olmas dilei ile



Do.Dr. Cemil z





2011 coz@sakarya.edu.tr 3

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
DERSN AMACI


- Bu dersin amac, bilgisayar programlamas konusuna bir giri yapmak, programlama
ile ilgili genel kavramlar ortaya koymak, algoritma kavram, algoritmalarn nasl
oluturulaca ve yapsal programlama konusuna deinmektir.

- Dersin ierisinde ayrca yapsal zellikleri ve gl olanaklar ile her programcnn
mutlaka bilmesi gereken bir dil olan C/C++ programlama dilinin temel zellikleri
algoritma kavram ile ilikili olarak ortaya konulacaktr. Ayrca eitli konularda
algoritma rnekleri verilecektir. Bylece daha sonraki derslerde detayl olarak verilen
C++, C#, Java# programa dilleri ve dier temel yazlm dersleri iin bir balang
oluturulmaktadr.


FAYDALANILABLECEK KAYNAK KTAPLAR


1. Soner elikkol, Programlamaya Giri ve Algoritmalar, Academic Book Publishing,
2007, Trabzon.

2. Vasif V. Nabiyev, Teoriden Uygulamalara Algoritmalar, Sekin Yaynclk, 2007,
Ankara.

3. Fahri Vatansever, lere Programa Uygulamalar, Sekin Yaynclk, 2006, Ankara.

4. Sefer Kurnaz, Veri Yaplar ve Algoritma Temelleri, Papatya Yaynclk, 2004,
stanbul.

5. Rifat lkesen, Programlama Sanat Algoritmalar C Dili Uygulamas, Papatya
Yaynclk, 2004, stanbul.

6. Chris H. Pappas, William H. Murray (eviri: Kadir Ertrk), C/C++ Programcnn
Rehberi, Sistem Yaynclk, 2003, Ankara.

7. Rifat lkesen, te C Programlama Dili, Papatya Yaynclk, 2003, stanbul.

8. Fahri Vatansever, Algoritma Gelitirme ve Programlamaya Giri, Sekin Yaynclk,
2002, Ankara.

9. Mustafa Dikici, Emin ztekin, Nemci Dege, Pascal Yapsal Programlama, Nesnelerle
Programlama ve Turbo Vision, Beta Basm Yaym Datm 1998, stanbul.

10. Mrit Eskiciolu, Pascal ile Yapsal Programlama, Evrim Basm Yaym Datm,
1988, stanbul.

11. Taner Derbentli, Programlama ve Fortran 77, Se Kitap Datm, 1988, stanbul.



2011 coz@sakarya.edu.tr 4

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
1. ALGORTMA KAVRAMI


- Algoritma, bir problem snfnn sistemli zm iin; sralanm, belirsizlik
tamayan, ilenebilir, sonlu, ilem admlar kmesidir.

- Algoritma, saylar kolay ve doru tanmlama sanattr. Bir ilem dizisinin sonucunu
elde etmek iin, ok iyi tanmlanm, sonlu saydaki ilem cmlelerinin btndr.

- Bilgisayar programlamasnn temel adm olan bilgisayarn ileyiine uygun zm
modelini kurmada bu gne kadar uygulanan yaklam zm algoritmas kurma
yntemidir.

- Algoritma yaklam, 9. yzylda yaam Trk-slam matematiki ve astronomu
Harzemli Mehmetin ikinci derece denklemin kolayca zm iin gelitirdii zm
ynteminin genelletirilmi eklidir ve algoritma szc onun adndan tremitir.

- Bilgisayarlar dnemez. Bu sebeple bilgisayarlarn istenen amalara uygun biimde
kullanlabilmesi iin programlanmas gerekmektedir.

- Programlama, bir ilemin bilgisayarn anlayabilecei bir biime dntrlmesi
ilemidir.

- Bir programn amaca uygun olarak alabilmesi iin, belirli aamalar yerine getirmek
gerekmektedir;

1. ANALZ: Problem analiz edilir ve zmlenir.

2. TASARIM: Yaplan zmlemeye gre algoritma tasarm/ak diyagram
oluturulur. Doruluunun mantksal snamas yaplr.

3. KODLAMA: Oluturulan algoritma/ak diyagram bir programlama dili ile
yazlr (kodlanr).

4. DERLEME: Program derlenir ve altrlr. Yazm hatalar varsa dzeltilir.

5. TEST: Program istenilen sonular retmiyor ise 1. adma dnlr ve problem
zmlenmesi ve algoritma/ak diyagram gzden geirilir ve revize edilir.

6. DOKMANTASYON: Programn dokmantasyonu oluturulur.

- Problem analizi ve zmlemesi, problemin tanmlanmas, problemin giri bilgileri ve
sonuca ulamak iin bu bilgiler zerinde yaplmas gereken ilemlerin ayrntl olarak
belirlenmesidir.

- Algoritma, bir problemin zm iin yaplmas gereken ilemlerin gereken srada,
adm, adm ve basit deyimlerle yazlm halidir.


2011 coz@sakarya.edu.tr 5

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Ak diyagram, algoritmalarn zel geometrik ekiller ile gsterilmesidir.

- Algoritmalarn ifade edilmesinde ak diyagramlarnn yan sra, konuma dili ile
programlama dili arasnda, szde kod (pseudo-code) ad verilen bir ara kullanlr.
Szde kod, programlar gibi derlenmez ve ilenmez.

- Her programc kendi szde kodunu gelitirebilir . Fakat kiisel szde kodlar bakalar
tarafndan anlalabilir bir biimde ak olmaldr.

- Derleme, bir programlama dili ile yazlan kodlarn iletilebilmesi iin makine diline
evrilmesidir.

- Makine dili, bir bilgisayarn anlayabilecei tek dildir. Makine dili ile yazlan
programlar yalnzca 0 ve 1 lerden oluur. Bu dille program yazabilmek iin CPUnun
i yapsn bilmek gerekir. Makine dilinde programlama ok karmak olduundan
makine dili kodlar simgesel (assembly) dili ile ifade edilir.

- Simgesel (assembly) dillerde,0 ve 1 ler yerine baz szckler ve simgeler kullanlr.



- Bellek, zerine bilgilerin yazlp silinebilecei hcrelerden oluur. Her hcrenin
saysal bir adresi vardr. Bu hcrelere ou kez szck (word) ad verilir.
Programlarda yaplan ilemler bellek hcrelerinde saklanan veriler zerinde yaplr.

- rnek:

1. 100 ile 101 numaral hcrelerdeki bilgileri topla, sonucu 102 numaral hcreye
yaz.
2. 100, 101 ve 102 numaral hcrelerdeki bilgileri kada yaz.
3. Dur.


2011 coz@sakarya.edu.tr 6

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Daha uzun ve karmak problemlerde hangi bilginin hangi hcrede bulunduunun
etelesinin tutulmasnn programcya byk bir yk getirecei aktr.

Bu nedenle btn programlama dillerinde hcrelerin sembolik adresleri olan deiken
kullanlr.

Deiken ayn zamanda o adreste bulunan bilginin addr.

Yukarnda verilen ilem deikenler ve aritmetik iaretler kullanlarak aadaki
ekilde yazlabilir;

1. Z=X+Y.
2. X,Y,Z yi yaz.
3. Dur.

Deiken kullanm program yazmn kolaylatrr. ki program karlatrlrsa X, Y,
Z nin sras ile 100, 101, 102 numaral hcrelerdeki bilgileri temsil ettii grlebilir.
Fakat programc asndan X bilgisinin bellein hangi adresinde yerletirildiinin
bilinmesi gerekmez.


1.1. Algoritmann zellikleri


- Algoritma kurduktan sonra bir programlama dilinde yazlmas o dilin deyim yaplarn,
kurallarn ve kullanlacak derleyiciyi bilmeyi gerektirir. Bu beceri birka aylk bir
alma sonunda elde edilebilir.

- Algoritmann kurulmas bir zmleme iidir. Programcnn belirli bir konudaki
bilgisine ve algoritma kurma deneyimine baldr. Bu nedenle algoritma kurma
becerisinin kazanlmas ok daha uzun bir alma ve zaman gerektirir.

- Algoritma kurma becerisi bir programa dilini kullanmaktaki rahatlk ve ustalkla da
doru orantldr.

- Kullanlan programlama dili algoritmay biimsel adan etkiler.

- Bir algoritmann sahip olmas gereken baz zellikler vardr. Bunlarn bir ksm
aada verilmitir ve bunlar daha da artrlabilir;

o Bilgisayarlar dnemez. Bu yzden algoritmann her adm anlalr, basit ve
kesin bir biimde ifade edilmi olmaldr. Yorum gerektirmemeli ve belirsiz
ifadelere sahip olmamaldr.

o Algoritma etkin olmaldr. Algoritmada gereksiz tekrarlar bulunmamaldr.
Algoritmalar yapsal ve modler olmal ve yazlan bir algoritma daha sonra
ihtiya duyulduunda baka algoritmalar tarafndan da kullanlabilmelidir.

o Algoritmann sonlu sayda yrtlebilir adm olmaldr.

2011 coz@sakarya.edu.tr 7

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

o Algoritmann girdi ve kts olmaldr.


1.2. rnek algoritmalar

rnek alg. 1; klavyeden girilen iki saynn toplamn bulup sonucu ekrana yazdran bir
algoritmann tasarlanmas.

Bilgisayar mant ile baktmzda sral bir ilem vardr. Yani her hangi bir karlatrma
durumu ve buna bal farkl ilemlerden biri seilmemektedir.

Algoritma szde kodlar ile ifade edildiinde aadaki ekilde yazlabilir;

Adm 1: Bala
Adm 2: Oku (a) /* sayy a deikenine oku */
Adm 3: Oku (b) /* sayy b deikenine oku */
Adm 4: c=a+b /* a says ile b saysn topla ve c ye ata */
Adm 5: Yaz (c) /* hesaplanan sonucu (c) ekrana yaz */
Adm 6: Dur /* program sonlandr */

rnek alg. 2: Bir kenar klavyeden girilen karenin alann hesaplayan ve ekrana yazdran bir
algoritmann tasarlanmas.Bu rnekte de sral bir ilem vardr.

Adm 1: Bala
Adm 2: Oku (a) /* Karenin bir kenarn a deikenine oku */
Adm 3: Kare_alan=a*b /* Karenin alann hesapla */
Adm 5: Yaz (Kare_alan) /* hesaplanan sonucu (Kare_alan) ekrana yaz */
Adm 6: Dur /* program sonlandr */

rnek alg. 3: kinci dereceden katsaylar bilinen bir fonksiyonun, klavyeden girilen x deeri
iin alaca deeri hesaplayp sonucu ekrana yazdran bir algoritma tasarlayalm. Bu rnekte
de sral bir ilem vardr.
kinci dereceden denklemimiz u ekilde olsun

F(x)=x^2+3x+4

Fonksiyonun x in -100 ile 100 arasndaki 20 artm ile izilmi grafii ekil de verilmitir. Bu
algoritmada sadece girilen bir x deeri iin bir hesap yaplacak ve sonlanacandan dolay
sral bir ilem yaplmaldr.

2011 coz@sakarya.edu.tr 8

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


Adm 1: Bala
Adm 2: Oku (x) /* x deerini x deikenine oku */
Adm 3: fx=x*x+2*x+4 /* fonksiyonun x iin deerini hesapla */
Adm 5: Yaz (fx ) /* hesaplanan sonucu (fx) ekrana yaz */
Adm 6: Dur /* program sonlandr */

rnek alg. 4: rnek 3 de verilen problemde katsaylar belli bir kinci dereceden denklemim
hesaplanmas istenmi idi, eer katsaylarda klavyeden girilecek ise ozaman algoritma
aadaki ekilde dzenlenebilir

kinci dereceden denklemimiz u ekilde olsun

F(x)=a*x^2+b*x+c

Olsun

Adm 1: Bala
Adm 2: Oku (a) /* a katsaysn a deikenine oku */
Adm 3: oku(b) /* b katsaysn b deikenine oku */
Adm 4: Oku (a) /* c katsaysn c deikenine oku */
Adm 5: Oku (x) /* x deiken deerini x deikenine oku */
Adim 6: fx=a*x*x+b*x+c /* fonksiyonun deerini hesapla */
Adm 7 Yaz (fx) /* hesaplanan sonucu (fx) ekrana yaz */
Adm 8: Dur /* program sonlandr */

rnek alg. 5: Bir rencinin dnem ierisindeki ve dnem sonundaki notlarn klavyeden
okuyan, Ylii ve Baar notunu bilinen katsaylara gre hesaplayan algoritmay tasarlayn.

rencilerin notlarn gsteren liste genelde ekil de verilen tablodakine benzerdir.
rencinin Vize, ksa snav 1, ksa snav 2 ve dev notu belli oranlarda alnarak yl ii baar
notu bulunur. Final notunun belirli bir yzdesi ile yl ii notunun %100e tamamlanacak
yzdelik oran ile baar puan bulunur. rnein
0
2000
4000
6000
8000
10000
12000
-150 -100 -50 0 50 100 150
f(x)
f(x)

2011 coz@sakarya.edu.tr 9

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Yl iine etki yzdeleri
Vizenin %60 ,
Ksa snav 1 in %10,
Ksa snav 2 in %10,
dev notunun %20,
Baar Notu
Ylii Nounun %50,
Final Notunun %50
Olsun




Bir rencinin notunu hesaplayacak ekilde algoritmay belirtilen katsaylar iin
gerekletirecek olursak

Adm 1: Bala
Adm 2: Oku (Ogr_Adi) /* renci adn, Ogr_Adi deikenine oku */
Adm 3: Oku(Ogr_No) /* rencinin nonu, Ogr_No deikenine oku */
Adm 4: Oku (Vize) /* Vize notunu, Vize deikenine oku */
Adm 5: Oku (K1) /* Ksa snav 1 notunu, K1 deikenine oku */
Adm 6: Oku (K2) /* Ksa snav 2 notunu, K2 deikenine oku */
Adm 7: Oku (Odev) /* dev notunu, Odev deikenine oku */
Adm 8: Oku (final) /* final notunu, final deikenine oku */
Adm 9: Yilici=0,60*Vize+0,1*K1+0,1*K2+0,2*Odev /* yl ii notunu hesapla,
Yilici deikenine ata */
Adim 10:Basari=0,5*Yilici+0,5*final /* baar notunu hesapla, Basari deikenine ata */
Adm 11:Yaz (Basari) /* hesaplanan baar notunu ekrana yaz */
Adm 12: Dur /* program sonlandr */

rnek alg. 6: rnek algoritma 5 deki problemde, snavlarn etki oranlar sabit kabul edildi. Bu
programlarn esnekliini bozacaktr. Katsay deitirildiinde algoritmann ve programnda
deimesini gerektirecektir. Algoritmay yenileyeek olursak.

Adm 1: Bala
Adim 2: Vo=0,5, K1o=0,1,K2o=0,1,Oo=0,2 /* snav oranlarn ata*/
Adim 3: Yilicio=0,5,Fo=0,5 /* genel baar iin yil ii ve final oranlar */
Adm 4: Oku (Ogr_Adi) /* renci adn, Ogr_Adi deikenine oku */
Adm 5: Oku(Ogr_No) /* rencinin nonu, Ogr_No deikenine oku */
Adm 6: Oku (Vize) /* Vize notunu, Vize deikenine oku */
Adm 7: Oku (K1) /* Ksa snav 1 notunu, K1 deikenine oku */
Adm 8: Oku (K2) /* Ksa snav 2 notunu, K2 deikenine oku */
Adm 9: Oku (Odev) /* dev notunu, Odev deikenine oku */
Adm 10: Oku (final) /* final notunu, final deikenine oku */

2011 coz@sakarya.edu.tr 10

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Adm 11: Yilici=Vo*Vize+K1o*K1+K2o*K2+Oo*Odev /* yl ii notunu hesapla,
Yilici deikenine ata */
Adim 12:Basari=Yilicio*Yilici+Fo*final /* baar notunu hesapla, Basari deikenine ata */
Adm 13:Yaz (Basari) /* hesaplanan baar notunu ekrana yaz */
Adm 14: Dur /* program sonlandr */

Bu algoritmada katsaylar deikenlere atand ve istenildiinde deiken deerleri
deitirilerek program tekrar altrlabilir. Ancak hala program esnek deil. Bu esneklik
ancak bu deerler klavyeden okunduunda oluacaktr.

rnek alg. 7: rnek algoritma 5 deki problemde, snavlarn etki oranlar sabit kabul edildi. Bu
programlarn esnekliini bozacaktr. Katsay deitirildiinde algoritmann ve programnda
deimesini gerektirecektir. Algoritmay yenileyecek olursak.

Adm 1: Bala
Adim 2: Oku(Vo, K1o,K2o,Oo) /* snav oranlarn oku*/
Adim 3: Oku(Yilicio,Fo) /* genel baar iin yil ii ve final oranlar oku */
Adm 4: Oku (Ogr_Adi) /* renci adn, Ogr_Adi deikenine oku */
Adm 5: Oku(Ogr_No) /* rencinin nonu, Ogr_No deikenine oku */
Adm 6: Oku (Vize) /* Vize notunu, Vize deikenine oku */
Adm 7: Oku (K1) /* Ksa snav 1 notunu, K1 deikenine oku */
Adm 8: Oku (K2) /* Ksa snav 2 notunu, K2 deikenine oku */
Adm 9: Oku (Odev) /* dev notunu, Odev deikenine oku */
Adm 10: Oku (final) /* final notunu, final deikenine oku */
Adm 11: Yilici=Vo*Vize+K1o*K1+K2o*K2+Oo*Odev /* yl ii notunu hesapla,
Yilici deikenine ata */
Adim 12:Basari=Yilicio*Yilici+Fo*final /* baar notunu hesapla, Basari deikenine ata */
Adm 13:Yaz (Basari) /* hesaplanan baar notunu ekrana yaz */
Adm 14: Dur /* program sonlandr */

rnek alg. 8: genin alannn hesaplanmas n salayan bir algoritma tasarlayalm. genin
alan aadaki ekli de gsterilen parametreler ve denklem ile hesaplanr.







Ucgenin alan=(taban*ykseklik)/2 ile hesaplanr

Adm 1: Bala
Adm 2: Oku (h) /* genin yksekliini, h deikenine oku */
Adm 3: Oku(taban) /* genin taban uzunluunu, taban deikenine oku */
Adm 4: ucgen_alan=1/2(taban*h) /* genin alann hesapla */
Adm 5: Yaz (Ucgen_alan) /* hesaplanan sonucu (Ucgen_alan) ekrana yaz */
Adm 6: Dur

h
taban

2011 coz@sakarya.edu.tr 11

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

rnek alg.9; Klavyeden girilen iki saynn sras ile toplamlar, fark, arpmlar ve
blmlerini gerekletiren ve ekrana yazdran algoritma

Adm 1: Bala
Adim 2: Oku(a) /* birinci sayy oku, a deikenine ata*/
Adim 3: Oku(b) /* ikinci sayy oku, b deikenine ata */
Adm 4: sonuc=a+b /* a ile b deiken deerlerini topla, sonuc deikenine ata */
Adm 5: Yaz(sonuc) /* hesaplanan toplam deeri(sonuc) yazdr */
Adm 6: sonuc=a-b /* a ile b deiken deerlerinin farkn al, sonuc deikenine ata
*/
Adm 7: Yaz(sonuc) /* hesaplanan fark deeri(sonuc) yazdr */
Adm 8: sonuc=a*b /* a ile b deiken deerleri arp, sonuc deikenine ata */
Adm 9: Yaz(sonuc) /* hesaplanan arpm deerini(sonuc) yazdr */
Adm 10: sonuc=a/b /* a deiken deerini b deeri ile bl, sonuc deikenine ata */
Adm 11: Yaz(sonuc) /* hesaplanan blm deerini(sonuc) yazdr, */
Adm 12: Dur /* program sonlandr */

rnek alg 10; Silindirin hacmini bulan bir algoritma tasarlayalm. Parametreler klavyeden
okunsun, hacim hesaplandktan sonra ekrana yazdrlsn.








Hacim= taban alan*ykseklik
Hacim=r
2
h

Adm 1: Bala
Adm 2: Oku (h) /* silindirin yksekliini, h deikenine oku */
Adm 3: Oku(r) /* silindirin yar apn, r deikenine oku */
Adm 4: Oku(Pi) /* pi saysn, pi deikenine oku */
Adm 4: Silindir_Hacim=Pi*r*r*h /* silindirin hacmini hesapla */
Adm 5: Yaz (Ucgen_alan) /* hesaplanan sonucu (Silindir_Hacim) ekrana yaz */
Adm 6: Dur
Buraya kadar ki szde kod yazmnda problemlerimiz hep sral ilemlerden olutu. Normalde
sral ilemler nadir karmza kar. Bir takm karar mekanizmalarna gre farkl ilemlerin
yrtlmesi problemleri sklkla karlalan algoritmalardr. rnegin silindirin hacmi
hesaplandktan sonra baka parametre deerleri ile yeni silindir hacimleri hesaplanabilir. Bu
durumda algoritmamzda bir karar mekanizmas gerekecektir. Bu ksmda algoritmalarmza
karar mekanizmalar etkileyerek yenileyelim.

h ykseklik
r

2011 coz@sakarya.edu.tr 12

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
rnek alg. 11. ok sayda silindirin alann hesaplayabileceimiz bir algoritma tasarlayalm.
Programdan k ilemini yksekliin sfr ve sfrdan kk olmas ile kontrol edelim.

Adm 1: Bala
Adm 2: Oku (h) /* silindirin yksekliini, h deikenine oku */
Adm 3: Eer h<=0 ise adm 9 ya git
Adm 4: Oku(r) /* silindirin yar apn, r deikenine oku */
Adm 5: Oku(Pi) /* pi saysn, pi deikenine oku */
Adm 6: Silindir_Hacim=Pi*r*r*h /* silindirin hacmini hesapla */
Adm 7: Yaz (Ucgen_alan) /* hesaplanan sonucu (Silindir_Hacim) ekrana yaz */
Adim 8: adm 2 ye git
Adm 9: Dur
Algoritmada Pi says sabit olduundan dolay klavyeden okunmayabilir. Bu
durumda algoritma aadaki ekilde yeniden dzenlenebilir.
rnek alg. 12. ok sayda silindirin alann hesaplayabileceimiz bir algoritma tasarlayalm.
Programdan k ilemini yksekliin sfr ve sfrdan kk olmas ile kontrol edelim ve Pi
says sabit olarak atansn..

Adm 1: Bala
Adim 2:Pi=3.141618 /* pi saysn, pi deikenine ata */
Adm 3: Oku (h) /* silindirin yksekliini, h deikenine oku */
Adm 4: Eer h<=0 ise adm 9 ya git
Adm 5: Oku(r) /* silindirin yar apn, r deikenine oku */
Adm 6: Silindir_Hacim=Pi*r*r*h /* silindirin hacmini hesapla */
Adm 7: Yaz (Ucgen_alan) /* hesaplanan sonucu (Silindir_Hacim) ekrana yaz */
Adim 8: adm 2 ye git
Adim 9: Yazdir(k seildi)
Adm 10: Dur
Burada silindirin ykseklii 0 ve sfrdan kk olamayacandan hesaplama yapmadan
program sonlandryoruz. Yani kontrol bata yaplmakta.
rnek alg. 13: rnek algoritma 7 deki problemde, tek rencinin baar notunu hesaplayan
bir algoritma tasarlamtk. imdi bunun ok sayda rencinin baar notunu hesaplayacak
ekilde gelitirelim.

Adm 1: Bala
Adim 2: cevap=h
Adim 3: Oku(Vo, K1o,K2o,Oo) /* snav oranlarn oku*/
Adim 4: Oku(Yilicio,Fo) /* genel baar iin yil ii ve final oranlar oku */
Adm 5: Oku (Ogr_Adi) /* renci adn, Ogr_Adi deikenine oku */
Adm 6: Oku(Ogr_No) /* rencinin nonu, Ogr_No deikenine oku */
Adm 7: Oku (Vize) /* Vize notunu, Vize deikenine oku */
Adm 8: Oku (K1) /* Ksa snav 1 notunu, K1 deikenine oku */
Adm 9: Oku (K2) /* Ksa snav 2 notunu, K2 deikenine oku */
Adm 10: Oku (Odev) /* dev notunu, Odev deikenine oku */
Adm 11: Oku (final) /* final notunu, final deikenine oku */

2011 coz@sakarya.edu.tr 13

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Adm 12: Yilici=Vo*Vize+K1o*K1+K2o*K2+Oo*Odev /* yl ii notunu hesapla,
Yilici deikenine ata */
Adim 13:Basari=Yilicio*Yilici+Fo*final /* baar notunu hesapla, Basari deikenine ata */
Adm 14:Yaz (Basari) /* hesaplanan baar notunu ekrana yaz */
Adim 15: Yaz(devam edilecek mi?)
Adim 16: Oku(cevap)
Adim 17: Eer devam edilecek(cevap==e) ise adm 2 ye git
Adm 18: Dur /* program sonlandr */
Silindirin hacim hesabndakinin aksine renci bilgileri ve not bilgileri girildikten sonra
baar hesaplanmakta ve yeni renci baar hesaplamalarnn yaplp yaplmayaca
sorulmaktadr. Yani kontrol ilem konumuz olan baar hesaplamasndan sonra yaplmaktadr.
rnek alg. 14: Ardl olarak klavyeden girilen saylarn toplamn alan bir algoritma
tasarlayalm. Toplanacak say adedi biliniyorsa sral bir ilemlede zlebilir. Ancak iyi bir
algoritma tasarlanm olmaz. En iyi zm tekrarl yapdr.

Adm 1: Bala
Adim 2:Toplam=0,cevap=h /*Toplam deikenine sfr ata */
Adim 3: Oku(a) /* ilave edilecek sayy oku, a deikenine ata*/
Adim 4: Toplam=Toplam+a /* a deiken deerini toplam deikenine ilave et */
Adm 5: Yaz(Toplam) /* hesaplanan toplam deeri(Toplam) yazdr */
Adm 6:Yaz(yeni ilave edilecek mi?)
Adim 7: oku(cevap)
Adim 7:eer cevap==e ise adm 3 git
Adim 8: dur


rnek alg.15;

Problem: klavyeden okunan say sfrdan byk ise karesini alp sonucu ekrana yazan, say
sfrdan kk ise yrtmeyi sonlandran bir algoritmann tasarlanmas.

Tasarm: kyaslama gerektiinden algoritmada if-then (eer-ise) yaps kullanlacak.


Adm 1: Oku (a) /* sayy a deikenine oku */
Adm 2: Eer a<0 ise Adm 6ya git /* a<0 ise program durdurmak iin Adm 6 ya git */
Adm 3: b=a*a /* ann karesini al ve b deikenine ata */
Adm 4: Yaz (b) /* hesaplanan sonucu (b) ekrana yaz */
Adm 5: Adm 1 e git /* yeni sayy okumak iin Adm 1 e git */
Adm 6: Dur /* program sonlandr */


rnek alg.16;

2011 coz@sakarya.edu.tr 14

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

Problem: klavyeden okunan iki farkl saydan byk olan belirleyen ve ekrana yazan bir
algoritmann tasarlanmas.

Tasarm: iki say arasnda kyaslama ve seim gerektiinden algoritmada if-then-else (eer-
ise-deilse) yaps kullanlacak.

Algoritma szde kodlar ile ifade edildiinde aadaki ekilde yazlabilir;

Adm 1: Oku (a) /* birinci sayy a deikenine oku */
Adm 2: Oku (b) /* ikinci sayy b deikenine oku */
Adm 3: Eer a<b ise eb = b /* a<b ise, byk olan b yi eb deikenine ata */
deilse eb = a /* a<b deilse, byk olan a y eb deikenine ata */
Adm 4: Yaz (eb) /* byk olan sonucu (eb) ekrana yaz */
Adm 5: Dur /* program sonlandr */


rnek alg.17;

Problem: klavyeden okunan bir reel saynn karekkn bulup sonucu ekrana yazan bir
algoritmann tasarlanmas.

Tasarm: ncelikle problemin zmnn matematiksel olarak ifade edilmesi gerekmektedir;
a, karekk bulunmak istenen say olun, x deeri ann tahmini karekk ve b deeri ise
ann gerek karekk ile tahmin edilen karekk arasndaki fark olsun. Bu durumda a
aadaki ekilde ifade edilebilir;

a = (x+b)
2
a = x
2
+2xb+b
2


Kk olmas beklene b
2
deeri ihmal edilirse, b deeri yaklak olarak hesaplanabilir;

b ~ (a-x
2
)/2x

hesaplanan b deeri kullanlarak ann karekkne daha yakn yeni bir tahmin yaplabilir;

x
i+1
= x
i
+ b /* burada x
i
nceki tahmin, x
i+1
ise karekke yakn yeni tahmin deeridir */

Bu ekilde ann karekk girerek yaknsayan bir iterasyon (tekrarlama) ile bulunabilir.

ann karekkn yaknsayarak bulan bu iteratif (mutlak hata ,b,, c hata deerinden kk eit
olana kadar ilem tekrar edilecek) algoritma szde kodlar ile ifade edildiinde aadaki
ekilde yazlabilir (ifade kolayl iin x
i
yerine x ve x
i+1
yerine y kullanlarak);


A1: Oku (a) /* karekk bulunacak sayy a deikenine oku */
A2: Oku (x) /* ilk tahmini karekk x deikenine oku */
A3: Oku (c) /* kabul edilebilir hata deerini c deikenine oku */
A4: b=(a-x
2
)/2x /* fark (hata) deeri olan b yi hesapla */
A5: y=x+a /* daha yakn yeni karekk deerini (y) hesapla */

2011 coz@sakarya.edu.tr 15

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
A6: Eer ,b,sc ise A9a git /* ,b,sc ise iterasyonu durdurmak iin A9e git */
A7: x=y /* y yeni karekk deerini x deikenine ata */
A8: A4e git /* ilemi yeni x tahmini ile tekrarlamak iin A4e git */
A9: Yaz (y) /* en son hesaplanan karekk deerini (y) ekrana yaz */
A10: Dur /* program sonlandr */


Bu algoritmada ilemlerin bir evrimin iinde tekrarland ve istenilen hassasiyete
ulaldnda evrimin dna klarak ilemin tamamland grlmektedir. Bilgisayar da
program iletilirken bir deikene yeni bir deer verildiinde eski tad deerin kaybolaca
not edilmelidir.

Aada bu algoritmann nasl alt, ilemlerin her tekrarnda (evrimin her admnda)
deikenlerin ald deerler bir izelgede verilerek aklanmtr.a, x ve c deerlerinin sras
ile 31.8, 5.0 ve 0.005 olarak okunduu kabul edilsin.


evrim adm no a x c b y
31.8 5.0 0.005
1 31.8 5.0 0.005 0.68 5.68
2 31.8 5.68 0.005 -0.04 5.64
3 31.8 5.64 0.005 -0.0001 5.64

izelgeden de grlecei gibi nc evrim admnda ,b, deeri c deeri olan 0.005 den
kk olduu iin yeni karekk deeri hesaplanmaz en son hesaplanan karekk deeri y=5.64
olarak kalr ve ilem sonlandrlr.


rnek alg.18;

Problem: klavyeden okunan bir dizi harfin alfabetik sraya konulmasn salayan ve sonucu
ekrana yazan bir algoritmann tasarlanmas.

Tasarm: ncelikle problemin zmnn mantksal olarak ifade edilmesi gerekmektedir;
Harflerin oluturduu diziye h ad verilsin ve dizinin n adet harften olutuu kabul edilsin.
rnein n=5 iin h dizisi aadaki ekilde olabilir;

B A E C D

Dizinin elemanlar birbirinden indis kullanlarak (h
i
eklinde) ayrt edilecektir. rnein
yukardaki dizide h
3
E harfini ifade etmektedir. Sralama harfleri ikier ikier ele alp
karlatrarak ve gerekirse yerlerini deitirerek yaplacaktr ve bu ilem dizi bana
dnlerek harfler alfabetik sraya getirilene kadar devam ettirilecektir. rnein yukardaki
dizi ele alnr ise, ilk admda A ile B nin yerleri deitirilecek ikinci admda B ile E olduklar
yerlerde kalacak, nc admda C ile E, drdnc admda D ile E yer deitirecektir. Dizi
sonuna geldiinde E yerini bulmu olacaktr. Bu ilem dizi bana dnlerek harfler alfabetik
sraya getirilene kadar evrim devam ettirilecektir.


2011 coz@sakarya.edu.tr 16

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Bu ilemi gerekletirmek iin szde kod ile yazlan aadaki algoritmada alfabetik srada
nce olan harfin, sonrakinden daha kk olduu kabul edilmitir.

A1: Oku (n) /* dizi eleman saysn ata */
A2: Oku (h dizisi) /* h dizisinin n elemann oku */
A3: k=n /* k ya n deerini ver */
A4: k=k-1 /* k y bir eksilterek evrim saysn belirle */
A5: Eer k=0 ise A14e git /* k=0 a ulat ise A14 e git (evrimi atla) */
A6: i=0 /* dizi indis deerini sfrla */
A7: i=i+1 /* dizi indis deerini bir artr */
A8: Eer i>k ise A4e git /* indis deeri evrim deerinden bykse A4e git */
/* her evrimde bir harf yerini yerletii iin */
/* karlatrma indisi evrim deerini amyor,*/
/* yani yerini sa tarafta yerine yerlemi */
/* karakterler tekrar kontrol edilmiyor */
A9: Eer h
i
<h
i+1
ise A7ye git /* karlatrlan harflerin alfabetik sralamas
doru ise yer deitirmeyi atla */
A10: b=h
i
/* geici deiken b ye h
i
deerini ver */
A11: h
i
=h
i+1
/* h
i
ye h
i+1
deerini ver */
A12: h
i+1
=b /* h
i+1
e geici b deikenindeki eski h
i
deerini ver */
A13: A7 ye git /* kyaslamay bir saa kaydrmak iin */
A14: Yaz (h dizisi) /* h dizisinin elemanlarn ekrana yaz */
A15: Dur /* program sonlandr */

Algoritmann deikenlerinin algoritmann almas srasnda alacaklar deerler aadaki
izelgede gsterilmitir. Balangta belirsiz olan deikenlerin her adm sonunda aldklar
deerler bu izelgede incelenebilir. Grlecei gibi algoritmann baz admlar sadece bir kez
baz admlar ise birok kez ilem grmektedir.


lem adm Algoritma adm n h
1
h
2
h
3
h
4
h
5
k i b
1 A1 5
2 A2 5 B A E C D
3 A3 5 B A E C D 5
4 A4 5 B A E C D 4
5 A5 5 B A E C D 4
6 A6 5 B A E C D 4 0
7 A7 5 B A E C D 4 1
8 A8 5 B A E C D 4 1
9 A9 5 B A E C D 4 1
10 A10 5 B A E C D 4 1 B
11 A11 5 A A E C D 4 1 B
12 A12 5 A B E C D 4 1 B
13 A13 5 A B E C D 4 1 B
14 A7 5 A B E C D 4 2 B
15 A8 5 A B E C D 4 2 B
16 A9 5 A B E C D 4 2 B
17 A7 5 A B E C D 4 3 B
18 A8 5 A B E C D 4 3 B

2011 coz@sakarya.edu.tr 17

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
19 A9 5 A B E C D 4 3 B
20 A10 5 A B E C D 4 3 E
21 A11 5 A B C C D 4 3 E
22 A12 5 A B C E D 4 3 E
23 A13 5 A B C E D 4 3 E
24 A7 5 A B C E D 4 4 E
25 A8 5 A B C E D 4 4 E
26 A9 5 A B C E D 4 4 E
27 A10 5 A B C E D 4 4 E
28 A11 5 A B C D D 4 4 E
29 A12 5 A B C D E 4 4 E
30 A13 5 A B C D E 4 4 E
31 A7 5 A B C D E 4 5 E
32 A8 5 A B C D E 4 5 E
33 A4 5 A B C D E 3 5 E
34 A5 5 A B C D E 3 5 E
35 A6 5 A B C D E 3 0 E
36 A7 5 A B C D E 3 1 E
37 A8 5 A B C D E 3 1 E
38 A9 5 A B C D E 3 1 E
39 A7 5 A B C D E 3 2 E
40 A8 5 A B C D E 3 2 E
41 A9 5 A B C D E 3 2 E
42 A7 5 A B C D E 3 3 E
43 A8 5 A B C D E 3 3 E
44 A9 5 A B C D E 3 3 E
45 A7 5 A B C D E 3 4 E
46 A8 5 A B C D E 3 4 E
47 A4 5 A B C D E 2 4 E
48 A5 5 A B C D E 2 4 E
49 A6 5 A B C D E 2 0 E
50 A7 5 A B C D E 2 1 E
51 A8 5 A B C D E 2 1 E
52 A9 5 A B C D E 2 1 E
53 A7 5 A B C D E 2 2 E
54 A8 5 A B C D E 2 2 E
55 A9 5 A B C D E 2 2 E
56 A7 5 A B C D E 2 3 E
57 A8 5 A B C D E 2 3 E
58 A4 5 A B C D E 1 3 E
59 A5 5 A B C D E 1 3 E
60 A6 5 A B C D E 1 0 E
61 A7 5 A B C D E 1 1 E
62 A8 5 A B C D E 1 1 E
63 A9 5 A B C D E 1 1 E
64 A7 5 A B C D E 1 2 E
65 A8 5 A B C D E 1 2 E
66 A4 5 A B C D E 0 2 E
67 A14 5 A B C D E 0 2 E

2011 coz@sakarya.edu.tr 18

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
68 A15 5 A B C D E 0 2 E


izelgede verilen balang rnek dizisi iin algoritma, dizi ksmen kolay olduu iin, 29.
admda alfabetik sralamay tamamlamtr. Fakat algoritma daha karmak ve uzun dizileri de
deiiklik yapmadan zebilmesi iin btn kontrol tamamlayana kadar ileme devam eder.




2011 coz@sakarya.edu.tr 19

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
2. AKI DYAGRAMLARI


- Problemi zmek iin, problemin anlalr bir biimde ortaya konulmas
gerekmektedir. Algoritmalar bu adan nemli bir aratr.

- Ak diyagram, algoritmalarn geometrik ekillerle ortaya konulmasdr. Ak
diyagram, problemin zm iin yaplmas gerekenlerin, bandan sonuna kadar
geometrik ekillerden oluan semboller ile ifade edilmesidir.

- Her simge genel olarak yaplacak bir ii veya komutu gsterir.



2.1. Ak Diyagram Sembolleri


- Bala: Programn nereden balayacan belirtir. Standart olarak her bamsz
algoritmada bir tane bulunur.



- Dur: Programn nerede sonlanacan bildirir. Birden fazla olabilir. Mmkn ise
sadece bir dur simgesi kullanlmaldr.




- Giri: Bilgisayara dardan bilgi giriini temsil eder. Bu semboln iine dardan
girilen bilgilerin aktarlaca deikenler yazlr.




- k: Ekrana veya yazcya bilgi gndermeyi temsil eder.




- lem: Programn ilemesi srasnda yaplacak ilemleri ifade etmek iin kullanlr.


2011 coz@sakarya.edu.tr 20

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar



- Karlatrma (sorgu): Verilen koulun sonucuna gre farkl ilem yaplacan ifade
etmek iin kullanlr.




- Dng: Belirli bir iin veya bir grup iin birden ok sayda yinelenmesi gerektiinde
kullanlr. Dngdeki evrim says, dng sayac ve saya artrm aka yazlr.




- Fonksiyon arma: Daha nce oluturulmu bir algoritmann yazlan algoritma
ierisine konulmadan arlarak kullanlmasn ifade eder.




- Dosyaya saklama: Elde edilen bilgilerin bir dosyaya saklanmas veya dosyadan
okunmasn simgeler.




- Ak Yn: Bir ilem bittikten sonra akn nereye yneleceini belirler.




2011 coz@sakarya.edu.tr 21

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- Balant: Ak diyagram izilirken sayfaya smama durumunda izimin baka bir
yerden devam etmesi iin kullanlr.

Ayn sayfaya Ayr sayfaya



2.2. rnek ak diyagramlar

rnek alg. 1; klavyeden girilen iki saynn toplamn bulup sonucu ekrana yazdran bir
algoritma tasarlamtk. Bu szde kodunu yazdmz algoritmay, ak diyaram ile ifade
edelim

sral bir ilemlerden olutuunu ifade etmitirk. Yani her hangi bir karlatrma durumu ve
buna bal farkl ilemlerden biri seilmemektedir.

Algoritma ak diyagram aadaki ekilde yazlabilir;

















rnek alg. 2: Bir kenar klavyeden girilen karenin alann hesaplayan ve ekrana yazdran bir
algoritmann ak diyaramnn tasarlanmas.Bu rnekte de sral bir ilem vardr.








a,b
c=a+b
c
Dur
Bala

2011 coz@sakarya.edu.tr 22

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


















rnek alg. 3: kinci dereceden katsaylar bilinen bir fonksiyonun, klavyeden girilen x deeri
iin alaca deeri hesaplayp sonucu ekrana yazdran bir algoritma tasarlayalm. Bu rnekte
de sral bir ilem vardr.
kinci dereceden denklemimiz u ekilde olsun

F(x)=x^2+3x+4

Fonksiyonun x in -100 ile 100 arasndaki 20 artm ile izilmi grafii ekil de verilmitir. Bu
algoritmada sadece girilen bir x deeri iin bir hesap yaplacak ve sonlanacandan dolay
sral bir ilem yaplmaldr.






0
2000
4000
6000
8000
10000
12000
-150 -100 -50 0 50 100 150
f(x)
f(x)
a
Kare_alan=a*a
Kare_alan
Dur
Bala

2011 coz@sakarya.edu.tr 23

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


















rnek alg. 4: rnek 3 de verilen problemde katsaylar belli bir kinci dereceden denklemim
hesaplanmas istenmi idi, eer katsaylarda klavyeden girilecek ise ozaman algoritma ak
diyaram aadaki ekilde dzenlenebilir

kinci dereceden denklemimiz u ekilde olsun

F(x)=a*x^2+b*x+c





















rnek alg. 5: Bir rencinin dnem ierisindeki ve dnem sonundaki notlarn klavyeden
okuyan, Ylii ve Baar notunu bilinen katsaylara gre hesaplayan algoritmann ak
diyaramn tasarlayalm.
x
fx=x*x+2*x+4
fx
Dur
Bala
a,b,c
fx=a*x*x+b*x+c
fx
Dur
Bala
x

2011 coz@sakarya.edu.tr 24

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

rencilerin notlarn gsteren liste genelde ekil de verilen tablodakine benzerdir.
rencinin Vize, ksa snav 1, ksa snav 2 ve dev notu belli oranlarda alnarak yl ii baar
notu bulunur. Final notunun belirli bir yzdesi ile yl ii notunun %100e tamamlanacak
yzdelik oran ile baar puan bulunur. rnein
Yl iine etki yzdeleri
Vizenin %60 ,
Ksa snav 1 in %10,
Ksa snav 2 in %10,
dev notunun %20,
Baar Notu
Ylii Nounun %50,
Final Notunun %50
Olsun




Bir rencinin notunu hesaplayacak ekilde algoritmay belirtilen katsaylar iin
gerekletirecek olursak
























Ogr_Adi,Ogr_No
Vize,K1,K2,Odev
Final
Yilici=0,60*Vize+0,1*K1+0,1*K2+0,2*Odev
Basari
Dur
Bala
Basari=0,5*Yilici+0,5*final

2011 coz@sakarya.edu.tr 25

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

rnek alg. 6: rnek algoritma 5 deki problemde, snavlarn etki oranlar sabit kabul edildi. Bu
programlarn esnekliini bozacaktr. Katsay deitirildiinde algoritmann ve programnda
deimesini gerektirecektir. Algoritmay yenileyeek olursak.
































Bu algoritmada katsaylar deikenlere atand ve istenildiinde deiken deerleri
deitirilerek program tekrar altrlabilir. Ancak hala algoritma esnek deil. Bu esneklik
ancak bu deerler klavyeden okunduunda oluacaktr.

rnek alg. 7: rnek algoritma 5 deki problemde, snavlarn etki oranlar sabit kabul edildi. Bu
programlarn esnekliini bozacaktr. Katsay deitirildiinde algoritmann ve programnda
deimesini gerektirecektir. Algoritmay yenileyecek olursak.






Ogr_Adi,Ogr_No
Vize,K1,K2,Odev
Final
Yilici=Vo*Vize+K1o*K1+K2o*K2+Oo*Odev
Basari
Dur
Bala
Basari=Yilicio*Yilici+Fo*final
Vo=0,5, K1o=0,1,K2o=0,1,Oo=0,2
Yilicio=0,5,Fo=0,5

2011 coz@sakarya.edu.tr 26

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar




























rnek alg. 8: genin alannn hesaplanmas n salayan bir algoritma ak diyaram
tasarlayalm. genin alan aadaki ekli de gsterilen parametreler ve denklem ile
hesaplanmakta idi.







Ucgenin alan=(taban*ykseklik)/2 ile hesaplanr










Ogr_Adi,Ogr_No
Vize,K1,K2,Odev
Final
Yilici=Vo*Vize+K1o*K1+K2o*K2+Oo*Odev
Basari
Dur
Bala
Basari=Yilicio*Yilici+Fo*final
Vo, K1o,K2o,Oo,
Yilicio, Fo

h
taban

2011 coz@sakarya.edu.tr 27

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

















rnek alg.9; Klavyeden girilen iki saynn sras ile toplamlar, fark, arpmlar ve
blmlerini gerekletiren ve ekrana yazdran algoritma ak diyagram






























h,taban
ucgen_alan=1/2(taban*h)
ucgen_alan
Dur
Bala
a,b
sonuc=a+b
sonuc
Dur
Bala
sonuc=a-b
sonuc
sonuc=a*b
sonuc
sonuc=a/b
sonuc
a,b
sonuc=a+b
sonuc
Dur
Bala
sonuc=a-b
sonuc
sonuc=a*b
sonuc
sonuc=a/b
sonuc

2011 coz@sakarya.edu.tr 28

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


rnek alg 10; Silindirin hacmini bulan bir algoritma iin ak diyaram tasarlayalm.
Parametreler klavyeden okunsun, hacim hesaplandktan sonra ekrana yazdrlsn.








Hacim= taban alan*ykseklik
Hacim=r
2
h


















Buraya kadar ki ak diyaram problemlerimiz hep sral ilemlerden olutu. Normalde sral
ilemler nadir karmza kar. Bir takm karar mekanizmalarna gre farkl ilemlerin
yrtlmesi problemleri sklkla karlalan algoritmalardr. rnegin silindirin hacmi
hesaplandktan sonra baka parametre deerleri ile yeni silindir hacimleri hesaplanabilir. Bu
durumda algoritmamzda bir karar mekanizmas gerekecektir. Bu ksmda algoritmalarmza
karar mekanizmalar etkileyerek yenileyelim.

rnek alg. 11. ok sayda silindirin alann hesaplayabileceimiz bir algoritma iin ak
diyaram tasarlayalm. Programdan k ilemini yksekliin sfr ve sfrdan kk olmas
ile kontrol edelim.




h ykseklik
r
h,r,Pi
Silindir_Hacim=Pi*r*r*h
Silindir_Hacim
Dur
Bala

2011 coz@sakarya.edu.tr 29

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar





















Algoritmada Pi says sabit olduundan dolay klavyeden okunmayabilir. Bu
durumda algoritma aadaki ekilde yeniden dzenlenebilir.
rnek alg. 12. ok sayda silindirin alann hesaplayabileceimiz bir algoritma tasarlayalm.
Programdan k ilemini yksekliin sfr ve sfrdan kk olmas ile kontrol edelim ve Pi
says sabit olarak atansn..




















h
Silindir_Hacim=Pi*r*r*h
Silindir_Hacim
Dur
Bala
h0
r,Pi
Hayr
Evet
h
Silindir_Hacim=Pi*r*r*h
Silindir_Hacim
Dur
Bala
h0
r
Hayr
Evet
Pi=3.141618

2011 coz@sakarya.edu.tr 30

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar




Burada silindirin ykseklii 0 ve sfrdan kk olamayacandan hesaplama yapmadan
program sonlandryoruz. Yani kontrol bata yaplmakta.
rnek alg. 13: rnek algoritma 7 deki problemde, tek rencinin baar notunu hesaplayan
bir algoritma iin ak diyaram tasarlamtk. imdi bunu ok sayda rencinin baar
notunu hesaplayacak ekilde gelitirelim.






































Ogr_Adi,Ogr_No
Vize,K1,K2,Odev
Final
Yilici=Vo*Vize+K1o*K1+K2o*K2+Oo*Odev
Basari
devam edilecekmi?
Dur
Bala
Basari=Yilicio*Yilici+Fo*final
Vo, K1o,K2o,Oo,
Yilicio, Fo

cevap=h

cevap

cevap==e
evet
hayr

2011 coz@sakarya.edu.tr 31

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Silindirin hacim hesabndakinin aksine renci bilgileri ve not bilgileri girildikten sonra
baar hesaplanmakta ve yeni renci baar hesaplamalarnn yaplp yaplmayaca
sorulmaktadr. Yani kontrol ilem konumuz olan baar hesaplamasndan sonra yaplmaktadr.
rnek alg. 14: Ardl olarak klavyeden girilen saylarn toplamn alan bir algoritma iin ak
diyaram tasarlayalm. Toplanacak say adedi biliniyorsa sral bir ilemlede zlebilir.
Ancak iyi bir algoritma tasarlanm olmaz. En iyi zm tekrarl yapdr.





























rnek alg.15;

Problem: klavyeden okunan say sfrdan byk ise karesini alp sonucu ekrana yazan, say
sfrdan kk ise yrtmeyi sonlandran bir algoritmann tasarlanmas.

Tasarm: kyaslama gerektiinden algoritmada if-then (eer-ise) yaps kullanlacak.





a
Toplam=Toplam+a
Dur
Bala
Toplam=0
cevap=h
Toplam
devam edilecekmi?
cevap

cevap==e
evet
hayr

2011 coz@sakarya.edu.tr 32

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


















rnek ak.16;


- rnek alg.3 iin ak diyagramn izelim.

- Aadaki ekilden de grlebilecei gibi ak diyagramlarnda ilem sras oklarla
gsterildii iin deyimlerin (ilemlerin) A1, A2, vb. etiketlendirilmesine gerek yoktur.
Fakat istenirse bu etiketler kutularn dnda sol st keye yazlabilir.


a
b=a*a
b
Dur
Bala
A0

2011 coz@sakarya.edu.tr 33

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar




rnek ak.17;


- 1den Nye kadar olan saylarn toplamn hesaplayan programn ak diyagramn
izelim.

- 1den Nye kadar N adet say vardr. Birer artan dng iinde saylar toplayabiliriz.
Dng artn kontrol edeceimiz deiken i olsun. Toplam deerini de T deikeni
ile ifade edelim. Dng deikeni i, 1den balayacak ve birer artarak N ye ulaacak. T
balangta 0 ile balayacak ve dng ierisinde 1den Nye deien i deeri ilave
edilecek.



2011 coz@sakarya.edu.tr 34

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar



N= 10 girilmesi durumunda ak diyagram ile gsterilen programn alma srasnda i
deikenine gre T deerlerini gsteren izelge aadaki ekilde ifade edilebilir;


i N ilem T
- 10 - -
- 10 T=0 0
1 10 T=0+1 1
2 10 T=1+2 3
3 10 T=3+3 6
4 10 T=6+4 10
5 10 T=10+5 15
6 10 T=15+6 21
7 10 T=21+7 28
8 10 T=28+8 36
9 10 T=36+9 45

2011 coz@sakarya.edu.tr 35

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
10 10 T=45+10 55


rnek ak.18;


- NxM boyutlu iki matrisin toplamn hesaplayan bir algoritmann ak diyagramn
izelim.

- Matrislerin elemanlarn ifade eden indisleri i ve j ile gsterelim (i=1,...,N, j=1,...,M).
Bu durumda A matrisinin her bir eleman matematiksel olarak A
i,j
veya programlama
asndan A[i][j]eklinde ifade edilebilir.

- Elemanlar toplanacak matrisler A ve B matrisleri ve toplam sonucunda oluacak
matris C matrisi olsun.

- Bilindii gibi matris toplamnda birinci matrisin [i][j] eleman ile ikinci matrisin
[i][j]eleman karlkl olarak toplanarak toplam matrisin [i][j] elemann oluturur.





(

=
2 1
3 1
] [A ,
(

=
0 3
1 2
] [B matrisleri ve N=M=2 deerleri iin,


2011 coz@sakarya.edu.tr 36

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

yukardaki ak diyagram ile gsterilen programn alma srasnda i ve j deikenlerine gre
C[i][j] deerlerini gsteren izelge aadaki ekilde ifade edilebilir;


i j ilem C[i][j]
1 1 C[1][1]=1+2 3
1 2 C[1][2]=3+1 4
2 1 C[2][1]=1+3 4
2 2 C[2][2]=2+0 2


Bu durumda oluan C matrisi;


(

=
2 4
4 3
] [C olur.

rnek ak.19; kinci dereceden bir denklemin kklerinin hesaplanmas iin bir ak
diyaram tasarlayalm. kinci dereceden bir denklemin kklerinin hesaplanmas aadaki
denklem ile gerekletirildiini biliyoruz.



























a,b,c
Delta=b*b-4*a*c
Dur
Bala
I. Kk= , X1
II. Kk= , X2
evet
hayr
Katsaylar
giriniz

Delta0
X1=(b - sqrt(delta))/2*a
X2=(b + sqrt(delta))/2*a
Kkler
karmaktr

2011 coz@sakarya.edu.tr 37

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

20

Adim 1: bala
Adim 2: x1=10, y1=20,r1=2
Adim 3: x1=10, y1=20,r2=2
Adim 4: oku(yon)
Adim 5: eer yon= d ise x=x+1
Adim 6: eer yon=a ise x=x-1
Adim 7: eer yon=s ise y=y+1
Adim 8: eer yon=x ise y=y-1
Adim 9: Mesafe=sqrt(power(|x2-x1|,2)+power(|y2-y1|))
Adim 10: eer mesafe>(r1+r2) ise arpma yok
Deil ise arpma var
Adim 11:eer yon eit deil e git adim 4
Adim 12: dur

Asansr

Adim 1: bala
Adim 2: yon=0 /0 duruyor, 1 yukar, 2 aa
Adim 2: oku(Bkat) /balag durumu
Adim 3: oku(istek) / istekleri dinle



Bkat=1 ve istek=1 ise
DEV 1


Soru 1.1;


Verilen bir x deeri iin aadaki ekilde gsterilen fonksiyonu hesaplayan bir algoritma
yaznz.




Soru 1.2;

2011 coz@sakarya.edu.tr 38

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


a) Aada verilen ak diyagramnn ifade ettii ilemi bulunuz.

b) Bu ak diyagramna uygun bir algoritmay yaznz ve ak diyagramn iziniz.

c) Aada verilen A (NxR boyutlu) ve B (RxM boyutlu) matrisleri ve N, M, R deerleri iin
yazdnz algoritmann deikenlerinin algoritmann almas srasnda alacaklar deerleri
bir izelge ile gsteriniz ve sonuta oluan C (NxM boyutlu) matrisini yaznz.


(

=
2 0
2 1
] [A ,
(

=
2 0
0 2
] [B , 2 = = = R M N
















Soru 1.3;

2011 coz@sakarya.edu.tr 39

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


Deiik harf ve rakamlarn karelere blnm bir alanda belirli kareler siyah yaplarak
gsterildiini kabul ediniz. rnein A harfi aadaki gibi gsteriliyor;



Dolu karelerin 1 ve bo karelerin 0 ile ifade edildiini kabul edelim. Verilen harfi yada rakam
belirlemek iin kullanlabilecek bir algoritmann n tasarmn mantksal (algoritmay szde
kod ile yazmadan) olarak yapnz.





2011 coz@sakarya.edu.tr 40

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
3. PROGRAMLAMA VE PROGRAMLAMA DL


- Programlama, bir ilemin bilgisayarn anlayabilecei bir biime dntrlmesi
ilemidir.

- Program, bilgisayar sistemine yaptrlmak istenen ilemi zel kodlarla tanmlayan ara
olarak bilinir. Program, bir programlama dili araclyla hazrlanr.

- Kullanlacak programlama dili zlecek problemin niteliine bal olarak seilebilir.
Hangi dilin seileceini belirleyen etkenlerin banda, verilerin ilenmesinde zaman
tasarrufu yada komut saysn snrlamak olabilir.

- Programlama dili, program tasarmnda sorulardan biri tasarlanan zmlemeye
uygun programlama dilini semektir. Programlama dilleri, bilgisayarda altrlmak
zere hazrlanr.

- Bir programlama dilinin belirli amalara hizmet eden bir ok deyimi vardr ve bu
deyimler zel kodlarla ifade edilir. Programlama dillerinin ortak zellikleri vardr.

- Programlama dillerinin tm simgeseldir. Yani, bilgisayarn anlayaca ilemleri
insanlarn da anlayabilecei simgelerle ifade ederler. rnein program iinde yer alan
write/print komutunun, yazma ilemini yerine getiren bir komut olduu hemen
anlalr. Bu simgeler, zel programlar yardmyla bilgisayarn anlayabilecei bir
biime evrilirler. Bu programlara derleyici ad verilir

- Programn yazm, kaynak programn geerli makine diline derleyici aracl ile
evrilmesi iin kaynak programn bilgisayar ortamnda bir yazm/editr program
yardm ile, gerekletirilir.

- Programm yazmnda anlalabilirlik ve okunabilirlik nem tar. Program yazma, ilk
kez yazma veya var olan program gelitirme eklinde olabilir. Programlar ounlukla
ilk kez yazldndan sonra zerinde dzeltme ve gelitirmeler yapma gerektirir. Bu
nedenle, dier taraftan programlar bir kez kullanlmak iin de hazrlanmaz bir sre
sonra programa bakldnda anlalabilir olma nemli olur. Aklama satrlar
eklemek, program ilem kmelerini, yordamlar, yaplar izlenebilir yapda yazmak
sonrada izlenebilmeye kolaylk salar.

- Deikenlere, yordamlara ilev ve grevini anmsatacak isimler vermek, karar
ilemlerini anlalr aklkta yazmak, okunabilirliine yardm edecektir.

- Dil derleyiciler (compilers), elektronik ortamda disk kt yapsnda hazrlanan
kaynak programn ileyebilir makine diline dntrlmesi, kullanlan st dzey dil
iin hazrlanm dil derleyicisi yazlmlar ile gerekletirilir. rnein, C ve C++
destekleyen Turbo C++, Borland C++, MS Visual C++ derleyicileri yaygn kullanlan
dil derleyicilerindendir.


2011 coz@sakarya.edu.tr 41

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Derleme: derleme ilemi st dzey dille hazrlanan kaynak program geerli makine
dili ierikli ama programa dntrr. Bu dntrme sreci bir admda
gereklemez. rnein C Derleyicisi derleme (compile), balama (linker), ykleme
(loader) ilemleri sonunda ileyebilir ama programa (makine kodu) dnr.


3.1. C/C++ da yazlan programlarn derlenmesi


- Tm yksek seviyeli programlar gibi C ve C++ dillerinde de program yazldktan
sonra altrlabilmesi iin derleyici ile makine diline evrilmesi gerekir.

- Program ilk olarak bir editrde yazlr. Bu programa kaynak (source) program ve
iindeki kodlara kaynak (source) kodlar denir. Derlendikten sonra programn makine
dilindeki versiyonu nesne (object) program adn tar ve .obj uzantl olur.
Derlendikten sonra almaya hazr programn uzants .exe olur ve buna exe program
denir. {execute: yrtme}

- Derlenmeden nce kaynak program, sabit diske dosya eklinde kaydedilmelidir. Bir
ok C++ derleyicisi kaynak programn .cpp (.c) uzantl bir dosya olmasn bekler.
rnein: ornek1.cpp (ornek1.c)

- C++ dilinde bir programn oluturulmas, derlenmesi ve altrlmas aadaki i ak
diyagram ile ifade edilebilir;




- Gnmzde en yaygn C/C++ derleyicileri, Turbo C++, Microsoft C++ ve Borland
C++ derleyicileridir.

- Ayrca Visual C++ ve Visual C++ ieren Microsoft Visual Studio.NET derleyicileri
konsol (Windows ortamnda alan DOS programlar) denilen bir eidi ile C/C++
programlarn derleyebilmektedir.

2011 coz@sakarya.edu.tr 42

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- Bu derleyiciler program editr ve derleyicisini bir arada bulundururlar.


3.2. C/C++ da programlama


- C/C++ programlama dili, fonksiyon olarak adlandrlan altprogramlarn birletirilmesi
kavramna dayanr. Bir C/C++ program, bir yada daha ok fonksiyonun bir araya
gelmesi ile oluur.

- Bir fonksiyona ait kodlar blok eklinde iki byk { } parantez iinde yazlr. C/C++
programlarnda main() zel bir fonksiyondur ve programn yrtlmesine bu
fonksiyon ile balanr. Her C/C++ programnda ana fonksiyon olan bir tane main()
bulunmaldr.

- Bir C++ programnn temel yaps aadaki gibidir;

/* nilemci komutlar */
/* Genel bildirimler */

main () /* Ana fonksiyon */
{

/* Program kodlar */

}

- rnek C/C++ program;

#include <stdio.h> /* nilemci komutlar */
int n; /* Genel bildirimler */
void main(void) /* Ana fonksiyon */
{
n=7;
printf("n degeri=%d",n);
}


3.3. C/C++ da nilemci komutlar


- Bir C programnda simgesel sabitler, makro fonksiyonlar veya programn koullu
derlenmesi istenirse, nilemci komutlar olarak adlandrlan komutlar kullanlr. C dili
nilemcisi, derleme ilemine gemeden nce bu komutlar yorumlayarak istenilenleri
yerine getirir, ardndan derleme ilemine balanr.



2011 coz@sakarya.edu.tr 43

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


- ANSI C de var olan n ilemci komutlar;

#define #error #include #pragma #undef
#endif #elif #if #else # inline
#ifndef #ifdef #line


- #include nilemci komutu;

Balk dosyalarnda (*.h) bildirilmi olan makro fonksiyonlar ve simgesel sabitler
kullanlacak ise ilgili dosya #include nilemci komutu kullanlarak program iine
eklenmelidir. rnein;

#include <stdio.h> /* C de kullanlan standart giri k fonksiyonlarn birou */
/* stdio.h adl balk dosyasnda bildirilmi olan bir ksm */
/* veri tiplerini ve makro fonksiyon tanmlarn kullanr */
/* Bu yzden standart giri fonksiyonlar kullanlrken */
/* stdio.h dosyas #include <stdio.h> komutu ile dahil edilir.*/

Balk dosyalarnn nceden derlenmi olmas nedeni ile derleyici sadece program
iinde yazlan kodlar derler ve bylece derleme zamanndan tasarruf salar.



2011 coz@sakarya.edu.tr 44

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Veri trleri, deiken kavram, sabit ve deiken bildirimleri
ve c de dullanm

Gnlk yaantmzda, kullandmz verilere baktmzda, metin, saysal veriler ve mantksal
olarak doru, yanl gibi temelde veriler kullanmaktayz. Bilgisayar da veri kullanmna
geldiimizde bu veri trleri eitlendirilmektedir. Bunun en bata gelen sebebi hafza nn en
verimli ekilde kullanlmasdr. Bilindii zere bilgisayar, programlar altrmak iin, Ana
hafza dediimiz RAM hafzay kullanr. Ana hafza byte lar topluluundan olumaktadr. 8
bit bir byte yapmaktadr. En anlaml hafza birimidir. En kk hafza birimi ise bit tir ve
bilgisayarda veri saklama bakmndan bir nemi yoktur. Ancak byte bilgilerin bit bit
deerlendirilmesi durumunda bir nem arzeder.

Bilgisayarda ana hafzay verimli kullanmak, bilgisayar tarihi boyunca en nemli konu
olmutur. Gnmzde, Ana hafza her ne kadar ucuzlam ve kapasite olarak fazla olsada
verimli kullanmaya hala eskisi kadar ihtiya duyulmaktadr. Byte kavram bilgisayarda bir
karakteri saklamak iin gerekli en kk hafzadr. kili say sistemine gre 8 bit ile 256
derecelendirme yaplmaktadr. ASCII karakter kodlamas ile, kullanlabilecek karakterler,
alfabenin karakterleri, *,+, ? vb kodlanmtr. Dolays ile metin verilerde karakterin her biri
bir byet yer kaplayacaktr.

Saysal verilerde ise durum daha farkldr. Gnlk yaantmzda kullandmz alana bal
olarak saylar belli aralklarda, tam say veya ondalk say olarak karmza kmaktadr.
rnein bir rnn saysn belirlemek iin tam saylar kullanlabilir ve 256 aetten fazla
olmayacak ise bir byte ile ifade edilebilirken, adet bilgisi 256 dan fazla ise o zaman bir byte
yetmeyecektir. Bu durumdada sayy ifade etmek iin iki byte kullanlacaktr. Grld
zere bir byte kullanlmas gereken veri iin iki byet kullanmak ihtiya olmad halde iki kat
hafza kaplayacaktr.

Temel veri trleri: her programlama dili, hafzay verimli kullanmak zere, veri
gereksiniminin bellekte tutulmas iin tanmlanm veri trlerine sahiptir. Bu veri trleri temel
veri trleridir. C/c++ programlama dillerinde, int, char, short int, double, vb temel veri
trleridir.


2011 coz@sakarya.edu.tr 45

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Temel veri trlerinin yannta kullanc, veri organizasyonunu daha iyi yapmak ve kullanmda
rahat etmek iin kendisi temel veri tiplerini kullanarak kunlanc tanml veri trleri
oluturabilmektedir. rnein c/c++ programlama dilinde, yaplar, nesne tanmlamalar bu
trdendir.

Deiken, simgesel adlardr ve programcy donanmdan soyutlar. Programn almas
srasnda veriler hafzada tutulur. Hafza ise 16 say siteminde adreslenmi, byte lar dizisi
eklindedir. Gnmzde ok grevli programlama dillerinde, hafza kullanm oldukca
karmaktr, gerek hafza adresleri ile uramak ise iinden klmaz bir durum oluturur. Bu
yzden deikenler kullanlr ve hafzadaki veriyi sembolize eder. Yani deiken, verilerin
tutulduu bellek hcrelerine verilen simgesel adlardr. Dolays ile program ierisinde
kullanlacak veriler deikenler zerinde tutulur. Programlarn yrtlmesi sresince
ierikleri deitirilebilir.

Deikenler bir dzen ierisinde kullanlr. Deikenlerle ilgili temel kurallar;

- Her deikenin bir ad veri tipi vardr. Veri tipi deikende ne tip veri tutulacan
belirler.

- C dilinde deiken adlar, ilki harf olmak zere dierleri harf, say veya alt eksi ( _ )
den oluan bir veya birden ok karakterden oluur.karakterler ngiliz alfabesinin
karakterleridir. rnein baz Trke karakterlerde deiken tanmlamak mmkn
deildir.

- Deiken adlar, dilin anahtar szckleri, ktphanede var olan fonksiyon adlar
olmamaldr.

- Her deikenin tuttuu deerin nasl bir veri olduunu gsteren bir tipi vardr.

- Sabitler de bellekte verinin sakland hcrelere verilen sembolik adlardr.
Deikenlere benzerler, fakat bildirilirken verilen deerler programn yrtlmesi
sresince deitirilemez.


2011 coz@sakarya.edu.tr 46

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Sabitler program boyunca deerleri deitirilmeyen yani sabit kalan deikenler
olarak ta dnlebilir.


Deiken ve sabit tipleri

Bilgisayar bir makinedir ve insan gibi yorum yapamaz. Bu yzden programda ilem gren
deiken ve sabitlerin veri tipleri, bilgisayarn bu deerler ile ilem yapabilmesi iin
verilmelidir. Daha nce belirtildii gibi veri tipi bir deiken veya sabitin saysal, karakter
veya baka tipteki niteliini belirler. Doal dillerde olduu gibi programlama dilllerininde
yazm kurallar vardr. Bu kurallara uygun yazlmadnda program almaz. En ok yaplan
hatalarda yazm hatalardr. zellikle programlama dilini yeni renmeye balayanlar bu tr
hatalar ok yapmaktadrlar. Herhangi bir deiken veya sabitin programda kullanlabilmesi
iin programda yer alabilmesi iin uygun bir yerde bildirilmesi (declaration) gerekmektedir.
Deien ve sabit bildirimlerinde bir deiken ad ve tr belirtilir.

Bir deiken veya sabit elemann say veya karakter eklinde genel olarak tiplerinin
belirlenmesi tek bana yeterli deildir. Bir elemann bildirilmesi ile ona bilgisayar belleinde
bir yer ayrlr. Bu bildirim ayrlacak yerin bykl hakknda da bilgi verecek ekilde daha
detayl olmaldr. Daha nce belirtildii zere bellekte az ve ok yer tutacak veri tiplerine ayn
miktarda yer ayrmak bellekte yer israfna yol aacak, dolays ile hem ilemin daha uzun
srede yaplmasa (gereksiz bellek okumalar) hem de donanm maliyetini artracak (bellekte
ayn miktar yer ayrlmas, verilerin o yere sabilmesi iin en ok yer kaplayan veri tipine
gre yer ayrmay gerektirir). Bu nedenle veri tipinin bildirilmesi bellekte ayrlaca yerin
bykln de iermelidir. C dilinde kullanlan temel veri tipleri bool ve void hari aada
verildii gibidir;

o char: karakter {A,b,@,<, vb.}
o int, short, long: tamsay {1, 1245, vb.}
o float, double, long double: gerel say {3.14, 10
4
, vb.}
o char []: sz dizisi (string) {Sakarya, vb.}
o []: dizi, matris {[12 13 1], vb.}

Dier programlama dillerinde de kendine zg gsterimleri ile benzer temel veri tipleri
kullanlr.


2011 coz@sakarya.edu.tr 47

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- C dilinde kullanlan tretilmi veri tipleri aada verildii gibidir;

o enum: sralamalar {pzt, sa, ar, per, }
o struct: topluluk
o iaretiler (pointers)
o class: snf
o vb.


C/C++ da temel veri tipleri


Karakter

C programlama dilinde char ile temsil edilen bu veri tipi tek bir karakterin ifade
edilmesini salar ve bellekte 1 byte (8 bit) byklnde yer igal eder. a,B,3, vb.
eklindeki karakterleri ifade eder.

En yaygn kullanlan karakter tablosu ASCII tablosudur. Standart ASCII de her bir
karakter 7 bittir ve 128 farkl karakter vardr. Extended (geniletilmi) ASCII de her
bir karakter 8 bittir ve 256 farkl karakter vardr. Uygulamada daha ok geniletilmi
ASCII tablosu kullanlmaktadr.

Ayrca unikod kodlama da yaygnlamaktadr ve evrensel bir kodlama eklidir. Bu
kodlamada her karakter 16 bit yer igal eder ve 65536 (2
16
) tane farkl karakter
kodlanabilir. Her lkenin bir sayfas vardr dolays ile karakter uymsuzluklar
problemlerine bir zm getirir.

rnek bildirimler;

char cevap;
char kr;
char secim, k1


Tamsay

2011 coz@sakarya.edu.tr 48

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

C programlama dilinde int ile temsil edilen veri tipi normal tam saylarn ifade
edilmesini salar ve bellekte derleyiciye bal olarak 2 yada 4 byte byklnde yer
igal eder.

Baz zel niteleyiciler kullanlarak (short, unsigned, long) bu temel veri tipinin
trevleri elde edilir.

short int ile temsil edilen veri tipi ksa tam saylarn ifade edilmesini salar ve
bellekte derleyiciye bal olarak 2 byte (16 bit) gemeyecek uzunlukta ve genelde
normal veri tipinin yars byklnde yer igal eder.

long int ile temsil edilen veri tipi uzun tam saylarn ifade edilmesini salar ve
bellekte derleyiciye bal olarak genelde normal veri tipinin iki kat byklnde yer
igal eder.

unsigned int ile temsil edilen veri tipi iaretsiz (pozitif) tam saylarn ifade
edilmesini salar.

Tamsay iin 16 bit kullanan bir derleyicide, tamsay -32768 ile +32767 arasnda
olmaldr (1 bit iaret biti, 2
15
=32768). Eer tamsay iaretsiz bildirilir ise atanacak
say 0 ile 65535 arasnda olmaldr (2
16
=65536). {(1111111111111111)
2
=(65536)
10
}
Dier derleyiciler iinde benzer hesaplama yaplabilir.

Derleyicinin kulland veri tipi uzunluunu byte olarak sizeof operatr ile
renebiliriz.

rnein;

#include <stdio.h>
int n;
void main(void) /* Ana fonksiyon */
{
n=sizeof(int);
printf("Tamsayi uzunlugu: %d",n);
}

2011 coz@sakarya.edu.tr 49

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

rnek bildirimler;

int n;
long int sonuc;
short int yas, boy;
unsigned int agirlik;


Gerel say

C programlama dilinde float ile temsil edilen veri tipi tek duyarl gerel saylarn
ifade edilmesini salar.

Gerel say kayan noktal (floating point) gsterimle bellekte saklanr. Ayn zamanda
standart C de double ile temsil edilen ift duyarl ve long double ile temsil
edilen uzun ift duyarl kayan nokta gsterimli gerel saylar da mevcuttur.

Program satrlarnda gerel saylar 1234.5 veya 0.12345E+4 (=0.1234510
+4
)
biiminde yazlabilirler.

Duyarllk hesaplanrken sayndaki nokta solunda sfr kalacak ekilde kaydrlr ve
noktadan sonraki belirli saydaki nokta duyarllk olarak belirtilir. Tek duyarl bir
gerel saynn duyarll 6 hane ise 123.456789 say iin duyarllk aadaki ekilde
belirlenir;

123.456789 0.123456E+3 {duyarllk rakamlar .123456 dr.}

Gerel saylar da bellekte derleyiciye bal bir bykte yer igal eder. Genelde tek
duyarllk iin 4 byte ve ift duyarllk iin 8 byte byklk kullanlmaktadr.

C derleyicilerinde genelde tek duyarllk iin duyarllk 6 hane ve s E-38 ile E+38
arasnda ve ift duyarllk iin duyarllk 15 hane ve s E-308 ile E+308 arasndadr.

Gerel saylar iin de derleyicinin kulland veri tipi uzunluunu byte olarak sizeof
operatr ile renebiliriz.

2011 coz@sakarya.edu.tr 50

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

rnek bildirimler;

float x, y;
double oran;


- Sz dizisi (string)

Bir metinin tamamn, herhangi bir cmlesini, bir szcn veya hecesini bellekte
tutmak iin sz dizisi (string) veri tipi kullanlr.

C/C++ dilinde sz dizisi (string) karakter dizisi bildirilerek yaplr. Bir sz dizisi ilk
karakterden balar ve sonlandrma karakterine (NULL: ASCII kodu 0) kadar devam
eder.

rnek bildirimler;

char Ad[10]; /*en fazla 9 karakterli sz dizisi*/
char Soyad[15]; /*en fazla 14 karakterli sz dizisi*/


- Dizi/Matris

Dizi ayn tipten verilerin tek bir isim altnda bellekte tutulmas iin kullanlan bir veri
tipi yntemidir.

Bu veri tipi ileriki konularda uygulama rnekleri ile detayl olarak ele alnacaktr.

rnek bildirimler;

int N[10];
int index[100];
int xyz[10][10][20];
float graf[20][10];


C/C++ da deiken bildirim yerleri ve tipleri


- Bir C/C++ programnda kullanlacak deikenler nceden bildirilmelidir.
Deikenlerin nerede bildirildii olduka nemlidir. Daha ncede belirtildii gibi bir
C/C++ program, bir yada daha ok fonksiyonun bir araya gelmesi ile oluur.


2011 coz@sakarya.edu.tr 51

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Eer bir deiken, programdaki fonksiyonlarn ounda kullanlacaksa genel (global)
olarak, yalnzca tek bir fonksiyon iinde kullanlacaksa o fonksiyon iinde yerel
(local) olarak bildirilmesi uygundur.


Yerel(local) bildirim


- Yerel (local) deikenler kullanld fonksiyon ierisinde bildirilir ve yalnzca
bildirildii fonksiyon ierisinde tannr ve kullanlrlar. Bildirildii fonksiyon dnda
tannmazlar. Yerel deikenler bildirildii fonksiyon programn ilemesi srasnda
yrtld anda bellekteki veri alannda yer kaplarlar.

- Yerel bildirim iin rnek C/C++ program;

#include <stdio.h> /* nilemci komutlar */
void main(void) /* Ana fonksiyon */
{
int m,n; /* Yerel bildirim */
m=7;
n=kare(m);
printf("%d nin karesi=%d dir.",m,n);
}

int kare (k) /* Fonksiyon */
int k; /* Formal bildirim */
{
int gecici; /* Yerel bildirim */
gecici=k*k;
return gecici;
}

- main() fonksiyonunun yerel deikenleri olan m ve n, kare fonksiyonunun iinde
tannamayacandan kullanlamazlar. Grld gibi m kare() fonksiyonuna
gnderilmekte ve kare() fonksiyonunda ise gnderilen m in deeri k adl deikende
tutulmaktadr. kare() fonksiyonunun yerel deikeni ise gecici dir.


Genel(global) bildirim


- Genel (global) deiken btn fonksiyonlarn dnda bildirilir. Bir deiken btn
program boyunca srekli kullanlyor ise genel olarak bildirilmelidir. Byle bir
deiken yerel olarak bildirilirse, kullanlaca her fonksiyona gnderilmesi gerekir.
Bu da gereksiz parametre aktarmna sebep olur.

- Yukardaki rnei genel (global) deiken kullanarak tekrar yazar isek;


2011 coz@sakarya.edu.tr 52

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
#include <stdio.h> /* nilemci komutlar */
int m,n; /* Genel bildirim */
void kare(void); /* Fonksiyon bildirimi */

void main(void) /* Ana fonksiyon */
{
m=7;
kare();
printf("%d nin karesi=%d dir.",m,n);
}

void kare(void) /* Fonksiyon */
{
n=m*m;
}

- Her iki program da ayn ii yapmaktadr. Fakat ikinci yazmda deikenler genel
bildirilmitir. Bu sebeple kare() fonksiyonuna ne parametre gelmekte ne de sonu
gnderilmektedir. nk genel deikenler btn fonksiyonlar iinde kullanlabilirler.

- kare() fonksiyonunun tipi return ile bir ey gnderilmedii iin main() fonksiyonu gibi
hibir ey anlamnda void dir.


Formal bildirim


- C/C++ programlarnda bir fonksiyonun argman olabilir. Bunlara formal
parametreler denilmektedir. Bu argmanlar da uygun bir ekilde bildirilmelidir. Bunlar
yerel deikenlere benzerler ve sadece fonksiyon ierisinde tannrlar. Bildirimi
fonksiyon adnn hemen altnda veya fonksiyon parantezi iindeki argmann nnde
yaplabilir.

- rnein;


int fonk(m,n) /* Fonksiyon */
int m,n;
{
.
}

- Veya;


int fonk(int m, int n) /* Fonksiyon */
{
.
}

2011 coz@sakarya.edu.tr 53

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- Formal parametreler fonksiyona deer aktarm yaplaca zaman kullanlr.


Dier bildirimler


- Dsal (Extern) Bildirim: Byk programlar uygun olarak paralara blnp ayr ayr
yazlp derlendikten sonra birbirleri ile balantlar (link) kurulabilir. Ortak genel
(global) deikenler bu program paralarn birisinde normal olarak bildirilirken, dier
program paralarnda dsal (extern) olarak bildirilir. {int x; extern int x; /*genel*/}

- Statik (Static) Bildirim: Yerel deikenler bildirildii fonksiyon yrtld anda
bellekte yer kaplar. Fonksiyon sonlandnda bo bellek alan gibi dnlr ve yerel
deikenin tutuu deer kaybolur. Yerel deikenin tutuu eski deer korunsun istenir
ise yerel deiken bildiriminin nne static anahtar szc yazlmaldr. {int k;
static int k; /*yerel*/}

- Saklayc tipi (Register) Bildirim: Bir deiken iin bellek hcresi yerine ilemci
saklaycs (register) kullanlmak isteniliyor ise bu deiken saklayc tipte
bildirilmelidir. Bunun iin deiken bildiriminin nne register anahtar szc
yazlmaldr. Saklayc tipi deikenlere -ilemci registerleri kullanld iin- eriim
daha hzl olur. Fakat kullanlabilecek saklayc tipi deiken says snrldr. {int a;
register int a;}

- vb..


3.4.4. Deikenlere balang deeri atanmas


- Herhangi bir biimde bildirilen bir deikenin deeri o anda bellek hcresinde bulunan
kullanlmas uygun olmayan rasgele bir deerdir. Deikenler bildirilirken istenilen bir
balang deeri atanabilir.

- rnein;


char kr=B, y=41; /*41 ASCII tabloda A karakteri*/
int m=1, n=10, p;
float f=10.115, x;



3.4.5. C/C++ da sabit bildirimi



2011 coz@sakarya.edu.tr 54

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Sabitler de deikenler gibi bellekte verinin sakland hcrelere verilen sembolik
adlardr. Deikenden farkl olarak bildirilirken verilen deerler programn
yrtlmesi sresince deitirilemez.

- C dilinde sabit bildirimi, balang deeri verilen deiken bildirimi gibi yaplr. Fakat
veri tipinin nne const anahtar szc koyulmaldr. rnein;

o const float pi = 3.142857;
o const int c = 5;
o const double e = 2.71828182845905;


3.5. Operatrler


- Operatrler, deikenler ve sabitler zerinde matematiksel, karlatrma ve mantksal
ilemlerin yaplmasn salayan ilemcilerdir. Operatrler bakmndan en zengin
dillerden biri C/C++ dilidir.


3.5.1. Aritmetiksel operatrler


- Deikenler ve sabitler zerinde temel aritmetik ilemleri gerekleyen operatrlerdir.

- C/C++ dilinde bulunan aritmetiksel operatrler;

o + : toplama
o - : karma
o * : arpma
o / : blme
o % : modl adn tayan blme ileminde kalan verir
o -- : bir azaltma
o ++ : bir artrma

int a,b,c;
a=10; /*a deikenine 10 says*/
b=5; /*b deikenine 5 says */
c=a+b; /*c deikenine 15 says*/
printf(%d Cnin deeri : \n, c ); /*ekrana 15 yazlr*/
c++; /*cnin deeri 1 artrlr*/
printf(%d Cnin deeri : \n, c ); /*ekrana 16 yazlr*/
c--; /*cnin deeri 1 eksiltilir*/
printf(%d Cnin deeri : \n, c ); /*ekrana 15 yazlr*/

- Aritmetik ilemler iin rnek C/C++ program;

#include <stdio.h>

void main(void)

2011 coz@sakarya.edu.tr 55

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

{
int m=10, n=2, t,a,a2,b;
t=m+n;
a=m++; /*once a=m sonra m=m+1*/
a2=--m; /*once m=m-1 sonra a2=m*/
b=m/2;
++m; /*m=m+1*/
printf("m=%d, t=%d, a=%d, a2=%d, b=%d,",m,t,a,a2,b);
}

#include <stdio.h>
main()
{
int x, y;
x=10;
y=3;
printf(%d,x/y); /*ekrana 3 yazdrlr*/
printf(%d,x%y); /*ekrana 1 yazdrlr*/
x=1;
y=2;
printf(%d %d,x/y, x%y); /*ekrana 0 1 yazdrlr*/
Return 0;
}


Aritmetiksel operatrler

// Haftalk gelirinizi hesaplar
#include <stdio.h>
main()
{
float weekly, yearly;
printf( Yllk gelirin nedir?\ ); // kullancya mesaj
scanf(%f ,&yearly);
Weekly= yearly/52; // Haftalk gelir hesaplanr
printf(\n\n Haftalk geliriniz %.2f YTL, weekly);
Return 0;
}
Yllk gelirin nedir? 38000.00
Haftalk geliriniz 730.77 YTL

C programlama dili nce arpma, blme ve mod ilemlerini, daha sonra toplama ve karma
ilemlerini gerekletirir. Bu bizim ilk okulda renmediimiz ilemlerdir.


likisel (karlatrma) operatrler



2011 coz@sakarya.edu.tr 56

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
ki deiken veya sabit arandaki ilikiyi ortaya koymak iin kullanlr. likisel operatrler
ayn tipten olan deiken veya sabit deerleri birbirleri ile karlatrmak iin kullanlrlar.
likisel operatrleri, genel olarak, dng deyimlerinde dnme koulu ifadesi veya
karlatrma deyimlerinde koul ifadesinde kullanlr. C/C++ programlama dilinde bulunan
ilikisel operatrler;

o > : byk
o >= : byk eit
o < : kk
o <= : kk eit
o == : eit
o != : eit deil

likisel operatrler C/C++ dilinde saysal, karakter ve mantksal deerler zerinde kullanlr.
Sz dizisi (string) iin kullanlmaz {bu amala strcmp() gibi ktphane fonksiyonlar
mevcuttur}.

likisel ilemler iin rnek C/C++ kodu;


if (x<15) ...
if(z==12)
if(x<=y)

likisel operatrler sras ile <, >, <=, >= ve ==, != ncelik srasna sahiptir.Ayrca ilikisel
operatrler aritmetik operatrlerden ncelik sras olarak sonra gelir.

C programlama dilinde ilikisel operatrlerin rettii deerler koul salanmas durumunda 1,
salanmamas durumunda 0 (int) deeri retir.
rnek 1
a=5;
b=4;
c=b<=a; /* c=1 */
c=a!=b; /* c=1 */
c=b>a; /* c=0 */

rnek 2
a=10;
b=5;
c=a<b+3;


2011 coz@sakarya.edu.tr 57

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Burada b+3 8
a<8 0
c=0 olur.
Genellikle if vb fonksiyonlarla kullanlrlar


Mantksal operatrler


- Mantksal operatrler genel olarak birden ok karlatrma ifadesinin birletirilip tek
bir koul ifadesi haline getirilmesi veya koulun tmleyenini (deil) almak iin
kullanlr.

- C/C++ dilinde bulunan mantksal operatrler;

o && : ve (and)
o || : veya (or)
o ! : deil (not)

Ve mantksal ilemci

ki veya daha fazla koulun birletirilmesinde kullanlr. Koullarn tamam doru ise sonu
doru, dier durumlarda sonu yanltr.

Koul 1 Koul 2 Koul 1 ve koul 2
0 0 0
0 1 0
1 0 0
1 1 1

rnein babanz size 1700 TL lik bir bilgisayar almak istiyor. Size diyorki, benim Ali den
1000 Tl, Veli den de 750 TL alacam var. Ali ve Veli borlarn der ise sana bilgisayar
alyorum. Burada (ve) mantksal operatr kullanldndan her ikisinin borcunu demesi
durumunda ancak bilgisayar alnabilecektir. Birinin demesi veya hi birinin dememesi
durumunda bilgisayar alnmayacaktr. ki koul iin drt farkl durum olabilir.

Alinin deme
durumu
Velinin deme
durumu
Eldeki
para
Koul 1 ve koul 2
demedi(0)-0TL demedi(0)-0 TL 0 TL Alnmyor(0)
demedi(0)-0 TL dedi(1)-750 TL 750 TL Alnmyor(0)
dedi(1)-1000 TL demedi(0)-0 TL 1000 TL Alnmyor(0)
dedi(1)-1000 TL dedi(1)-750 TL 1750 TL Alnyor(1)


2011 coz@sakarya.edu.tr 58

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

Veya mantksal ilemci

ki veya daha fazla koulun birletirilmesinde kullanlr. Koullarn tamam yanl sonu
veriyorsa yanl dier durumlarda doru sonu verir.

Koul 1 Koul 2 Koul 1 veya koul 2
0 0 0
0 1 1
1 0 1
1 1 1

rnein babanz size 1700 TL lik bir bilgisayar almak istiyor. Size diyorki, benim Ali den
1700 Tl, Veli den de 1750 TL alacam var. Ali veya Veli borlarn der ise sana bilgisayar
alyorum. Burada (veya) mantksal operatr kullanldndan en az bir tanesinin borcunu
demesi durumunda bilgisayar alnabilecektir. hi birinin dememesi durumunda bilgisayar
alnmayacaktr. ki koul iin drt farkl durum olabilir.

Alinin deme
durumu
Velinin deme
durumu
Eldeki
para
Koul 1 ve koul 2
demedi(0)-0TL demedi(0)-0 TL 0 TL Alnmyor(0)
demedi(0)-0 TL dedi(1)-1750 TL 1750 TL Alnyor(1)
dedi(1)-1700 TL demedi(0)-0 TL 1700 TL Alnyor(1)
dedi(1)-1700 TL dedi(1)-1750 TL 3450 TL Alnyor(1)

deil mantksal ilemci

bir koulun gereklemesi durumunda sonu yanl, gereklememesi durumunda ise sonu
dorudur.

Koul 1 Deil(Koul 1)
0 1
1 0

rnein babanz size 1700 TL lik bir bilgisayar almak istiyor. Size diyorki, benim Ali ye
1700 Tl, borcum var, ali benden borcunu istemez ise sana bilgisayar alacam. Eer AAli
parasn ister ise, baba da bara kalmayaca iin size bilgisayar alamayacaktr. Parasn
istememesi durumunda babada 1700 TL olacandan dolay bilgisayar alnabilecektir.


Alinin parasn
isteme durumu
Eldeki para Koul 1 ve koul 2

2011 coz@sakarya.edu.tr 59

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
istemedi(0)-0TL 17000 TL Alnyor(0)
istedi(1)-1700 TL 0 TL Alnmyor(1)


Mantksal operatrler iin rnek C/C++ kodu;


if (x<15 && 20<y)

if (!(m<5))


renci baarlarn deerlendirirken ve mantksal operatrne ihtiya duyulacaktr. DD notu
iin rencinin baar notunun 50 den byk eit ve 56 dan kk olmas gerekir. Bu
durumda programda aadaki ekilde bir koul ifadesi dd snfn belirler

if( Basari_notu>=50 && Basari_notu<57)
Printf( notunuz dd dir);

3.5.4. Bit dzeyinde ilem yapan operatrler


- Bit dzeyinde ilem yapmak, bir tamsay veya karakter deikenin deeri yerine
dorudan bitler (0,1) zerinde snama, deitirme veya teleme/kaydrma (shift)
yapmak iin kullanlr.

- rnein, bilgisayarn iletiim kanalndan alnan 8 bitlik bir ksa tamsaynn dk
ncelikli nc bitinin ne olduunu renmek istiyorsak bu operatrleri kullanmamz
gerekir.

- Bu operatrler, kullancya ilemcinin birletirici dili (assembly) dzeyinde, bitler
zerinde alma olana verir.

- C/C++ dilinde bulunan bit dzeyinde ilem yapan operatrler;

o & : bit dzeyinde ve (bitwise and)
o | : bit dzeyinde veya (bitwise or)
o ^ : bit dzeyinde ya da (bitwise xor)
o ~ : bire tmleme (ones complement)
o << : sola kaydrma (shift left)
o >> : saa kaydrma (shift right)



3.5.5. Dier operatrler


2011 coz@sakarya.edu.tr 60

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- Atama operatrleri: bir deikene bir bantnn sonucunu veya bir deeri eitlemek
iin kullanlrlar. C/C++ dilinde bulunan temel basit atama operatr = dir. Ayrca
C/C++ dilinde aada verilen dier bitiik operatrler de kullanlabilir;

o += : ekleyerek atama {t+=m+n t=t+(m+n)}
o -= : kararak atama {t-=m+n t=t-(m+n)}
o *= : arparak atama {t*=m+n t=t*(m+n)}
o /= : blerek atama {t/=m+n t=t/(m+n)}
o %= : blp kalann atama {t%=m+n t=kalan(t/(m+n))}
o <<= : sola teleyerek atama
o >>= : saa teleyerek atama
o &= : bit dzeyinde ve ilemi yaparak atama
o |= : bit dzeyinde veya ilemi yaparak atama
o ^= : bit dzeyinde ya da ilemi yaparak atama
o ~= : bire tmleme ilemi yaparak atama


- ? karlatrma operatr: C/C++ dilinde if-else karlatrma deyiminin yapt ii
snrl olarak yapan bir operatrdr. Genel yazlm biimi;

o (koul deyimi) ? deyim1 : deyim2
o rnek 1: {m = (a>b) ? a : b; a>b ise m=a, deilse m=b}
o rnek 2: {(m>5) ? a++ : b++; m>5 ise a=a+1, deilse b=b+1}


- & ve * iareti operatrleri: areti, bir deikenin bellekteki adresidir. areti
deiken bu adresin saklanaca zel bir deikendir. Bu tip deikenlere yalnzca
bellek adresleri veya dier iareti deikenler atanabilir. aretiler nmzdeki
dnem verilecek olan C programlama dersinde detayl olarak verilecektir. Burada
sadece bu operatrlerin C/C++ dilinde bildirimini ve kullanmn gsteren basit bir
rnek program verilecek;

#include <stdio.h>
void main(void)
{
int *p,*q, n=5, m=10, g;
g=n;
p=&n; /* n 'nin adresi p' ye ataniyor */
q=&m; /* m 'nin adresi q' ye ataniyor */
*p=m; /* adresi p ile gsterilen yere (yani n) m' in degeri ataniyor */
*q=g; /* adresi q ile gsterilen yere (yani m) g' in degeri ataniyor */
clrscr();
printf("p=%p,n=%d,q=%p,m=%d",p,n,q,m);
}

- sizeof operatr: daha nce de rnek ile bahsedildii gibi bir deikenin veya veri
tipinin bellekte ka byte yer kapladn verir.

2011 coz@sakarya.edu.tr 61

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

rnekler: {sizeof a, sizeof (int), vb.}


3.5.6. lem ncelikleri


- C/C++ dilinde yazlan ilemlerin istenildii ekilde doru olarak sonulana bilmesi
iin ifadeler ilem ncelikleri dikkate alnarak yazlmaldr.

- Aadaki tabloda operatrlerin C/C++ dilindeki ncekikleri grlmektedir. Ayrca
ayn ncelie sahip operatrlerin pei sra yazlmas halinde hangisinin ilk nce
deerlendirilecei de ayn tabloda grlmektedir {Bu operatrlerden ->, ., vb.
bahsedilmeyen bir ksm C Programlama dersinde yeri geldiinde detaylca ele
alnacaktr};




ncelik Operatrler (pei sra: soldan saa)
En ok ( ) [ ] -> .
sizeof (type) & * -- ++ ~ !
*: arpma / %
+ -
<< >>
< <= > >=
. == !=
. &: ve
. ^
|
&&
||
?:
>>= <<= |= ^= &= %= /= *= -= += =
En az ,


3.5.7.Matematiksel bantlarda veri tipi dnmleri


- C/C++ dilinde yazlan bir matematiksel bant iinde bir ok deiken ve sabit
bulunabilir. Bu deiken ve sabitler birbirlerinden fakl tiplerde bildirilmi olabilir.

- Bu durumda hesap sonucunun hangi tipte olaca nemlidir ve bu sonu iin bildirilen
tipe uygun olmas veri kaybn nler. rnein sonucu float olan bir ilem inttipi
bir deikene atanr ise sadece tam ksm korunur ve ondalk ksm ihmal edilir. Bu tr
ilemler kontrolsz yaplr ise deer kaybna neden olabilir.


2011 coz@sakarya.edu.tr 62

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Bir ilem srasnda ilgili operatrn (ilem nceliklerine gre ileme sokulan) iki deer
(deiken veya sabit) zerinde ilem yapacan dikkate almalyz.

- lem srasnda verilerden birinin tipi aadaki tabloda verildii ncelie gre
dnme tabi tutulur {UYARI: deiime urayan sadece deerdir. Asl deiken
kendi tip deerini korur};

ncelik Dntrlecek deer
En ok long double
double
float
unsigned long int
long int
unsigned int
En az int


- rnein, bir long double ile dier tipte bir veri ileme girecekse dierinin tipi long
double a dntrlr ve ilem sonuu long double olur.

- Her iki deer de bir tip tamsay ise, tiplerden biri veya her ikisi her ikisini de
gsterebilecek tamsay tipine dntrlr {derleyiciye gre dnm farkl olabilir}.



2011 coz@sakarya.edu.tr 63

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Giri k komutlar.


- Giri k ilemleri her programda ihtiya duyulan temel ilemlerden birisidir.
Programc veya dier veri kaynaklar ile bilgisayarn iletiimini salar.

- C/C++ programlama dilinde giri k ilemleri bu dilin giri k ktphane
fonksiyonlar (fonksiyon kavram daha ileriki derslerde geni olarak ele alnacaktr)
aracl ile gerekletirilir.

- C/C++ programlama dilinde ihtiya duyulan her trl giri k ilemi bu ktphane
fonksiyonlar ile kolay ve esnek bir ekilde salanabilmektedir.

- Bir C/C++ programnda standart giri k fonksiyonlar olduka ok kullanlr. Bu
giri k fonksiyonlarn kullanabilmek iin stdio.h adl balk dosyasn aadaki
ekilde yazarak program iine koymalyz;

#include <stdio.h>

- Dersimizin bu ksmnda sadece temel giri k fonksiyonlarndan rnekler ile
bahsedilecektir. Ders kapsamnda ihtiya duyulan dier giri k fonksiyonlarna
ilgili yerlerde deinilecektir. Ayrca giri k formatlama kavramna da ileriki
konularda deinilecektir.


3.6.1.Temel giri k ilemleri


- Temel giri k ilemleri, karakter sz dizisi ve saysal veri trlerinin standart giri
k birimlerine aktarlmasn ifade eder. rnein bir karakterin klavyeden okunmas
veya saynn ekrana yazdrlmas bu tr temel giri k ilemlerindendir.

- scanf()- printf() temel giri k fonksiyonlar:

Bu fonksiyonlar, genel olarak formatl okuma (scanf) ve yazma (printf) ilemlerinde
kullanlan, her trl verinin okunup yazlabilecei olduka esnek giri k
fonksiyonlardr.

rnekler;

scanf(%f,&x); /*x: gerel say*/
scanf(%d,&y); /*z: tamsay*/
scanf(%c,&kr); /*kr: karakter*/
printf(vize notu: %d, vize); /*vize: tamsay*/

printf() Fonksiyonu

2011 coz@sakarya.edu.tr 64

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Saysal ve alfanmerik deerleri ekrana(standart k birimine) gndermek iin kullanlan
formatl k fonksiyonudur. Bu fonksiyon stdio.h ktphanesi ierisinde tanmldr. Daha
nce bahsettiimiz gibi stdio.h balk dosyasnn programn bana eklenmesi gerekir.

printf (parametreler)

Karakter dizini ekrana yazdrmak istiyorsak

printf (Merhaba Millet) // Merhaba Millet ekrana yazdrlr.
printf (b=100) // b=100 string deeri ekrana yazdrlr.

int b=10;
printf( b deeri = %d dur,b); // b deeri = 10 dur ekrana yazdrlr.


printf("p=%p,n=%d,q=%p,m=%d",p,n,q,m); /*p,q: tamsay iareti, n,m: tamsay*/


Printf( %c %c %c, a, b, c);
Printf( Ben Cemil, ben %d yandaym ve maam %f YTL\n, 37, 1000.10)
Ben Cemil, ben 37 yamdaym ve maam 1000.10 YTL

2011 coz@sakarya.edu.tr 65

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

Bilinen kontrol karekterleri(Common Escape Sequences )
Character Escape Sequence
\a zil sesi(beep)
\b Geriye boluk(Backspace )
\f Kat besleme
\n Bir satr ekle(Newline)
\r Enter (Return)
\t Sekme(Tab )
\\ Ters slash (Backslash)
\ Tek trnak(Single quotation mark )
\ ift trnak(Double quotation marks )
.
.
\xdd 16 say sisteminde gsterim(Hexadecimal notation )


2011 coz@sakarya.edu.tr 66

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
4. YAPISAL PROGRAMLAMA KAVRAMI.


- Yapsal programlama, program tasarm ve yazlmasn kurallara balayan ve disiplin
altna alan bir yaklamdr.

- Yapsal programlamada problem zm daha kolay alt problemlere (modl) blnr.
Her bir alt problem (modl) daha dk seviyedeki alt seviyelere blnr.

- Bu ilem, aadaki ekilde de grlebilecei gibi her bir modln kolaylkla
zlebilecei seviyeye kadar devam eder.

- Yapsal programlama, program tasarm ve yazlmasn kurallara balayan ve disiplin
altna alan bir yaklamdr.

- Yapsal programlamada problem zm daha kolay alt problemlere (modl) blnr.
Her bir alt problem (modl) daha dk seviyedeki alt seviyelere blnr.

- Bu ilem, aadaki ekilde de grlebilecei gibi her bir modln kolaylkla
zlebilecei seviyeye kadar devam eder.


- En st seviyede zmn ana mantnn sergilendii ana modl yer alr. Alt
seviyelere indike izlenecek admlar ile ilgili ayrntlar artar.

- Modler program tasarmnda her modl dierlerinden bamsz olmaldr. Kontrol
her modle bir st seviyedeki modlden gemeli ve modl ilendikten sonra tekrar
ayn modle iletilmelidir.

- Modllerin tanmlanmasnda, (algoritma paras olduu iin) szde kod (pseudo-code)
kullanlr.


2011 coz@sakarya.edu.tr 67

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Bir modln zmnde kullanlacak algoritma, szde kod ile ifade edilirse programa
gei byk lde kolaylar.


rnek 1;


Problem: 1den n ye kadar olan tam saylarn toplamn bulmak.

Problem ok kolay olmasna ramen modler programlamaya bir rnek olmas asndan
aadaki ekilde bir tasarm dnelim;




Tasarlanan ana modl ve alt modl szde kod ile;

/* Ana modl */
Veri
Hesapla
Yaz

/* Veri modl */
n deerini oku

/* Hesapla modl */
Eer n<=0 ise
n deerinin geersiz olduunu yaz
deilse
i ye 1 deerini ykle
toplama 0 deerini ykle
i<n olduu srece
i yi toplama ekle
i yi artr.

/* Yaz modl */
toplam yaz

Bu aamadan sonra algoritma herhangi bir programlama dili ile yazlabilir.
Problemin C/C++ ta rnek kodlanmas (fonksiyon kavramna ileri konularda deinilecek);

#include <stdio.h> /*standart giris cikis icin*/

2011 coz@sakarya.edu.tr 68

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
#include <conio.h> /*DOS destekli giris cikis icin*/
int veri ();
float hesapla (int);
void yaz (float);
void main(void) /* Ana modul */
{int n;
float toplam;
clrscr();
n=veri();
toplam=hesapla(n);
yaz(toplam);
}
int veri() /* Veri modulu */
{int n;
printf("1' den N' ye kadar olan tam sayilarin toplamini bulma programi");
printf("\n");
printf("\n");
printf("N degerini giriniz: ");
scanf("%u",&n);
return n;
}
float hesapla (int n) /* Hesapla modulu */
{int i;
float t;
t=0;
for(i=1;i<=n;i++) t=t+i;
return t;
}
void yaz (float toplam) /* Yaz modulu */
{
printf("\n");
printf("sonuc=%0.0f",toplam);
getch();
}


4.1. Yapsal programlamada algoritma temel yaplar: sra, sorgu ve tekrar yaplar.

- Yapsal programlamada ana ilke goto deyimini kaldrmak ve temel kontrol yaplarn
kullanmaktr. Yapsal olmayan bir programda ok sayda goto deyimi kullanlr ve
yukardan aaya, aadan yukarya atlamalar grlr.

- Program iinde birka atlamadan sonra programc, ilem akn ve program mantn
izleyemez duruma gelir.

- Yapsal programlamada her hangi bir algoritma temel kontrol yaps ile ifade
edilebilir;

o Sra: bir dizi ilemin birbiri ardndan srasyla yaplmasn ifade eder.

2011 coz@sakarya.edu.tr 69

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

o Sorgu (seme): iki seenek yoldan hangisinin izlenecei bir testin sonucuna
baldr.

o Tekrar (yineleme): test edilen sonu salanana kadar ilemin yinelendii
durumu ifade eder.

- Bu temel kontrol yaplar aada grafiksel olarak (ak diyagram) gsterilmitir;




4.1.1. Sra yaps


- En basit ak emas ifadeleri, bir dizi ilemin birbiri ardndan srasyla yaplmasn
eklinde olan ak ifadeleridir. Bu tip aklar olduka yaln ve basittir.

- Bu tarz aklar genelde bir problemin bir parasn zmlemek ve ifade etmek iin
kullanlr.

- Sorgu ve tekrar gerektirmeyen baz basit ardk problemler de bu tip ak kullanabilir.


- rnein;

Klavyeden girilen iki sayy okuyup aritmetik ortalamasn hesaplayan ve sonucu
ekrana yazan bir programn ak aadaki ekilde ifade edilebilir;


2011 coz@sakarya.edu.tr 70

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar




4.1.2. Sorgu (seme) yaplar


- Algoritma ierisinde verilen ilem admlar genel de sral admlardan oluur. Fakat
baz koullarda bu ilem sralarnn deitirilmesi ve dier bir ilem srasnn seilmesi
gerekebilir.

- Sorgu (seme) ilemi ak diyagramnda baklava dilimi eklindeki karlatrma
simgesi ile ifade edilir. Simgenin ierisine koul yazlr. Koulun sonucuna gre iki
ynden birisi seilir. Program ak, koul olumlu ise evet olumsuz ise hayr
olarak etiketlenen yne dallanma yapar.


4.1.2.1. Basit Sorgu (IF) yaps.


- Bir koullu ilem yapma deyimidir. if ve else tek bir karlatrma deyimi olup
else in kullanm istee baldr. Eer koul olumlu ise if den sonraki komut
kmesi yrtlr ve else den sonraki komut kmesi atlanr. Eer koul olumsuz ise
if den sonraki komut kmesi atlanr ve else den sonraki komut kmesi
yrtlr.

- Aada verilen ekilde else li ve else siz if yaps ak diyagram olarak
gsterilmekte ve genel yazlm format verilmektedir;


2011 coz@sakarya.edu.tr 71

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar





- rnek: rnek alg.3 iin izilen ak diyagram iin if sorgu yaps kullanan bir C/C++
program yazalm.





2011 coz@sakarya.edu.tr 72

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

rnein C/C++ ta kodlanmas (goto kullanlarak);

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
float a,x,e,b,y;
printf("karekoku bulunacak sayiyi giriniz: ");
scanf("%f",&a);
printf("\n");
printf("tahmini karekoku giriniz: ");
scanf("%f",&x);
printf("\n");
printf("kabul edilebilir hatayi giriniz: ");
scanf("%f",&e);
printf("\n");
printf("\n sayi Tahkk hata b y ");
printf("\n-------------------------------------------------------");
printf("\n %f, %f, %f, %f, %f ",a,x,e,b,y);
A4:
b=(a-x*x)/(2*x); /* fark (hata) deeri olan b' yi hesapla */
y=x+b; /* daha yakn yeni karekk deerini (y) hesapla */
printf("\n %f, %f, %f, %f, %f ",a,x,e,b,y);
if (fabs(b)<=e) goto A9; /* eger mutlak(b)<=e ise iterasyonu durdurmak iin A9 a git */
else x=y; /* y yeni karekk degerini x degiskenine ata */
goto A4; /* islemi yeni x tahmini ile tekrarlamak iin A4'e git */
A9:
printf("\n-------------------------------------------------------");
printf("\n karekok=%f \n\n",y); /* en son hesaplanan karekk deerini (y) ekrana yaz */
system("PAUSE");
return 0;
}


2011 coz@sakarya.edu.tr 73

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


Yapsal programlamada istenmemesine ramen rnek problemde dng olduu ve if yaps
tek bana dng ilemini yapamad iin goto komutunu kullandk. Ayrca program ok
ksa olmas nedeniyle modler programlamaya ihtiya duymadk.

rnek

Bir kree kayt edilen rencilere yalarna gre retmen atayan bir program iin algoritma
ve ak diyagram tasarlayalm

renci 1 ile 3 ya arasnda ise, Pnar retmen
renci 4 yanda ise, Aylin retmen,
renci 5 yanda ise, Ceyda retmene, atanacak

Bu yalarn dnda bir ya atanmas durumunda ise bu ya iin retmen yok mesaj
verilecektir.



Adm 1: Bala
Adim 2: oku(Adi, Yas)
Adim 3: eer yas>=1 ve yas<=3 ise yazdr(Pnar retmen)
Adim 4: eer yas=4 ise yazdir(Aylin retmen)
Adim 5: eer yas=5 ise yazdir(Ceyda retmen)
Adim 6: yazdir(Bu ya iin retmen yok)
Adim 7: dur










2011 coz@sakarya.edu.tr 74

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


































rnek: bir f(x) fonksiyonunun denklemi aadaki ekilde verilmitir. Bu fonksiyonun
hesaplanmas iin algoritma ve ak diyaram gerekletiriniz.








Adm 1: Bala
Adim 2: oku(x)
Adim 3: eer x<0 ise fx=1
Adim 4: eer x>=0 ve x<=3 ise fx=x+1
Adim 5: eer x>3 ise fx=4
Adim 6: dur
Bala
Adi,yas
3>=Yas>=1
Yas=4
Yas=5
Aylin
Pnar
Ceyda
bu ya iin
retmen yok
Dur

2011 coz@sakarya.edu.tr 75

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
































4.1.2.2. switch - case seme yaps


- switch case seme yaps bir deikenin ieriine bakarak programn akn
birok seenekten birisine ynlendiren bir karlatrma deyimidir.

- Deikenin ierii hangi sabit ile uyuursa ona ait ilem kmesi ve arkasndaki btn
ilem kmeleri yrtlr. Ancak kme deyimleri arasnda break kullanlrsa, daha
sonraki tm ilem kmeleri atlanarak switch blounun sonuna gidilir.

- switch case seme yaps ak diyagram olarak aadaki ekilde gsterilmekte
ve genel yazlm format verilmektedir;

Bala
x
x<0
0<=x<=3
x>3
Fx=x+1
Fx=1
Fx=4
Dur
evet
evet
evet
hayr
hayr

2011 coz@sakarya.edu.tr 76

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


- rnek: switch case seme yaps iin rnek bir C/C++ program;


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char a;

printf("\n 1-5 arasi bir rakam giriniz: ");
scanf("%c",&a);
switch (a) {
case '1': printf("cok zayif \n"); break;
case '2': printf("zayif \n"); break;
case '3': printf("orta \n"); break;
case '4': printf("iyi \n"); break;
case '5': printf("pekiyi \n"); break;
default: printf("yanlis secim \n");
}

2011 coz@sakarya.edu.tr 77

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
system("PAUSE");
return 0;
}







































Bala
a
a='1'
"ok zayf"
Dur
evet
hayr
a='2'
" zayf"
a='3'
" orta"
a='4'
" iyi"
a='5'
evet
evet
evet
evet
hayr
hayr
hayr
" Pek iyi"
hayr
" zayf"

2011 coz@sakarya.edu.tr 78

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


Break deyiminin nemi

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char a;
printf("\n 1-10 arasi bir rakam giriniz: ");
scanf("%c",&a);
switch (a)
{
case '0':
case '1':
case '2':
case '3': printf("cok zayif \n"); break;
case '4':
case '5': printf("zayif \n"); break;
case '6':
case '7': printf("orta \n"); break;
case '8':
case '9': printf("iyi \n"); break;
case '10': printf("pekiyi \n"); break;
default: printf("yanlis secim \n");
}
system("PAUSE");
return 0;
}















2011 coz@sakarya.edu.tr 79

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char a;

printf("\n 1-5 arasi bir rakam giriniz: ");
scanf("%c",&a);
switch (a) {
case '1': printf("cok ");
case '2': printf("zayif \n"); break;
case '3': printf("orta \n"); break;
case '4': printf("iyi \n"); break;
case '5': printf("pekiyi \n"); break;
default: printf("yanlis secim \n");
}
system("PAUSE");
return 0;
}



2011 coz@sakarya.edu.tr 80

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

Bala
a
a='1'
"ok "
Dur
evet
hayr
a='2'
" zayf"
a='3'
" orta"
a='4'
" iyi"
a='5'
evet
evet
evet
evet
hayr
hayr
hayr
" Pek iyi"
hayr
" zayf"

2011 coz@sakarya.edu.tr 81

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Tekrar(Dng) Yaplar-C programlama dilinde Dngler

Programlama dillerinin temel ifadelerinden biriside dng ifadeleridir. Tekrar (dng)
yaplar belirli bir kod parasnn farkl deerler zerinde tekrar tekrar altrlmasn salar.
kod uzuluunu azaltmak bata olmak zere iterasyon ile problem zm gibi uygulamalarda
sklkla dng kurulmas gerekmektedir. Bu dng kurma ilemi, ya dng deyimleriyle yada
programlamada ilke olarak kullanlmas istenilmeyen goto deyimiyle gerekletirilir.
farkl dng ifadeleri bulunmaktadr. Dng ifadelerini ikiye ayrabiliriz; BRNCS koulu
bata snayan, ikincisi ise koulu sonda snayan. Koulu bata snamas, daha evrime
girmeden dng kouluna baklmas ve koul olumlu ise evrime girilmesi, koul olumsuz ise
evrime girilmeden sonraki admlara geilmesi anlamna gelir. Koulun sonda snanmas ise,
evrim ierisinde kodun en az bir kere iletilmesi ve eer koul salanyorsa evrime devam
edilmesi salanmyor ise evrimden klmas anlamna gelir.



FOR Dngs

Tekrar(dng) ifadelerinin en bilineni "for" dng ifadesidir. Dng blou ierisinde verilen
ifadeleri, verilen koulun doru olduu srece tekrar, tekrar yrtmesini salar. Koul
snamas dngye girilmeden nce yaplmaktadr. Dolays ile verilen koul doru sonu
vermiyorsa dng blogu ifadeleri yrtlmemektedir. for dngsnde koul sayac ve for
koul satrnda parametre vardr. Birinci parametre dng sayacna balang deeri
verilmesi, ikinci parametre koulu ve nc parametre her evrimde sayacn nasl
artacan/eksileceini ifade eder. Dngye girmeden nce saya bir balang deeri alr ve
daha sonra koula baklr. Dng ierisindeki ilemler yapldktan sonra saya nc
parametrenin durumuna gre deitirilir (artrlr/eksiltilir).
For dngsnde genellikle, nceden kodun ne kadar tekrar edilecei bilinmektedir.


ekil de grld zere for dngs bir ifade ieriyorsa ssl parantezlere gerek yoktur.
Ancak dng blou ok sayda ifadeden oluuyorsa, ssl parantezler ierisinde verilmelidir.
for blogunun sonunda (;) gerek yoktur.




saya artrm/azaltm ifadesi
Koul ifadesi( dng sonlandrma)
Saya balang deeri

2011 coz@sakarya.edu.tr 82

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar












ekil . for dng yazl
rnek yazlm formatlar:

for (k=1;k<50; k+=2)
burada standar bir kullanm dzeni verilmitir. saya deeri ikier ikier artmaktadr.

for (k=5;k<=n; k++)
bu kullanmda da standart bir kullanm dzeni verilmitir. Ancak saya deeri 1 den
deil 5 saysndan balatlmtr.

for (x=50;x>10;x--)
Bu kullanmda ise sayac balang deeri biti deerine gre daha byktr(x=50).
Bylece koul ifadeesinde daha kk (x>10) bir rakamdan byk olmas istenir iken
saya deeride dngde azaltlmaktadr(x--).

for ( ;x<10;x++) /* balang deeri daha nce atanm olmal */
Bu kullanmda balang deeri verilmemi. Balang deerinin dngye girilmeden
verlilmi olmas gerekir.rnein;
x=0; gibi

for (x=2;x<n; ) /* x dng sayac dng iinde deitirilmeli */
Bu kullanmda artm ifadesi verilmemi, artm ifadesi for deyimi blogunun ierisinde
verilmelidir. rnein;
for (x=2;x<n; )
{
.....
x++;
}

for ( i=0; i<10; i++)
ifade ;
tek ifade olmas durumunda ssl
parantezlere ihtiya duyulmaz
for ( i=0; i<10; i++)
{
ifade1 ;
ifade2 ;
ifade3 ;
...
}
Birden fazla ifade yer almas durumunda.
Blok parantezlerine ihtiyac vardr.
Noktal virgl konulmuyor
Noktal virgl konulmuyor

2011 coz@sakarya.edu.tr 83

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
ekilde for dng yaps ak diyagram altarnatifl formlar gsterilmekte ve genel
yazlm format verilmektedir;





- rnek: for dng yaps iin rnek bir C/C++ program;


#include <stdio.h>
#include <conio.h>
void main(void)
{int i, n, faktoriyel=1;
clrscr();
printf("faktoriyeli alinacak sayiyi giriniz: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
faktoriyel*=i; /* faktoriyel=faktoriyel*i */
} /* tek deyim oldugu icin parantezler kullanlmaya bilirdi */
printf("hesaplanan faktoriyel deeri = %d\n",faktoriyel);
getch();
}


WHILE Dngs

while dngs for dngs gibi ayn ilemleri birok kez tekrarlamak iin kullanlr. Bu
dngde koul snamas for dngsnde olduu gibi evrime girmeden yaplr. Koul tek bir
karlatrmadan oluabilecei gibi birden ok koulun mantksal operatrler ile birletirilmesi
ile de oluturulabilir. ekilde while dng yaps ak diyagram olarak gsterilmekte ve
genel yazlm format verilmektedir;

2011 coz@sakarya.edu.tr 84

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
For dngs bir ii belli bir sayda tekrarlamaya yaradndan dng says bellidir. while
dngs ise dngnn genellikle ne kadar tekrarlanaca bilinmedii durumlarda kullanlr.




ekil de grld zere while dngs bir ifade ieriyorsa ssl parantezlere gerek yoktur.
Ancak dng blou ok sayda ifadeden oluuyorsa, ssl parantezler ierisinde verilmelidir.
while blogunun sonunda (;) gerek yoktur.








2011 coz@sakarya.edu.tr 85

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

ekil . while dng yazl




- rnek: while dng yaps iin rnek bir C/C++ program;


/* while rnek 1*/
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int sayac=1,n;
printf("kaca kadar sayalim: ");
scanf("%d",&n);

2011 coz@sakarya.edu.tr 86

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
while(sayac<=n)
{
printf(" %d",sayac);
sayac++;
}
printf(" \n");
system("PAUSE");
return 0;
}



DO WHILE Dngs

do while dngs dier dngler gibi ayn ilemleri birok kez tekrarlamak iin
kullanlr. Farkl olarak, bu dngde koul snamas dng blounun sonunda gerekletirilir.
Dolays ile blok ierisindeki ifadeler koun ister doru ister yanl sonu retsin bir defa
iletilir. Koul tek bir karlatrmadan oluabilecei gibi birden ok koulun mantksal
operatrler ile birletirilmesi ile de oluturulabilir.

Aada verilen ekilde do while dng yaps ak diyagram olarak gsterilmekte ve
genel yazlm format verilmektedir;



2011 coz@sakarya.edu.tr 87

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar



- rnek: dowhile dng yaps iin rnek bir C/C++ program yazalm;


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int sayi,kare;
do
{
printf("\nbir sayi giriniz: ");
scanf("%d",&sayi);
kare=sayi*sayi;
printf("sayinin karesi= %d\n",kare);
}
while(sayi>0);
printf("cevrim sonlandirildi \n");
system("PAUSE");
return 0;
}


2011 coz@sakarya.edu.tr 88

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


4.1.3.4. rnekler


- rnek 1: Girilen bir tamsaynn tam kare olup olmadn aratran bir C/C++
program yazalm.

- Girilen bir saynn tam kare olabilmesi iin, bu saynn karekknn tam ksm
alnarak elde edilen deerin tekrar karesi alndnda bu saynn ilk girilen sayya eit
olmas gerekir.

- Program ve ak diyagram;


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
int a,c,d;
float b;
printf("\nsayi giriniz: ");
scanf("%d",&a);
printf("\n");
b=sqrt(a);
c=fabs(b); /* int c degisgeni ne atandigi
icin mutlak b nin tam kismi
c ye ataniyor */
d=c*c;
if(a==d) printf("sayi tam karedir \n");
else printf("sayi tam kare degildir \n");
system("PAUSE");
return 0;
}


2011 coz@sakarya.edu.tr 89

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar







- rnek 2: Girilen a ve b saylar 100 den kk ise c=a*a+b ilemini yapan bir C/C++
program yazalm.

- Yazlacak programda iki saynn 100 den kk olmas koulu sorgulanacak. Bu koul
sorgulamas tek tek karlatrma ilede yaplabilir fakat bu durumda iki ayr if
yapsn i ie kullanmak gerekir. Tek if yaps kullanmak iin iki koul && (ve)
mantksal operatr ile birletirilebilir.

- Bu durumda oluacak C/C++ program ve ak diyagram;


#include <stdio.h>
#include <conio.h>
void main(void)
{
int a,b,c;
clrscr();
printf("a degerini giriniz: ");
scanf("%d",&a); printf("\n");
printf("b degerini giriniz: ");
scanf("%d",&b); printf("\n");
if(a<100&&b<100)
{c=a*a+b;
printf("c degeri = %d\n",c);}
else
printf("sayilardan en az biri uygun degil \n");
getch();
}





DEV 2



2011 coz@sakarya.edu.tr 90

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Soru 2.1;


1 den n e kadar olan saylarn toplamn bulmak iin for, while ve dowhile dng
deyimlerini kullanarak ayr C/C++ program yaznz. Bu programlardan birisi iin ak
diyagramn iziniz.


Soru 2.2;


Girilen n tamsaydan negatif ve pozitif olanlarn saysn bulan ve ekrana yazan bir C/C++
program yaznz ve bu programn ak diyagramn iziniz.

Soru 2.3;


Girilen n tamsaydan istenilen bir tam sayya en yakn olan sayy bulan ve ekrana yazan bir
C/C++ program yaznz ve bu programn ak diyagramn iziniz.


Soru 2.4;


Girilen bir saynn belirtilen ssn alan ve ekrana yazan bir C/C++ program (hazr
matematiksel fonksiyon kullanmadan) yaznz ve bu programn ak diyagramn iziniz.



Soru 2.5;


dev 1, soru 1.1 de oluturduunuz algoritma iin bir C/C++ program yaznz.



Soru 2.6;

Bir gemi 10 dakika boyunca dzgn hzlanarak hzn 0 mil/saat ten 40 mil/saat e karyor.
Daha sonra ulat bu hzda 2 saat boyunca sabit hzla gidiyor. Ardndan 20 dakika boyunca
dzgn yavalayarak duruyor. Herhangi bir t (dakika) annda geminin hzn veren C/C++
program yaznz ve bu programn ak diyagramn iziniz.



5. DZ (VEKTR) KAVRAMI



2011 coz@sakarya.edu.tr 91

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Deikenler isimlendirilirken her bir deiken iin bir ad kullanmak zorunludur. Bu
ise deiken saysnn ok olmas durumunda uygun bir yntem deildir. Bu durumda
benzer zelliklere sahip elemanlar bir kme gibi dnerek bu dorultuda ilem
yapmak daha uygun olacaktr.

- Belli zelliklere sahip bu elemanlarn oluturduklar kmeler dizi (array) olarak
adlandrabilir.

- Diziler, indisli deikenler kullanlarak adlandrlrlar. rnein n elemanl bir A dizisi
iin A1, dizinin birinci elemann ve An , dizinin son elemann ifade etmektedir.

- C programlamada, dizi ad herhangi bir geerli deiken ad olabilir, fakat indis kare
parantez iine alnmaldr.

- rnein 10 elemanl bir A dizisinin elemanlar srasyla A[1], A[2], A[3],, A[10]
eklinde ifade edilir.

- Dizi, art arda gelen ayn tip verileri saklayan bellek elemanlar veya bellek hcreleri
olarak tanmlanabilir.

- Dizi tanmlanrken diziye bir isim verilir. Dizi tanmlandktan sonra programda bu
isimle arlr.

- C/C++ programlama dillerinde dizi bildirimi genel olarak aadaki ekilde yaplr;

DiziTipi DiziAd[Byklk]

- rnek olarak 10 adet tam sayy tutacak bir A dizisi C/C++ da aadaki ekilde
bildirilebilir;

int A[10];

- Bir dizi bellekte sabit byklkte bir yere yerleir. Dizi tanmlandktan sonra program
ierisinde dizinin bellekte kaplad alan miktarnda artma veya azalma yapmak
mmkn deildir.

- rmein, 100 elemanl bir dizi tanmlanrsa, program ierisinde dizinin sadece 10
eleman kullanlsa bile geri kalan 90 eleman bellekte yer igal etmeye devam eder. Bu
nedenle diziler tanmlanrken, dizilerde saklanlacak veri miktar iyi analiz edilmelidir.



5.1. Dizilere ynelik algoritma rnekleri


- rnek 1:


2011 coz@sakarya.edu.tr 92

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- n elemanl bir say dizisinin giriini yapan bir C/C++ program yazalm ve ak
diyagramn izelim;


#include <stdio.h>
#include <conio.h>
int i,n;
int A[100];
void main(void)
{clrscr();
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("dizi eleman giriniz: ");
scanf("%d",&A[i]);
printf(" \n");
}
getch();
}


- rnek 2:

- Girilen n elemanl bir say dizisinin en byk elemann bulan bir C/C++ program
yazalm ve ak diyagramn izelim;


#include <stdio.h>
#include <conio.h>
int i,eb,n;
int A[100];
void main(void)
{clrscr();
printf("dizi eleman sayisini giriniz:
");
scanf("%d",&n);
for(i=0;i<n;i++)
{printf("dizi elemani giriniz: ");
scanf("%d",&A[i]);
printf(" \n");
}
eb=A[0];
for(i=1;i<n;i++)
{
if(eb<A[i]) eb=A[i];
}
printf("en buyuk sayi= %d\n",eb);
getch();
}

2011 coz@sakarya.edu.tr 93

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar





- rnek 3:

- Klavyeden okunan bir dizi harfin alfabetik sraya konulmasn salayan ve sonucu
ekrana yazan bir bir C/C++ program ve ak diyagramn rnek alg.4 te
oluturduumuz algoritma mantna gre oluturalm.

- Daha nce oluturduumuz algoritmadan bir fark olarak, C de dng yaplarn
rendiimiz iin yapsal programlama kavramnda istenmeyen goto deyimini
kullanmadan ak diyagramn ve program oluturalm.

- Gireceimiz harfleri sz dizisi tipine sahip olan bir dizi deikeninde tutabiliriz. Fakat
burada sz dizisinin son eleman olan NULL karakterini sralamaya sokmadmza
ve ayrca sz dizisinin ilk eleman 0 nolu indis ile gsterildiine dikkat edelim.

- Bu durumda oluacak ak diyagram;


2011 coz@sakarya.edu.tr 94

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- Ak diyagramna uygun C/C++ programn yazalm;

/* Karakter Siralama Program*/
##include <stdio.h>
#include <stdlib.h>
#include <math.h>
int i,j,n,k;
char h[100];
char b;
int main(int argc, char *argv[])
{
printf("karakter dizisi eleman sayisini giriniz: ");
scanf("%d",&n);
printf("karakter dizisini bosluksuz giriniz: ");
scanf("%s",h);
printf(" \n");
k=n;

for(i=0;i<n;i++) /* dizinin ilk elemani 0 indisinde
dizinin son elemani NULL*/
{ k--;
for(j=0;j<k;j++)
{
printf("\n dizi -> %s ",h);
if(h[j+1]<h[j])
{
b=h[j];
h[j]=h[j+1];
h[j+1]=b;
}
printf(" i=%d, j=%d sirali dizi -> %s ",i,j,h);
}
}
printf("\n siralanmis dizi --> %s\n",h);
system("PAUSE");
return 0;
}


2011 coz@sakarya.edu.tr 95

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


- rnek 4:

- Girilen n elemanl bir say dizisinin
en byk ve en kk elemann ve
bunlarn yerlerini bulan bir C/C++
program yazalm ve ak
diyagramn izelim;


#include <stdio.h>
#include <conio.h>
int i,eb,ek,yerb,yerk,n;
int A[100];
void main(void)
{clrscr();
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{printf("dizi elemani giriniz: ");
scanf("%d",&A[i]);
printf(" \n");
}
eb=A[0]; ek=A[0];
yerb=0; yerk=0;
for(i=1;i<=n;i++)
{
if(eb<A[i])
{eb=A[i]; yerb=i+1;}
else if (ek>A[i])
{ek=A[i]; yerk=i+1;}
}
printf("en buyuk sayi= %d\n",eb);
printf("yer sirasi= %d\n",yerb);
printf("en kucuk sayi= %d\n",ek);
printf("yer sirasi= %d\n",yerk);

2011 coz@sakarya.edu.tr 96

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
getch();
}


- if- else if else yaps.

- Yukardaki rnekte de grlebilecei gibi if yaps ve if - else if - else
eklinde de kullanlabilir.

- if - else if - else yapsnn genel yazlm format;

if (koul) then {ilemler
else if (koul) then {ilemler}

else {ilemler}


- rnek 5:

- Girilen n elemanl bir say dizisinde hem 4e hem 5e blnebilen saylar bulan ve
baka bir diziye ykleyen bir C/C++ program yazalm ve ak diyagramn izelim.

- Bir deer hem 4 e hem de 5 e blnebiliyor ise en kk ortak katlar olan 20 ye de
kalansz blnebilmelidir. Yani bu saynn mod 20 ye gre deeri 0 olmaldr.

- Programn ak diyagram;


2011 coz@sakarya.edu.tr 97

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar



- C/C++ Program;

#include <stdio.h>
#include <conio.h>
int i,k,say,n;
int A[100], C[100];
void main(void)
{clrscr();
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{printf("dizi elemani giriniz: ");
scanf("%d",&A[i]);
printf(" \n");
}
k=0; say=0;
for(i=0;i<n;i++)
{
if(A[i]%20==0)
{k++;
C[k]=A[i];
say++;
}
}
for(k=1;k<=say;k++)

2011 coz@sakarya.edu.tr 98

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
{ printf("%d ",C[k]);
}
printf(" \n");
getch();
}



- rnek 6:

- Girilen iki basamakl tam saylardan oluan n elemanl bir say dizisini (aadaki
rnekte olduu gibi) giri srasnn tersine sralayan ve her bir saynn onluk ve birlik
basamandaki rakamlarn yerini deitiren bir C/C++ program yazalm ve ak
diyagramn izelim.

- rnek dizi ilemi: [45 43 16 24 67 ] [76 42 61 34 54]

- Yaplmas gereken ilemde hem dizinin elemanlarnn diziliini tersine evirme ve
hem de her bir elemann
rakamlarnn yerini deitirme
ilemi var.

- Diziliin tersine dndrlmesi bir
for dngs ierisinde
yaplabilir. Bu srada dizi
elemanlarnn birlik ve onluk
basamaklarnn deerleri
belirlenerek yerleri deitirilir.

- Dizi elemanlarnn mod 10 a gre
deerleri birlik basamann
deerleridir.Ayn zamanda dizi
elemanlarn 10 a blp sonucun
tam say ksmn alrsak bu da bize
elemanlarn onluk basama
deerlerini verir.

- C/C++ program ve ak diyagram;


#include <stdio.h>
#include <conio.h>
int i,o,b,n,nn;
int A[100], C[100];
void main(void)
{clrscr();
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);

2011 coz@sakarya.edu.tr 99

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
for(i=0;i<n;i++)
{printf("dizi elemani giriniz: ");
scanf("%d",&A[i]);
printf(" \n");
}
nn=n-1;
for(i=0;i<n;i++)
{
o=A[i]%10;
b= A[i]/10;
C[nn-i]=o*10+b;
}
for(i=0;i<n;i++)
{ printf("%d ",C[i]);
}
printf(" \n");
getch();
}









- rnek 7:

- Kkten bye doru sral bir ekilde girilen n elemanl bir say dizisinde istenilen
bir sayya ve yerine yarlama ilemiyle ulamay salayan ve sonucu ekrana yazan bir
C/C++ program ve ak diyagramn oluturalm.

- Yarlama ilemi: sral bir dizide istenilen bir sayya ulamak iin dizinin yarlanarak
ortasndaki elemann sorgulanmas eklinde olur. Bu eleman sorgulanarak aranan
elemann dizinin sa yarsnda m yoksa sol yarsnda m olduu aratrlr.
Belirlendikten sonra belirlenen yarda da ayn yarlama ilemi devam ettirilir.

- C/C++ program ve ak diyagram;

2011 coz@sakarya.edu.tr 100

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


#include <stdio.h>
#include <conio.h>
int i, n, sayi,ort,b,s,t;
int A[100];
void main(void)
{clrscr();
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
printf(" \n");
for(i=1;i<n+1;i++)
{printf("dizi elemani giriniz: ");
scanf("%d",&A[i]);
printf(" \n");
}
b=1;s=n+1;t=1;
printf("aranacak sayiyi giriniz: ");
scanf("%d",&sayi);
printf(" \n");
while(t!=0)
{
ort=(b+s)/2;
if(A[ort]==sayi)
{printf("aranan sayi: %d\n",A[ort]);
printf("sirasi: %d\n",ort);
t=0;}
else
{if(s==b+1)
{printf("sayi yok !");
t=0;}
}
if(A[ort]<sayi) b=ort;
if(A[ort]>sayi) s=ort;
}
printf(" \n");
getch();
}






DEV 3


Soru 3.1;


2011 coz@sakarya.edu.tr 101

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
n elemanl bir dizinin ikinci byk elemann bulan bir C/C++ program yaznz ve ak
diyagramn iziniz.

Soru 3.2;

n elemanl bir dizide dardan girilen bir saynn dizinin elemanlarndan ka tanesinden byk
olduunu bulan bir C/C++ program yaznz ve ak diyagramn iziniz.

Soru 3.3;

A ve B dizileri, n elemanl ve elemanlar 0 ve 1 lerden oluan iki dizidir. A ve B dizilerini
kullanarak bir C dizisi oluturalm. C[i] deeri A[i] ve B[i] den en az birinin 1 olduu yerde
1 oluyor. C dizisini veren bir C/C++ program yaznz ve ak diyagramn iziniz.

Soru 3.4;

Verilen bir dizinin her bir eleman kendinden nce verilen elemanlarn toplamnn
fazlasna eittir. Birinci ve ikinci eleman verilen bir dizinin ilk n elemannn deerini bulup
diziye yerletiren bir C/C++ program yaznz ve ak diyagramn iziniz.

Soru 3.5;

1 ve 999 arasndaki tamsaylardan oluan n elemanl bir dizide dizi elemanlarnn ka
tanesinin bir basamakl, ka tanesinin iki basamakl, ka tanesinin basamakl olduunu
bulan bir C/C++ program yaznz ve ak diyagramn iziniz.

Soru 3.6;

n elemanl bir say dizisinin negatif elemanlarn bir diziye, pozitif elemanlarn dier bir
diziye ykleyen ve bunlarn ayr ayr ortalamasn bulan bir C/C++ program yaznz ve ak
diyagramn iziniz.

Soru 3.7;

A dizisi n elemanl bir dizi ve B dizisi, A dizisinin elemanlarnn 0-1 aralndaki
arlklarnn bulunduu n elemanl dier bir dizidir {A[i] elemannn arl, B[i] dir}. A
dizisinin elemanlarndan arl dardan girilen bir deerden byk olanlar yeni bir C
dizisine ykleyen ve bu elemanlarn saysn bulan bir C/C++ program yaznz ve ak
diyagramn iziniz.




6. DZLERDE (VEKTRLERDE) ARAMA VE SIRALAMA ALGORTMALARI.


- Birok uygulamada veri dizilerinin, belirli srada olmas istenir. Veriler saysal ise
kkten bye veya bykten ke, alfa saysal ise Adan Z ye veya Z den A

2011 coz@sakarya.edu.tr 102

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
ya doru sralanabilir. Sral veriler zerinde ilem/deerlendirme yapmak ok daha
hzl ve kolaydr.

- Gnmz bilgisayarlarnda kullanlan algoritmalarn nemli bir blmnn sralama
algoritmalarna gereksinim duymas sralama algoritmalarnn nemini ortaya
koymaktadr.

- Gnlk hayattan rnek olarak, hayatn her alannda kullanlan veritabanlarnn
dzenlenmesi, gncellenmesi ve arama ilemlerinin ok hzl yaplabilmesi iin veri
alanlarnn doru bir biimde sralanmas gereklidir.

- Ayn sralama probleminin zmnde farkl aratrmaclar tarafndan ortaya konmu
eitli sralama algoritmalar mevcuttur. Bunlarn her birinin dierlerine kyasla
kullanm alanna gre stnlkleri ve eksik ynleri olmaktadr.

- oklu veriler ierisinde, istenilen bilgiyi aramak programlarda en sk karlalan
ilemlerden biridir. Herhangi bir veri ynnda, ilgili bilgiye ulamak iin deiik
algoritmalar kullanlr.

- Bu blmde birka popler sralama ve arama algoritmas anlatlacak ve dizilerde
kullanm gsterilecektir.

- Dizilerde sralama ve arama algoritmalar aada gsterimleri saysal deerler
zerinden yaplmasna ramen, hem saysal hem de alfa saysal bilgiler iin ayn
ekilde alr.


6.1. Dizilerde sralama algoritmalar


6.1.1. Seme sralama (selection sort) algoritmas

- Seme sralama (selection sort) en basit sralama algoritmalarndandr.

- Dizideki ilk elemandan balanr. Seilen dizi eleman ile bu elemandan sonra gelen
dizi elemanlar sras ile karlatrlr. Eer kklk/byklk (sralama isteine
bal olarak) durumu var ise yerleri deitirilir.

- kinci etapta dizinin ikinci eleman ile bu elemandan sonra gelen dizi elemanlar sras
ile karlatrlr ve ayn ekilde eer kklk/byklk durumu var ise yerleri
deitirilir.

- Bu karlatrma ilemi sondan bir nceki eleman ile son elemann karlatrlmasna
kadar devam eder ve ayn ekilde eer kklk/byklk durumu var ise yerleri
deitirilir.

- Kkten bye doru sralama yapan seme sralama (selection sort) algoritmas
iin ak diyagramn izelim;

2011 coz@sakarya.edu.tr 103

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar




- Bu sralama algoritmasnn C/C++ Program;

/* Secme Siralama Algoritmasi*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int i,j,n,b,k;
int A[100];
int main(int argc, char *argv[])
{
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("A[%d]: ",i);
scanf("%d",&A[i]);
printf(" \n");
}

for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
printf(" dizi -> ");
for(k=1;k<=n;k++)
printf(" %d ",A[k]);

2011 coz@sakarya.edu.tr 104

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
if(A[j]<A[i])
{b=A[i]; A[i]=A[j]; A[j]=b;}
printf("i=%d j=%d sirali ->",i,j);
for( k=1;k<=n;k++)
printf(" %d ",A[k]);
printf("\n");
}
}

printf("siralandi ->");
for(i=1;i<=n;i++)
{
printf("%d ",A[i]);
}
printf(" \n");
system("PAUSE");
return 0;
}



6.1.2. Kabarck sralama (bubble sort) algoritmas


- Bu algoritma balangta yer deitirme sralamas olarak adlandrlmtr.
Gnmzde kabarck sralamas olarak adlandrlmasnn nedeni dizi iindeki byk
elemanlarn algoritmann her admnda dizi sonuna doru lineer olarak ilerlemesidir.

- Bu algoritmada batan sona doru yaplan taramalar ile arka arkaya gelen (ardk)
elemanlar kyaslanr. Eer kklk/byklk durumu var ise yerleri deitirilir.

- Bu algoritma daha nce karakter sralama iin kullandmz basit sralama
algoritmasnn (rnek 3: rnek alg.4) deiik bir versiyonudur.

2011 coz@sakarya.edu.tr 105

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- Kkten bye doru sralama yapan kabarck sralama (bubble sort) algoritmas
iin ak diyagramn izelim;



- Bu sralama algoritmasnn C/C++ Program;

/* Kabarcik Siralama Algoritmasi*/
#include <stdio.h>
#include <stdlib.h>
int i,j,n,b,k;
int A[100];
int main(int argc, char *argv[])
{
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("A[%d]: ",i);
scanf("%d",&A[i]);
printf(" \n");
}
for(i=1;i<=n;i++)
{for(j=1;j<n;j++)
{
printf(" dizi ->",i,j);
for(k=1;k<=n;k++)
printf(" %d ",A[k]);

2011 coz@sakarya.edu.tr 106

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
printf(" i= %d, j=%d evrim ",i,j);
if(A[j+1]<A[j])
{b=A[j]; A[j]=A[j+1]; A[j+1]=b;}
printf("sirali ->");
for( k=1;k<=n;k++)
printf(" %d ",A[k]);
printf("\n");
}
}
printf("siralandi ->");
for(i=1;i<=n;i++)
{
printf("%d ",A[i]);
}
printf(" \n");
system("PAUSE");
return 0;
}


6.1.3. Yerletirmeli sralama (insertion sort) algoritmas


- Bu yntem sralama problemlerine getirilen basit ve temel yaklamlardan biridir.
Algoritmada dizinin ikinci elemanndan balanarak elemanlar srayla kontrol edilir.

- Bu algoritmada her eleman, kendinden nceki alt dizideki elemanlar ile
karlatrlmakta ve daha kk ise ilgili yerdeki araya yerletirilmektedir. Bu ekilde
dizide geriye doru ilerlenir. Bu ilem seilen dizi elemanndan kk deer
kalmayncaya kadar devam eder.

2011 coz@sakarya.edu.tr 107

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- lk dizi eleman doru yere yerletirildikten sonra bir sonraki eleman seilerek
yukardaki ilemler tekrarlanr. lem dizinin son elemannn seimi ile tamamlanm
olur.

- Oyun kartlarnn sralanmasnda ve yerletirilmesinde de buna benzer bir yntem
kullanlr. nce desteden bir kart seilip kartn gelecei doru yer bulunur ve bu
yerden sonraki kartlar kaydrlarak ilgili kart araya yerine yerletirilir. Tm kartlar
sralanana kadar bu ileme devam edilir.

- Bu yaklamdan yola karak dizi elemannn doru yere yerletirme ilemi, dizi
elemannn geici deikende tutularak kendisinden nce gelen, kendisinden byk
elemanlarn saa doru kaydrlmas ve boalan yere bu elemann yerletirilmesi ile
gerekletirilir.

- Kkten bye doru sralama yapan yerletirmeli sralama (insertion sort)
algoritmas iin ak diyagramn izelim;



- Bu sralama algoritmasnn C/C++ Program;


2011 coz@sakarya.edu.tr 108

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
/* Yerlestirmeli Siralama Algoritmasi*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int i,j,n,b,k;
int A[100];
int main(int argc, char *argv[])
{
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("A[%d]: ",i);
scanf("%d",&A[i]);
printf(" \n");
}
for(i=2;i<=n;i++)
{
b=A[i]; j=i;
printf(" dizi -> ");
for(k=1;k<=n;k++)
printf(" %d ",A[k]);
while((b<A[j-1])&&(j>1))
{A[j]=A[j-1]; j--;}
A[j]=b;
printf("i=%d j=%d sirali ->",i,j);
for( k=1;k<=i;k++)
printf(" %d ",A[k]);
printf("\n");
}
printf("siralandi ->");
for(i=1;i<=n;i++)
{
printf("%d ",A[i]);
}
printf(" \n");
system("PAUSE");
return 0;
}



2011 coz@sakarya.edu.tr 109

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


6.1.5. Dier sralama algoritmalar


- Bu ders kapsamnda incelenecek olan ikili yerletirmeli sralama (binary insertion
sort), birletirmeli sralama (merge sort), hzl sralama (quick sort) ve kmelemeli
sralama (heap sort) algoritmalar fonksiyon kavram kullanmay gerektirdiinden,
fonksiyonlar ve zyineleme konusundan sonra ele alnacaktr.


6.2. Dizilerde arama algoritmalar


- oklu veriler ierisinde istenilen veriyi aramak amac ile kullanlan algoritmalar
arasnda en yaygn olarak kullanlanlar, sral arama ve ikili (binary) arama
algoritmalardr.


6.2.1. Sral arama algoritmas


- Yava olmasna ramen basit olan bu algoritmada dizideki tm elemanlar sra ile
aranan deer ile karlatrlr. Bu ilem deer bulunana kadar devam eder.

- Bu algoritma iin kullanlacak olan C/C++ program ve ak diyagram;




2011 coz@sakarya.edu.tr 110

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

#include <stdio.h>
#include <conio.h>
int i,ara,n;
int A[100];
void main(void)
{clrscr();
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{printf("dizi elemani giriniz: ");
scanf("%d",&A[i]);
printf(" \n");
}
printf("aranan deger: ");
scanf("%d",&ara);
for(i=0;i<n;i++)
{if(ara==A[i])
{printf("deger: %d, sirasi: %d", A[i], i+1);
goto son;}
}
printf("aranan deger yok");
son:
getch();
}






6.2.2. kili (binary) arama algoritmas


- kili arama algoritmasnn kullanlabilmesi iin dizideki tm elemanlarn sral olmas
(kkten bye doru olduunu varsayalm) gerekir.

- Karlatrma ilemine dizinin ortasnda bulunan elemandan balanr. Eer aranan
eleman dizinin orta elemanndan kk ise dizinin ortadan sonraki st ksm atlr.
Eer aranan eleman dizinin orta elemanndan byk ise dizinin ortadan nceki alt
ksm atlr.

- Bu ekilde dizi yarlanm olur. Bir sonraki aamada karlatrma dizinin kalan
parasnn orta eleman ile yaplr.

- Aranlan eleman bulununcaya kadar bu ekilde dizi yarlanarak karlatrma ilemi
devam eder.



2011 coz@sakarya.edu.tr 111

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- Bu algoritma iin kullanlacak olan C/C++ program ve ak diyagram;


#include <stdio.h>
#include <conio.h>
#include <conio.h>
int i,ara,n,k,ilk,ort,son;
int A[100];
void main(void)
{clrscr();
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("dizi elemani giriniz: ");
scanf("%d",&A[i]);
printf(" \n");
}
printf("aranan deger: ");
scanf("%d",&ara);
ilk=1; son=n; k=0;
while(ilk<=son && k!=1)
{ ort=(ilk+son)/2;
if(ara<A[ort]) son=ort-1;
else if (ara>A[ort]) ilk=ort+1;
else k=1;
}
if(k==1)
printf("deger: %d, sirasi: %d", A[ort], ort);
else
printf("aranan deger yok");
getch();
}







DEV 4

1) n elemanl bir dizindeki asal saylar belirleyen ve bu asal saylar kkten bye sral
olarak baka bir diziye ykleyen bir C/C++ program yaznz ve ak diyagramn iziniz.

2) n elemanl iki A ve B dizisinin A[i]=B[i] eklindeki farkl dizi elemanlarn bulan bu
elemanlarn farklarn ve yerlerini C ve D adndaki iki diziye karlkl olarak saklayan bir
C/C++ program yaznz ve ak diyagramn iziniz.


2011 coz@sakarya.edu.tr 112

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

7. OK BOYUTLU DZLER (MATRSLER).


- Baz durumlarda byk miktarlarda veri dizileri kullanmak gerekebilir. Bu durumda
ok boyutlu dizi olarak adlandrabileceimiz matrisler kullanlabilir. ok matrisler
ayrca matematiksel problem zmlemelerinde ve grnt saklamada ve ilemede
olduka youn bir biimde kullanlmaktadr.

- Matrislerin her bir satr bir dizi olarak dnlebilir. Matrislerde de dizilerde olduu
gibi indisler kullanlmaktadr. ok boyutlu diziler, iki, veya daha fazla boyutlu
olabilirler.

- rnein 10 satr ve 10 stundan meydana gelen iki boyutlu bir A matrisi A[10][10]
eklinde tanmlanr. ndis olarak i satrlar ve j stunlar belirtmek zere tanmlanr ise,
bu matrisin elemanlar A[i][j] eklinde ifade edilebilir. Bu rnek matris iin i ve j
deerleri en fazla 10 olabilir.

- Matrisler tanmlanrken genel olarak boyutlar tanmlanr. NM lik bir matris, N satr
ve m stundan oluan ve NM elemana sahip bir matrisi ifade eder.


7.1. Matrislere ynelik algoritma rnekleri


- rnek 1:

- n*m boyutlu bir say matrisinin giriini yapan bir C/C++ program yazalm ve ak
diyagramn izelim;

A1- bala
A2- oku(n,m)
A3- i=0
A4- j=0
A5 oku(a[i][j])
A6- j=j+1
A8- eer j<m ise git a5
A9-i=i+1
A10- eer i<n ise git a4
A11-dur


#include <stdio.h>
#include <conio.h>
int i,j,n,m;
int A[100][100];
void main(void)
{clrscr();

2011 coz@sakarya.edu.tr 113

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
printf("n degerini giriniz: ");
scanf("%d",&n);
printf("m degerini giriniz: ");
scanf("%d",&m);
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
{ printf("A[%d][%d]: ",i,j);
scanf("%d",&A[i][j]);
}}
getch();
}

- rnek 2:

- Girilen n*m boyutlu bir say matrisinde negatif ve pozitif elemanlarn saysn ve
ortalamasn bulan yapan bir C/C++ program yazalm ve ak diyagramn izelim;
A1- bala
A2- oku(n,m)
A3 ng=0, poz=0, tn=0, tp=0
A4 i=0
A5 j=0
A6 oku(a[i][j])
A7 eer a[i][j]<0 ise ng++ ve tn+=A[i][j]
A8- eer a[i][j]>0 ise poz++ ve pn+=A[i][j]
A9 j=j+1
A10- eer j<=m ise git a6
A11 i=i+1
A12 eer i<=n ise git a5
A13 ort=tn/ng ve ortp=tp/poz
A14 yazdr(tn, tp, tnort, tport)
A15-dur


#include <stdio.h>
#include <conio.h>
int i,j,n,m,ng,poz;
float A[100][100];
float ortn,ortp,tn,tp;
void main(void)
{clrscr();
printf("n degerini giriniz: ");
scanf("%d",&n);
printf("m degerini giriniz: ");
scanf("%d",&m);
ng=0; poz=0; tn=0; tp=0;
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
{printf("A[%d][%d]: ",i,j);
scanf("%f",&A[i][j]);

2011 coz@sakarya.edu.tr 114

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
if(A[i][j]<0)
{ng++; tn+=A[i][j];}
else if(A[i][j]>0)
{poz++; tp+=A[i][j];}
}}
ortn=tn/ng;
ortp=tp/poz;
printf("negatif sayisi:%d\n",ng);
printf("negatif ortalama:%f\n",ortn);
printf("pozitif sayisi:%d\n",poz);
printf("pozitif ortalama:%f\n",ortp);
getch();
}


- rnek 3:

- Girilen n*m boyutlu bir A matrisi
ile m*n boyutlu bir B matrisini
arparak sonucu n*n boyutlu bir C
matrisine ve ekrana yazan bir
C/C++ program yazalm ve ak
diyagramn izelim.

- Matris arpmn, oluacak C
matrisinin her bir eleman iin
matematiksel olarak aadaki
ekilde ifade edebiliriz;


- n j i b a c
m
k
kj ik ij
,..., 2 , 1 , *
1
= =

=


- C matrisinin her bir eleman iin
bir for dngsnde ilemler
yaplabilir. Oluacak C matrisinin
n*n eleman olaca iin tm
elemanlar hesaplamak iin iki
for dngs gerekir. Sonu
olarak matris arpm for
dngs ierisinde
gerekletirilebilir.

- C/C++ program ve ak
diyagram;

#include <stdio.h>
#include <conio.h>

2011 coz@sakarya.edu.tr 115

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
int i,j,k,n,m,t;
int A[99][99],B[99][99],C[99][99];
void main(void)
{clrscr();
printf("n degerini giriniz: ");
scanf("%d",&n);
printf("m degerini giriniz: ");
scanf("%d",&m);
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
{ printf("A[%d][%d]: ",i,j);
scanf("%d",&A[i][j]);
}}
for(j=1;j<=m;j++)
{for(i=1;i<=n;i++)
{ printf("B[%d][%d]: ",j,i);
scanf("%d",&B[j][i]);
}}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
{t=0;
for(k=1;k<=m;k++)
{t+=A[i][k]*B[k][j];}
C[i][j]=t;
printf("%d ",C[i][j]);
}
printf("\n");
}
getch();
}








- rnek 4:

- Girilen n*n boyutlu bir A matrisinin transpozesini bulan n*n boyutlu bir B matrisine
ve ekrana yazan bir C/C++ program yazalm ve ak diyagramn izelim.

- Bir matrisin transpozesi, mevcut matrisin satrlar ile stunlarnn yer deitirlmesi ile
elde edilir. Matematiksel gsterimi ile yaplacak transpoze ilemi;

- A B veya A B
T
' = = eklinde ifade edilebilir. Oluacak B matrisinin her bir
eleman ise;

2011 coz@sakarya.edu.tr 116

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

-
ji ij
a b = eklinde ifade edilebilir.

- Matrisler n*n eleman olaca iin tm elemanlar hesaplamak iin i ie iki for
dngs gerektirmektedir.

- C/C++ program ve ak diyagram;


A1- Bala
A2- oku(n)
A3-i=0
A4- j=0
A5- oku(a[i][j])
A6 j=j+1
A7 eer j<n ise git a5
A8 i=i+1
A9 eer i<n ise git a4
A10-i=0
A11- j=0
A12-b[i][j]=a[j][i])
A13- yazdr(b[i][j])
A14- j=j+1
A15- eer j<n ise git a12
A16- bekle
A17- i=i+1
A18 eer i<n ise git a11
A19 dur

#include <stdio.h>
#include <conio.h>
int i,j,n;
int A[99][99],B[99][99];
void main(void)
{clrscr();
printf("n degerini giriniz: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
{ printf("A[%d][%d]: ",i,j);
scanf("%d",&A[i][j]);
}}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
{B[i][j]=A[j][i];
printf("%d ",B[i][j]);
}
printf("\n");

2011 coz@sakarya.edu.tr 117

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
}
getch();
}






- rnek 5:

- Girilen 3*3 boyutlu bir A matrisinin determinantn bulan ve ekrana yazan bir C/C++
program yazalm ve ak diyagramn izelim.

- 3*3 boyutlu bir A matrisinin determinant matematiksel olarak aadaki ekilde ifade
edilebilir;

-

+ +
+ +
= = = A
) (
) (
) det(
33 21 12 32 23 11 31 22 13
32 21 13 31 23 12 33 22 11
33 32 31
23 22 21
13 12 11
a a a a a a a a a
a a a a a a a a a
a a a
a a a
a a a
A



C/C++ program ve ak diyagram;
A1- Bala
A2- oku(n)
A3-i=0
A4- j=0
A5- oku(a[i][j])
A6 j=j+1
A7 eer j<n ise git a5
A8 i=i+1
A9 eer i<n ise git a4
A10- solk=A[1][1]*A[2][2]*A[3][3]
+A[1][2]*A[2][3]*A[3][1]
+A[1][3]*A[2][1]*A[3][2];
A11- sagk=A[1][3]*A[2][2]*A[3][1]
+A[1][1]*A[2][3]*A[3][2]
+A[1][2]*A[2][1]*A[3][3];
A12- det=solk-sagk;
A13- Yazdr (det)
A14- dur


#include <stdio.h>
#include <conio.h>
int i,j,solk,sagk,det;
int A[99][99];

2011 coz@sakarya.edu.tr 118

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
void main(void)
{clrscr();
for(i=1;i<=3;i++)
{for(j=1;j<=3;j++)
{ printf("A[%d][%d]: ",i,j);
scanf("%d",&A[i][j]);
}}
solk=A[1][1]*A[2][2]*A[3][3]
+A[1][2]*A[2][3]*A[3][1]
+A[1][3]*A[2][1]*A[3][2];
sagk=A[1][3]*A[2][2]*A[3][1]
+A[1][1]*A[2][3]*A[3][2]
+A[1][2]*A[2][1]*A[3][3];
det=solk-sagk;
printf("determinant = %d",det);
getch();
}





- rnek 6:

- Girilen 2*2 boyutlu bir A matrisinin var ise tersini bulan ve 2*2 boyutlu bir B
matrisine ve ekrana yazan bir C/C++ program yazalm ve ak diyagramn izelim.

- Bir A matrisinin tersi var ise det(A) = 0 {determinat sfrdan farkl} olmaldr. 2*2
boyutlu bir A matrisinin tersinin hesaplanmas matematiksel olarak aadaki ekilde
ifade edilebilir;

- ) ( ) det(
) det(
1
1
bc ad A burada
a c
b d
A
A B
d c
b a
A =
(


= =
(

=



- eklinde ifade edilebilir.

- C/C++ program ve ak diyagram;

A1- Bala
A2- n=2
A3-i=0
A4- j=0
A5- oku(a[i][j])
A6 j=j+1
A7 eer j<n ise git a5
A8 i=i+1
A9 eer i<n ise git a4
A10-det=A[1][1]*A[2][2]-A[1][2]*A[2][1]

2011 coz@sakarya.edu.tr 119

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
A11- eer det=0 deil ise yadr(tersi yok) git 25
A12-B[1][1]=A[2][2];
A13- B[1][2]=-A[1][2];
A14-B[2][1]=-A[2][1]
a15-B[2][2]=A[1][1]
A16-i=0
A17- j=0
A18- B[i][j]=B[i][j]/det
A19- yazdr B[i][j]
A20- j=j+1
A21- eer j<n ise git a18
A22- Enter a basana kadar bekle
A23- i=i+1
A24 eer i<n ise git a17
A25- dur


#include <stdio.h>
#include <conio.h>
void main(void)
{int i,j;
float A[99][99],B[99][99],det;
clrscr();
for(i=1;i<=2;i++)
{for(j=1;j<=2;j++)
{ printf("A[%d][%d]: ",i,j);
scanf("%f",&A[i][j]);
}}
det=A[1][1]*A[2][2]-
A[1][2]*A[2][1];
if(det!=0)
{B[1][1]=A[2][2];B[1][2]=-A[1][2];
B[2][1]=-A[2][1];B[2][2]=A[1][1];
for(i=1;i<=2;i++)
{for(j=1;j<=2;j++)
{B[i][j]=B[i][j]/det;
printf("%f ",B[i][j]);
}
printf("\n");
}
}
else printf("matrisin tersi yok");
getch();
}


- rnek 7:


2011 coz@sakarya.edu.tr 120

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Girilen n*m boyutlu bir A matrisinin sfrdan farkl elemanlarn ve bunlarn yerlerini
yeni oluturacamz bir B matrisinde saklayalm (istendiinde A matrisini bu yeni
matristen tekrar oluturabilmeliyiz).

- A matrisinin elemanlarnn byk ounlunun sfr olduu durumlarda, yapacamz
bu ilem saklanacak verinin miktarn azaltc ok basit bir sktrma algoritmas
olarak dnlebilir.

- rnein; ok az hareketin olduu bir grntde iki kare arasnda deimeyen
pikselleri 0 ile ifade ettiimizi dnrsek, 0 deerlerinin deimeyi ifade eden dier
deerlerden ne kadar ok olabileceini tahmin edebiliriz.

- Saklanacak 0 dan farkl deerin, oluturulacak B matrisinde 3. stunda ve bu deerin
yer indislerinin de B matrisinde 1. ve 2. stunlarda tutulacan varsayalm. Bu
durumda B matrisi p*3 (p: A matrisindeki 0 dan farkl deer says) boyutlu olur.

- C/C++ program ve ak diyagram;

A1- Bala
A2-Oku(n,m)
A3-i=0
A4- j=0
A5- oku(a[i][j])
A6 j=j+1
A7 eer j<m ise git a5
A8 i=i+1
A9 eer i<n ise git a4
A10 p=0
A11- i=0
A12- j=0
A13- Eer A[i][j]!=0 ise P=P+1,
B[p][1]=i, B[p][2]=j, B[p][3]=A[i][j]
A14 j=j+1
A15 eer j<m ise git a13
A16 i=i+1
A17 eer i<n ise git a12
A18- i=0
A19- j=0
A20- Yazdr(a[i][j])
A21 j=j+1
A22 eer j<m ise git a20
A23 i=i+1
A24 eer i<n ise git a19
A25- dur




#include <stdio.h>

2011 coz@sakarya.edu.tr 121

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
#include <conio.h>
void main(void)
{int i,j,n,m,p;
int A[100][10],B[100][3];
clrscr();
printf("n degeri: ");
scanf("%d",&n);
printf("m degeri: ");
scanf("%d",&m);
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
{ printf("A[%d][%d]: ",i,j);
scanf("%d",&A[i][j]);
}}
p=0;
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
{if(A[i][j]!=0)
{p++;
B[p][1]=i;
B[p][2]=j;
B[p][3]=A[i][j];}
}}
for(i=1;i<=p;i++)
{for(j=1;j<=3;j++)
{printf("%d ",B[i][j]);
}
printf("\n");
}
getch();
}



DEV 5


Soru 5.1;


32*32 piksellik bir siyah beyaz resimde siyah piksellerin 1, beyaz piksellerin ise 0 ile ifade
edildiini ve byle bir resim bilgisinin 32*32 boyutlu bir A matrisinde tutulduunu
varsayalm ve bu A matrisinin sfrdan farkl elemanlarn ve bunlarn yerlerini yeni
oluturacanz bir B matrisinde saklayan yeni oluturulacak B matrisini kullanarak resim
bilgisini tutan A matrisini tekrar oluturan bir C/C++ program yaznz ve ak diyagramn
iziniz.


Soru 5.2;

2011 coz@sakarya.edu.tr 122

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


Girilen n*m boyutlu iki A ve B matrisinin A[i][j]=B[i][j] eklindeki farkl elemanlarn bulan
ve bu elemanlarn farklarn ve yerlerini yeni oluturacanz bir C matrisinde saklayan ve A
matrisini ve yeni oluturulacak C matrisini kullanarak B matrisini tekrar oluturan bir C/C++
program yaznz ve ak diyagramn iziniz.


Soru 5.3;


Girilen n*n boyutlu bir A matrisini transpozesi ile arparak (A*A
T
) sonucu bir n*n boyutlu
bir B matrisine saklayan bir C/C++ program yaznz ve ak diyagramn iziniz.


Soru 5.4;


Girilen 2*2 boyutlu bir A matrisini tersi ile arparak (A*A
-1
) sonucu bir 2*2 boyutlu bir I
matrisine saklayan bir C/C++ program yaznz ve ak diyagramn iziniz.













8. ALTPROGRAM KAVRAMI, FONKSYON VE YORDAM ALTPROGRAMLARI.


- ou problemin zmnde genellikle uzun programlara ihtiya duyulmaktadr.
Binlerce ifadeden oluan bir programlarn yazlmas ve anlalmas olduka zor bir
ilemdir. Bu sebeple problemin daha kolay zlebilen alt paralarna (modl)
ayrtrlmas ilemi yapsal programlamann temel yaklamlarndandr.

- Programlama dillerinde her bir modln (alt para) bamsz olarak ele alnmasn
salayan ve alt program ad verilen birimler tanmlanr.

- Altprogramlar byk ve karmak problemin zmnde yapsal programlamann
etkin kullanm iin gerekli temel talarndandr.

- Altprogramlar bir kere yazlr ve program ierisinde bir yada daha ok yerde
arlarak kullanlr.

2011 coz@sakarya.edu.tr 123

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- Altprogram kullanmann faydalar aadaki gibi sralanabilir;

o Belirli bir ii yapan program parasnn, birden ok yerde deiik veriler iin
ayr ayr yazlmasn nlemek.

o Dk dzeydeki ayrntlar, program mantnn ana akndan uzaklatrp
ayr modllere yerletirerek, programn tasarlanmasn kolaylatrmak ve
okunulabilirliini artrmak.

o Byk bir programn, daha kk ve yazlmas daha kolay fonksiyonel
paralara blnmesini salamak.

o Program yazma iinin birden ok programc tarafndan paylalmasna olanak
salamak.

- Programlama dillerinde genelde iki tr alt program kullanlr;

o Yordam (procedure, subrotine)

o Fonksiyon

- Yordam ve fonksiyon znde birbirine ok benzeyen altprogramlardr.

- Programlama dillerinde genelde yordam fonksiyona gre daha genel amaldr.
Fonksiyonlar ana programa bilgi geri gnderirken, yordamlardan bu beklenmez.

- Ayrca fonksiyonlarn argman (ilenen deiken, parametre) kullanmas gerekirken,
yordam argmansz olarak kullanlabilir.

- Yordam kk bir program paras eklindeki bir altprograma, fonksiyonu da
hesaplamalarda matematiksel hesaplamalarda kullandmz hesaplamalara benzer
ilem yapan bir altprograma benzetebiliriz.


8.1. C/C++ da altprogram kullanm

- C/C++ da fonksiyon kavram yordam ve fonksiyonu ihtiva edebilecek ekilde geni
tanmlanmtr. Yani C/C++ da hem yordam hem de fonksiyon ayn yap kullanlarak
ifade edilir.

- C/C++ da altprogramlar fonksiyon ile ifade edilir. Fakat kullanm hem yordam hem
de fonksiyonu ifade edecek kadar genitir.

- C/C++ da fonksiyonlar parametreli ve deer dndrerek fonksiyon eklinde ve
parametreli veya parametresiz (void) olarak deer dndrmeden (void) yordam
eklinde kullanlabilir.


2011 coz@sakarya.edu.tr 124

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- C/C++ da her fonksiyonun bir ad, tipi (dndrd tip) ve argman/argmanlar
vardr. Fonksiyon ad C dilinin anahtar szcklerinden (if, do, for, vb.) olmamak
koulu ile istenildii gibi verilebilir.

- Dier yandan fonksiyon adnn yapsal programlama mantna uygun olarak yapt
ile uygun ve hatrlatc olmas beklenir.

- Fonksiyonun tipi kendisini arana gnderecei verinin tipini belirtir. Eer bir
fonksiyon kendisini arana hibir veri gndermeyecek ise (yordam ise) tipi void
olmaldr.


8.1.1. C/C++ da fonksiyon tanmlanmas ve bildirimi

- C/C++ da bir fonksiyonun genel yaps aada gsterildii gibidir;


fonksiyon-tipi fonksiyon-ad (argman listesi)
argmanlarn tip bildirimleri
{
yerel deiken bildirimleri

ilemler;

}

- Bir C/C++ programnda fonksiyonlar ana fonksiyon olan main() fonksiyonundan nce
veya sonra tanmlanabilir. Kullanlacak fonksiyon main() fonksiyonundan nce
tanmlanr ise bu durumda fonksiyonun n bildirimine ihtiya yoktur.
- Fakat zellikle byk boyutlu programlar olutururken programn okunulabilirlii
asndan main() fonksiyonundan nce n bildirim yapp fonksiyonu main()
fonksiyonundan sonra tanmlamak daha uygundur.

- Argmanlar yerel deikenlere benzerler ve sadece fonksiyon ierisinde tannrlar.
Bildirimi yukarda olduu gibi fonksiyon adnn hemen altnda yada fonksiyon
parantezi iindeki argmann nnde yaplabilir (formal bildirim).

- Fonksiyon altprogram kendisini arana veri gnderecek ise (fonksiyon ise),
return deyimi kullanarak sadece bir tane sonu gnderebilir. Gnderilecek verinin
tipini fonksiyon-tipi belirler.

- Daha ncede bahsedildii gibi eer bir fonksiyon kendisini arana hibir veri
gndermeyecek ise yordam eklinde kullanlyordur ve fonksiyon-tipi void
olmaldr.

- C/C++ da bir fonksiyonun argman (formal parametresi) birden ok olabilecei gibi
hi de olmayabilir. Hi parametre yok ise derleyicinin isteine gre hi parametre
yazlmaz veya fonksiyon parantezi iine void yazlr.

2011 coz@sakarya.edu.tr 125

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- Bir fonksiyonun her arlmasnda standart ktphanenin (stdlib.h) va_start(),
va_arg(), va_end() makro fonksiyonlar kullanlarak farkl sayda argman parametre
olarak kullanlabilir. Bu ders kapsamnda bu konu ele alnmayacaktr.

- Bir C/C++ programnda fonksiyon arma iini aadaki ekilde olduu gibi ifade
edebiliriz;



8.1.2. C/C++ da fonksiyona parametre aktarm


- C/C++ da bir fonksiyonuna parametre aktarm (argman kullanm) iki ekilde
yaplabilir;

o Verinin deeri dorudan aktarlabilir yani deer dorudan parametre olarak
kullanlabilir (deer ile arma calling by value).

o Verinin adresi (deiken) aktarlabilir yani deiken parametre olarak
kullanlabilir (adres ile arma calling by reference).

- Bunun ile birlikte fonksiyon argmanlarn bir ksm deer bir ksm da deiken
eklinde olabilir.


- rnek 8.1;

- C/C++da fonksiyon tanmlanmas, bildirimi ve parametre aktarm ile ilgili basit bir
rnek program;

#include <stdio.h>
#include <conio.h>
int ekle(int, int); /* fonksiyon bildirimi bazi derleyicilerde zorunlu */
/*ana fonksiyon*/
void main(void)
{ int x,y;

2011 coz@sakarya.edu.tr 126

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
clrscr();
printf("yedi eklenecek sayiyi girin: ");
scanf("%d",&x);
y=ekle(x,7); /* fonksiyonun cagrilmasi */
printf("sonuc = %d",y);
getch();
}
/* fonksiyon tanimlama*/
int ekle(a,b)
int a,b;
{ int g;
g=a+b;
return g;
}


- rnek 8.2;

- C/C++da deikenler aras verileri yer deitiren bir fonksiyon (yordam olarak)
kullanlmas ile ilgili basit bir rnek program;

#include <stdio.h>
#include <conio.h>
void degistir(void); /* fonksiyon bildirimi bazi derleyicilerde zorunlu */
int x,y;
/*ana fonksiyon*/
void main(void)
{ clrscr();
printf("birinci sayiyi girin: ");
scanf("%d",&x);
printf("ikinci sayiyi girin: ");
scanf("%d",&y);
printf(" %d %d\n",x,y);
degistir(); /* fonksiyonun cagrilmasi */
printf(" %d %d ",x,y);
getch();
}
/* fonksiyon tanimlama*/
void degistir(void)
{ int g;
g=x;
x=y;
y=g;
}

- Grld gibi kullanlan altprogram parametre aktarmayan bir yordam eklinde
kullanld iin parametre aktarm ve sonuta deer dndrlmesi yaplmad. Bu
sebep ile x, y global deiken olarak kullanld.


2011 coz@sakarya.edu.tr 127

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Deikenlerin deer deitirme ilemini daha etkin olarak yapabilmek iin
oluturacamz yordam fonksiyonuna parametre aktarm yapmak gerekir. Fakat
aktarm parametrelerine direkt olarak deer dndrlemeyecei iin, dolayl olarak
deer dndrmek gerekir. Bu sebep ile iareti deikenler kullanmak gerekir.

- Yukardaki rnei parametre aktarm yaparak aadaki ekilde yeniden
dzenleyebiliriz;

#include <stdio.h>
#include <conio.h>
void degistir(int *, int *); /* fonksiyon bildirimi bazi derleyicilerde zorunlu */
/*ana fonksiyon*/
void main(void)
{ int x,y;
clrscr();
printf("birinci sayiyi girin: ");
scanf("%d",&x);
printf("ikinci sayiyi girin: ");
scanf("%d",&y);
printf(" %d %d\n",x,y);
degistir(&x,&y); /* fonksiyonun cagrilmasi */
printf(" %d %d ",x,y);
getch();
}
/* fonksiyon tanimlama*/
void degistir(int *a, int *b)
{ int g;
g=*a; *a=*b; *b=g;
}

8.1.3. Altprogramn yan etkileri


- Bir programn deiken deerlerini istenmeyen bir biimde deitirmesine yan etki
denilir. Bu durumda ou zaman istenmeyen sonular dourabilir.

- Yan etkiden kanmak iin ok nemli bir neden yoksa yordam yada fonksiyonda
global (genel) deiken kullanlmamaldr. Mmkn olduunca program modlleri
arasndaki iletiim parametre aktarm ile yaplmaldr.


- rnek 8.3;

- Yan etkinin beklenmedik sonulara nasl yol aacan grmek iin aadaki C/C++
programn rnek olarak inceleyebiliriz;

#include <stdio.h>
#include <conio.h>

2011 coz@sakarya.edu.tr 128

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
int f(int);
int x;
void main(void)
{ clrscr();
x=0;
printf("%d\n",f(0));
printf("%d\n",f(0));
printf("%d\n",f(0));
getch();
}
int f(int y)
{ int g;
g=x+y;
x++;
return g;
}

- Yukardaki program ktsnda deerinde ayn olaca sanlsa da bu bir yanlgdr.
f fonksiyonu x global deikeninin deerini deitirdii iin ayn olmas beklenen
kt deerleri her defasnda deiir.


8.2. zyineleme Kavram

- Birok dilde olduu gibi bir alt program C/C++ da da yalnzca baka bir altprogram/
program deil kendiside arabilir. Byle bir armaya zyineleme ad verilir ve bu
altprogramn zyineli olduu sylenir.
- zyineleme, yinelemeye (dng deyimleri kullanarak yaplan ilem tekrarlar) bir
seenek olarak dnlebilir. Genellikle zyineli bir zm, bilgisayar zaman ve
bellek kullanm asndan yinelemeye gre daha az etkindir.

- Fakat baz durumlarda zyineleme, bir probleme doal ve basit bir zm salar. Bu
nedenle zyinelemeli fonksiyon ve yordamlar dier dilerde olduu gibi C de de
nemli ve yararl aralardr.


- rnek 8.4;

- zyinelemeli bir fonksiyon kullanarak girilen bir pozitif deerin faktriyelini
hesaplayan bir C/C++ program yazalm.

- Faktriyelin matematiksel ifadesi aadaki ekilde yazlabilir;

>
s s
=
ise n n n
ise n
n
1 )! 1 (
1 0 , 1
!

- C/C++ program;


2011 coz@sakarya.edu.tr 129

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
#include <stdio.h>
#include <conio.h>
long int fakt(int);
int x;
void main(void)
{ clrscr();
printf("sayiyi girin: ");
scanf("%d",&x);
printf("%d ! = %ld \n",x,fakt(x));
getch();
}
long int fakt(int a)
{ long int g;
if (a>1) g=a*fakt(a-1); /* n!=n*(n-1)! */
else g=1;
return g;
}

- rnek 8.5;

- Bir x tamsay deerinin 0 dan byk pozitif n. ssn (x
n
) hesaplamak amac ile
zyinelemeli bir fonksiyon kullanan bir C/C++ program yazalm.

- s almann matematiksel ifadesi aadaki ekilde yazlabilir;

>
=
=

ise n x x
ise n x
x
n
n
1
1 ,
) 1 (


- C/C++ program;

#include <stdio.h>
#include <conio.h>
long int us(int,int);
int x,n;
void main(void)
{ clrscr();
printf("sayiyi girin: ");
scanf("%d",&x);
printf("usu girin: ");
scanf("%d",&n);
printf("%d^%d = %ld \n",x,n,us(x,n));
getch();
}
long int us(int a,int b)
{ long int g;
if (b>1) g=a*us(a,b-1);
else g=x;
return g;

2011 coz@sakarya.edu.tr 130

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
}


- rnek 8.6:

- Verilen 8*3 boyutlu A ve B matrislerinin A[i][j]=B[i][j] eklindeki farkl elemanlarn
bulan ve bu elemanlarn farklarn ve yerlerini yeni oluturacanz bir p*3 boyutlu
yeni bir C matrisinde saklayan ve A matrisini ve yeni oluturulacak C matrisini
kullanarak B matrisini tekrar oluturan bir C/C++ program ve ak diyagramn
altprogramlar kullanarak oluturalm.

- Saklanacak 0 dan farkl fark deerlerini oluturulacak C matrisinde 3. stunda ve bu
deerin yer indislerinin de C matrisinde 1. ve 2. stunlarda tutulacan varsayalm. Bu
durumda C matrisi p*3 (p: A matrisindeki 0 dan farkl deer says) boyutlu olur.

- B matrisini yeniden olutururken ncelikle A matrisinin btn elemanlarn B
matrisine atayabiliriz. Ardndan farkl B matrisi elemanlarn hesaplamak iin p
admlk bir for dngs ierisinde ilgili elemanlar bulmak iin p satrl C matrisini
kullanrz. Ayn dng ierisinde farkl olmas gereken bu B matrisi elemanlardan
ilgili C matrisi elemann (3. stundaki deer) kararak bu elemann gerek deerini
buluruz.

- C programlamada fonksiyon kavramn incelediimiz iin bu problemin zmnde
yapsal programlamann zm daha kolay alt problemlere (modllere) blnme
ilkesinden faydalanabiliriz. Her bir modl daha kolay zlebilir bir altprogram
(yordam) olarak ele alabiliriz ;







- Ak diyagram;


2011 coz@sakarya.edu.tr 131

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar



- C/C++ program;

#include <stdio.h>
#include <conio.h>
void yenimat(int [8][3],int [8][3]);
void yeniden(int [][3],int [][3]);
void yaz(int [][3], int);
int p;
int A[8][3] = {{1,0,0},{0,1,1},{1,0,1},{1,1,0},{1,1,1},{1,0,0},{0,1,1},{0,1,0}};
int B[8][3] = {{1,0,1},{0,1,1},{1,0,1},{1,1,0},{1,1,1},{1,0,0},{0,1,1},{1,1,0}};
int C[24][3];
void main(void)

2011 coz@sakarya.edu.tr 132

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
{ clrscr();
yaz(A,8);
yaz(B,8);
yenimat(A,B);
yaz(C,p);
yeniden(A,C);
yaz(B,8);
getch();
}
void yenimat(int mat1[8][3],int mat2[8][3])
{int i,j;
p=0;
for(i=0;i<8;i++)
{ for(j=0;j<3;j++)
{ if(mat1[i][j]!=mat2[i][j])
{ C[p][0]=i;
C[p][1]=j;
C[p][2]=mat1[i][j]-mat2[i][j];
p++;
}}}
}
void yeniden(int m1[][3],int m2[][3])
{int i,j;
for(i=0;i<8;i++)
{ for(j=0;j<3;j++)
{ B[i][j]=m1[i][j]; }}
for(i=0;i<p;i++)
{B[m2[i][0]][m2[i][1]]=m1[m2[i][0]][m2[i][1]]-m2[i][2]; }
}
void yaz(int matris[][3],int satir)
{int i, j;
for( i = 0; i < satir; i++ )
{ for( j = 0; j < 3; j++ )
{ printf( "%d ", matris[i][j] );}
printf( "\n" );}
printf( "\n" );
}

DEV 6


Soru 6.1;


3 3 33 2 32 1 31
2 3 23 2 22 1 21
1 3 13 2 12 1 11
b x a x a x a
b x a x a x a
b x a x a x a
= + +
= + +
= + +



2011 coz@sakarya.edu.tr 133

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Formundaki herhangi 3 bilinmeyenli denklemin denklem sistemi belirgin ise (tek zm var
ise) zmn hesaplayan bir C/C++ program yaznz ve ak diyagramn iziniz. Program
yapsal programlama mantnda altprogramlar kullanlarak oluturulacak.

Not: Denklem sistemi matematiksel zm metodu aratrlacak (Bkz. Lineer Cebir Ders
Kitab).


Soru 6.2;


(

22 21
12 11
a a
a a


Formundaki herhangi 2 *2 boyutlu bir matrisin zdeerleri var ise hesaplayan bir C/C++
program yaznz ve ak diyagramn iziniz. Program yapsal programlama mantnda
altprogramlar kullanlarak oluturulacak.

Not: zdeer hesaplama matematiksel zm metodu aratrlacak (Bkz. Lineer Cebir Ders
Kitab).

















8.3. Dizilerde Sralama Algoritmalar iin Altprogram Kullanm


8.3.1. Hzl sralama (quick sort) algoritmas


- En ok tercih edilen sralama algoritmalarndan biridir. Bu algoritmadaki zm
yaklam parala ve zmle ilkesine gre almaktadr.


2011 coz@sakarya.edu.tr 134

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- ncelikle sralanacak diziden belirli bir kritere gre paralayc bir eleman (rnein
orta elemen) seilir. Sralanacak dizi bu elemandan kk eit ve bu elemandan byk
olacak ekilde iki alt diziye blnr.

- Bu ilemin ardndan yukardaki ilem her alt dizi iin zyinelemeli olarak tekrarlanr.

- C programlamada fonksiyon kavramn incelediimiz iin bu problemin zmnde
yapsal programlamann zm daha kolay alt problemlere (modllere) blnme
ilkesinden faydalanabiliriz. Her bir modl daha kolay zlebilir bir altprogram
(yordam) olarak ele alabiliriz.

- Bu ilem, aadaki ekilde de grlebilecei gibi her bir modln kolaylkla
zlebilecei seviyeye kadar devam eder.















- Kkten bye sralama yapan algoritma iin ak diyagram;


2011 coz@sakarya.edu.tr 135

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


- C/C++ program;

#include <stdio.h>

2011 coz@sakarya.edu.tr 136

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
#include <conio.h>
void oku (void);
void bol(int,int);
void hsirala(int,int);
void yaz (void);
int i,n,ort;
int A[100];
void main(void)
{ oku();
hsirala(1,n);
yaz();
}
void oku(void)
{ clrscr();
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("dizi elemanini girin: ");
scanf("%d",&A[i]); }
}
void bol(int x,int y)
{ int alt,ust,g,eksen;
eksen=A[(x+y)/2]; alt=x; ust=y;
do
{ while(A[alt]<eksen) alt++;
while(A[ust]>eksen) ust--;
if(alt<=ust)
{ if(alt!=ust) { g=A[alt]; A[alt]=A[ust]; A[ust]=g; }
alt++; ust--; }
} while(alt<=ust);
ort=ust;
}
void hsirala(int sol, int sag)
{if (sol<sag)
{ bol(sol,sag);
if(sol<ort) hsirala(sol, ort);
if(sag>ort+1) hsirala(ort+1,sag);
}
}
void yaz(void)
{clrscr();
for(i=1;i<=n;i++) printf("%d ",A[i]);
printf(" \n");
getch();
}


8.3.2. Birletirmeli sralama (merge sort) algoritmas


2011 coz@sakarya.edu.tr 137

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

- Bu sralama algoritmas parala
zmle ve birletir ilkesini
kullanr. Bu algoritmada sralanacak
olan dizi ortadan iki alt diziye
blnr.

- Bu algoritmada ncelikle sralanacak
dizi birer elemandan oluan alt
diziler elde edilene kadar
zyinelemeli olarak ikiye blnr.
Ardndan alt diziler sral olarak
birletirilerek sral dizi elde edilir;

- Bu problemin zmnde yapsal
programlamann zm daha kolay
alt problemlere (modllere) blnme
ilkesinden faydalanabiliriz.

- Her bir modl daha kolay zlebilir bir altprogram (yordam) olarak ele alabiliriz.
Bu ilem, aadaki ekilde de grlebilecei gibi her bir modln kolaylkla
zlebilecei seviyeye kadar devam eder.







- Kkten bye sralama yapan algoritma iin ak diyagram;


2011 coz@sakarya.edu.tr 138

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


- C/C++ program;


2011 coz@sakarya.edu.tr 139

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
#include <stdio.h>
#include <conio.h>
void oku (void);
void bol(int,int);
void birles(int,int,int);
void yaz (void);
int n;
int A[100];
void main(void)
{ oku();
bol(1,n);
yaz(); }
void oku(void)
{ int i;
clrscr();
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("dizi elemanini girin: ");
scanf("%d",&A[i]); }
}
void bol(int alt,int ust)
{ int ort,alts,usts;
if(alt<ust)
{ alts=alt; usts=ust;
ort=(alts+usts)/2;
bol(alts,ort); bol(ort+1,usts); birles(alts,ort,usts); }
}
void birles(int alts, int ort, int usts)
{ int i,ass,usb,g;
ass=ort; usb=ort+1;
while ((alts<=ass)&&(usb<=usts))
{ if (A[alts]<A[usb])
alts++;
else
{ g=A[usb];
for (i=usb-1;i>=alts;i--) A[i+1]=A[i];
A[alts]=g;
alts++;ass++;usb++;
} }
}
void yaz(void)
{int i;
clrscr();
for(i=1;i<=n;i++) printf("%d ",A[i]);
printf(" \n");
getch(); }

8.3.3. Kmeleme/yn sralama (heap sort) algoritmas.

2011 coz@sakarya.edu.tr 140

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


- Kmeleme(heap) veri yaps ikili
aalarn zel bir halidir. Bu yapda
her ebeveyn dmn ocuk
dmlerin kendisinden kk yada
kendisine eit olmas kural esas alnr
(bunun terside kullanlabilir).






- Oluan aa (heap) yapsnn dizilerde gsterimi ise aadaki ekilde olur;

o Aacn en byk deerli eleman (root
node: kk dm) her zaman dizinin
ilk elemandr.

o Dizi zerinde her i. ebeveyn dmn ocuk dmleri 2i. ve (2i+1). konumda
olacaktr.

o Verilen bir diziden kmeleme (heap) oluturmak iin her i. ebeveyn dmle
2i. ve (2i+1). ocuk dmleri karlatrp ebeveyn dmden byk olan
ocuk dmleri ebeveyn dmle yer deitirmemiz gerekecektir.

o Bu ilemi dizinin orta elemanna kadar yapmamz yeterlidir. Yardan sonraki
dier elemanlar ebeveyn olmayan ocuk elemanlar olduundan bunlar iin
ilem yapmaya gerek yoktur.

- Elde edilen kmelenmi diziyi sralamak iin ise, kmenin ilk elemann dizinin en
byk eleman olduunu bildiimizden dizinin ilk eleman ile son elemannn yerini
deitirerek en byk eleman sona atm oluruz.

- Sonuncu eleman iermeyen yeni dizi tekrar kmeleme ilemine tabi tutulur. Bu yeni
dizide de ilk eleman ile son elemann yeri deitirilir.

- Bu yineleme ilemi dizinin boyu bir oluncaya kadar devam eder.

- Bu problemin zmnde de zyinelemeli modler yordamlar kullanlacaktr.






- Kkten bye sralama yapan algoritma iin ak diyagram;

2011 coz@sakarya.edu.tr 141

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar



- C/C++ program;


2011 coz@sakarya.edu.tr 142

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
#include <stdio.h>
#include <conio.h>
void oku (void);
void kumesirala(void);
void kumele(int,int);
void yaz (void);
int n;
int A[100];
void main(void)
{ oku();
kumesirala();
yaz(); }
void oku(void)
{ int i;
clrscr();
printf("dizi eleman sayisini giriniz: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{printf("dizi elemanini girin: ");
scanf("%d",&A[i]); } }
void kumesirala(void)
{int i,nd,g;
nd=n;
for (i=nd/2;i>0;i--) kumele(i,nd);
do
{ g=A[0]; A[0]=A[nd-1]; A[nd-1]=g;
nd--;
kumele(1,nd);
}while(nd>1);
}
void kumele(int k,int nx)
{ int j,g;
g=A[k-1];
while (k<=nx/2)
{ j=2*k;
if((j<nx)&&(A[j-1]<A[j])) j++;
if(g>=A[j-1]) break;
else { A[k-1]=A[j-1]; k=j;}
}
A[k-1]=g;
}
void yaz(void)
{int i;
clrscr();
for(i=0;i<n;i++) printf("%d ",A[i]);
printf(" \n");
getch();}

DEV 7 Genel Konular

2011 coz@sakarya.edu.tr 143

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


Soru 7.1;


- kili yerletirmeli sralama (binary insertion sort) algoritmasn aratrnz. Bu
algoritmann bykten ke sralama yapan ak diyagramn izin ve C/C++
programn yaznz.
- Algoritmann ileyiini inceleyiniz ve ileyi metodunu ksaca izah edinir.


Soru 7.2;


- n4 boyutlu bir A matrisin satrlarn, drdnc stundaki deerler kkten bye
sralayacak ekilde sralayan bir ak diyagramn izin ve C/C++ programn yaznz.
- rnek sralama;
Sralamadan nce: Sralamadan sonra:

(
(
(
(
(
(

(
(
(
(
(
(

7 3 4 6
6 7 3 5
5 9 4 2
4 5 2 4
3 4 7 8
5 9 4 2
3 4 7 8
7 3 4 6
4 5 2 4
6 7 3 5



Soru 7.3;


- lk satr klavyeden rasgele girilen 4x4 boyutlu bir Latin karesini oluturan ve ekrana
yazan bir C/C++ program yaznz ve ak diyagramn iziniz.

- 44 boyutlu bir Latin karesi ierisinde 1 den 4 e kadar olan tamsaylar 4 kez kullanlr
ve bir satr veya bir stun da ayn saydan sadece 1 tane bulunur.

- 44 boyutlu rnek Latin kareleri;

(
(
(
(

2 3 4 1
3 1 2 4
1 4 3 2
4 2 1 3

(
(
(
(

1 4 3 2
2 1 4 3
3 2 1 4
4 3 2 1






8.4. Genel Algoritma rnekleri:

2011 coz@sakarya.edu.tr 144

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar


- rnek 8.7:

- Girilen bir yln verilen bir gnnn hangi ayda olduunu hesaplayan bir C/C++
program yazalm ve ak diyagramn izelim.

- rnein: 2004 yln 42. gn ubat ayndadr.

- Bu problemi zerken yln aylarn ifade eden 12 elemana sahip bir sz
dizisi/string dizisi ve ayrca aylarn gn saylarn da sras ile tutan 12 elemana sahip
bir tamsay dizisi kullanacaz

- Bir sz dizisi/string dizisi, ya elamanlar karakter iareti olacak biimde yada
boyutu bir artrlarak bildirilir;

char *aylar[] = {"OCAK", "SUBAT", "MART", "NISAN", "MAYIS", "HAZIRAN",
"TEMMUZ", "AGUSTOS", "EYLUL", "EKIM", "KASIM", "ARALIK"};

char aylar[][7] = {"OCAK", "SUBAT", "MART", "NISAN", "MAYIS", "HAZIRAN",
"TEMMUZ", "AGUSTOS", "EYLUL", "EKIM", "KASIM", "ARALIK"};

- Program olutururken dikkat etmemiz gereken bir husus da 4 e tam blnen ylarda
ubat aynn 29 gn olmasdr.

- Programn ak diyagram;



- C/C++ program;

2011 coz@sakarya.edu.tr 145

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar

#include <stdio.h>
#include <conio.h>
char *aylar[] = {"OCAK", "SUBAT", "MART",
"NISAN", "MAYIS", "HAZIRAN",
"TEMMUZ", "AGUSTOS", "EYLUL",
"EKIM", "KASIM", "ARALIK"};
int ngun[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void main(void)
{ int yil, t, gun, i;
clrscr();
printf("YIL girin: ");
scanf("%d",&yil);
printf("kacinci gun: ");
scanf("%d",&gun);
t=0;
if(yil%4==0) ngun[1]=29;
for(i=0;i<12;i++)
{t=t+ngun[i];
if(t>=gun) break;
}
printf("%d. gun %s ayindadir", gun, aylar[i]);
getch();
}


- rnek 8.8:

- lk satr rasgele dizilmi Latin kareleri oluturan bir C/C++ program yazalm ve ak
diyagramn izelim.

- nn boyutlu bir Latin karesi ierisinde 1 den n e kadar olan tamsaylar n kez kullanlr
ve bir satr veya bir stun da ayn saydan sadece 1 tane bulunur.

- 33 ve 44 boyutlu rnek Latin kareleri;

(
(
(

3 2 1
1 3 2
2 1 3

(
(
(
(

2 3 4 1
3 1 2 4
1 4 3 2
4 2 1 3


- Problemi altprogram olarak ayr ayr ele alabileceimiz modle ayrabiliriz:

o Rasgele ilk satrn oluturulmas,
o Latin karesinin oluturulmas,
o Latin karesinin yazlmas.

2011 coz@sakarya.edu.tr 146

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- Rasgele ilk satrn oluturulmas: nn boyutlu Latin karesinin ilk satrn, elemanlarn
rasgele belirleyeceimiz n elemanl bir A dizisinde tutalm. C/C++ nn randomize()
ve random() hazr fonksiyonlarn kullanarak rasgele saylar retebiliriz ve bu
saylarn eit olmamasn iki for dngs iinde kontrol edebiliriz. Bir do-while
dngsde A nn btn elemanlar farkl oluncaya kadar rasgele say retmek amac
ile kullanlabilir.

- Latin karesinin oluturulmas: Elde ettiimiz ilk satr aslnda saylarn dnerli
permtasyonudur (Latin karesi iindeki her satrda deiik olacak yerlerini verir).

- rnek olarak ilk satr [4 1 3 2] olsun. lk satr bize saylarn Latin karesindeki dnerli
yerleimlerini de bize verir . rnein 4 saysnn yerleimi [1 3 2 4] eklindedir yani
ilk satrda 1. srada ikinci satrda 3. srada nc satrda 2. satrda ve drdnc satrda
4. sradadr. [1 3 2 4] yerleimini [4 1 3 2] eklindeki ilk satrmz sola dndrerek
kaydrma suretinde elde edebiliriz. Yerleimdeki ilk eleman ileme tutulacak eleman
da gsterir. [1 3 2 4] yerleimini bir kere daha sola dndrerek kaydrrsak [3 2 4 1]
yerleimini elde ederiz. Yerleime tabi tutulacak eleman ilk satrn 3. srasndaki 3 tr.
Yeni oluan [3 2 4 1] yerleimini bir kere daha sola dndrerek kaydrrsak [2 4 1 3]
yerleimini elde ederiz. Bu kez sralama ilk satrn 2. eleman olan 1 iindir. [2 4 1 3]
yerleimini bir kere sola dndrerek kaydrrsak [4 1 3 2] dizisini elde ederiz. Sralama
ya tabi tutulacak eleman ilk satrn 4. eleman olan 2 dir.


- Programn ak diyagram;




- C/C++ program;

2011 coz@sakarya.edu.tr 147

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
void ilksatir (void);
void latinkare(void);
void yaz (void);
int n;
int A[10], L[10][10];
void main(void)
{ilksatir();
latinkare();
yaz();
}
void ilksatir(void)
{ int i,j,t;
clrscr();
printf("latin matrisi icin boyutu icin 2-9 arasi bir deger girin: ");
scanf("%d",&n);
randomize();
do{
for(i=1;i<=n;i++) A[i]=random(n)+1;
t=0;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
{ if((i!=j)&&(A[i]==A[j])) t++; }}
}while(t!=0);
}
void latinkare(void)
{int g, i, j, k, ns, p, sayi, ysut, YER[10];
ns=n-1;
for (i=1;i<=n;i++) YER[i]=A[i];
for (i=1;i<=n;i++)
{g=YER[1];
for (j=1;j<=ns;j++) YER[j]=YER[j+1];
YER[n]=g;
p=YER[1];
sayi=A[p];
for (k=1;k<=n;k++)
{ ysut=YER[k];
L[k][ysut]=sayi;}
}}
void yaz(void)
{int i,j;
clrscr();
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++) printf("%d ",L[i][j]);
printf(" \n"); }
getch(); }

2011 coz@sakarya.edu.tr 148

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- rnek 8.9:

- Bir fonksiyonun belirli bir aralkta hesab analitik yollar ile zor olabilir veya mmkn
olmayabilir. Bu gibi durumlarda saysal integrasyon yntemlerine bavurulur.
Simpson Kural bu yntemlerden biridir.

- Simpson Kural aadaki ekilde ifade edilebilir;


- y=f(x) eklinde bir fonksiyonun x=a ile x=b arasnda integralinin hesab, (a,b)
aralnda fonksiyon erisi ile x ekseni arasnda kalan alana eittir. Simpson Kuralna
gre (a,b) araln yukardaki ekilde olduu gibi n paraya blerek aadaki integral
hesabn yazabiliriz;
( )
n n n
f f f f f f f f
h
Integral + + + + + + + + =
1 2 4 3 2 1 0
4 2 ... 2 4 2 4
3

- rnek integrasyonumuz
}
+ =

dx x e x F
x 5 4
) 5 . 0 ( ) ( eklinde olsun.
- ntegrasyon iin Simpson kuraln uygulayan programn ak diyagram;




2011 coz@sakarya.edu.tr 149

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
- C/C++ program;

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
double integral (float, float, int);
double fonk(float);
int n;
void main(void)
{ float bas,son; int bs; double sonuc;
clrscr();
printf("integral aralik baslangici: ");
scanf("%f",&bas);
printf("integral aralik sonu: ");
scanf("%f",&son);
printf("aralik bolum sayisi (cift): ");
scanf("%d",&bs);
sonuc=integral(bas,son,bs);
printf("integral degeri : %f ", sonuc);
getch();
}
double integral(float a, float b, int n)
{double F[100], toplam, integ; float h,x; int i;
h=(b-a)/n;
x=a;
for(i=0;i<=n;i++)
{F[i]=fonk(x); x=x+h;}
toplam=0;
for(i=1;i<n;i+=2) toplam=toplam+4*F[i]+2*F[i+1];
integ=(h/3)*(toplam+F[0]-F[n]);
return integ;
}
double fonk(float z)
{float f;
f=exp(-4* z)*pow((0.5+z),5); /*hazir C matematik fonksiyonlari */
return f;
}



Niin Diskleri Kullanyoruz(Why we are using a disk)?
Bilgisayarla alan insanlar olarak verileri dosyalarda saklamann nemini ok iyi
biliyoruz. Bilgisayarn ana hafzas(RAM) bilgisayardaki sabit disklerden ok ok
azdr. Yani Sabit diskler(harddisk) RAMden daha fazla bilgi saklar. Diskler
ierisindeki bilgileri enerji kesildiinde dahi tutar. Kullanc istedii zaman disk
zerindeki verileri ararak deitirir data.

Disk dosyalarna eriim tipleri(Type of disk file access)

2011 coz@sakarya.edu.tr 150

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Programlar dosyalara iki farkl ekilde ularlar; sral ve rasgele. Yazdnz
program sizin ulam seiminize gre deiiklik gsterecektir. Dosyaya eriim
modunuz, sizin dosyadan veriyi nasl okuyacanz, dosyaya veriyi nasl
yazacanz, dosyadaki verileri nasl deitireceinizi veriyi dosyadan nasl
sileceinizi ve benzeri durumlar belirlemenizi salar. Baz dosyalara iki ekilde de
ulalabilir.

fopen fonksiyonu(The fopen() Function)

fopen() fonksiyonu iki fonksiyon icra eder: birincisi kullanmak zere bir dosya aar,
ikincisi ise bir dosya iaretcisi dndrr. Fopen() fonksiyonunun genel kullanm
FILE *fp;
fp=fopen(fdosyaad,mode);
Burada mode string bir ifadedir ve aadakilerden biri olabilir.
r okuma
w yazma, veya
a ilave etme
Dosya ismi karakter dizini olmal ve kullanlan iletim sistemine uygun bir
karakterlerin kullanlmasdr.
Fp dosya tipi deikenidir ve dosya iaretcisidir. FILE stio.h ktp hanesinde
tanml zel bir veri tipidir. Btn dosya iaretcileri FILE tipi olarak tanmlanmak
zorundadr.
Eer yazma modunda test isimli bir dosya amak istiyorsak aadaki ifadeyi
kullanabiliriz
fp=fopen(test,w);

fopen fonksiyonu(The fopen() Function)
Bununla birlikte genellikle aadaki ifade ekli ile kullanlacak veya
kullanlmaktadr:
if((fp=fopen(test,w))==NULL)
{
puts(Dosya alamyor \n);
exit();
}
Bu metod dosyann diskte oluturulamamas durumlarnda verilen dosya
oluturulamama hatalarnda programn almay durdurmadan kullancnn
duruma mdahalesi iin kullanlr. Genellikle bu hata diskin dolu olmas veya
yazmaya korumal olmas durumlarnda oluur.
fopen fonksiyonu ile bir dosya write modun da aldnda, dosya yeniden
oluturulur. Eer daha nceden oluturulmak istenen dosya oluturulmu ve bilgi
girilmise bu bilgiler kaybedilir. Dosyaya sadece ilave kayt eklenmek isteniyorsa
dosya append yani a modun da almaldr.

fclose() fonksiyonu (The fclose() Function)

Fclose() fonksiyonu fopen() fonksiyonu ile alan dosyalar kapatmak iin kullanlr.
Program sonlandrlmadan nce tm dosyalar kapatlm olmaldr.
fclose() fonkisyonun genel kulanm ekli
fclose(fp);

2011 coz@sakarya.edu.tr 151

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
Burada fp fopen() fonksiyonu tarafndan dndrlen dosya iaretisidir.
fprintf() ve fscanf() fonksiyonlar
Temel I/O fonksiyonlar gets() ve putc() ye ilave olarak ou c ktphaneleri fprint()
ve fscanf() fonksiyonlarna sahiptir. Fopen ile alan dosyaya formatl veri yazmak
ve okumak iin kullanlrlar fopen() fonksiyonunun genel kullanm
fprintf(fp,kontrol karakter dizini, argman listesi);
Ve scanf() fonksiyonunun genel kullanm
fscanf(fp, kontrol karakter dizini, argman listes);
fprintf() ve fscanf() fonksiyonlar

fp, fopen() fonksiyonu ile dnen dosya iaretisidir. fprint() ve fscanf() fonksiyonlar
fp iaretisi ile tanmlanan dosyaya ynetmenin haricinde printf() ve scanf()
fonksiyonu gibi alr.

#include<stdio.h>
main()
{
FILE *fp;
char s[80];
int t;
if((fp=fopen(test,w))==NULL)
{
puts(dosya alamyor\n);
exit(0);
}
scanf(%s %d,s,&t); // veri oku
fprintf(fp,%s %d,s,t); // dosyaya yaz
fclose(fp);
if((fp=fopen(test,r))==NULL)
{
puts(dosya alamyor \n);
exit(0);
}
fscanf(fp,%s %d,s,&t); // dosyadan oku
printf(%s %d,s,t); // ekrana yazzdr
fclose(fp);
}


Programda aadakine benzer bir men oluturulabilir ve program bu men
aral ile kontrol edilebilir.

#include <stdio.h>
#include <stdlib.h>
char sec;
int main(int argc, char *argv[])
{
do{
printf("\n personel takip program ");

2011 coz@sakarya.edu.tr 152

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
printf("\n 1- Kayt ekle ");
printf("\n 2- Kayt Gncelletirme ");
printf("\n 3- Kayt silme ");
printf("\n 4- kayt arama ");
printf("\n 5- Programdan k ");
printf("\n SeiMiNiZ ? ");
do{sec=getch();}while((sec<'0')||(sec>'5'));

switch (sec)
{
case '1': printf("\n Kayt Ekleme ");break;
case '2': printf("\n Kayt Gncelletirme ");break;
case '3': printf("\n Kayt Silme ");break;
case '4': printf("\n Kayt Arama ");break;
case '5': printf("\n Programdan k "); return 0;break;
default:printf(" yeniden deneyin ");
}
}while(sec='5');
system("PAUSE");
return 0;
}


enter()
{
if((filemain= fopen(personal.dat,a))==NULL)
{printf(Dosya alamad \n);
exit(0); }
printf( \n Kii ad :);scanf(%s ,person_name);
printf( \n Kii soyad :);scanf(%s ,person_surname);
printf( \n Kii ya :);scanf(%d ,&person_age);
printf( \n Kii maa :);scanf(%d ,&person_salary);
fprintf(fileman, %s %s %d %f \n, person_name,person_surname, person_age,
person_salary);
fclose(filemain);
return;}

enter()
{
if((filemain= fopen(personal.dat,a))==NULL)
{printf(Dosya alamad \n);
exit(0); }
printf( \n Kii ad :);scanf(%s ,person_name);
printf( \n Kii soyad :);scanf(%s ,person_surname);
printf( \n Kii ya :);scanf(%d ,&person_age);
printf( \n Kii maa :);scanf(%d ,&person_salary);
fprintf(fileman, %s %s %d %f \n, person_name,person_surname, person_age,
person_salary);
fclose(filemain);

2011 coz@sakarya.edu.tr 153

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
return;}

edit()
{
printf( \n Dosyadan kayt dzeltme );
printf( \n ---------------------------------------------);
printf( \n person_surname :);scanf(%s ,tmp_surname);
if((filemain= fopen(personal.dat,r))==NULL)
{printf(Dosya alamad \n);
exit(0); }
if((filetemp= fopen(personal.tmp,w))==NULL)
{printf( Dosya alamad \n);
exit(0); }
Do
{
fscanf(fileman, %s %s %d %f \n, person_name,person_surname,&person_age,
&person_salary);
f(tmp_surname==person_surname)
{
printf( \n Kii ad :,person_name);
printf( \n Kii soyad :,person_surname);
printf( \n Kii ya :,person_age);
printf( \n Kii maa :,person_salary);
pintf( \n -------------------------------------------------------);
printf( \n ------ Kayd dzeltme ------------------------);
printf( \n Kii ad :);scanf(%s ,person_name);
printf( \n Kii soyad :);scanf(%s ,person_surname);
printf( \n Kii ya :);scanf(%d ,&person_age);
printf( \n Kii maa :);scanf(%d ,&person_salary);
printf( Yaplan deiiklikleri kaydetmek istiyormusunuz (y) yes (n)
no);scanf(%s,&pass);
if( pass!=y || pass!=Y)
fprintf(fileman, %s %s %d %f \n, person_name,person_surname, person_age,
person_salary);
}
}while(!feof(filemain));
fclose(filemain);
fclose(filetmp);
Remove(personal.dat);
Rename(pesonal.tmp, personal.dat);
return;
}
deletet()
{
printf( \n Uyar dosyadan kayt siliyorsunuz);
printf( \n ---------------------------------------------);
printf( \n Kii ad :);scanf(%s ,tmp_surname);
if((filemain= fopen(personal.dat,r))==NULL)
{printf(dosya alamad \n);

2011 coz@sakarya.edu.tr 154

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
exit(0); }
if((filetemp= fopen(personal.tmp,w))==NULL)
{printf(dosya alamad \n);
exit(0); }
Do
{
fscanf(fileman, %s %s %d %f \n, person_name,person_surname,&person_age,
&person_salary);
f(tmp_surname==person_surname)
{
printf( \n person_name :,person_name);
printf( \n person_surname :,person_surname);
printf( \n person_age :,person_age);
printf( \n person_salary :,person_salary);
printf( Bu kayd silmek istiyormusunuz (y) yes (n) no);scanf(%s,&pass);
if( pass!=n || pass!=)
fprintf(filetmp, %s %s %d %f \n, person_name,person_surname, person_age,
person_salary);
}
else
fprintf(filetmp, %s %s %d %f \n, person_name,person_surname, person_age,
person_salary);

}while(!feof(filemain));
fclose(filemain);
fclose(filetmp);
Remove(personal.dat);
Rename(pesonal.tmp, personal.dat);
return;
}

find()
{
printf( \n Dosyadan kayt bulma );
printf( \n ---------------------------------------------);
printf( \n person_surname :);scanf(%s ,tmp_surname);
if((filemain= fopen(personal.dat,r))==NULL)
{printf(dosya alamad \n);
exit(0); }
Do{
fscanf(fileman, %s %s %d %f \n, person_name,person_surname,&person_age,
&person_salary);
f(tmp_surname==person_surname)
{
printf( \n person_name :,person_name);
printf( \n person_surname :,person_surname);
printf( \n person_age :,person_age);
printf( \n person_salary :,person_salary);
printf( devam etmek istiyormusun (y) yes (n) no);scanf(%s,&pass);

2011 coz@sakarya.edu.tr 155

Sakarya niversitesi Bilgisayar Mhendislii
Algoritmalar ve Programlama I Ders Notlar
if( pass!=n || pass!=N)
{
fclose(filemain);
return;
}
}
}while(!feof(filemain));
fclose(filemain);
return;
}




Soru 1)a) Bir firmada alan n tane eleman olsun. Bu elemanlarn, ad,soyad, maa ve ya
bilgilerini klavyeden okuyan daha sonrada alanlarn maa ve yalarna gre aadaki
verilen koullara kii adetlerini, maa ve ya ortalamalarn bulmak iin ak diyagramn
iziniz?
20yas<25 ve maa<1500, 1500maa<2000 ve 2000maa
25yas<35 ve maa<1500, 1500maa<2000 ve 2000maa
35yas ve maa<1500, 1500maa<2000 ve 2000maa
b) szde kodunu yaznz?
soru 2)
Bir iki boyutlu nxm elemanl B dizisi olsun A dizisi ise
aada verilen forml ile hesaplanmaktadr.


a) B dizisinin elemanlarn klavyeden okuyan
b) B dizisini ekrana yazdran
c) A dizisini hesaplayan
d) A dizisini ekrana yazdran
algoritmann ak diyagramn ve szde kodunu veriniz?

You might also like