Upload
redhawksss
View
248
Download
0
Embed Size (px)
Citation preview
8/14/2019 C++ le Programlamaya Giri
1/43
C++ le Programlamaya Giri
lk programmz!
// ilk1.cpp// Ekrana "Bu benim ilk programm" yazdryoruz#include
int main(){
cout
8/14/2019 C++ le Programlamaya Giri
2/43
return 0;}
Evet imdi burada ok fark varm gibi gzkyor aslnda ama yle deil. Sadece ktphanemiz stdio.h oldu ve
ekrana yazdr fonksiyonumuzda printf oldu. Bu zellik C den kalma. Bunlar dier program ile ayn ilevi gryor.
Buradaki fark " \n " notasyonu. Bu noptasyon bir sonraki satra gemek iin kullanlr. Bu notasyonlara Escape
dizileri denir. Tablo olarak bunlar size veriyorum. Son yazdmz ilk2.cpp de yerlerine koyarsanz alacaktr.
Dizi: Ad:\a Alarm\b Bir karakter geri (Backspace)\f Formu itekle\n Yeni satr ( yukarda kullandmz (newline) )\r Return\t Yatay boluk
u an bunlar bilmemiz yeterli.
Deikenler
imdi bize yine ok lazm olacak bir zellik de deiken tanmlamak ve atama yapmaktr. Bunu bir rnek
zerinde anlatmak istiyorum. rneimiz;
// degisken.cpp// Burda deiken tanmlamay greceiz.// Ayn zamanda verilen bir sayy kendisi ile carpma 2.2=4 gibi
#include #include // ktphane dosyamzmain(){
int i; // Deiken tanmlamacout > i;i=i*i;cout
8/14/2019 C++ le Programlamaya Giri
3/43
imdi degisken.cpp rneindeki int i; ksmn anlamsnzdr. Burada deikenlere deinmek istiyorum. Biz
yukarda inde say tutan bir deikeni tanmladk. Benzer olarak aadaki tanmlamalar da vardr.
char c;
int i;
float f;
double d;
unsigned int ui;
Burada [Veri Tipi] [Deiken Ad]; bu kalba gre tanmlama yaptmz iin nce Veri Tiplerini inceleyelim.
Veri Tipleri
1) nt tip.
Integer = Tamsay
Tamsaylar ierir. Bellekte 2 Byte tutar. DOS'ta ve Win3.1'de 16 bit uzunlugunda ama Windows9x, WinNT,
Win200 ve WinXP 32 bit uzunluundadr.
Deer aralklar Short ve long iin deiir.
rnek: 5, -20, 1 gibi.
2) Sort tip.
Tam saylar ierir. 16 bit uzunluundadr.
signed: -32768 ile +32767 arasinda deer alr, unsigned: 0 ile 65535 arasinda deer alr.
3) Long tip.
Tam saylar ierir. 32 bit uzunluundadr.
signed: -2147483648 ile +2177483647 arasinda deer alr, unsigned: 0 ile 65535 arasinda deer alr.
4) Gerel Tipler (Float, Double, Long double)
Gerel saylar ierirler.
float : Bellekte 4 Byte yer tutar. 3.4E-38 ile 3.4E+38 aralnda deer alr. Hassasiyet 7-8 basamaktr.
double : Bellekte 8 Byte ter tutar. 1.7E-308 ile 1.7E308 aralnda deer alr. Hassasiyet 15-16 basamaktr.
long double : doublenin tipinin daha geniidir.1.2E-4932 ile 1.2E-4932 aralnda deer alr. Hassasiyet 19-20basamak.
http://www.mutasyon.net/ders_yazdir.asp?id=48&metadata=18/14/2019 C++ le Programlamaya Giri
4/43
5) Char Tip
Char : Karakter
Alfanumerik karakterleri ierir. Ve ya 8 bit uzunluunda tamsay.
signed: -128 ile 127 arasinda deer alr, unsigned: 0 ile 255 arasnda deer alr.
rnein: ' 0,1,2,3,4,5,6,7,... ' , ' *,-,+,... ' , 'a,b,c,....,A,B,C,D,,,,, '
6) Bool tip.
true(dogru) = 1 veya false(yanlis) = 0 deerini alr. Eski derleyiciler bu tr desteklemeyebilir. Yeni ANSI C++
standardnda eklenmitir. Bu soyut matematik grdyseniz. "p V q" ya benzer :) ( matematikiyiz, konuturalm
azck). Deer aral ise ya 1 dir (doru) yada 0 dr (yanl).
7) Enum tip.
enum sralanm deerleri tutar. Short int ile ayn deeri tar.
Bata Fazla Detaya inip sizi bunaltmak istemiyorum. nk C++ dili balarda karmak gelen bir dildir. Bu da
zaten kendisini yksek seviyeli bir dil yapyor :). Ben size Bu dilin temel zelliklerini anlatarak basit programlar
yapmay gstereceim.
Bu temel bilgileri aldktan sonra programlamaya geebiliriz. Derleyici Olarak ben Turbo C++ 3.1 i tavsiye
ederim. u an bununla balar iseniz iiniz daha kolay olacaktr (bence). lerde Borland a geeceiz.
Deiken tanmlama konusunda bir konuya daha deinmek istiyorum. Deikenlere deer atama ve ayn anda
bir ok deiken tanmlamamz C++ da mmkndr.
char c = 'c';
int i = 5;
Daha sonradan deer atama:
char c;
int i;
c = 'c ';
i = 5;
Bir de ayn anda bir ok deiken tanmlayalm.
rnein:
int x , y , z;
x = y = z = 5;
x,y,z' nn deeri 5 oldu
8/14/2019 C++ le Programlamaya Giri
5/43
Bir sonraki derste ise deikenlerle birlikte bir de Operatrleri ele alacaz.
Operatrler I
Operatr ve Operand nedir?
Bunu bir rnek zerinde anlatmak istiyorum. rnein; x + y 'de x ve y operand + ise operatrdr. Bu bir
aritmetiksel operatrdr. Matematikte ilemler operatrler ve operandlar ile anlatlr.
Operatrleri ncelikle trlerine gre ayralm:
1) Aritmetiksel operatrler + , - , * , / , % , ++ , --
2) Karlatrma operatrleri < , > , = , ==, !=
3) Eitleme operatrleri = , += , -=, *= , /= , %= , >=, &=, != , ^=
4) Mantksal Operatrler ! , || , &&
5) Bit baznda ilem yapan operatrler & , ! , ^ , ~ ,
Aritmetiksel (Matematiksel) Operatrler:
Matematiksel ifadeleri gnlk hayattaki biimde bilgisayarda yazamadmz iin belli kurallara uymamz gerekir.
Bu ksm nemli olduu iin biraz geni yer vereceim. Kullandmz matematiksel ilemler ve anlamlaryledir:
C++ ilemi: Aritmetik operatr:Toplama +karma -arpma *Blme /Modulus(mod) %Bir arttrma ++Bir azaltma --
Bu operatrle verilen iki veya daha fazla operand toplanabilir. Yazl ekli Aadaki gibidir.
deiken1 + deiken2
Eer bu iki deikeni Sonu gibi baka bir deikene atarsak eitleme operatryle aadaki gibi yaparz.
Sonu = deiken1 + deiken2
Buna bir rnek verelim.
// toplama.cpp
http://www.mutasyon.net/ders_yazdir.asp?id=49&metadata=18/14/2019 C++ le Programlamaya Giri
6/43
//Vize ve final notlarinindan geme notunu hesaplama
#include #include
main()
{int vize, final, ort;vize = 10;final = 80;ort = vize * 0.4 + final * 0.6;cout
8/14/2019 C++ le Programlamaya Giri
7/43
Bunlarn teker teker ne olduunu sylemeye gerek yok. fadeler gayet basittir. Burada dikkat etmemiz gerekennemli bir ey var: " >=,
8/14/2019 C++ le Programlamaya Giri
8/43
! iareti ise her bir bit i ters evirir.
Not: Bunlar yeni balayanlar iin yorucu olabilir. Son iki blmn fazla stnde durmayn not;
http://www.mutasyon.net/ders_yazdir.asp?id=53&metadata=1http://www.mutasyon.net/ders_yazdir.asp?id=52&metadata=18/14/2019 C++ le Programlamaya Giri
9/43
if ( not >= 50 )cout = 50 )cout x;if ( x > 0 )cout not;if ( not> 50)cout
8/14/2019 C++ le Programlamaya Giri
10/43
if (not < 50)cout
8/14/2019 C++ le Programlamaya Giri
11/43
Bir rnek daha verelim:
//ifelse.cpp#include main(){
int not;cout> not;if (not >= 50)
cout = 50)
cout =60 )cout
8/14/2019 C++ le Programlamaya Giri
12/43
#include main(){int sayi;cout> sayi;
cout
8/14/2019 C++ le Programlamaya Giri
13/43
Burada grdmz gibi i deikenine bal olarak program iliyor. Case'lerinin ald deere gre kendinden
sonra gelen komutlar iliyorlar. Burada daha nce grmediimiz break komutunu grdk. Buna ilerde daha
detayl olarak deineceim. Fakat biraz bahsetmek istiyorum. Programmzda deikene 1 deerini verdiimizi
farz edelim. Case 1 adl satr geip ondan sonraki komut dizisini ileme soktuk. Bu ilemin tamamlanmas iin
break komutu kullanlyor. Yazlmda break komutu goto gibi ilev grr ve derleyiciye switch komutundan
kmas iin talimat verir. Sorunu ortadan kaldrmak iin her durum iin break deyimi eklemeliyiz (tavsiye). Ne
demitik; bir ok karlatrma olduunda switch'e ihtiya duyuyoruz. Karlatrmalarn hi biri olmad andada ortaya default tan sonraki satrn ilenmesi kalyor. Sanrm bu rnekte basit olarak anlam olacaz.
Daha karmak bir rnek verecek olursak:
//ucgen.cpp// Program gireceimiz llere gre genin Alan, Ykseklik ve Tabannbulur// switch-case rneimiz.
#include
int main(){char secenek;float alan, yukseklik, taban;
cout
8/14/2019 C++ le Programlamaya Giri
14/43
8/14/2019 C++ le Programlamaya Giri
15/43
Komut;
While dngs, iinde bulunan ifade doru olduu srece altndaki komut veya komut blou yrtlr. Eer
yanl ise kontrol bir sonraki komut veya komut blouna geer.
While dngs daha genel ekliyle:
while ( ifade ){komut;komut;komut;...}
Burada bir eye dikkat etmenizi istiyorum. oklu komutlar kullandmzda " { } "parantezleri gereklidir.
// while1.cpp// while dngsn kullandk// girdiimiz saydan 100 e kadar olan saylar topladk
#include
main(){int x, y;y= 0;cout>x;
while (x< 101){
y =y+x;x =x+1;
}
cout
8/14/2019 C++ le Programlamaya Giri
16/43
main(){int x=1;while(x)
cout
8/14/2019 C++ le Programlamaya Giri
17/43
return 0;
}
Bu rneimizde yine toplam, sayac, not, ortalama gibi deikenleri tanmladk. ( toplam =0 ; ve sayac
= 1; ) de deikenlere ilk deerlerini atadk. While dngsnn iinde sayac deikenimizi alt defailemesini syledik. Sonra alttaki toplam ve sayac blmlerinde ise toplam a not' u ekliyoruz, her seferinde de
sayac deerini bir arttryoruz ve sayac deeri 6' ya gelince while dngmz duruyor. Program sonra toplam
alp altya bler bu sayede ortalamay alr, sonrada ktsn gerekletirir.
2. rnek:
//faktoriyel.cpp// while ile faktoriyel hesaplama
#include int main()
{ int sayi;long int faktoriyel=1;cout > sayi;cout
8/14/2019 C++ le Programlamaya Giri
18/43
else // vergi yok:)if( maas < 500000000 ) // maas 500 den az isevergi = maas * 0.10; // vergi %10
else // 500 den fazla isevergi = maas * 0.20; // vergi %20
net = maas - vergi; // net maamz vergi dnce karcout
8/14/2019 C++ le Programlamaya Giri
19/43
yeniden komutlar iliyor. Eer koul kontrol yanl ise while'den bir sonra ki komutu veya komutlar ileyip
dngden kyor. imdi bu sylediklerimizi rnek zerinde gsterelim.
//do.cpp// number echoer//do-while dngsn kullandk
#include
int main (){unsigned long x;do {cout> x;cout
8/14/2019 C++ le Programlamaya Giri
20/43
// for dngsyle bir rnek.
#include int main (){
for (int n=10; n> 0; n--){cout 0; bunu test ettik ve !0 yani
doru (1) kt. Sonrada n-- yi yazdk. Genel tanmda yazdmz arttrma ksm. Aslnda buna yenileme
komutlar desek daha doru olur. Biz bu rnekte rnein azaltma yaptk. Neyse umarm bu for rneini
anlamsnzdr.
C++ da yapacamz ou rnekte for u kullanacaz. C++ 'nn en gl yanlarndan biriside for dngsdr.
For dngsnn banda yani ilk deer atama ksmnda birden ok deiken tanmlayp deer atyorsak bunlarvirgl ( , ) ile bir birinden ayrmalyz. lk deer atamadan koul blmne getiimizde ve koul blmndenarttrma ya geerken noktal virgl ( ; ) kullanmalyz. Tabi kullandmz bu ksm seimlidir istersek bobrakabiliriz. Fakat, noktal virgller ( ; ) konulmas zorunludur.
1.rneimiz:
//factoriyel_for.cpp//for dngsyle faktriyel hesap.
#include
int main()
{int fac, sayi;
coutsayi;fac=1;
for (int j=1; j
8/14/2019 C++ le Programlamaya Giri
21/43
//carpim_for.cpp// i ie for dngsyle arpm tablosu
#include
main(){cout
8/14/2019 C++ le Programlamaya Giri
22/43
Break komutunu, swtich komutundan kmak iin nceki derslerimizde grmtk. Komutun kendine zg bir
kullanm daha vardr. Break komutu bir dngnn iinde altrlrsa o an o dng biter. Bir goto gibi ilem
grdn de syleyebiliriz. Break kullannca program dngy bitirir ve dngnn sonundaki satrdan
almaya devam eder. Bir rnek verelim.
//break.cpp
//break komutunu kullandik.
#include
main()
{
for (int x = 1; x
8/14/2019 C++ le Programlamaya Giri
23/43
continue;cout
8/14/2019 C++ le Programlamaya Giri
24/43
int main(){
double x; //x i tanmladk
x = 45.0; // 45 derece
x *= 3.141593 / 180.0; // Dereceyi radyal deere dndrmecout
8/14/2019 C++ le Programlamaya Giri
25/43
char cocuk, para, araba;
cout > cocuk;
cout > para;
cout > araba;
//seenekleri ben kafadan attm//maksat burda mantksal operatrlerin ileyiini grmek
if ((cocuk == 'Y') && (para == 'Y') && (araba == 'N'))
cout
8/14/2019 C++ le Programlamaya Giri
26/43
x[outer] = temp;}cout
8/14/2019 C++ le Programlamaya Giri
27/43
coutsaat;coutsaatUcreti;brut=(double)(NORMAL + 1.5*(saat-NORMAL))*saatUcreti;//bu satr hem normal hemde fazlamesai de alr
net=brut*0.8; kesinti=brut*0.2;//artk bordor yazlabilir.cout
8/14/2019 C++ le Programlamaya Giri
28/43
cout
8/14/2019 C++ le Programlamaya Giri
29/43
1. Fonksiyonlara Giris:
Fonksiyonlarin programlama hayatina girmesi ile daha byk boyutta sistemlerin tasarimi mmkn hale
gelmistir. Fonksiyonlar ile alakali derslerimizde, fonksiyonlarin tanimlanmasi ve kullanimi hakkinda bilgi
edineceksiniz. Fonksiyonlar konusu size her ne kadar ilk bakista "Fonksiyon" adi altinda bir konu gibi gelse de,
aslinda bir alt programdir. Hatta programimizin iine, kodlamamizin daha kolay ve gelistirilebilir hale gelmesini
saglayan programciklar da diyebiliriz.
Daha nce baska bir programlama dili grdyseniz (yksek seviyeli diller), bu konuda fazla
zorlanmayacaksinizdir. Diger yksek seviyeli dillerdeki fonksiyon kullanimina ok benzemektedir. Hi
bilmediginizi farz ederek konuya giris yapalim.
Fonksiyon Nedir?
rnegin, y=F(x) fonksiyonu; Bu matematiksel fonksiyon parametre olarak aldinan deger zerinde bir islem
gereklestirip, bir sonu degerini dndrr. Mesela F(x)=x^3+5 seklinde bir fonksiyonumuz olsun, x=2 iin
F(x)=13 olur. Burada x fonksiyonun parametresi, 13 ise fonksiyonun geri dndrdg degerdir. Simdi de bu
matematiksel ifadeyi kodlarimizla yorumlayalim.
Int x;x=F(2,5)
//buradan da " int f(2,5) " gibi grebiliriz...
Dikkat edersek ikinci satirda, daha nce islemedigimiz bir kod var. Int x, F(2,5) degerine esitlenmistir. Simdi
bir fonksiyonun nasil yazildiginin kalibini ikartabiliriz.
( ) {
}
Buradaki parantezlere ve kme isaretlerine dikkat ediniz. Simdi yukarda yazdigimiz kalibi biraz aalim.
: Fonksiyon her hangi bir tipte deger dndrebilir. Bu bilesen fonksiyonun dndrecegi
degerin tipini ifade eder. (rnegin, int, dounle, float v.s v.s )
: Yapmak istedigimiz islemin adidir. rnegin bir asal sayi fonksiyonu yazacagiz. Burada
yazacagimiz fonksiyonun adini belirtiyoruz. Benim size tavsiyem AsalSayi veya asal_sayi seklinde
kullanmanizdir. Okunabilirlik aisindan size avantaj saglayacaktir.
: Fonksiyonun kullanacaga parametrelerin tipleri ile siralanir. rnegin,FonksiyonAdi(int x, double y) gibi.
: Fonksiyonun kullanacagi tanimlamalar ve kodlardan olusan kisimdir. Nasil biz main(){ kodlar } seklinde kullaniyorsak. Bunu da ona benzetebiliriz. Ama main() i bunlarla karistirmayiniz.
Simdi bu fonksiyon kalibina uygun bir kod yazalim. rnegin, Faktoriyel bulma islemini ele alalim. Biz bir sayinin
Faktryelini nasil bulurduk?
n!=n(n-1)(n-2)...1 Yani, 1 den n e kadar olan sayilarin arpimidir.
long Faktoriyel(int n) {return n*Faktoriyel(n-1);
}
8/14/2019 C++ le Programlamaya Giri
30/43
Evet, burada fonksiyonumuzu tanimladik. Sanirim yukaridaki blokla karsilastirinca, ne kadar kolay oldugunu
sizde grmssnzdr. Simdi bu Faktoriyel fonksiyonumuzu nasil bir programda kullanacagiz? Hemen devamini
yazayim.
long Faktoriyel(int n) {return n*Faktoriyel(n-1);
}void main() {cout
8/14/2019 C++ le Programlamaya Giri
31/43
C++ `n C ye ek olarak getirmi olduu bir zellikte inline fonksiyonlardr. Anlamak iin basit bir rnekle
balayalm. rnein yle bir program yazcaz ki, ar miktarda kare alma ilemi yapmamz gerekecek ve
bunun iin herhangi bir fonksiyon armyor olalm. Bu durumda define komutu ile derleyiciye u ekilde bir
komut veririz:
#define kare(x) x*x
lemin sonunda ; olmamasna dikkat ediniz. Kullanmna gelince de,
y=kare(x);
bu durumda derleyici derleme aamasnda btn kare(x) leri x*x olarak yorumlayacaktr. Burada dikkat
edilmesi gereken yer, #define topla(x,y) x+y ve kullanmda da z=topla(x,y)*topla(x,y); ite ilem srasnn
vermi olduu hatay gryorsunuzdur. Tabi bunu da parantezlerle ayracaz. imdi bunu C++ tam uyarlarsak,
inline kelimesini, bir direktif olarak yada C++ derleyicisine fonksiyonu tek satra koymas nerisi olarak
dnebiliriz. Derleyici bir ok nedenden dolay bunu kabul etmeyebilir. Mesela, Fonksiyon ok uzun olabilir,
Dng ieren bir fonksiyon, deiken tanm ieren bir fonksiyon, kendini aran bir fonksiyon her zaman inline
olmaz.
//kup.cpp//Kupun hacmini bulma#include
//inline fonksiyonumuz//------------------inline double kup( const double x){
return x * x * x;
}//---------------------
Fonksiyon Yklemesi ve Prototipleri
4. Fonksiyon Yklemesi ve Prototipleri
imdi C++ n getirmi olduu baka bir zellikten daha bahsedeceiz. Ayn isimli fonksiyonlarn farkl ilemler
yapabilmesi. Ayn ekilde arlacaklardr, fakat derleyici bunlarn farkl fonksiyonlar olduunu anlayacaktr. Tabibunun artlar var. Fonksiyonlarn tipleri yada bunlarn sralar farkl olmaldr. Fonksiyonlarn banda kalbn
tanmn yaparken, parametre listesinden bahsetmitik. Bu parametreler belli deerler dndrrler, ite
derleyicide bu dndrd deerlere yani imzalarna gre bunlarn farkl fonksiyonlar olduunu anlayacaktr.
Tabi bunlarn sralar da farkl fonksiyonlar gibi gzkmelerini salayacaktr. Hemen olay anlamak iin rnek
verelim.
double Ortalama(int *dizi, int uzunluk){//kodlar}double Ortalama(double*dizi, int uzunluk){//kodlar}
Grld gibi bu iki fonksiyon da bir birinden farkldr. Her ne kadar isimleri ayn olsa da...
http://www.mutasyon.net/ders_yazdir.asp?id=102&metadata=18/14/2019 C++ le Programlamaya Giri
32/43
Fonksiyon tanmlamasnn fonksiyon kullanlmadan nce yaplm olmas gerekmektedir. Fonksiyonlarmz
header bal altndan arabiliriz. Mesela ben daha nce bir Faktoriyel fonksiyonu yazip bunu Fakt.h olarak
saklyorum. Programm yazarken #include diyerek bunu aryorum ve programda yazdm "5'in
faktoriyelini al" dediim zaman direk Fakt.h taki fonksiyonda ilemi yapp ald deeri programa verir. Mmkn
olduunda C++ n kendi ktphanelerindeki hazr fonksiyonlar kullanmaya alacaz. Var olan bir fonksiyonu
yeniden yazmann pek bir anlam olmaz. leride ktphanelerdeki fonksiyonlar da mmkn olduunca
greceiz.
Fonksiyonlar Referans ile arma
5. Fonksiyonlar Referans ile arma
Daha nceki rneklerimizde fonksiyona parametre olarak geilen bir deer olarak armtk. imdi ise onu
referanslar ile aracaz. Bunu ok uzatmadan direk rnek zerinde anlatalm.
//referans.cpp//fonksiyonlarda referans
#include
void deneme(int &x, int &y);
int main(){int x,y;coutx>>y;
cout
8/14/2019 C++ le Programlamaya Giri
33/43
ncelikle void tipinden bahsedelim, aslnda buna tam olarak tip de diyemeyiz. Bir nevi "tipimsi" olarak
adlandrabiliriz. Daha nce ou programmzda void i kullandk. Fakat ne ie yaradndan pek bahsetmemitik.
Derleyici genelde void i bir tipe ait bir deer olarak grr fakat, void bir tip olmadndan dolay dndrlemez.
Void x: //bu hataldrVoid fonksiyon(); // ayet fonksiyon geri deer dndrmyorsa kullanlr
Void *isaretci; //isaretci nesnesi herhangi bir tipe sahip deilse bunukullanr.
//Burda geri deer dndrmeyen bir fonksiyonu ele alyoruz.void EkranaYaz(void) {
cout
8/14/2019 C++ le Programlamaya Giri
34/43
Diziler, "indisleri olan deikenler" olarak adlandrlrlar. Dier bir deyile, birden fazla tek dze veri tipi
ieren deikenlerdir. Diziler birbirine bitiik bellek gzleri kullanlarak oluturulurlar. Bunu biraz daha aarsak:
farz edelim ki elimizde tane kutu var, birinde yeil kalemler, birinde krmz kalemler ve birinde de mavi
kalemler olsun. Bu kutucuklar 1,2,3 diye adlandrdmz dnelim. Biz diziler ile numarasn bildiimiz
kutucuun iindeki malzemeyi alabileceiz. Daha dorusu numarasn vermi olduumuz kutunun iindeki bilgiyi
bilgisayar okuyacaktr.
Not: For dngs dizi elemanlarna ulamak iin en ok kullanlan yntemdir.
Dizilerin indislerden olutuunu sylemitik. Dier yksek seviyeli dillerle karlatrldnda arasndaki fark ilkelemann indisi daima sfr (0) olmasdr.
for(int i=0; i
8/14/2019 C++ le Programlamaya Giri
35/43
2. Duyuru sirasinda sabit degerler belirtilerek belirlenebilir.
3. Programin alismasi sirasinda indisler kullanilarak her elemana tek tek veri kopyalanabilir.
1. maddenin rnegi#include
const int boyut=5;int GlobalDizi[boyut];
main() {
//"satatic" yerel degiskende tanimlanmasina ragmen tm program boyunca//geerlidir. Ancak sadece tanimlandigi fonksiyon tarafindan erisilebilir.
static int DuraganDizi[boyut];
for(int i=0; i
8/14/2019 C++ le Programlamaya Giri
36/43
int a[10];cout
8/14/2019 C++ le Programlamaya Giri
37/43
sanrm tandk geldi:) Evet imdi burda Cevap[1] i arm olsaydk 'v' veya 'V' deerlerini alcaktk. Tabi
burada index deerinin yani dizideki ilk deerin 0 ile baladn bir daha grdk. imdi bu rnekle alakal olarak
da Diziler ve Fonksiyonlar konusuna geelim....
5. Diziler ve Fonksiyonlar
ncelikle dizilerin fonksiyonlara gnderilmesi ile balayalm. Dizilerde deiken nne adres operatrnn
gelmesine gerek yoktur. Nedeni ise dizi isminin zaten bir adres olmasdr.
nt dizi[10];
bir dizimiz olsun biz bunu diziye bir deer olarak gndereceksek,
Fonksiyon(dizi, 10);
olarak yaparz. Bir diziyi parametre olarak alacaksak bir fonksiyon, o da void fonksiyon( intdizi[], int 10) eklinde olur.
6. Karakter Katarlar Fonksiyonlar ve Karakter Dizileri
te buraya biraz dikkat, kafanz gerekten karabilir. Daha dorusu hangisi hangisiydi diye urar
durursunuz:)
strlen()
Bu fonksiyon bir karakter dizisinin uzunluunu verir ve "string.h" kitaplnda tanmldr. Strlen() fonksiyonu,
szckler (strings) blmnde bahsettiimiz string ifadeleri okumak iin kullanlr. Fakat sondaki "nul
terminator" dier ekliyle '\0' deerini okumaz. rneimizde de olduu gibi "Deneme" ve 'd' 'e' 'n' 'e' 'm' 'e'
szckler ksmnda ki biz buna 7 karakter demitik, "null" ile birliktedir ama strlen() bunu bize 6 diye
okuyacaktr.
int boy = strlen(h);for (int i = 0; i
8/14/2019 C++ le Programlamaya Giri
38/43
strcpy(Dosya2, Dosya1);cout
8/14/2019 C++ le Programlamaya Giri
39/43
eklinde tanmlayabiliriz. Benim size tavsiye ettiim budur. Fakat farkl bir yol olarak da (nt *) is1,is2, is3; eklinde de yazlabiliriz. Burda dikkat etmemiz gereken olay ise, int tipinde iaretileri
tanmlarken herhangi bir deikende tanmlarsak (int *) eklinde tek satrda yapmamz hataldr.
(nt *) is1, is2, is3, x=4; //hataint *is1, *is2, *is3, x=4; //doru
Sanrm ne demek istediimi anladnz:).
Daha nce grm olduumuz "&" adres operatrn hatrlayalm, kendisisinden sonra gelen ifadenin adresini
gsterir.
nt x;nt *is1=&x;
x i tanmladk, sonra is1 iaretimize x in adresini atadk. Ksaca is1 in gsterdii adresteki deer diye biliriz:)
#include #include
int main(void){
char *is1="deneme";int index;
for(index=(strlen(is1)-1); index>=0; index--)cout
8/14/2019 C++ le Programlamaya Giri
40/43
Genel tanmmz:new []
new intnew charnew double [10]new float[n]new char[strlen(s) + 1]
new komutu ile yer tahsis etme ilemi yapmaktayz. new int ->1 int'lik yer tahsis edilmitir. imdide tahsis
ettiimiz yerin serbest brakln ele alalm. Bu srada da delete komutu devreye giriyor. Daha dorusu delete
operatr new operatryle tahsis edilmi olan bloklar serbest brakmak iin kullanlr.
Genel tanmmz:Delete[ ] ;
Eer yer ayrma ilemi tek para olarak yaplmsa (keli parantez kullanlmadan yaplmsa) silme ilemi de
keli parantez kullanlmadan yaplmaldr. Bir de una dikkat edelim
Delete x+1; //hataldrDelete (x+1); //dorudur
kullanlacaktr. imdi bu sylediklerimizi aadaki rnek stnde uygulayalm.
//dinamik.cpp//dinamik bellek kavram#include
struct tarih { //struck u daha grmedigimizint ay; //icin su an buraya egilmeyin.int gun;
int yil;};
void main(){int i, *is1, *is2; // i bir sabit ve *is1, *is2 isaretcilerimiz
3. Void areriler
C++ da tip tanmlamalar fazla gl olmadndan bu sorunu iaretileri void * tipi ile tanmlayarak
hallediyoruz. Void tipinde bir iareti deiken tipi ile, adresin bulunduu, ancak henz tipinin belirlenmedii
anlalmaldr. Void i kullanrken dikkat etmemiz gereken kurallardan biri karmza baz kstlamalargetirmesidir. Bunlardan sz edecek olursak; void iaretilerde adres aritmetii ilemlerini derleyici hata olarak
gsterecektir.
void *is1;nt *is2;///s1=is2;s1++;
Burada dikkat etmemiz gereken is1 yani void ile tanmladmz iareti zerinde aritmetik ilem
yaplmayacadr!
4. aretiler ve Diziler
8/14/2019 C++ le Programlamaya Giri
41/43
C++ da aretiler ve diziler arasnda ok yakn bir iliki vardr. Bir dizinin ismi, dizideki ilk elemann adresini
ieren sabit bir deikendi. Bundan diziler blmnde bahsetmitik. imdi iaretiler ile dizileri ilikilendirirsek,
dizilerin adlarnn birer iaretiden olutuunu grm olacaz.
*(a+i)a[i]
Bu sayede bu iki ifadenin ayn olduunu sylemi oluruz. Bir de ok boyutlu dizilere uyarlarsak,
*(*(a+i)+j)a[i][j]
eklini alr.
nt a[100];nt *is1=&a[100];rneimiz;//iareti ve diziler
#include
void KareAl(int *sayi) {*sayi *= *sayi;
}void KareAlDizi(int *is1) {for (int i=0; i
8/14/2019 C++ le Programlamaya Giri
42/43
Biz genellikle iaret edilen fonksiyonlar menlerde ve sralamalarda kullanrz. Aada bir sralama rnei
verilmitir.
//is_ve_fonk.cpp//iaretiler ve fonksiyonlar#include
#include using namespace std;
void YatayYaz(char*);void DikeyYaz(char*);void ismiYaz(char*, void (*Yaz)(char*));
int main(){
char isim[] = "Deneme";ismiYaz(isim,DikeyYaz);ismiYaz(isim,YatayYaz);
6. Fonksiyonlara iareti Parametresi
aretiler ve diziler blmnde yapm olduumuz rnekte,
void KareAl(int *sayi);
eklinde bir fonksiyon tanmladk. Burada *sayi adnda bir iaretiyi parametre olarak fonksiyona gndermi
olduk. Zaten kullanm eklini de rnekte olduu gibi
KareAl(&x);
x in adresini fonksiyona yazmamz yeterli oldu. Bu sayede ek bir iareti tanmlamamza gerek kalmad.
Farkl bir rnek daha verecek olursak:
#include #include using namespace std;
void artan(int is1);void artan2(int *is1);
void artan(int is1){
is1 += 5;}void artan2(int *is1){
*is1 += 5;}int main(){
int i = 0;artan(i);cout
8/14/2019 C++ le Programlamaya Giri
43/43
}
Grlm olduu gibi artan2 adndaki fonkyionumuza int tipindeki *is1 iaretisini parametre olarak verdik ve
main() artan2(&i); eklinde armz yaptk.
!!!En zor ksm atlattk sanrm. Ltfen geri dnp rnekleri yeniden gzden geirirseniz sizin iin yararl
olacaktr. Bir program yazana kadar sizi brakmayacam:) !!!