PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler

Slides:



Advertisements
Benzer bir sunumlar
DİZİLER – I. Kısım YRD.DOÇ.DR. CİHAD DEMİRLİ
Advertisements

STRİNG FONKSİYONLARI.
Diziler.
Bilgisayar Programlama Güz 2011
BPR152 ALGORİTMA VE PROGRAMLAMA - II
String Diziler(Katarlar)
Tanım Birbirleriyle ilişkili ve bitişik iki ya da daha fazla bellek hücresinden oluşan yapı Örnek dizi tanımı: int tamsayiDizi[10]; tamsayiDizi[0] /*ilk.
Diziler.
OOP UYGULAMA 5.
Selçuk Üniversitesi’nin Bilişime Gönül Veren Gençleri
Diziler Dizi, bellekte aynı isim altında toplanmış değişkenler kümesidir. Eğer ki aynı türden veriler grubunu bellekte tutmak gerekirse diziler kullanılır.
Dizi (array) değişkenleri
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Diziler(Arrays).
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 3: Döngüler
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler.
DİZİLER (Arrays) Yrd.Doç.dr. Cİhad demİrlİ
DİZİLER.
Bilgisayar Programlama (Yrd. Doç. Dr. İbrahim ASRİ)
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 9. Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1,
Nesneye Yönelik Programlama
Görsel C# Programlama Güz 2009 (6. Hafta).
C#.NET 5.0 C# .NET 5.0 Eğitimleri Volkan KANAT.
C ile Programlamaya Giriş
Chapter 6: Using Arrays.
Diziler Dizi, bellekte aynı isim altında toplanmış değişkenler kümesidir. Eğer ki aynı türden veriler grubunu bellekte tutmak gerekirse diziler kullanılır.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
BM-103 Programlamaya Giriş Güz 2014 (8. Sunu)
NESNEYE YÖNELİK PROGRAMLAMA
Kalıtım , Sınıf Asli Ergün.
C PROGRAMLAMA DİZİLER (ARRAYS).
JAVA’DA DİZİLER Dr.Galip AYDIN.
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
Bilgisayar Programlama. Tek bir değişken tanımlamak için aşağıdaki gibi bir yazım yeterlidir. int i; Hatırlanacağı gibi bu tarz bir tanımlamada.
Bil 102 Bölüm 6 Diziler.
BM-103 Programlamaya Giriş Güz 2014 (9. Sunu)
DİZİLER Arrays.
MATLAB’ de Programlama
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Random... Rastgele Sayı Atamak...
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Algoritmalar ve Programlama I Ders 8:DİZİ (VEKTÖR) KAVRAMI
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
Sıralama. Sıralama, bir dizideki sayısal elemanların küçükten büyüğe veya büyükten küçüğe, sayısal olmayan bir dizideki elemanların ise A’ dan Z’ ye.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
BİLGİSAYAR PROGRAMLAMA DERSİ 6. DERS NOTU Konu: Matlab’ de Diziler ve Matrisler.
Fonksiyonlar ve Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Sharp 9. hafta - dIZILER.
DİZİLER Bellekte sıralı bir şekilde bulunan ve aynı türden bilgilerin saklandığı veri yapısına dizi (array) denir. Örneğin kullanıcıdan 7 kişinin not ortalamasını.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar
NBP103 Programlama Temelleri Öğr. Gör. Mahmut Kılıçaslan
NBP103 Programlama Temelleri Öğr. Gör. Mahmut Kılıçaslan
İleri Algoritma Analizi
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
YAPISAL PROGRAMLAMA Hafta-7
7. DİZİLER Bir dizi, aynı tipteki elemanların yan yana sıralanışı ile elde edilen bir bilgi kümesidir. Matematikte kullanılan doğal sayılar (1,2,3,..),
NİŞANTAŞI ÜNİVERSİTESİ
Diziler(Arrays).
Sunum transkripti:

PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği

Dizi (Array) Birbiri ile ilişkili verilerin bir sıra halinde kaydedilmesi ve işlenmesi gerektiği durumlarda diziler kullanılır. Dizi içindeki elemanların hepsi aynı veri tipindedir ve bellekte artarda saklanırlar. Diziye eleman ekleme ve dizideki elamanları okuma işlemleri genellikle döngüler kullanılarak yapılır.

Dizi Tanımlama C# dilinde dizi tanımı yapmak için veri türünden sonra [] kullanılır int[] sayilar; Dizinin eleman sayısını belirlemek veya değiştirmek için new komutu kullanılır: sayilar = new int[10]; Eleman sayısı dizi tanımlandığı anda da new komutu kullanılarak belirlenebilir: char[] isim = new char[15]; NOT: C dilinde eleman sayısı dizi tanımlanırken verilir ve sonradan değiştirilemez. Sözdizimi olarak farklılık ise dizi isminde sonra [] kullanılmasıdır: int sayilar[10];

Dizilerde İndis Kullanımı Dizilerin ilk elemanının indisi sıfırdır: Önceki slaytta tanımladığımız sayılar dizisinin son elemanı sayilar[9] olacağı için, eğer sayilar[10]’a değer atanırsa derleme sırasında hata vermez, fakat program çalışırken «IndexOutOfRangeException: Dizin, dizi sınırlarının dışındaydı» yazılı bir hata mesajı görüntülenir ve program sonlandırılır. Dizinin hangi elemanına değer atanacak ise köşeli parantez içinde o elemanın indis değeri yazılmalıdır: sayilar[5] = 1500; isim[3] = 'K'; sayilar dizisinin 6. elemanına 1500, isim dizisinin 4. elemanına da ‘K’ değerleri atanıyor.

1-10 arasındaki sayıların karesini bir diziye kopyalayan ve ekranda gösteren program static void Main(string[] args) { int i; int[] a = new int[10]; for (i = 1; i <= 10; i++) a[i-1] = i * i; Console.WriteLine(a[i-1]); } a dizisi daha küçük boyutta tanımlansa idi yada a[i-1] yerine a[i] kullanılsa idi program hatasız derlenir ama doğru çalışmazdı. Bu program dizi kullanmadan yapılabilir miydi? EVET

Girilen 10 tane tamsayıdan en büyüğünü bularak ekranda gösteren program static void Main(string[] args) { int[] sayilar = new int[10]; int i, enBuyuk; for (i = 0; i < 10; i++) { Console.Write((i + 1) + ". sayıyı giriniz : "); sayilar[i] = Convert.ToInt32(Console.ReadLine()); } enBuyuk = sayilar[0]; for (i = 1; i < 10; i++) if (sayilar[i] > enBuyuk) enBuyuk = sayilar[i]; Console.WriteLine("En büyük sayı = " + enBuyuk); Tek döngü ile yapılabilir miydi? EVET Dizi kullanmadan yapılabilir miydi? EVET (önceki derste yapmıştık) 1 <= i-1 i

Girilen 10 tane tamsayıyı girilme sırasının tersinde ekranda gösteren program static void Main(string[] args) { int[] sayilar = new int[10]; for (int i = 0; i < 10; i++) Console.Write((i + 1) + ". sayıyı giriniz : "); sayilar[i] = Convert.ToInt32(Console.ReadLine()); } for (int i = 9; i >= 0; i--) Console.WriteLine(sayilar[i]); Tek döngü ile yapılabilir miydi? HAYIR Dizi kullanmadan yapılabilir miydi?

toplam=toplam+dizi(i) 15 elemanlı bir sayı dizisine bilgi girişi yapılarak elemanların toplamını bulan program static void Main(string[] args) { int[] dizi = new int[15]; int toplam = 0; for (int i = 0; i < 15; i++) Console.Write((i + 1) + ". eleman: "); dizi[i] = Int32.Parse(Console.ReadLine()); toplam += dizi[i]; } Console.WriteLine("Toplam = " + toplam); AKIŞ ŞEMASI: Başla toplam Dur dizi(i) i,1,15,1 i toplam=toplam+dizi(i)

10 elemanlı iki dizinin eş indisli elemanlarının toplamını gösteren program static void Main(string[] args) { int[] dizi1 = new int[10], dizi2 = new int[10]; for (int i = 0; i < 10; i++) { Console.Write("İlk dizinin " + (i + 1) + ". elemanı : "); dizi1[i] = Convert.ToInt32(Console.ReadLine()); } Console.Write("İkinci dizinin " + (i + 1) + ". elemanı : "); dizi2[i] = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("İki dizinin elemanlarının toplamı : "); for (int i = 0; i < 10; i++) Console.WriteLine(dizi1[i] + dizi2[i]);

Dizilere ilk değer atama Dizi tanımlandığı anda ilk değerler atanabilir: int[] a = { 10, 25, 15, 40, 30 }; char[] b = { 'A', 'l', 't', 'a', 'n' }; Bu şekilde bir tanımlama yapıldığında dizinin boyutu verilen eleman sayısına eşit olacak şekilde belirlenir. Eğer dizi tanımlandıktan sonra elemanlar tek tek girilseydi (a[0] = 10; a[1] = 25; ...), öncesinde new ile boyut vermek gerekecekti.

10 elemanlı iki dizinin eş indisli elemanlarının toplamını gösteren program Daha önce yazdığımız programda kullanıcının 20 tane değer girmesi gerekiyordu. Bu programda ise değerler programcı tarafından veriliyor: static void Main(string[] args) { int[] dizi1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int[] dizi2 = { 2, 7, 9, 2, 3, -1, 5, 7, 4, 1 }; Console.WriteLine("İki dizinin elemanlarının toplamı : "); for (int i = 0; i < 10; i++) Console.WriteLine(dizi1[i] + dizi2[i]); }

foreach döngüsü foreach yalnızca dizilere uygulanabilen bir döngü yapısıdır. Kullanımı şu şekildedir: int[] dizi = { 3, 2, 6, 7 }; foreach (int eleman in dizi) Console.WriteLine(eleman); Yukarıdaki kod dizi adındaki dizinin bütün elemanlarını alt alta ekrana yazdırır. foreach döngüsüyle dizi elemanlarının değerini değiştiremeyiz, sadece ekrana yazdırmak gibi "read-only" işler yapabiliriz.

Çok Boyutlu Diziler [ ile ] arasında 1 virgül ile 2 boyutlu dizi, 2 virgül ile 3 boyutlu dizi, ... tanımlanabilir: int[,] matris = new int[3,3]; char[,] isimler = new char[2,5]; string[,] isimler2 = new string[2,2]; char[,,] isimler2 = new char[2,2,5]; 7 2 1 4 0 -1 5 9 -4 { {7, 2, 1}, {4, 0, -1}, {5, 9, -4} } { {'A', 'l', 't', 'a', 'n'}, {'A', 'l', 'i', ' ', ' '} } { { "Altan", "Ali" }, { "Ahmet", "Veli" } }; {{{'A', 'l', 't', 'a', 'n'}, {'A', 'l', 'i', ' ', ' '}}, {{'A', 'h', 'm', 'e', 't'}, {'V', 'e', 'l', 'i', ' '}}}

3x3 Kare Matris Toplama Programı static void Main(string[] args){ int[,] matris1 = new int[3, 3], matris2 = new int[3, 3]; for (int i = 1; i <= 3; i++) for (int j = 1; j <= 3; j++) { Console.Write("İlk matris " + i + ". satır " + j + ". sütun: "); matris1[i - 1, j - 1] = Convert.ToInt32(Console.ReadLine()); } Console.Write("İkinci matris " + i + ". satır " + j + ". sütun: "); matris2[i - 1, j - 1] = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i <= 2; i++) { for (int j = 0; j <= 2; j++) Console.Write("{0,5}", matris1[i, j] + matris2[i, j]); Console.WriteLine(); Ekrana formatlı yazdırma hakkında bilgi için: hafta3-ödev2-AsalMükemmel.cs

Dizileri kapsayan dizi C dilinde iki boyutlu dizi [][] şeklinde tanımlanır. C# dilinde ise bu kullanım dizilerin dizisi (Jagged Array) anlamına gelir. İçerdiği her dizi aynı sayıda elemana sahip olmayabilir. int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

Diziler ile ilgili Yöntemler: GetLength GetLength yöntemi ile dizinin ilgili boyutundaki eleman sayısı elde edilebilir. Parametre olarak eleman sayısı hesaplanacak olan boyut verilir (ilk boyut sıfırdan başlar): int[,] dizi = {{2, 4, 2}, {7, 10, 4}}; Console.WriteLine(dizi.GetLength(0)); Console.WriteLine(dizi.GetLength(1)); Ekranda önce ilk boyuttaki eleman sayısı yani 2, sonra ikinci boyuttaki eleman sayısı yani 3 yazılır. NOT: Aslında tanımladığımız her dizi Array sınıfı türünden bir nesnedir. Sınıflardan 2 hafta sonra bahsedilecektir. Eğer dizimiz tek boyutlu ise GetLength() yöntemi yerine Length özelliği ile de boyutunu elde edebiliriz.

Diziler ile ilgili Yöntemler: CopyTo CopyTo yöntemi ile dizinin tüm elemanları başka bir diziye kopyalanabilir. Parametre olarak hangi diziye kopyalanacağı ve hangi indisinden başlanacağı verilir: int[] dizi1 = { 1, 2, 3, 4 }; int[] dizi2 = new int[10]; dizi1.CopyTo(dizi2, 3); foreach (int eleman in dizi2) Console.Write(eleman + ","); Ekran Çıktısı: 0,0,0,1,2,3,4,0,0,0,

Array Sınıfı: Copy Array sınıfının Copy yöntemi ile dizinin bazı elemanları başka bir diziye kopyalanabilir. İlk parametre hangi diziden, ikinci parametre hangi diziye, üçüncü parametre kaç eleman: int[] dizi1 = { 1, 2, 3, 4 }; int[] dizi2 = new int[10]; Array.Copy(dizi1, dizi2, 3); foreach (int eleman in dizi2) Console.Write(eleman + ","); Ekran Çıktısı: 1,2,3,0,0,0,0,0,0,0,

Array Sınıfı: Sort ve BinarySearch Dizideki elemanları sıralamak için Sort, sıralı dizide eleman aramak için BinarySearch yöntemleri kullanılabilir. String[] dizi = { "altan", "osman", "hasan", "zehra", "tolga", "ali" }; Array.Sort(dizi); Console.Write(Array.BinarySearch(dizi, "ali")); Yukarıdaki dizi sıralandığında «ali» en başta yer alacağı için BinarySearch bu elemanın dizideki yeri olarak «0» döndürür. Eğer sıralama yapılamadan BinarySearch ile arama yapılırsa «ali» bulunamaz ve «-1» döndürülür. NOT 1: Yalnızca tek boyutlu diziler Sort ile sıralanabilir ve BinarySearch ile aranabilir. NOT 2: Sıralama ve arama algoritmalarını 1 yıl sonra veri yapıları dersinde öğrenecek ve C dili yazacaksınız. Array sınıfındaki bu yöntemler algoritma ile programcıyı uğraştırmadan sıralama ve arama yapılmasını sağlar. https://tr.wikipedia.org/wiki/ikili_arama_algoritması

Ödevler 10 elemanlı bir dizinin elemanlarının aritmetik ortalamasını, varyansını ve standart sapmasını bulan programı yazınız. Matris Çarpımı programı yazınız. Matrislerin boyutlarını kullanıcı belirleyecek ve sonrasında değerleri girecektir. Matrislerin boyutları çarpma işlemine göre uygun olması için ilk matrisin sütun değeri ile ikinci matrisin satır değeri eşit girilmesi sağlanacaktır. Kullanıcının ENTER tuşuna basana kadar klavyeden girdiği her şeyi tersten (sondan başa doğru) gösteren programı yazınız. Varyans dizideki tüm elemanların ortalamadan uzaklıklarının karelerinin ortalamasıdır. Standart sapma varyansın kare köküdür.

Ödevler 4. 100 Adam ve 100 kapımız var. 1. adam 1’in katları olan kapılardan, 2. adam 2’nin katları olan kapılardan, ...., N. Adam N’in katları olan kapılardan, ... , 100. Adam 100’ün katları olan kapılardan geçerek kapıların konumlarını değiştiriyor. (Kapı açıksa kapatıyor, kapalıysa açıyor). En başta bütün kapıların kapalı olduğunu kabul edersek, 100. adam da geçtikten sonra hangi kapıların açık olduğunu bulan programı yazınız.

Ödevler 5. Romalı problemi: Roma’da Kral 21 kişinin öldürülmesine karar veriyor. Cellat fazla yorulmamak için öldürülecek olanları çember biçiminde diziyor. Herkesin eline bir balta veriyor. Öldürme kuralı olarak da 2. Kişi 3. Kişiyi öldürüyor. 5. Kişi 6. Kişiyi öldürüyor. Yani 2 kişi atlayıp 3. kişi öldürülüyor. Bu son iki kişi kalana kadar sürüyor. Son kalan iki kişi serbest bırakılacaktır. Serbest bırakılan kişilerin hangi numaralar olduğunu bulan programı yazınız.