• Sonuç bulunamadı

ÜNİTE NESNE TABANLI PROGRAMLAMA I İÇİNDEKİLER. Arş. Gör. Mehmet Cem BÖLEN HEDEFLER DİZİLER

N/A
N/A
Protected

Academic year: 2022

Share "ÜNİTE NESNE TABANLI PROGRAMLAMA I İÇİNDEKİLER. Arş. Gör. Mehmet Cem BÖLEN HEDEFLER DİZİLER"

Copied!
17
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

 

   

ÜNİTE

11

DİZİLER 

İÇ İNDEK İLER

• Dizi Nedir?

• Dizi Tanımlama

• Dizi Kopyalama

• Diziye Eleman Ekleme ve Silme

• Çok Boyutlu Diziler

HEDEFLER

• Bu üniteyi çalıştıktan sonra;

• Dizi yapısını anlayabilecek,

• Dizi tanımlayabilecek,

• Dizi değişkenler üzerinde ekleme ve  silme yapabilecek,

• Tek boyutlu ve çok boyutlu diziler  arasındaki farkları ortaya koyabilecek,

• Programlamada dizilerin ne için  kullanıldığını kavrayabilecek,

• Dizi değişkenlerini kopyalayıp  kullanabileceksiniz.

NESNE TABANLI  PROGRAMLAMA ‐ I  Arş. Gör. Mehmet Cem 

BÖLEN

(2)

GİRİŞ        

 Programlamada  en  sık  ihtiyaç  duyulan  veri  yapılarından  biri  de  dizilerdir. 

Özellikle  aynı  türden  çok  sayıda  verinin  tek  bir  isim  altında  tutulup,  bu  dizi  içerisindeki  tüm  elemanlara  aynı  isimle  ulaşmak  istendiğinde  dizilerin  kullanımı  tercih  edilmektedir.  Örneğin  sevdiğiniz  kitaplardan  ya  da  gittiğiniz  şehirlerden  oluşan koleksiyonunuzu tutmak için dizileri kullanabilirsiniz.  

Dizilerin  sağlamış  olduğu  en  önemli  avantajlar  arasında  verileri  kolaylıkla  manipüle  edilecek  şekilde  organize  etmesi  ve  kolaylıkla  sıralanabilecek  şekilde  düzenlemesi  gösterilmektedir.  Bunun  yanında  dizi  kullanımının  kodun  okunabilirliğini artırması ve bazı kompleks problemlerin çözümünü kolaylaştırması  da sağlamış olduğu diğer avantajlardır. 

Bu  bölümde  C#  programlama  dilinde  diziler  ile  ilgili  temel  işlemlerden  dizi  tanımlama  dizileri  birleştirme,  dizilere  değişken  ekleme  ve  eleman  silme,  diziden  kesit alma, dizileri sıralama, çok boyutlu diziler ve dizi nesneleri incelenecektir. 

DİZİ TANIMLAMA 

Bir  dizi  belirli  sayıda  ve  aynı  türden  verilerden  oluşan,  tek  bir  isim  ile  ulaşılabilen ögeler serisidir. Birçok programlama dilinde mevcut olan dizi veri yapısı,  C# dilinde System.Array isim uzayında (namespace) yer almaktadır. Başlıca kullanım  amacı,  bir  değişken  içerisinde  aynı  türden  birden  fazla  değişkeni  gruplamak  ve  saklamaktır. 

Dizi tanımlanırken öncelikle dizinin eleman sayısı ve dizi değişkeninin veri tipi  belirtilmelidir. Bildirim ve tanımlamanın aynı satırda yapıldığı dizi deklarasyonu için  şu yapı kullanılabilir: 

   

Yukarıdaki yapıda yer alan tip, dizinin temel tipini göstermektedir. Temel tip,  diziyi oluşturan her bir elemanın tipini belirlemektedir. Tipi belirledikten sonra new  anahtar sözcüğü kullanılarak dizi değişkenine bellekte yer ayrılır ve tipin yanında  bulunan köşeli parantezlerin içerisine büyüklük parametresi yazılır. Böylece dizinin  tutacağı eleman sayısı belirlenir ve dizi değişkenine dinamik olarak bellek alanı  ayrılır. 

 Aşağıdaki kod örneğinde 5 elemanlı int tipinde ve ornekdizi adında bir dizi  değişken tanımlanmıştır. 

  Bir dizinin tüm  elemanları aynı tiptetir. 

tip[] dizi adı = new tip[büyüklük]  

(3)

 

Bu örnekte ornekdizi isimli int tipinde bir dizi bildirimi yapılmış ve hafızada  int tipinde 5 elemanı tutabilecek bir alan tanımlanmıştır. 

Dizi deklarasyonu, bildirim ve tanımlama işlemleri ayrı ayrı belirtilerek de  yapılabilir. Bildirim ve tanımlama ayrı satırda yapılmak istenirse şu yol tercih  edilmelidir: 

 

Yukarıdaki örnekte ilk satırda ornekdizi isimli bir değişken bildirimi yapılmış  ancak bu değişken herhangi bir fiziksel nesneyle ilişkilendirilmemiştir. İkinci satırda  new  anahtar  sözcüğü  kullanılıp  bellek  alanı  tahsis  edildikten  sonra  bir  diziye  bağlanmıştır. Bildirimin ve tanımlamanın aynı satırda yapılıp yapılmaması sadece bir  yazım tarzı tercihi olup, gerçekleştirilecek iş açısından bir farklılık yaratmamaktadır. 

Her iki örnekte de görüldüğü üzere bir dizinin kaç elemana sahip olacağı bilgisi  [  ]  operatörü  kullanılarak  belirtilir.  Köşeli  parantez  içerisine  yazılan  sayısal  değer,  dizinin  kaç  elemana  sahip  olacağını  belirtmektedir.  Buna  göre  verilen  örnekte  ornekdizi isimli 5 elemanlı integer türünde bir dizi tanımlanmıştır. 

Dizi  tanımlama  ile  ilgili  olarak  veri  tipi,  dizi  adı  ve  eleman  sayısı  bileşenleri  belirtilmelidir. Şekil 1’de örnek bir dizi tanımında hangi bileşenin nerede yer alacağı  gösterilmektedir. 

   

   

 

        Şekil 11.1. Dizi Tanımlama Bileşenleri 

Verilen  örneklerde  new  anahtar  sözcüğünün  kullanılması  bir  zorunluluk  değildir.  Burada  new  anahtar  sözcüğünün  kullanılması,  temel  veri  türleri  için  varsayılan bir ilk değer atanmasını sağlamaktadır (int için 0 veya bool türü için false  gibi).Bu  yüzden  diziler  new  anahtar  sözcüğü  kullanmadan  aşağıdaki  gibi  de  tanımlanabilir. 

   

Dizinin kaç eleman  içereceği dizi  tanımlanırken ya da  daha sonra belirtilebilir. 

  İndeks numarası 0’dan 

başlar. 

Veri Tipi 

Dizi Adı

Eleman Sayısı 

(4)

Bu örnekte dizi elemanları soldan sağa doğru indeks sırasına göre atanmıştır. 

Bu  tanımlama  ile  C#,  diziye  otomatik  olarak  bellek  alanı  ayırmış  ve  new  operatörünün  kullanılmasına  gerek  kalmamıştır.  Dolayısıyla  eğer  bir  dizi  tanımlandığı anda elemanları atanacaksa bu yöntemi tercih etmek daha mantıklıdır. 

Çünkü tek satırda ve daha az kodla diziye değer atamak mümkündür. 

 Özetle  diziler  programlamada  sıkça  karşılaşılabilen,  çok  sayıda  değişkeni  kolaylıkla yönetmeye imkân veren yapılardır. 

DİZİYE DEĞER ATAMA 

Bir dizi değişkeni oluşturulduktan sonra yapılacak iş bu dizi değişkenine değer  atamaktır.  Bir  dizi  değişkenine  değer  atamak  için  yapılacak  temel  işlem,  dizi  elemanının  indeks  değerinin  köşeli  bir  parantez  içerisinde  yazılması  ve  istenen  değerin atanmasıdır.  

 

Yukarıdaki  örnekte  string  anahtar  kelimesi  kullanılarak  3  elemanlı  bir  dizi  değişkeni  tanımlanmıştır.  Sonrasında []  operatörü  kullanılarak  dizi  elemanlarına  ulaşılmış  ve  elemanlarına  değer  atanmıştır.  Burada  önemli  olan  nokta  dizi  elemanlarına  ulaşılırken  0  indeks  numarasından  başlanarak  değer  atamasının  yapılmasıdır.    Bu  örnekte  dizinin  1.  elemanına  0  indeks  numarasıyla  ulaşılıp  Cem  değeri atanmıştır.  Ardından sırasıyla 1 ve 2 indeks numaraları kullanılarak dizinin 2. 

elemanına Yılmaz ve 3. elemanına da Öğrenci değerinin atandığı görülmektedir. 

Dizilere  değer  atama  tanımlama  sırasında  da  yapılabilir.  Aşağıdaki  örnekte  görüldüğü üzere aday isimli dizi değişkeni tanımlanmış ve değerler küme parantezi  içerisinde verilerek diziye atanmıştır. 

  Dizilere  değer  atanırken  dikkat  edilmesi  gereken  en  önemli  nokta,  dizilerin  sadece  kendi  tipinden  elemanları  kabul  etmesidir.  Örneğin  tipi  int  olarak  tanımlanmış  bir  diziye  string  tipinde  bir  değer  atanamaz  ya  da  bool  tipindeki  bir  diziye  decimal  değer  verilemez. Dikkat  edilmesi  gereken  bir  diğer  nokta  da  dizi  elemanlarına ulaşmak için kullanılan indeks değerinin mutlaka bir tam sayı olması  gerektiğidir. Aksi takdirde yazılan kod hata verir. 

  Dizi elemanlarına  ulaşmak için kullanılan  indeks değeri mutlaka  bir tam sayı olmalıdır.  

(5)

DİZİ KOPYALAMAK 

 Bazı  durumlarda  iki  dizinin  birleştirilmesi  gerekebilir.  Böyle  bir  durumda  çeşitli döngülerden oluşan algoritmalar kullanılarak programcı tarafından bu işlem  yapılabilir.  Ancak  günümüzde  yazılım  geliştirme  ortamlarının  sunmuş  olduğu  kolaylıklar neticesinde geliştiricilerin dizi birleştirme, sıralama veya kesit alma gibi  karışık gözüken işlemleri programlama dilinin yapısında mevcut olan hazır metot ve  fonksiyonları kullanarak gerçekleştirmeleri mümkün hâle gelmiştir. 

C# programlama dilinin sunmuş olduğu Copy(), CopyTo()  ve Clone() metodları  sayesinde  iki  dizi  birleştirilebilir  veya  içerikleri  birbirine  kopyalanabilmektedir.  

CopyTo()  metodu  ile  verilen  bir  başlangıç  dizininden  başlayarak  bir  dizinin  içeriği  diğer  bir  diziye  kopyalanabilir.  Aşağıdaki  kod  örneğinde  CopyTo()  metodu  kullanılarak kaynakdizi isimli dizinin tüm elemanları hedefdizi isimli başka bir diziye  1. indeksten itibaren kopyalanmaktadır. 

 

Yukarıdaki  örnekte  görüldüğü  üzere  CopyTo()  metodu  ilk  parametre  olarak  kopyalama yapılacak hedef diziyi, ikinci parametre olarak da kopyalama işleminin  hedef  dizide  kaçıncı  indeksten  başlayacağının  bilgisini  almaktadır.  Buna  göre  kaynakdizi  isimli  dizi  değişkeni  hedefdizi  isimli  3  elemanlı  int  tipindeki  dizi  değişkenine 0. indeksten başlayarak kopyalanmıştır. 

Bir diziyi başka bir diziye kopyalama amacı ile kullanılan diğer bir yöntem de  Copy() metodur. Array sınıfı altında yer alan bu metot kaynak dizi adı, hedef dizi adı  ve kopyalanacak eleman sayısı parametrelerini kabul eder ve istenen elemanların  bir  diziden  diğerine  kopyalanmasını  sağlar.  Copy()  metodunun  örnek  kullanımı  şu  şekildedir: 

  Örnekte  görüldüğü  üzere  kaynakdizi  isimli  dizi  değişkenin  5  elemanı  bulunmaktadır. Bu 5 eleman hedefdizi isimli değişkene kopyalanmak istemektedir. 

Bunun  için  Array  sınıfı  altında  yer  alan  Copy()  metodu  kullanılmış  ve  parantez  içerisinde nereden (kaynakdizi), nereye (hedefdizi) ve kaç elemanın kopyalanacağı  bilgisini  içeren  parametreler  verilmiştir.  Yukarıdaki  kod  çalıştırıldığında  hedefdizi  isimli dizi değişkeni 5, 7, 9, 11 ve 13 elemanlarına sahip olacaktır. Bir başka ifadeyle  kaynakdizi değişkeninin içeriği hedefdiziye aktarılacaktır. 

  C#’ta dizi kopyalamak 

için Copy, CopyTo ve  Clone metodları 

kullanılabilir. 

(6)

Dizi  elemanlarını  kopyalamanın  diğer  bir  yolu  da  Clone()  metodunu  kullanmaktadır. System.Array sınıfı altında yer alan Clone() metodu tümüyle bir dizi  yaratmak  ve  bir  hareketle  kopyalamak  için  kullanılabilir.  Clone  metodu  object  tipinde  bir  çıktı  döndürdüğü  için,  tip  dönüşümü  yapmak  gerekmektedir.  Aşağıda  Clone() metodunun kullanıldığı bir örnek görülmektedir.  

  Özetle  bazı  durumlarda  bir  diziyi  kopyalamak  ya  da  başka  bir  diziyle  birleştirmek gerekebilir. Bunun için kendi kodumuzu yazmak yerine, C# tarafından  sağlanan yöntemler kullanılarak dizi değerlerini kopyalayabiliriz.  

DİZİYE ELEMAN EKLEME 

Diziler  tanımlanırken  değer  atanabileceğini  “dizi  tanımlama”  konusunda  görmüştük. Fakat bazı durumlarda dizi tanımlandıktan sonra bir döngü içerisinde ya  da  belirli  bir  şart  sağlandıktan  sonra  diziye  eleman  eklemeye  ihtiyaç  duyulabilir. 

Bunun için C#’ta Array sınıfının sunmuş olduğu SetValue metodu kullanabilir. Bunun  için  yapılması  gereken  tek  şey  dizi  değişkeninin  adını  yazdıktan  sonra  SetValue  metodunu çağırmak ve eklenecek elemanın değerini ve indeks değerini yazmaktır. 

Aşağıdaki örnekte bu metodun kullanımı gösterilmektedir. 

 

SetValue() metodu ilk parametre olarak eklenecek elemanın değerini, ikinci  parametre olarak da dizi içerisinde ekleneceği sıra (indeks) numarasını almaktadır. 

Dizilere  eleman  eklemenin  bir  başka  yolu  da  dizi  elemanının  indeks  numarasını  belirterek  =  operatörü  ile  değer  atamasının  yapılmasıdır.  Aşağıdaki  örnekte  SetValue  metodu  kullanılmadan  bir  diziye  nasıl  eleman  ekleneceği  görülmektedir: 

  SetValue() metodu  Array sınıfı altındadır ve 

dizi elemanına değer  atamaya yarar. 

(7)

  

Özetle dizi değişkenlere eleman ekleme için farklı yöntemler bulunsa da, bu  yöntemler arasında ciddi performans ve kullanım mantığı farklılıkları bulunmamakta  ve bu iki yöntem de programcılar tarafından tercih edilmektedir.  

DİZİDEN ELEMAN SİLMEK  

Diziye eleman eklemek gibi diziden eleman silmek de programlama da sıkça  karşılaşılabilen bir durumdur. Diziden eleman silmek için C# Array sınıfının sunmuş  olduğu  Clear()  metodu  kullanılabilir. 3  parametre  kabul  eden  Clear  metodu  kullanmak  için  ilk  parametresine  elemanları  sıfırlanacak  dizi  değişkenini,  ikinci  parametresine içerik silme işleminin başlayacağı elemanı ve 3. Parametresinde de  içeriği silinecek eleman sayısı verilmelidir. Clear() metodu kullanılırken şu genel yapı  kullanılır: 

   

Bu genel yapı kullanılarak aşağıdaki örnekte Clear() metodu kullanılmıştır: 

   Clear  metodunda  ilk  parametre  olarak  dersler  dizisinin  kullanıldığı  görülmektedir. Bunun sebebi dersler isimli dizide işlem yapılacak olmasıdır. Clear()  metodundaki  ikinci  parametre  olan  0,  silme  işleminin  dersler  isimli  dizide  ilk  elemandan  başlayacağını,  üçüncü  parametre  olan  1  ise  1  elemanın  silineceğini  belirtmektedir.    Buna  göre  yukarıdaki  kod  çalıştırıldığında  dersler  dizisinin  ilk  elemanının  değeri  olan  Nesne  Yönelimli  Programlama  silinecektir.  Eğer  üçüncü  parametreyi 1 yerine 3 yapsaydık, dizinin tüm elemanlarının değerleri silinecekti.  

  Clear() metodu ile dizi 

elemanına null değil  varsayılan değeri atanır. 

Varsayılan değer   numerik değerler için 0, 

string değerler için “”,  bool değerler için false 

olarak belirlenmiştir. 

Array.Clear(Dizi Adı, Başlangıç Index, Toplam Silinecek Eleman) 

(8)

Konunun pekişmesi açısından bir örnek daha yapalım. Aşağıda verilen örnekte  rakamlar isimli dizinin 1. elemanından başlayarak 3 elemanının silinmesi istenmiştir.  

 

Örnekteki kodlar çalıştırıldığında rakamlar isimli bir dizi oluşacak ve bu dizinin  elemanlarına sırasıyla 10, 20, 30, 40 ve 50 değerleri atanacaktır. Ancak Clear metodu  çalıştıktan sonra ilk üç eleman olan 10, 20 ve 30 değerlerine sahip elemanlar silinip,  değerleri varsayılan değer olan 0 olacaktır. Dizinin 4 ve 5. elemanlarının değerleri  değişmeyip 40 ve 50 olarak kalacaktır.  

Özetle Clear() metodu, kendisine parametre olarak verilen dizinin, belirtilen  indeks aralığındaki tüm değerlerini temizler. Temizleme işleminde atanan değer, dizi  elemanlarının tiplerine göre değişir. Örneğin int tipinde tanımlı bir dizinin elemanları  temizlenirse 0, string tipindeki bir dizinin elemanları temizlenirse “”(boşluk) değerini  alır. 

DİZİLERİ SIRALAMA 

Bazı durumlarda dizi içeriğini sıralı olarak kullanmak çok önemli olabilir. Dizi  içeriğini sıralamak için programcı kendi yazmış olduğu fonksiyonlar veya genişletme  (extension)  metotları  kullanabileceği  gibi  Array  sınıfının  sunmuş  olduğu  Sort()  metodundan  da  yararlanabilir.  Sort  metodu  tanımlanırken  aşağıdaki  genel  yapı  kullanılır. 

   

Sort()  metodu  sıralama  yapılacak  diziyi  parametre  olarak  alır  ve  dizi  elemanlarını  alfabetik  veya  küçükten  büyüğe  sıralar.  Aşağıdaki  örnekte  Sort()  metodunun kullanımı görülmektedir: 

     

Reverse() metodu  dizinin tamamını ters 

çevirir. 

Array.Sort(Dizi Adı)

(9)

  Örnekte tanımlanan string tipindeki 5 elemanlı dizi, Sort() metodu kullanılarak  sıralanmıştır.  Sonrasında  sıralanan  dizinin  elemanları  bir  döngüye  sokularak  elemanlar  yanyana  bir  değişkene  atılmış  ve  MessageBox  ile  kullanıcıya  gösterilmiştir.  Yukarıdaki  kod  çalıştırıldığında  dizi  elemanlarının  görünümü       Resim 1’ deki gibi olacaktır. 

  Resim 11.1. MessageBox Görünümü 

Eğer örnekteki dizi string yerine int tipinde olsaydı yani sayılardan oluşsaydı  bu  sefer  sıralama  küçükten  büyüğe  doğru  olacaktı.  Çünkü  Sort  metodu  kendisine  verilen dizi değişkeninin elemanlarını küçükten büyüğe doğru sıralamaktadır. Eğer  dizindeki  sıralama  tersine  çevirmek  istenirse  yine  Array  sınıfının  sunmuş  olduğu  Reverse() metodu kullanılabilir. Reverse() metodu da kullanım olarak Sort()  metodu  ile aynı mantıkta çalışmakta ve parametre olarak işlem yapılacak dizi adını almaktır. 

Ancak  Reverse  metodu  alfabetik  ya  da  büyüklük  değerine  göre  sıralama  yapmaz. 

Yapılan  iş  sadece  dizini  terse  çevirmektir. Bir  diğer  ifadeyle  Reverse  metoduyla  dizinin tüm elemanlarının veya belirli indeks aralığından elemanlarının sırası terse  çevrilir. 

 

(10)

ÇOK BOYUTLU DİZİLER 

Şu  ana  kadar  verilen  örnekler  tek  boyutlu  dizilerden  oluşmaktaydı.  Bu  bölümde programlamada sıkça karşılaşılan yapılardan biri olan çok boyutlu diziler  konusuna değinilecektir. 

İki  veya  daha  fazla  boyutu  olan  bir  dizi,  “çok  boyutlu”  olarak  adlandırılmaktadır.  Çok  boyutlu  diziler  arasında  kullanımı  en  çok  tercih  edilen  2  boyutlu olanlardır ve tek boyutlu dizilere benzer bir şekilde tanımlanırlar ancak her  bir elemanı bir dizi şeklindedir. Çok boyutlu bir dizinin her elemanına iki veya daha  fazla indeks kullanılarak erişilir. Çok boyutlu diziler matris ve düzensiz diziler olmak  üzere iki gruba ayrılır. 

MATRİS DİZİLER 

Matris dizilerde veriler matris formatında saklanır ve her satırında eşit sayıda  eleman bulunur. Bellekte tek boyutlu dizilerde olduğu gibi ardışıl olarak sıralanırlar. 

Örnek 2 boyutlu bir Matris dizisi Şekil 11.2’te gösterilen şablona göre tanımlanır.  

   

Şekil 11.2. Matris Dizi Tanımlanması 

Yukarıda  verilen  şablona  göre  3x2  boyutlu  string  tipinde  bir  matris  dizisi  aşağıdaki gibi tanımlanır. 

  Örnekte 2 boyutlu 3 elemanlı bir dizi tanımlanmıştır. Bu şekilde tanımlanan  bir  dizi  değişkeni  3  satır,  3  sütuna  sahip  bir  tablo  gibi  düşünebilir.  Tablo  1.1’de  örnekte verilen dizinin yapısı ve elemanları görsel olarak canlandırılmaktır. 

Tablo 11.1. Matris Dizi Görünümü  dizi [0] [0]  dizi [0] [1] 

dizi [1] [0]  dizi [1] [1] 

dizi [2] [0]  dizi [2] [1] 

       

Tablo  incelendiğinde  [  ][  ]  parantezlerinin  ilkinin  içindeki  indeks  numarası,  hangi satıra erişileceğini belirtir. İkinci parantezin içerisindeki indeks numarası ise,  hangi sutuna erişileceğini belirtir. Buna göre örnekteki dizinin elemanlarının indeks  numaralarına göre dağılımı tablo 11.2’de gösterilmiştir: 

Değişken Tipi [,] dizi adı= {{a,b}, {c,d}} 

(11)

Tablo 11.2. Matris Dizi Elemanları  İlgili Eleman  Dizi Numarası 

Erzurum  dizi[0,0] 

İstanbul  dizi[0,1] 

Ankara  dizi[1,0] 

İzmir  dizi[1,1] 

Adana  dizi[2,0] 

Bursa  dizi[2,0] 

Tablo  11.2.  incelendiğinde  tek  boyutlu  dizilerde  olduğu  gibi  çok  boyutlu  dizilerde  de  ilgili  boyutun  birinci  elemanına  0  indeks  numarasıyla  erişildiği  görülmektedir. Örneğin dizi[0][0] komutu ile dizinin birinci satır ve birinci sütununda  yer alan Erzurum isimli elemana, dizi[1][1] komutu ile İzmir isimli elemana erişilir. 

Kısaca matris dizileri bir tablo olarak düşünürsek, indekslerden biri satırı, diğeri ise  sütunu gösterir. 

DÜZENSİZ DİZİLER 

Bir dizinin her bir elemanı ayrı bir dizi ise veya her bir satırı farklı uzunlukta ise  bu  dizilere  “düzensiz  diziler”  denmektedir.  İç  içe  diziler  şeklinde  de  tanımlanan  düzensiz dizilerin her bir satırı farklı boyutta olabileceği için matris dizi formu gibi  sabit sayılı sutundan oluşan bir yapıya sahip değildir. 

Düzensiz  diziler,  boyutların  her  biri  bir  çift  köşeli  parantez  kullanılarak  tanımlanır. Örnek iki boyutlu düzensiz bir dizi tanımlamak için aşağıdaki genel yapı  kullanılır. 

   

Düzensiz  bir  dizi  tanımlanırken  belirtilen  büyüklük  parametresi,  dizinin  içereceği  toplam  satır  sayısını  gösterir.  Bellekte  satırlar  için  tek  tek  yer  ayrılır  ve  böylece  dizinin  her  bir  satırının  farklı  uzunlukta  olması  sağlanır.  Aşağıda  verilen  örnekte  düzensiz  bir  dizinin  nasıl  tanımlandığı  ve  her  bir  satırına  nasıl  büyüklük  atandığı görülmektedir. 

 

Örneğin  ilk  satırında  ornekdizi  isimli,  tek  boyutlu  3  satırdan  oluşan  bir  dizi  tanımlanmıştır. Bu tanımlanan dizinin her elemanı ise sonraki 3 satırda ayrı birer dizi 

değişken Tipi [ ][ ] dizi adı= new değişken tipi[büyüklük][ ]; 

(12)

olarak  tanımlanmıştır.    Şekil  11.3’da  örnekte  tanımlanan  dizi  görsel  olarak  ifade  edilmiştir. 

          

 

Şekil 11.3. Düzensiz Dizi Elemanları 

Düzensiz dizi tanımlandıktan sonra her bir satırında kaç eleman olacağı her  satırında yeni bir dizi tanımlanarak belirlenir. Dizi elemanlarına ise köşeli parantez  içerisine  indeks  numarası  yazılarak  erişilir.  Örneğin  ornekdizi  isimli  dizinin  1,0  konumundaki  elemanına  25  değeri  atanmak  isteniyorsa  aşağıdaki  kod  cümlesi  yazılmalıdır. 

 

Özetle düzensiz bir dizi elemanına erişmek veya değer atamak için ilk köşeli  paranteze,  elemanın  bulunduğu  satır  sayısının  indeks  numarası,  ikinci  köşeli  paranteze ise erişilmek istenen elemanın indeks numarası yazılmaktadır. Bu noktada  indeks numarasının 0’dan başladığı unutulmamalıdır. 

ornekdizi[0][0]  ornekdizi[0][1]  ornekdizi[0][2]  ornekdizi[0][3] 

ornekdizi[1][0]  ornekdizi[1][1]  ornekdizi[1][2] 

ornekdizi[2][0]  ornekdizi[2][1]  ornekdizi[2][2]  ornekdizi[2][3]  ornekdizi[2][4] 

(13)

   

 

     

Öz et

•Bir dizi belirli sayıda ve aynı türden verilerden oluşan, tek bir isim ile ulaşılabilen  ögeler serisidir. Birçok programlama dilinde mevcut olan dizi veri yapısı, C# dilinde  System.Array isim uzayında (namespace) yer almaktadır. Başlıca kullanım amacı, bir  değişken içerisinde aynı türden birden fazla değişkeni gruplamak ve saklamaktır.

•Dizilere değer atanırken dikkat edilmesi gereken en önemli nokta, dizilerin sadece  kendi türünden elemanları kabul etmesidir. Örneğin tipi int olarak tanımlanmış bir  diziye string tipinde bir değer atanamaz ya da bool tipindeki bir diziye decimal değer  verilemez. 

•C#'ın sunmuş olduğu Copy, CopyTo  ve Clone metodları sayesinde iki dizi  birleştirilebilir veya içerikleri birbirine kopyalanabilmektedir.  CopyTo metodu ile  verilen bir başlangıç dizininden başlayarak bir dizinin içeriği diğer bir diziye  kopyalanabilir.

•Diziye eleman eklemek için SetValue metodu kullanılabilir.

•Diziden eleman silmek için C# Array sınıfının sunmuş olduğu Clear metodu  kullanılabilir.

•Dizi içeriğini sıralamak için programcı kendi yazmış olduğu fonksiyonlar veya  genişletme (extension) metotları kullanabileceği gibi Array sınıfının sunmuş olduğu  Sort metodundan da yararlanılabilir.

•İki veya daha fazla boyutu olan bir dizi, “çok boyutlu” olarak adlandırılmaktadır.

•Çok boyutlu diziler matris ve düzensiz diziler olmak üzere iki gruba ayrılırlar.

•Matris dizilerde veriler matris formatında saklanır ve her satırında eşit sayıda eleman  bulunur

•Bir dizinin her bir elemanı ayrı bir dizi ise veya her bir satırı farklı uzunlukta ise bu  dizilere “düzensiz diziler” denmektedir

(14)

DEĞERLENDİRME SORULARI 

1. C# dilinde diziler hangi sınıftan türetilir? 

a) System.Array  b) System.Data  c) System.IO  d) System.Text  e) System.Drawing 

 

2. Aşağıdakilerden hangisi dizi tanımlanırken kullanılabilen bir deyimdir? 

a) break  b) new  c) create  d) type  e) throw 

 

3. Dizilerle ilgili aşağıdakilerden hangisi yanlıştır? 

a) Matris dizi çok boyutlu bir dizidir. 

b) C#’ta Copy, CopyTo ve Clone metodları ile dizi kopyalama yapılabilir.  

c) String tipinde bir dizi elemanı silinirse varsayılan değeri “”(boşluk) olur.  

d) Dizi ve içerdiği elemanlar farklı türlerde olabilir. 

e) Dizilerin elemanlarına tek bir isim ve indeks numarası ile ulaşılabilir. 

 

4. C#’ta  dizi  elemanını  erişmek  için  kullanılan  indeks  numarası  aşağıdaki  operatörlerden hangisinin içine yazılır? 

a) /  b) =  c) {} 

d) [] 

e) ()   

5. Aşağıdaki metodlardan hangisi C#’ta dizi sıralamak için kullanılır? 

a) Insert()  b) Sort()   

Değerlendirme sorularını  sistemde ilgili ünite  başlığı altında yer alan 

“bölüm sonu testi” 

bölümünde etkileşimli  olarak cevaplayabilirsiniz. 

 

(15)

6. ……….  veriler matris formatında saklanır ve her satırında eşit sayıda eleman  bulunur. 

Cümledeki boş bırakılan yere aşağıdakilerden hangisi getirilmelidir? 

a) Matris dizilerde  b) Düzensiz dizilerde  c) Tek boyutlu dizilerde  d) Üç boyutlu dizilerde  e) İki boyutlu dizilerde 

  

7. Bir dizinin her bir elemanı ayrı bir dizi ise veya her bir satırı farklı uzunlukta ise bu  dizilere ……… denir. 

Cümledeki boş bırakılan yere aşağıdakilerden hangisi getirilmelidir? 

a) matris diziler  b) tek boyutlu diziler  c) çok boyutlu diziler  d) sıralı diziler  e) düzensiz diziler 

 

8. C#’ta  tek  boyutlu  4  elemanlı  ornekdizi  isimli  dizinin  ilk  elemanına  1    değerini  atamak için aşağıdaki kodlardan hangisi kullanılabilir? 

a) ornekdizi(4)(0)=1; 

b) ornekdizi(1) =1; 

c) ornekdizi[0] =1; 

d) ornekdizi[1] =1; 

e) ornekdizi[1][0] =1; 

 

9. C#ta  bir  dizinin  elemanına  değer  atamak  için  aşağıdaki  metotlardan  hangisi  kullanılır? 

a) GetValue()  b) Copy()  c) CopyTo()  d) Clear()  e) SetValue() 

       

(16)

10. C#’ta bir dizinin sıralamasını tersine çevirmek için aşağıdaki metodlardan hangisi  kullanılır? 

a) Sort()  b) Reverse()  c) Clear()  d) SetValue()  e) Clone()   

                                                           

(17)

YARARLANILAN KAYNAKLAR VE BAŞVURULABİLECEK  DİĞER KAYNAKLAR 

ALBAHARI,  Joseph  &  ALBAHARI,  Ben,  (2012),    C#  5.0  in  a  Nutshell  Fifth  Edition,  O’Reilly Media, California. 

ALGAN, Sefer, (2009), Her Yönüyle C#,  Pusula Yayıncılık, İstanbul. 

AKTAŞ, Volkan, (2013), Her Yönüyle C# 5.0, KODLAB, İstanbul. 

CLARK,  Dan,  (2013),  Beginning  C#  Object‐Oriented  Programming  2nd  Edition,  Apress, New York. 

GRIFFITHS, Ian, (2013), Programming C# 5.0, O’Reilly Media, California. 

KIZILÖREN, Tevfik, (2013), Her Yönüyle C, KODLAB, İstanbul. 

SCHILDT, Herbert, (2005), The Complete Reference C#, çev. Duygu Arbatlı Yağcı, Alfa  Basım Yayım Dağıtım, İstanbul. 

SHARP, John, (2009), Microsoft Visual Studio 2008 Step By Step, çev. Ümit Tezcan,  Arkadaş Yayınevi, Ankara.  

SKEET, Jon, (2014), C# in Depth 3rd Edition, Manning Publication Co, New York. 

YANIK,  Memik,  (2009),  Visual  C#  3.0  For  .Net  Framework  3.5  2.Baskı,  Seçkin  Yayıncılık, İstanbul. 

 

 

Referanslar

Benzer Belgeler

Windows formlarına ilişkin sınıflar System. Windows. Forms isim alanında 

programlama dili, 2002 yılında diğer (VisualBasic.NET, Visual c++.NET vb) .NET 

Değişken ya da metoda sadece tanımlandığı sınıfın içinden değil de sınıfın dışından da erişilmek isteniyorsa erişim türü public (genel) olarak

 statik dahili üye sınıf içerisindeki statik bir yordamı çağırmak için ne statik dahili üye sınıfına ne de onu çevreleyen sınıfa ait nesne oluşturmak gerekmez.

 Tüm istisnaları yakalamak (Error, RuntimeException ve diğer Exception türleri) için Throwable istisna tipi kullanılabilir.  Ancak, oluşabilecek istisnalar için bu üç

Özellikler, alanlara erişmek ve bunlara değer atamak için erişimciler olarak da bilinen “get” ve “set”..

Tablo 7.4. ProgressBar kontrolüne ait en çok kullanılan özellikler  Özellik  Açıklama .

Bir anahtar değerin HashTable sınıfı içerisinde daha önceden kullanılıp kullanılmadığını öğrenmek için ContainsKey() metodu kullanılır. •SortedList