Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.

Benzer bir sunumlar


... konulu sunumlar: "BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği."— Sunum transkripti:

1 BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği

2 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.

3 Dizi Tanımlamaları C dilinde dizi tanımlamak için değişken isminden sonra [ ile ] karakterleri arasında dizinin boyutu verilir: int sayilar[10]; // Tamsayı dizisi char isim[10]; // Karakter dizisi C dilinde dizinin boyutu tanımlama anında belirlenir ve sonradan değiştirilemez (C# dilinde değiştirilebilir). Karakter dizisi string olarak ta bilinir (C#'ta ayrıca string veri tipi de vardır, C'de yoktur).

4 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 hatalı bir sonuç üretebilir (çünkü 11. eleman için işletim sistemi tarafından bir yer ayrılmamıştı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.

5 1-10 arasındaki sayıların karesini bir diziye kopyalayan ve ekranda gösteren program #include main(){ int i, a[10]; for (i = 0; i < 10; i++) { a[i] = (i+1)*(i+1); printf("%d\n", a[i]); }  i değişkeni ile a dizisi aynı veri tipinde oldukları için aynı satırda tanımlanabilir.  a dizisi daha küçük boyutta tanımlansa bile program hatasız derlenir ama doğru çalışmayabilir. Bu program dizi kullanmadan yapılabilir miydi? EVET

6 Girilen 10 tane tamsayıdan en büyüğünü bularak ekranda gösteren program main() { int i, enBuyuk, sayilar[10]; for (i = 0; i < 10; i++) { printf("%d. sayiyi giriniz : ", i+1); scanf("%d", &sayilar[i]); } enBuyuk = sayilar[0]; for (i = 1; i < 10; i++) if (sayilar[i] > enBuyuk) enBuyuk = sayilar[i]; printf("En buyuk sayi = %d", enBuyuk); } Tek döngü ile yapılabilir miydi? EVET Dizi kullanmadan yapılabilir miydi? EVET (geçen hafta yaptık) 1 <= i-1 i NOT: Eğer i değişkeni üstteki for döngüsünde tanımlanırsa (for (int i=0; i<10; i++)), bu değişken sadece o blok içinde geçerli olacağından, alttaki için ayrıca tanımlanmalıdır.

7 Girilen 10 tane tamsayıyı girilme sırasının tersinde ekranda gösteren program main() { int i, sayilar[10]; for (i = 0; i < 10; i++) { printf("%d. sayiyi giriniz : ", i+1); scanf("%d", &sayilar[i]); } for (i = 9; i >= 0; i--) printf("%d\n", sayilar[i]); } Tek döngü ile yapılabilir miydi? HAYIR Dizi kullanmadan yapılabilir miydi? HAYIR

8 2. Hafta: Örnek 16 (15 elemanlı bir sayı dizisine bilgi girişi yapılarak elemanların toplamını bulma) Başla toplam Dur dizi(i) i,1,15,1 i toplam=toplam+dizi(i) main() { int i, toplam, dizi[15]; for (i = 0; i <= 14; i++) { printf("%d. eleman : ", i+1); scanf("%d", &dizi[i]); toplam += dizi[i]; } printf("%d", toplam); }

9 10 elemanlı iki dizinin eş indisli elemanlarının toplamını gösteren program main() { int dizi1[10], dizi2[10]; for (int i = 0; i < 10; i++) { printf("ilk dizinin %d. elemani : ", i+1); scanf("%d", &dizi1[i]); } for (int i = 0; i < 10; i++) { printf("ikinci dizinin %d. elemani : ", i+1); scanf("%d", &dizi2[i]); } printf("iki dizinin elemanlarinin toplami : \n"); for (int i = 0; i < 10; i++) printf("%d\n", dizi1[i] + dizi2[i]); }

10 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 (iki dizi de 5 elemanlı olur). Önce dizi tanımlanıp sonra elemanlar tek tek girilseydi ( a[0] = 10; a[1] = 25;... ), hem diziye tanımlama anında boyut vermek gerekir, hem de değer atama uzun sürerdi. NOT: Karakter dizileri (string) için char b[] = "Altan"; şeklinde çift tırnak ile atama da bir çok derleyici tarafından geçerli kabul edilir.

11 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: main() { int dizi1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int dizi2[] = { 2, 7, 9, 2, 3, -1, 5, 7, 4, 1 }; printf("iki dizinin elemanlarinin toplami : \n"); for (int i = 0; i < 10; i++) printf("%d\n", dizi1[i] + dizi2[i]); }

12 Çok Boyutlu Diziler [][] ile 2 boyutlu dizi, [][][] ile 3 boyutlu dizi,... tanımlanabilir: int matris[3][3]; char isimler[2][5]; char isimler2[2][2][5]; {{{'A', 'l', 't', 'a', 'n'}, {'A', 'l', 'i', ' ', ' '}}, {{'A', 'h', 'm', 'e', 't'}, {'V', 'e', 'l', 'i', ' '}}} { {'A', 'l', 't', 'a', 'n'}, {'A', 'l', 'i', ' ', ' '} } { {7, 2, 1}, {4, 0, -1}, {5, 9, -4} }

13 3x3 Kare Matris Toplama Programı main(){ int i, j, A[3][3], B[3][3]; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++){ printf("ilk matrisin %d-%d elemani : ", i+1, j+1); scanf("%d", &A[i][j]); } for (i = 0; i < 3; i++) for (j = 0; j < 3; j++){ printf("ikinci matrisin %d-%d elemani : ", i+1, j+1); scanf("%d", &B[i][j]); } printf("iki matrisin toplami :"); for (i = 0; i < 3; i++){ printf("\n"); for (j = 0; j < 3; j++) printf("%8d", A[i][j] + B[i][j]); } Bu for döngüsü için blok başı yapmadık. Bu durumda sadece altındaki for döngüsünü içeren bir dış döngüdür. Bu programdaki iç içe for döngülerinde dıştaki for döngüsü içteki for döngüsünü 3 kere çalıştırır. İçteki for döngüsü de kendi bloğunu 3 kere çalıştırdığına göre o blok içindeki işlemler 9 kere yapılır.

14

15 3x3 Kare Matris Toplama (2) main(){ int i, j, A[3][3], B[3][3]; printf("ilk matrisi giriniz :\n"); for (i = 0; i < 3; i++) scanf("%d %d %d", &A[i][0], &A[i][1], &A[i][2]); printf("ikinci matrisi giriniz :\n"); for (i = 0; i < 3; i++) scanf("%d %d %d", &B[i][0], &B[i][1], &B[i][2]); printf("iki matrisin toplami :"); for (i = 0; i < 3; i++){ printf("\n"); for (j = 0; j < 3; j++) printf("%8d", A[i][j] + B[i][j]); } Bu programda veri girişi için iç içe for döngülerini kullanmadık. Dizinin ikinci boyutu için j değişkeni kullanmak yerine 0, 1, 2 sabit sayılarını yazdık. Bu programda veri girişi de toplam çıktısı gibi 3x3 matris şeklinde görünür.

16 Programın Çıktısı İlk matris girilirken elemanlar arasında SPACE, ikinci matris girilirken ise TAB tuşları kullanıldı. Son printf içinde %8d yerine %-8d kullanıldığında toplam çıktısı da matris girişleri gibi sola hizalı olarak görünür.

17 Ödevler 1.10 elemanlı bir dizinin elemanlarının aritmetik ortalamasını bulan programı yazınız. 2.Matris Çarpımı programı yazınız. a.Matrislerin boyutlarını kullanıcı belirleyecek ve sonrasında değerleri girecektir. b.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. 3.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.

18 Ödevler 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.

19 Ö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.


"BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği." indir ppt

Benzer bir sunumlar


Google Reklamları