Ders 4: Diziler (Arrays( Arrays) barisgokce.com



Benzer belgeler
Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

Programlama Dilleri 3

C# ÖRNEK UYGULAMALAR

Nesne Tabanlı Programlama

Nesne Tabanlı Programlama

Ders 8: Metotlar. barisgokce.com

static void dizi_24() { Random rnd = new Random(); int [] tutulan=new int[10]; int dogru;

İl İlçe uygulaması. : Seçilen ile ait ilçeleri listeleyen program. //İl değişkeni için kodu aşağıdaki sayfadan kopyalayınız.

HSancak Nesne Tabanlı Programlama I Ders Notları

ALGORİTMA VE PROGRAMLAMA I

elemanlarının gezilmesine yönelik bir örnek sunulmuştur, inceleyiniz.

Diziler (Arrays) Çok Boyutlu Diziler

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

ALGORİTMA VE PROGRAMLAMA I

Özyineleme (Recursion)

GENETİK ALGORİTMA GEZGİN SATICI ÖDEVİ

PROGRAMLAMA DİLLERİ I

Görsel Programlama (Visual Programming)

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Bilgisayar Programcılığı. Ögr. Gör. Cansu AYVAZ GÜVEN

JAVADA DİZİ İŞLEMLERİ

İNTERNET TABANLI PROGRAMLAMA- 3.ders

Diziler İndisli Değişkenler

D İ Z İ L E R A R R A Y S

Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.

BPR152-Algoritma ve Programlama II Uygulama -13

İNTERNET TABANLI PROGRAMLAMA

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

BİL1001 Bilgisayar Bilimlerine Giriş 1

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Dizi ( Array ) ve Dizgi ( String )

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

Dr. Fatih AY Tel: fatihay@fatihay.net

NESNEYE YÖNELİK PROGRAMLAMA

Görsel Programlama 1

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler

YZM 2105 Nesneye Yönelik Programlama

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

ArrayList Uygulamaları

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Operator Aşırı Yükleme (Operator OverLoading)

Visual Basic Uygulamaları-4. Dİ Zİ LER (ARRAYS) ve Nesne Kü meleri

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

Karabük Üniversitesi, Mühendislik Fakültesi... WEB TEKNOLOJİLERİ

PROGRAMLAMA TEMELLERİ DERSİ ÖZETİ

1 JAVASCRIPT NEDİR? 1

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

İNTERNET TABANLI PROGRAMLAMA- 3.ders

C++ Dersi: Nesne Tabanlı Programlama

VISUAL C#.NET. CONSOLE EKRANINA YAZI YAZDIRILMASI (using System Kullanılarak Yapılan Uygulama) CONSOLE DERLENMESİ= Debug / Start Without Debugging

Aşağıdaki programı inceleyip ekrana ne yazacağını söyleyebilir misiniz?

BLM 111 ALGORİTMA VE PROGRAMLAMA I

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

Giriş. ENF102 Jeoloji

İNTERNET TABANLI PROGRAMLAMA

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

YZM 2105 Nesneye Yönelik Programlama

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

2. Dereceden Denklemin Köklerini Bulan Program

T.C. MARMARA ÜNİVERSİTESİ BİLGİSAYAR VE ÖĞRETİM TEKNOLOJİLERİ ÖĞRETMENLİĞİ BÖLÜMÜ EĞİTİM ÖĞRETİM YILI PROGRAMLAMA DERSİ KAPSAMINDA YAPILAN

BİLG Dr. Mustafa T. Babagil 1

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

KRİPTOANALİZ DERSİ FİNAL ÖDEVİ. PSO ile TRANSPOSITION CIPHER ÇÖZÜMÜ

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek

Length: metin uzunluğunu yada diğer bir deyişle dizi elaman sayısını döndürür.

Visual Studio 2010 veya 2013, Sharp Develop 3.2 programlarını kurabilirsiniz.

NESNEYE YÖNELİK PROGRAMLAMA

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

Olimpiyat Soruları. sonuçları tekrar fonksiyonda yerine koyup çıkan tüm sonuçları toplayan program (iterasyon sayısı girilecek)

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

NESNEYE DAYALI PROGRAMLAMA 11. HAFTA UYGULAMA DERSİ

ALGORİTMA VE PROGRAMLAMA II

Lambda İfadeleri (Lambda Expressions)

C++ Dersi: Nesne Tabanlı Programlama

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Dr. Fatih AY Tel: fatihay@fatihay.net

Dizi elemanları yukarıdaki gibi tek tek tanımlanabileceği gibi matematiksel ifadelerdeki diziler gibi de tanımlanabilir.

Programlama Dilleri 1. Ders 4: Diziler

YZM 2116 Veri Yapıları

Matlab da Dizi ve Matrisler. Mustafa Coşar

BİL-341 ALGORİTMALAR BÜYÜK O NOTASYONU AHMET ATAKAN atakanahmet@hotmail.com KIRGIZİSTAN-TÜRKİYE MANAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Prof. Dr. Aybars UĞUR

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

disp VEYA fprintf KOMUTLARIYLA EKRANA MESAJ YAZDIRMA

C Konsol Giriş Çıkış Fonksiyonları

Nesneye Dayalı Programlama

YZM 2116 Veri Yapıları

C# Örnek Uygulamalar I

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Transkript:

Ders 4: Diziler (Arrays( Arrays) Hazırlayan : Öğr. Grv.. Barış GÖKÇE Đletişim im : www.barisgokce barisgokce.com

Diziler Aynı tipteki bir veri gurubunun bir değişken içinde saklanmasıdır. Veriler Hafızada 0 dan başlayarak sıra ile bulunur. C# dilinde dilinde diziler system.array tipindedir. 2

Diziler Bir örnek olarak, haftanın günleri bir boyutlu dizi olarak düşünülebilir. Đlk eleman (0. Eleman), Pazartesi, son eleman da (6. Eleman) Pazar günü olacaktır. Diğer bir örnek, bir ayda bulunan günler, iki boyutlu bir dizi olarak düşünülebilir. Yatayda haftanın günleri bulunurken, düşeyde hafta sayısı olabilir. Bir yıldaki günleri de üç boyutlu bir dizi olarak düşünülebilir. 1. boyut Haftanın günleri, 2. boyut hafta numarası. Üçüncü boyut da aylar olur. 3

Diziler C# da tek boyutlu bir dizi, normal bir değişken gibi tanımlanır, sadece değişken ifadesinden sonra köşeli parantez kullanılır. string[] gunler = new string[7]; gunler[0] = "Pazartesi"; gunler[1] = "Salı"; gunler[2] = "Çarşamba"; gunler[3] = "Perşembe"; gunler[4] = "Cuma"; gunler[5] = "Cumartesi"; gunler[6] = "Pazar"; Veriler dizilere yerleştirilirken 0 dan itibaren başlanarak yerleştirilir ve diziden veriler alınırken 0 dan başlanır. Değişken adının önündeki küme parantezinin içindeki sayılar değişkenin index numarasını verir. 4

Örnek 5

Örnek 6

Dizi değişken tanımlama şekilleri string[] gunler = "Pazartesi","Salı","Çarşama","Perşembe","Cuma","C.tesi","Pazar"; string[] gunler = new string[7]; gunler[0] = "Pazartesi"; gunler[1] = "Salı"; gunler[2] = "Çarşamba"; gunler[3] = "Perşembe"; gunler[4] = "Cuma"; gunler[5] = "Cumartesi"; gunler[6] = "Pazar"; 7

Örnek 8

For döngüsü yerine foreach kullan private void btngoster_click(object sender, EventArgs e) string[] gunler = new string[7]; gunler[0] = "Pazartesi"; gunler[1] = "Salı"; gunler[2] = "Çarşamba"; gunler[3] = "Perşembe"; gunler[4] = "Cuma"; gunler[5] = "Cumartesi"; gunler[6] = "Pazar"; foreach (string i in gunler) lsbgunler.items.add(i); 9

Örnek private void Form1_Load(object sender, EventArgs e) double[] sayilar = 0.15, 0.17, 0.1, 0.3, 0.22, 0.45, 0.54, 0.68, 0.72, 1.1, 3.1; int eleman = sayilar.length; MessageBox.Show("Sayılar dizinde toplam" + eleman.tostring() + " adet eleman vardır"); foreach (double i in sayilar) lsbgunler.items.add(i); 10

Örnek 1 ile 500 arasında rastgele 100 adet tamsayı üretip bir diziye dolduran bir program yazınız. Dizideki bu sayıların en büyük ve en küçük değerlerini bularak ekrana yazdırın. Ayrıca, ortalama değerini de hesaplayarak ekranda gösterin. 11

private void btngoster_click(object sender, EventArgs e) int max, min, ortalama,toplam; Random rastgelesayi = new Random(); int[] dizi = new int[100]; for (int i = 0; i < 100; i++) dizi[i] = rastgelesayi.next(500); max = dizi[0]; min = dizi[0]; toplam = 0; ortalama = 0; for (int i = 0; i < 100; i++) if (max < dizi[i]) max = dizi[i]; if (min > dizi[i]) min = dizi[i]; toplam += dizi[i]; lblmax.text = "Maksimum Sayı: " + max.tostring(); lblmin.text = "Minimum Sayı: " + min.tostring(); ortalama = toplam / 100; lblortalama.text = "100 adet Sayının ortalaması: " + ortalama.tostring(); 12

Örnek Bir önceki örnekte üretilen 100 adet random sayıyı, büyükten küçüğe yada küçükten büyüğe doğru sıralatın ve listbox a ekletin 13

Aşağıdaki kodları, bir önceki örneğin devamına ekleyelim int yedek; for (int i = 0; i < 100; i++) for (int j = 0; j < 100; j++) if (dizi[i] > dizi[j]) yedek = dizi[j]; dizi[j] = dizi[i]; dizi[i] = yedek; lsbsayilar.items.clear(); for (int i = 0; i < 100; i++) lsbsayilar.items.add(dizi[i]); 14

.Length Dizideki Eleman sayısı Belirtilen dizinin eleman sayısını integer (int) olarak verir. private void Form1_Load(object sender, EventArgs e) Random rastgelesayi = new Random(); int[] dizi = new int[50]; for (int i = 0; i < dizi.length; i++) dizi[i] = rastgelesayi.next(100); 15

.Clear Diziyi Temizleme Parametre olarak verilen dizinin, belirtilen indis aralığındaki tüm değerleri 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 değerini alacaktır. Buna karşın String tipindeki elemanlar (boş yazı) değerini alır. 16

Örnek int[] dizi = new int[50]; private void Form1_Load(object sender, EventArgs e) Random rastgelesayi = new Random(); int elemansayisi = dizi.length; int dizininboyutu = dizi.rank; MessageBox.Show("Dizinin Eleman sayisi: " + elemansayisi.tostring()); MessageBox.Show("Dizinin Boyutu: " + dizininboyutu.tostring()); for (int i = 0; i < dizi.length; i++) dizi[i] = rastgelesayi.next(500); // Burada Dizi doldu private void btndiziyibosalt_click(object sender, EventArgs e) Array.Clear(dizi, 0, dizi.length); // Dizi Burada Boşaltıldı Durma noktası ekle ve Dizinin içine Bak 17

Çok Boyutlu Diziler Birden fazla boyutu olan dizilere çok boyutlu diziler denir. Đki tip çok boyutlu dizi vardır. Matris diziler Düzensiz diziler (Jagged) 18

Matris Diziler Adından da anlaşılacağı gibi matris yapıda dizilerdir. Matris diziler 2 veya daha fazla boyutlu olabilirler. Örneğin 3x2 boyutlu bir matris dizisi aşağıdaki gibi tanımlanır. int [,] mdizi =1,2,3,4,5,6; mdizi[0,0] = 1; mdizi[0,1] = 2; mdizi[1,0] = 3; mdizi[1,1] = 4; mdizi[2,0] = 5; mdizi[2,1] = 6; 19

3 veya daha çok boyutlu diziler teoride dilin yapısına uygun olmasına rağmen gerçek hayatta çok fazla kullanılmazlar. 3 ve daha fazla boyutlu dizilerde işlem yapması daha zordur. Mesela 3 boyutlu bir dizi için iç içe 3 tane for döngüsü kullanmak gerekmektedir. Aşağıda 3 boyutlu bir matris dizi tanımlaması örnek olarak verilmiştir. int [,, ] mdizi =1,2,3,4,5,6, 1,2,3,4,5,6; mdizi[0,0,0] = 1; mdizi[0,0,1] = 2; mdizi[0,1,0] = 3; mdizi[0,1,1] = 4; mdizi[0,2,0] = 5; mdizi[0,2,1] = 6; 20 mdizi[1,0,0] = 1; mdizi[1,0,1] = 2; mdizi[1,1,0] = 3; mdizi[1,1,1] = 4; mdizi[1,2,0] = 5; mdizi[1,2,1] = 6;

Düzensiz (Jagged) Diziler Bir dizinin her bir elemanı ayrı bir dizi ise bir dizi içeriyorsa o zaman bu dizilere düzensiz diziler denir. Her bir satırdaki dizi farklı boyut olabileceği için matris dizisi formunda olması gerekmez. Bu sebeple bu dizilere düzensiz (jagged) yada çentikli dizi adı verilir. 21

int[][] dizi = new int[3][]; dizi[0] = new int[5]; dizi[1] = new int[4]; dizi[2] = new int[3]; dizi[3][] 0 1 2 8 4 1 3 1 8 6 7 2 2 4 9 22

Örnek. string [] [] dizi = new string [3] []; dizi[0] = new string [2]; dizi[1] = new string [3]; dizi[2] = new string [1]; dizi[1] [2] = çentikli"; 23

Buradan da anlaşılacağı gibi düzensiz dizilerin matris dizilerden farkı, sütun sayısının sabit olmamasıdır. Diziler konusunu bir defada anlamak elbette zordur. Özellikle düzensiz dizileri anlamak için çok fazla örnek yapmak gerekir. 24

Örnek private void Form1_Load(object sender, EventArgs e) int[][] dizi = new int[3][]; dizi[0] = new int[5]; dizi[1] = new int[3]; dizi[2] = new int[2]; 25 for (int i = 0; i < dizi.length; i++) for (int j = 0; j < dizi[i].length; j++) dizi[i][j] = 1*( i + j); foreach (int[] sayi in dizi) foreach (int deger in sayi) lblsonuc.text += deger.tostring()+ " ";

Dizi Đşlemleri Dizi işlemleri, programlarda çok sık kullanılan programlama öğelerindendir. IndexOf() LastIndexOf() Sort() Reverse() Array sınıfı yardımıyla kullanılırlar. 26

IndexOf() - LastIndexOf() IndexOf() : Aramayı baştan başlatır ve aranan elemanın kaçıncı sırada olduğunu değer olarak döndürür. LastIndexOf() : Aramayı sondan başlatarak aranan elemanın baştan kaçıncı sırada olduğunu değer olarak döndürür. Eğer aranan eleman bulunamazsa -1 değeri döndürülür. 27

Örnek private void Form1_Load(object sender, EventArgs e) int[] dizi = 1, 3, 5, 7, 9, 11, 1, 3, 5, 7, 9,11 ; MessageBox.Show(Array.IndexOf(dizi,1).ToString()); Sonuç : 0 dır. Arama sol baştan itibaren başlamıştır. Yer numarası ise baştan 0. sıradadır private void Form1_Load(object sender, EventArgs e) int[] dizi = 1, 3, 5, 7, 9, 11, 1, 3, 5, 7, 9,11 ; MessageBox.Show(Array.LastIndexOf(dizi,1).ToString()); 28 Sonuç : 6 dır. Arama sağdan sola yani sondan başa doğrudur. Ancak yer bildirimini baştan baştan itibaren başlamıştır yeri ise 0 dan itibaren 6. sıradadır.

Array.Sort() Dizinin elemanlarını küçükten büyüğe doğru sıralar. private void Form1_Load(object sender, EventArgs e) int[] dizi = 1, 3, 5, 7, 9, 11, 1, 3, 5, 7, 9,11 ; for (int i = 0; i < dizi.length; i++) lblsonuc1.text += dizi[i].tostring() + " - "; Array.Sort(dizi); // lblsonuc2 de dizinin sıralandığını görüyoruz for (int i = 0; i < dizi.length; i++) lblsonuc2.text += dizi[i].tostring() + " - "; 29

Array.Reverse() Dizinin eleman sırasını ters çevirir. private void Form1_Load(object sender, EventArgs e) int[] dizi = 1, 3, 5, 7, 9, 11, 1, 3, 5, 7, 9,11 ; for (int i = 0; i < dizi.length; i++) lblsonuc1.text += dizi[i].tostring() + " - "; 30 Array.Sort(dizi); Array.Reverse(dizi); // lblsonuc2 de dizinin ters sıralandığını görüyoruz for (int i = 0; i < dizi.length; i++) lblsonuc2.text += dizi[i].tostring() + " - ";

ArrayList Klasik dizilerle çalışırken karşılaşabileceğimiz temel sorunlar şunlardır. Dizilerin sınırları sabittir. int[] dizi = new int[60]; Dizilerin tüm elemanları aynı türden olmalıdır. Örn. Hepsi int Kullanmadığımız dizi elemanlarından dolayı bellek alanları gereksiz yere işgal edilmektedir. Örneğin sayısını bilemediğimiz bir dizinin eleman sayısını 500 olarak belirlediğimizi varsayalım. Çalışma zamanında dizimizin sadece 10 elamanını kullandığımız durumda diğer 490 elemanlık bellek alanı boş olarak kalır. Öte yandan dizimizde tutmak istediğimiz değişkenlerin sayısı 501 bir olduğu bir durumda "IndexOutOfRangeException" istisnai durumu ortaya çıkar ve program bu hatadan dolayı sonlanır. ArrayList sınırları dinamik olarak değişebilen diziler olarak tanımlanır. Bu veri yapısı.net sınıf kütüphanesinin System.Collections isim alanında bulunur. 31

Örnek private void Form1_Load(object sender, EventArgs e) ArrayList DiziListesi = new ArrayList(); // DiziListesi isimli ArrayList nesnesi oluşturuyoruz. // DiziListesi nesnemize sırası ile 5, 8, 1, 17 ve 20 değerlerini DiziListesi.Add(5);// Add metodu ile ekleyelim. DiziListesi.Add(8); DiziListesi.Add(1); DiziListesi.Add(17); DiziListesi.Add(20); foreach (object eleman in DiziListesi) // DiziListesi'in Sonuç 1'e yazdıryoruz: lblsonuc1.text += eleman.tostring() + " - "; DiziListesi.Remove(8);// DiziListesi dizimizden 8 ve 20 değerlerini çıkartalım: DiziListesi.Remove(20); DiziListesi.Add(66); // DiziListesi dizimize 66 ve 4 değerlerini ekliyoruz: DiziListesi.Add(4); foreach (object eleman in DiziListesi) // DiziListesi'in Sonuç 2'ye yazdıryoruz: lblsonuc2.text += eleman.tostring() + " - "; 32

ArrayList Metodları ve Özellikleri Add() BinarySearch() Clear() Contains() Insert() Remove() Reverse() Sort() Bir nesneyi ArrayList'in sonuna ekler. Sıralanmış bir ArrayList içinde bir nesneyi Binary search algoritması kullanarak arar. ArrayList'in tüm elemanlarını siler. Sıfırlar. Herhangi bir nesnenin ArrayList'in elemanı olup olmadığını kontrol eder. Dizinin sonuna değilde istediğimiz bir yerine indeksini belirterek eklememizi sağlar. Herhangi bir elemanı diziden siler. Diziyi ters çevirir. Diziyi sıralar. Diğer metodlar için lütfen aşağıdaki linki kullanın http://msdn.microsoft.com/enus/library/system.collections.arraylist_methods.aspx 33

Örnek Personel adlarını tutacak bir ArrayList tanımlayınız. Form a bir textbox ekleyerek adları girin. Girilen bu adlar bir ArrayList te tutulmalı. Listeyi ve Eleman sayısını Label a yazdırın Listeden adı textbox a girilen isimi silin. Listeyi harf sırasına göre sıralatın. Listeyi harf sırasına göre tersten sıralatın. 34

Form Ekranı 1 2 3 4 35