Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 2 Dizi (array) Tanımı Değişkenler aynı anda tek bir değer tutabilen temel değişkenler ve birden fazla değer saklayabilen bileşik değişkenler olmak üzere ikiye ayrılır. Temel değişkenler bellekte tek bir hücreyi tanımlayıp, içlerinde tek bir değeri tutabilirler. Diziler (arrays) ise ardarda sıralanmış bellek hücreleridirler. Diziler bu bağlamda bileşik değişkenlerdir ve bellekte aynı anda birden fazla değerin saklamasını mümkün kılarlar.
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 3 Dizi (array) Tanımı Dizi (array), birbiriyle ilgili aynı türden birden fazla veriyi tek bir isimle tanımlayan veri bütünüdür. –Diziyi oluşturan her hücreye dizi elemanı (array element); her elemanın tuttuğu veriye eleman değeri (array element’s value); her elemanın dizi içindeki yerine ise eleman dizini (element subscript/index) adı verilir. Diziler tek boyutlu, iki boyutlu ya da çok boyutlu olarak sınıflandırılabilir. Diziler fiziksel bellek sahası olarak ardışık sırada bulunmaktadırlar.
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 4 Dizi Tanımı veri_tipi dizi_ismi [eleman_sayısı]; Bellek Görüntüsü:
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 5 Tek boyutlu dizilerin bellek gösterimi: Örnek C dilinde dizilerin indisi 0’dan başlar ve birer artarak eleman sayısının bir eksiğine kadar devam eder (eleman_sayısı-1). 50 elemanlı bir dizinin ilk eleman indisi 0, son eleman indisi ise 49 olmaktadır. Örnek: Dizi tanımlama, dizi elemanları ve eleman dizinleri double a[5]; a a[0]a[1]a[2]a[3]a[4]
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 6 Dizi Elemanlarına Değer Atama Örnek: int not[100]; int i; not[0]=20; 20 not[2]= not[0]+10; 2030 i=0; not[i]=90; not[++i]=70; Dizi eleman dizinleri Dizi elemanına değer atama
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 7 Dizi Elemanlarına Değer Atama int a[3],b; scanf(“%d”, &b); a[2]=b; int a[3]; scanf(“%d”, &a[2]); veya veri_tipi dizi_ismi[eleman_sayisi]={değer1,değer2….} int a[5]={4,7,10}; a 012 Listelenen değer sayısı eleman sayısından az ise; geri kalan elemanlar 0 olarak atanır. int a[5]={0}; Dizinin bütün elemanlarını sıfıra eşitler. 34 int a[100], i; for(i=0; i<100; i++) scanf(“%d”, &a[i]; Dizi tanımından sonra değer atama Dizi tanımlarken değer atama int a[100], i; for(i=0; i<100; i++) a[i]=0;
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 8 Dizi Elemanlarına Değer Atama #include int main(void) {int a[5]; int i,toplam; double orta; /*Kullanici degerlerinin dizide saklanmasi*/ printf(“Bes tamsayi giriniz:”); for(i=0;i<5;++i) scanf(“%d”,&a[i]); /*Toplam ve ortalamanin bulunmasi*/ toplam=0; for(i=0;i<5;++i) toplam=toplam+a[i]; orta= toplam/5.0; printf(“Ortalama=%5.2f”,orta); return (0); } Örnek: Kullanıcı tarafından girilen 5 tamsayı değerini bir dizide saklayan ve bu değerlerin ortalamasını bulan bir program yazalım.
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 9 Tek botutlu diziler: Örnek Girilen sayıları tersten yazdırma: Örnek çıktı 10 sayi giriniz: Tersten yazilisi: /* Bir seri sayiyi tersten yazdirma */ #include #define N 10 int main(void) { int a[N], i; printf(" %d sayı giriniz: ", N); for (i = 0; i < N; i++) scanf("%d", &a[i]); printf("Tersten yazilisi:"); for (i = N - 1; i >= 0; i--) printf(" %d", a[i]); printf("\n"); return 0; }
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 10 2-Boyutlu Diziler int not[30][3]; veri_tipi dizi_ismi[satır_büyüklüğü][sütun_ büyüklüğü]; Her elemanı bir boyutlu dizi olan yapılara ise çok boyutlu diziler denir. Bu bölümde matris veya tablo olarak da bilinen 2-boyutlu dizilere değineceğiz.
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 11 2-Boyutlu dizilerin bellek gösterimi: Örnek
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 12 not[1][1]=90; scanf(“%d”, ¬[29][0]); Tanımlama Sırasında Değer Atama satır yönünde atama 2-Boyutlu Dizilere Değer Atama 2-Boyutlu Diziler
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 13 2-Boyutlu Diziler Tanımlama Sırasında Değer Atama int b[4][3] = {15, 30, 39, 23};
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 14 2-Boyutlu Diziler Tanımlama Sonrasında Satır Yönünde Değer Atama int a[30][3]; for(satir=0; satir<30; ++satir) { for (sutun=0;sutun<3; ++sutun) a[satir][sutun]=0; }
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 15 2-Boyutlu Diziler Tanımlama Sonrasında Sütun Yönünde Değer Atama int a[30][3]; for(sutun=0; sutun <3; ++sutun) for (satir=0;satir<30;++satir) a[satir][sutun]=0;...
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 16 Dizilere başlangıç değerleri verilmesi: Örnek
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 17 İndis kullanılarak değer atama: int sayi[3]; printf(“3 adet sayı giriniz: \n”); scanf(“%d %d %d”,&sayi[0], &sayi[1],&sayi[2]); For kullanılarak değer atama: int sayi[3], i; printf(“3 adet sayı giriniz \n”); for(i=0; i<3; i++) scanf(“%d”,&sayi[i]); Tanımlarken değer atama: array boyut verilmeden int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; Dizi elemanlarına değer atama: Örnek
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 18 Aşağıdaki program parçası, okunan 100 adet sayının ortalamasını bulup, ortalamanın üstünde olanları listelemektedir. floatsayi[100], ortalama, toplam=0.0; for(int i=0 ; i<100 ; i++) scanf(“%f”, &sayi[i]); for(i=0; i < 100 ; i++) toplam += sayi[i]; ortalama = toplam/100; for(i=0 ; i < 100 ; i++) if ( sayi[i] > ortalama) printf(“%d\n”, sayi[i]); Örnek: Tek boyutlu dizi
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 19 2-Boyutlu Diziler Örnek: Kullanıcının, 30 kişilik bir sınıftaki her öğrenci için 3’er sınav notu gireceği ve her sınav için sınıf ortalamasının ekranda gösterileceği bir program yazınız. #include int main(void) { int not[30][3]; int i,j,toplam; double orta; /* Kullanicidan notlarin alinmasi*/ for(i=0;i<30;++i) { printf(“%d. ogrenci notlari:”,i+1); for(j=0;j<3;++j) scanf(“%d”, ¬[i][j]); } /*Her sinavin ortalamasinin bulunmasi*/ for(j=0;j<3;++j) { toplam=0; for(i=0;i<30;++i) toplam+=not[i][j]; orta=toplam/30.0; printf(“%d. sinav ortalamasi: %5.2f\n”,j+1,orta); } return (0); }
C DERSİ Programlamaya Giriş Bölüm 8 Diziler 20 2-Boyutlu Diziler: Örnek #define N 10 double a[N][N]; int i, j; for (i = 0; i < N; i++) for (j = 0; j < N; j++) if (i == j) a[i][j] = 1.0; else a[i][j] = 0.0;