1 / 41

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 4 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 4 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal). Diziler (Arrays). Diziler (arrays), ayn ı veri tipine sahip birden fazla veriyi b ü nyelerinde saklayan veri yap ı lar ı d ı r . (Data Structures)

Télécharger la présentation

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 4 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BM-104 Nesneye Yönelik Programlama Bahar 2013 (4. Sunu) (Yrd. Doç. Dr. Deniz Dal)

  2. Diziler (Arrays) • Diziler (arrays),aynıveritipinesahipbirdenfazlaveriyi bünyelerindesaklayanveri yapılarıdır. (Data Structures) • Değişkenler içerisinde yalnız bir tek bilgi depolarken dizileri kullanarak aynı türden birden fazla bilgiyi saklayabiliriz. • Programımız içerisinde kullanacağımız 100 adet tamsayıyı 100 farklı değişken içinde saklamak yerine bu amaçla içinde 100 tamsayı saklı bir dizi kullanmak daha mantıklıdır.

  3. Diziler (Arrays) • C++’ta dizilerstatikveri yapılarıdır. Yani program işletilmedenöncedepolayacaklarıbilgimiktarıbelirlidirveişletilmeesnasındabumiktar hiçbirşekilde değiştirilemez. Dahasonrakiderslerimizde göreceğimizbazıveri yapılarının (örneğin list, queue ve stack) işletilmeesnasında (dinamik)kapasiteleri büyüyebilirveya küçülebilir.

  4. Diziler (Arrays) • Birdizininelemanlarının hepsiaynıveritipinesahiptirvebellekteardışılolarak sıralanırlar. • Birdizininelemanlarınaindis (index)ileulaşılır. • İndis: • Belirlibirdizielemanınaulaşmakamacıylapozisyonnumarasıolarakkullanılır. • Köşeliparantezler“[ ]” içerisine yazılır. • Dizinin ilk elemanının indis değeridaima sıfırdır.!!!!!!! • Örneğin (a=5veb=6 değerleriiçin) • c[a+b]+=2; deyimi • c[11] dizielemanının değerine 2 ekler.

  5. “c” dizinin adıdır. • “c” dizisi 12 elemana sahiptir. ( c[0], c[1], … c[11] ) • “c[0]” `ın (yani dizinin ilk elemanının) değeri -45 tir.

  6. !!! Dikkat !!! C++’tadizilerinindisnumaralarısıfırdanbaşladığıiçin, c[7]ilebudizininyedincielemanıfarklışeyleriifadeeder. c[7] normaldedizininsekizincielemanıdır.

  7. Dizilerin Deklare Edilmesi • Dizininboyutunuvedizielemanlarının veritipiniprogramcıbelirler. • Örnek: • int c[12]; deyimic adındaveiçinde 12 adet integersaklayanbirdizi tanımlar. • Birdizininboyutu sıfırdan büyük bir integer değere sahip olmalıdır.

  8. Döngü ile Dizi Elemanlarına İlk Değer Atama • Diziyiboyutuvesaklayacağıveri tipi iledeklare et. • Herhangibir döngü yapısıkullanarak herbirdizielemanınabir ilk değerata. (Mesela, çok yaygın biruygulamaolarak, başlangıçta tüm dizielemanlarına sıfır değeriatanabilir.)

  9. cout<<"Eleman"<<setw(13)<<"Deger"<< endl;//Varsayılan OlarakSağa Dayalı cout <<"Eleman"<<right<<setw(13)<<"Deger"<<endl;//Sağa Dayalı cout<<"Eleman"<<left<<setw(13)<<"Deger"<<endl;//SolaDayalı

  10. İlk Değer Atama Listesi ile Dizi Oluşturma • Birdizi hem deklare edilebilirve hem de aynıanda ilk değeratamalistesi(initializer list) yardımıyladizielemanlarına ilk değerleriatanabilir. • Dizielemanlarıparantezleriçerisine (“{ }”) yazılan ilk değeratamalistesindeki değerlerleatanırlarvebuelemanlarbirbirlerindenvirgül ileayrılırlar. • Örnek: • int n[]={10, 20, 30, 40, 50}; • Dizininboyutubu tanımdayazılmadığıiçin derleyicibudizininboyutunu ilk değeratamalistesinineleman sayısınıtemelalarakbelirler. • Yukaridakideyim5 elemanlıbirdizi tanımlar. • Dizielemanlarının indis değerleri sırasıyla: 0, 1, 2, 3, 4 • Dizielemanlarının ilk değerleri sırasıyla: 10, 20, 30, 40, 50

  11. İlk DeğerAtamaListesiileDiziOluşturma • Eğer ilk atama değerlistesindekieleman sayısıdizininboyutundanazisekalanelemanlara sıfır değeriatanır. • Örnek: • int n[10]={0}; • Dizinin ilk elemanının değeriolarak sıfır seçildiği açıkça bellidir. • Kalandokuzelemanın değeriolarakyine sıfır atanacağıdolaylıolarakbilinir. • Eğer ilk değeratamalistesindekieleman sayısıdizininboyutundanfazlaisederleyicihataverir.

  12. Sabit Değişkenler (Constant Variables) • Bu başlık sizlere de ilginç geldi mi? (Oxymoron) • Bu tür değişkenler “const” anahtar kelimesi ile deklare edilirler. • Sadece okunabilir değişkenler (read-only variables) olarak da adlandırılırlar. • Bu tür değişkenlere, deklare edildikleri anda muhakkak bir ilk değer ataması yapılır ve bu değer daha sonra değiştirilemez. • Sabit değişken tanımlamak ve bunu dizilerin boyutu olarak kullanmak genel olarak tercih edilen bir yoldur. Sebep?

  13. Sabit Değişkenler (Constant Variables) • Sabit değişkenleri diğer değişkenlerden ayırt edebilmek için kullanılabilecek bir notasyon: Sabit değişken isimlerinin bütün karakterlerini büyük harfle yaz, değişken ismi birden fazla kelimeden oluşuyorsa kelimeleri birbirlerinden alt çizgilerle ayır. • ÖRNEK:const int DIZI_BOYUTU=12;

  14. Bir Dizinin Elemanlarını Toplayan Program Dizi boyutu olarak 10 yerine 20 kullanılırsa toplam değişkeninin değeri ne olur?

  15. !!! Dikkat !!! • Eğerbirdizininelemanlarıbir döngüiçerisinde değerlendiriliyorsa, diziyeulaşmamızısağlayanindis değeri hiçbirzaman sıfır değerinin altına düşmemelivedaimadizininsahipolduğu eleman sayısından küçük olmalıdır.

  16. Karakter Dizileri Kullanarak String Manipülasyonu • Karakterdizilerikullanarakstringdepolayabilirvemanipüle edebiliriz. • stringlericharveri tipi ile tanımladığımızdizilerdedepolayabiliriz. • Örnek: (Aşağıdakiikikullanım birbirinedenktir.) • char string1[]="Hi"; • char string1[]={'H','i','\0'}; • Örnektekidizi, depolanmasıistenenkarakterlerivedizinin en son elamanıolarak da özelbirkarakterolanvenullkarakteri ('\0')diyeadlandırılan string sonlandırmakarakterini (string-termination character) muhafazaeder.

  17. Karakter Dizileri Kullanarak String Manipülasyonu • cin>>kullanarakklavyedengirilenbirstringibirkarakterdizisininiçineatayabiliriz. • Örnek: cin >> string1; • Fakat“cin>>”iledizininkapasitesindenfazlakarakterinokunabileceğiunutulmamalıdır. Fazladangirilenbilgikaybolacaktır. • nullilesonlandırılmışbir stringitemsiledenbirkarakterdizisicout<<ileekranayazdırılabilir.

  18. BirDiziyiBirFonksiyonunArgümanıOlarakKullanma • Birdiziyibirfonksiyonaargüman olarakiletmekiçin: • Dizinin adıparantezlerolmadankullanılır. • Meseladizimizşu şekildedeklare edilmişolsun. int a[24]; • Bu dizininargüman olarakkullanıldığıfonksiyonise: DiziyiDegistir(a,24); dizinin adıveboyutufonksiyonaargüman olarakiletilir. • Fonksiyondizidenistenenkadarelemanıişleyebilsindiyedizininboyutufonksiyonaikincibirargüman olarakverilir. • Fonksiyoniseşöyle tanımlanır: • voidDiziyiDegistir(int[],int);//Prototip • voidDiziyiDegistir(int b[],intdiziBoyutu){ }//Tanım

  19. Bir Diziyi Bir Fonksiyonun Argümanı Olarak Kullanma • Dizilerfonksiyonargümanıolarakreferansla (call-by-reference)çağrılırlar. • Fonksiyon, dizininbaslangıçadresiniargüman olarakkullanır ve böylecebellektekiyeribilinmişolur. • Çağıran fonksiyon böylelikleçağırdığıfonksiyonaargüman olarakverilenbilgiyimanipuleedebilmehakkını da vermişolur. • Diziler değerile (call-by-value) fonksiyonlaraargüman olarakatansalardı eğer bubirperformanseksikliğineyol açardı. (Fonksiyoniçerisindeişlensindiye dizinin herbirelemanının kopyası alınırdı.)SIKLIKLAçağrılanfonksiyonlardakikapasitesi büyük diziler böylebirsorunasebepolurdu.

  20. Döngü yerine cout<<a; deyimini kullanarak da a dizisinin tüm elemanlarını ekrana yazdırabilir miyiz?

  21. “const” ın Dizilerde Fonksiyon Parametresi Olarak Kullanılması • Dizinin deklarasyonu anında başına const anahtar kelimesi yazılır. • Böylelikle fonksiyonu çağıran, çağrılan fonksiyon içinde dizi elemanlarının modifiye edilmesinin önüne geçer. • Dizi elemanlarının değeri fonksiyon gövdesi içinde sabittir ve değiştirilemez. • Bu özellik sayesinde programcı değerlendirilen bilginin kazara değiştirilmesini engellemiş olur.

  22. !!! Dikkat !!! • Dizilerin fonksiyon parametresi olarak referansla gönderildiğini ve dolayısıyla fonksiyon içinde değiştirilebilecegini unutursak beklemediğimiz sonuçlarla karşılaşırız. Bunun önüne geçebilmek için constı kullanabiliriz.

  23. Dizi İçinde Lineer Arama Yapma (Linear Search) • Diziiçindeherhangibir aranan değerinvarolupolmadığıya da varise eğerhangi indis değerinesahipolduğu bilinmekistenebilir. • LineerArama(Linear Search) • Dizinin herbirelemanıaranandeğer ilekarşılaştırılır. • Aranandeğerindizinin ilk elemanıolmasıihtimali, son elemanıolmasıihtimaliileaynıdır. • Aranandeğerindizi içerisinde olmadığınıgarantiedebilmekiçin sözkonusudeğerdizinin tüm elemanlarıilekarşılaştırılmalıdır. • Halihazırda sıralıolmayan küçük dizilerdearamayaparkenkullanılabilenbirmetoddur. (Sıralı dizilerde İkili Arama (BinarySearch) algoritması kullanılır.)

  24. Çok Boyutlu Diziler (Multidimensional Arrays) • Örneğin 2 boyutludizilerielealalım. (Matrisler) • İçindebilgisaklananbirtablogibi düşünülebilir. Satırlar (rows)vesütunlar (columns)vardır. • Dizininelemanlarınaikiindisleulaşılır. ([ x ][ y ]) • Genellikle m tane satırave n tane sütuna sahipbirdizi “m-by-n array” diyeadlandırılır. • Bu tür diziler 2 den fazlaboyuta da sahipolabilirler.

  25. 3 satır ve 4 sütuna sahip 2 boyutlu bir dizi

  26. İkiBoyutluBirDiziyiDeklare Etmeveİlk DeğerAtama • int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; • b[ 0 ][ 0 ]=1veb[ 0 ][ 1 ]=2 • b[ 1 ][ 0 ]=3 veb[ 1 ][ 1 ]=4 • int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; • b[ 0 ][ 0 ]=1veb[ 0 ][ 1 ]=0 (imaile) • b[ 1 ][ 0 ]=3 veb[ 1 ][ 1 ]=4

  27. Çok Boyutlu Dizileri Fonksiyon Parametresi Olarak Kullanma • Tekboyutludizilerdeolduğu gibi ilk boyutunbüyüklüğübelirtilmez. • Takipedenboyutların büyüklüğüisebelirtilmelidir. Derleyiciancakbuyollaikinci satırageçmekiçin kaçelemanatlayacağınıbilir. • Örneğin : • void DiziyiYazdir(constint a[][3],int boyut); • Bu fonksiyon 2. satırageçebilmekicin ilk satırın 3 elemanınıatlamakzorundadır.

  28. Çok Boyutlu Dizilerde Bilgi Manipülasyonu • Genelde iç içefor döngüleri kullanılır. (Dıştaki forsatırlarda gezinirken içteki for sütunları dolaşır.) • Örnek: • Sadecebir satırın elemanlarınımodifiyeetmekiçin: • for(intsutun=0;sutun<4;sutun++) a[2][sutun]=0; • Örnek: • Dizinin tüm elemanlarınımodifiyeetmekiçin (İç içe 2 for): • toplam=0;for(satir=0;satir<3;satir++) for(sutun=0;sutun<4;sutun++) toplam+=a[satir][sutun];

  29. Bir Dizinin En Küçük ve En Büyük Elemanını Bulma

  30. Bir Dizinin En Küçük ve En Büyük Elemanını Bulma

  31. Seçme Sıralama (SelectionSort)Algoritması Bu algoritmabirincielemandanbaşlayarak son elemanakadar, sıralanmamışDİZİYİparça parça sıralar. Öncedizideki en küçükelemanbulunurvedizinin ilk elemanıileyerideğiştirilir (swap). Sonrakiaşamadadizininsıralanmamışolanparçasıiçindeki en küçükelemanbulunurveikincielemanlayerideğiştirilir. Bu işlem N defatekrarlandığında N elemanlı bir dizi sıralanmışolur. İkinci bir dizi kullanmadan, orijinal dizi üzerindeki manipülasyonlarla sıralama yerinde sıralama (in placesort) olarak adlandırılır.

  32. Bir Sayının Basamaklarına Ayrılması Suretiyle Manipüle Edilmesi

More Related