Diziler
Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler
Dizi 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 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.
Dizi Tanımı veri_tipi dizi_ismi [eleman_sayısı]; Bellek Görüntüsü:
Dizi Tanımı Örnek: int not[4]; int i; not[0]=20; 20 not[2]= not[0]+10; 2030 i=0; not[i]=90; not[++i]=70;
Dizi Elemanlarına Değer Atama int a[3],b; scanf(“%d”, &b); a[2]=b; int a[3]; scanf(“%d”, &a[2]); veya
Dizinin elemanlarına değer verilmesi tanımlama anında yapılabilir. int a[5]= {25, 18; 20; 0,29} Dizilerin bellekte saklanma biçimi: Erişimin kolay olması için dizinin tüm elemanları peşpeşe saklanır.
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ıdan alınan 5 tamsayı değerini bir dizide saklayan ve bu değerlerin ortalamasını bulan bir program yazalım
2-Boyutlu Diziler int not[3][30]; 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.
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
Tanımlama Sırasında Değer Atama
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; }
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;...
Örnek: 10 elemanlı iki dizinin toplamını üçüncü bir diziye yazan program.
#include main() { int A[5], B[5],C[5]; int i; printf("A dizinin elemanlarini giriniz"); for(i=0;i<5;i++) { printf("A[%d]=", i); scanf ("%d",&A[i]); } printf("B dizinin elemanlarini giriniz"); for(i=0;i<5;i++) { printf("B[%d]=", i); scanf ("%d",&B[i]); } /* Iki dizinin elemanlarinin toplanmasi*/ for(i=0;i<5;i++) C[i]=A[i]+B[i]; /* C dizisinin yazdırılması */ printf("C dizisi:\n"); for(i=0;i<5;i++) printf("%d\t",C[i]); }
Örnek: 10 elemanlı A dizisinin en küçük elemanı bulup yazan program.
#include main() { int A[10]; int i,enk; for (i=0;i<10;i++) { printf("A[%d]=", i); scanf("%d",&A[i]); } enk=A[0]; for(i=0;i<10;i++) if (enk>A[i]) enk=A[i]; printf("Dizinin en küçük elemani %d dir", enk); }
Örnek: 10 elemanlı A dizisinin tek elemanlarından B dizisini oluşturan program
#include main() { int A[10],B[10]; int i,j; // A dizisinin elemanlarinin okunmasi for(i=0;i<10;i++) { printf("A[%d]=",i); scanf("%d",&A[i]); } j=0; for(i=0;i<10;i++) { if (A[i]%2==1) { B[j]=A[i]; j++; } // B dizisinin yazdirilmasi for(i=0;i<j;i++) printf("%d,", B[i]); }
Örnek: 25 kişilik bir sınıfın sınav sonuçlarını okuyup ortalamasını bulan program #include main() { int ogr[25]; int i, toplam; float ortalama; /*Ogrenci notlarinin okunmasi*/ for(i=0;i<25;i++) { printf("%d\’inci ögrencinin sinav notunu giriniz", i); scanf ("%d",&ogr[i]); } toplam=0; for(i=0;i<25;i++) toplam=toplam+ogr[i]; ortalama=toplam/25; printf("sinif ortalamasi %f dir",ortalama); }
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); }
// dizilerVeDonguler.c #include int main() { int i=0; int dizi[10]; // diziyi doldur: for(i=0;i<10;i++) { dizi[i] = i * i; } // diziyi yazdir: i=0; while(i<10) { printf("dizi[%d]: %d\n",i,dizi[i]); i++; } return 0; }
// ikiBoyutluDiziOkuYaz #include int main() { int i=0,j=0; int matris[3][4]; // diziye yaz: for(i=0;i<3;i++) { // satirlar icin for(j=0;j<4;j++) { // kolonlar icin matris[i][j]= i + j; } // diziden oku for(i=0;i<3;i++) { // satirlar icin for(j=0;j<4;j++) { // kolonlar icin printf("%d\t",matris[i][j]); } printf("\n\n"); } return 0; }
// dogrusalSiralama.c #include void sirala(); void diziyiYazdir(); int sayilar[15] = {102,97,34,65,324,21,546,2321,5,123,122121,7,13,675,0}; void sirala() { int i=0, j=0, yedek=0; for (i=0;i<15;i++) { for (j=i+1;j<15;j++) { if (sayilar[j]<sayilar[i]) { // yer degistir: yedek=sayilar[i]; sayilar[i]=sayilar[j]; sayilar[j]=yedek; } // if sonu } // for j sonu } // for i sonu } void diziyiYazdir() { int i=0; for(i=0;i<15;i++) { printf("%d, ",sayilar[i]); } printf("\n"); } int main() { int i=0; printf("dizi siralanmadan once:\n"); diziyiYazdir(); printf("\ndizi siralaniyor...\n"); sirala(); printf("\ndizi siralandiktan sonra:\n"); diziyiYazdir(); return 0; }
Sıralama Dizi elemanlarının küçükten büyüğe ve büyükten küçüğe doğru dizilmesi işlemidir. Farklı performansa sahip bir çok yöntem vardır. Buble sort: Bu yöntemde ardışıl iki yöntem karşılaştırılır. Eğer önceki eleman sonrakinden büyük ise elemanlar yer değiştirilir. Bu şekilde dizi taranır. Eğer herhangi bir değişiklik yapılmış ise işlem tekrar edilir.
Buble sort Başlangıç1. Adım2.Adım3.Adım
Örnek: 10 elemanlı dizinin elemanlarını sıralayan program #include main() { int a[10]; int i,j,temp; /*dizi elemanlarinin okunmasi*/ for(i=0;i<10;i++) { printf("dizinin %d\’inci elemanini giriniz",i); scanf ("%d",&a[i]); } for(i=0;i<10;i++) for (j=i+1;j<10;j++) if(a[i] >a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } for(i=0;i<10;i++) printf("%d, ",a[i]); }
Örnek: A ve B matrislerini toplayan program. #include main() { int A[3][3]={ 1,2,3,4, 5, 6, 7, 8, 9}; int B[3][3]= {{2, 4, 8},{3,6,9},{4,16,64}}; int C[3] [3]; int i, j; for (i=0;i<3;i++) for(j=0;j<3; j++) C[i][j]=A[i][j]+B[i][j]; // C matrisinin yazdirilmasi for (i=0;i<3;i++) { for(j=0;j<3; j++) printf("%d ", C[i][j]); printf("\n"); }
Örnek: A matrisinin içindeki en büyük ve en küçük sayıyı bulan program #include main() { int A[3][3]; int enb; int enk; int i, j; // A matrisinin elemanlarinin okunmasi for (i=0;i<3;i++) for(j=0;j<3;j++) { printf("A[%d][%d]=",i,j); scanf("%d",&A[i][j]); } enb=A[0][0]; enk=A[0][0]; //A matrisinin enk ve enk elemanlarinin bulunmasi for (i=0;i<3;i++) for(j=0;j<3; j++) {if (enb<A[i][j]) enb=A[i][j]; if (enk>A[i][j]) enk=A[i][j]; } printf("Dizinin en kucuk elemani %d en buyuk elemani %d dir",enk, enb); }