DİZİLR GİRİŞ Bu ünitede, akış diyagramlarının yardımıyla birçok veriyi tek bir alanda nasıl saklayabileceğimiz, işleyebileceğimiz ve çağırabileceğimiz konusundaki bilgiler anlatılacaktır. Teknolojinin gün geçtikçe gelişmesi, çoğalan bilgiyi saklama ve bu saklanan bilgiyi de istenilen anda kullanabilecek alanların oluşturulmasına sebep olmuştur. Bir veri yığınındaki bilgiler saklanırken bu verilerin aynı türden olması büyük önem taşımaktadır. Aksi takdirde saklanılan veriler içinde karmaşıklık ortaya çıkacak ve istenilen sonuca ulaşmak mümkün olmayacaktır. Bilgiyi saklamada kullanılan en önemli alanlardan biri de dizilerdir. (Dizi kelimesi İngilizce kaynaklarda ARRAY olarak geçer) Bu ünitede bir boyutlu dizilerden bahsedilecek ve bir sonraki ünitede iki boyutlu diziler üzerinde durulacaktır. Bu ünitede yapılan örnekler Visual Studio 2010 programındaki Visual Basic programlama diliyle çözülmüştür.. BİR BOYUTLU DİZİLR Tek sıradan, yani yalnızca satır veya sütundan oluşan ardışıl veri yığınlarıdır. İçinde aynı tip birden fazla veriyi depolayabilen değişkenlerdir. Bu da diğer değişkenlerden ayırt eden bir özelliktir. "VKTÖR" olarak da adlandırılırlar. elma kivi muz Meyve isimlerinin listelendiği tek sütundan oluşan bir dizi örneği. 10 Kg 35 Kg 23 Kg Aynı tür ölçü birimlerinin listelendiği tek satırdan oluşan bir dizi örneği. 2
DİZİLRİ KULLAIMI Dizilerde indis adı verdiğimiz her elemanın bir numarası vardır. Değişiklik yapmak istediğimiz dizi elemanın indisi kesinlikle belirtilmelidir. leman sayısı girilen bir dizinin elamanlarını atayan programın akış diyagramı ve örnek kod yazılımı: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.ventArgs) andles Button1.Click Olayın Dim As ew Integer gerçekleştiği nesne = Textbox1.text Dizinin eleman sayısı elemanlı dizi değişkeni Dim a() As Integer For i = 1 To 10 a(i) = InputBox("") nd Sub Dizi elemanlarının veri tipi Dizi elemanlarının girildiği döngü 3
DİZİ LMALARIYLA İŞLMLR lemanlarını atadığımız bir dizinin üstünde bir takım işlemler yapmamız gerekebilir. Bunlara; sayısal değerlerinin toplamı, en büyük ifadenin bulunması, elemanlar içinde bir sıralama yapılması gibi örnekler verilebilir. Bu başlıkta, çeşitli örneklerle yapılabilecek işlemler üzerinde duracağız. 10 elemanlı bir dizinin elemanlarını toplayıp sonucunu ekrana yazdıran programın akış diyagramı ve örnek kod yazılımı: I = 1, 10, 1 T=0 I = 1, 10, 1 T=T+ T Dim t As ew Integer Dim a(10) As Integer t = 0 For i = 1 To 10 a(i) = InputBox("") t = t + a(i) Msgbox(t) Sonucun mesajla verilmesi 4
elemanlı bir dizideki tek sayıların çarpımını yapıp sonucunu ekrana yazdıran programın akış diyagramı ve örnek kod yazılımı: C=1. mod 2 = 0 C = C * C For i = 1 To n If a(i) Mod 2 = 0 Then lse c = c * a(i) ListBox1.Items.Add(c) nd If Örnekte görüldüğü gibi dizi elemanları döngü içinde tek tek kontrol edilip çift olan dizi elemanları çarpma işlemine dahil edilmeden tek olan dizi elemanlarının çarpımı yapılacaktır. 5
100 elemanlı bir dizideki elemanlardan en büyüğünü bulup ekrana yazdıran programın akış diyagramı ve örnek kod yazılımı: I = 1, 100, 1 nb = A(1) I = 2, 100, 1 > nb nb = nb nb = a(1) For i = 2 To 100 If a(i) > nb Then nb = a(i) nd If Msgbox(nb) Bir karar verebilmek için elemanları bir değerle karşılaştırmamız gerekir. Bu örnekte de mantıklı olan ilk elemanı en büyük olarak atayıp dizinin sonraki elemanlarıyla sırayla kıyaslamaktır. 6
Örne elemanlı bir dizide 50 den küçük sayıların olup olmadığını ve varsa 50 den küçük olanları ekrana yazdıran programın akış diyagramı ve örnek kod yazılımı: < 50 For i = 1 To n If a(i) < 50 Then ListBox1.Items.Add(a(i)) nd If Örnekte görüldüğü gibi dizi elemanları girildikten sonra dizinin tüm elemanları tek tek kontrol edilp 50 den küçük olan dizi elemanları listbox içinde yazdırılıyor. 85 43 77 50 29 92-15 Yukardaki algoritmaya göre bu dizinin çıktısı: 43-15 29 7
elemanlı bir dizideki elemanları küçükten büyüğe doğru sıralayan programın akış diyagramı ve örnek kod yazılımı: I = 1, -1, 1 J = I+1,, 1 A(J) < TUT = = A(J) A(J) = TUT For i = 1 To n - 1 For j = i + 1 To n If a(j) < a(i) Then tut = a(i) a(i) = a(j) a(j) = tut nd If Yukardaki örnekte iç içe döngülere bakacak olursak dikkat edilmesi gereken nokta dıştaki döngü birinci elamandan başlayıp sondan bir 8
önceki elemana kadar dönmektedir. Son elemanı kıyaslaması hataya yol açar çünkü karşılaştıracağı bir eleman kalmıyor. Burada her bir eleman içteki döngü sayesinde kendinden sonra gelen bütün elemanlarla karşılaştırılır ve işlem şeması içinde yer değiştirme olayı gerçekleştirilir. Dikkat edilmesi gereken bir diğer hususta yer değiştirme olayıdır. TUT diye bir değişken tanımladık ve bu değişken sayesinde yerlerini değiştireceğimiz elemanlardan birinin diğerinin üzerine yazılarak yerini değiştireceğimiz elmanın kaybolmasını önlemiş olduk. Yani yedekleme işlemi gerçekleştirdik. DİZİLRİ BİRLŞTİRM V AYIRMA Bir dizi içindeki elemanlardan belirli şartları sağlayanlar üzerinde bir takım işlemler yapılması istenebilir. Bu işlemleri tek tek uygulamak yerine şartı sağlayan elemanları bir diziye aktarmak ve oluşacak dizinin tüm elemanlarına o işlemi uygulamak daha mantıklı olacaktır. Bu işleme dizileri ayırma adını verebiliriz. Bununla birlikte bazen de farklı diziler üzerinde aynı işlemleri yapmamız gerekebilir. Bu durumda da o dizileri yeni bir dizi üzerinde birleştirip olaylarımızı gerçekleştirmek işimizi kolaylaştıracaktır. Bu işleme de dizileri birleştirme adını verebiliriz. A() B() 7 22 9 5 C() 5 13 22 7 9 5 5 13 9
elemanlı bir A dizisindeki pozitif elemanların iki katını B dizisine negatif elemanların karesini de C dizisine yerleştiren programın akış diyagramı ve örnek kod yazılımı: X = 0, Y = 0 = 0. > 0 Y = Y + 1 C(Y) = ^2 X = X + 1 B(X) = 2* C(Y) B(X) x = 0 y = 0 For i = 1 To If a(i) = 0 Then lseif a(i) > 0 Then x = x + 1 lse y = y + 1 nd If 10
Dim b(x) As Integer Dim c(y) As Integer x = 0 y = 0 For i = 1 To If a(i) = 0 Then lseif a(i) > 0 Then x = x + 1 b(x) = 2 * a(i) ListBox2.Items.Add(b(x)) lse y = y + 1 c(y) = a(i) ^ 2 ListBox3.Items.Add(c(y)) nd If elemanlı A ve B dizilerini çarparak C dizisini oluşturan ve yazdıran programın akış diyagramı ve örnek kod yazılımı: B(I) C(I) = * B(I) C(I) 11
For i = 1 To n a(i) = InputBox(" ") ListBox1.Items.Add(a(i)) For i = 1 To n b(i) = InputBox(" ") ListBox2.Items.Add(b(i)) For i = 1 To n c(i) = a(i) * b(i) ListBox3.Items.Add(c(i)) 12