Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler

Benzer bir sunumlar


... konulu sunumlar: "BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler"— 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 <stdio.h> 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?

8 toplam=toplam+dizi(i)
2. Hafta: Örnek 16 (15 elemanlı bir sayı dizisine bilgi girişi yapılarak elemanların toplamını bulma) Başla 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); i,1,15,1 dizi(i) toplam=toplam+dizi(i) i toplam Dur

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]); } 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]; { {7, 2, 1}, {4, 0, -1}, {5, 9, -4} } { {'A', 'l', 't', 'a', 'n'}, {'A', 'l', 'i', ' ', ' '} } {{{'A', 'l', 't', 'a', 'n'}, {'A', 'l', 'i', ' ', ' '}}, {{'A', 'h', 'm', 'e', 't'}, {'V', 'e', 'l', 'i', ' '}}}

13 3x3 Kare Matris Toplama Programı
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. 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]); } 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 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"); 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 10 elemanlı bir dizinin elemanlarının aritmetik ortalamasını hesaplayan programı yazınız. 10 elemanlı bir dizinin varyansını ve standart sapmasını hesaplayan 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. 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.

20 Ödevler 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. NOT: Sizi en çok zorlayacak ödev budur. Matris çarpımı toplamaya göre daha kompleks bir işlem olduğu için iç içe 3 for döngüsü kullanılması gerekecektir.


"BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler" indir ppt

Benzer bir sunumlar


Google Reklamları