C++ İle Programlamaya Giriş

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=1
  • 8/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=1
  • 8/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=1
  • 8/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=1
  • 8/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:) !!!