300 likes | 605 Views
Diziler. 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.
E N D
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şikdeğ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_tipidizi_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; 20 30 i=0; not[i]=90; not[++i]=70; 90 70 30
Dizi Elemanlarına Değer Atama int a[3],b; scanf(“%d”, &b); a[2]=b; veya int a[3]; scanf(“%d”, &a[2]);
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 Örnek:Kullanıcıdan alınan 5 tamsayı değerini bir dizide saklayan ve bu değerlerin ortalamasını bulan bir program yazalım #include <stdio.h> 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); }
2-Boyutlu Diziler 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. veri_tipi dizi_ismi[satır_büyüklüğü][sütun_ büyüklüğü];
2-BoyutluDiziler 2-Boyutlu Dizilere Değer Atama scanf(“%d”, ¬[29][0]); Tanımlama Sırasında Değer Atama satır yönünde 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 <stdio.h> 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ı iki dizinin toplamını üçüncü bir diziye yazan program.
Örnek: 10 elemanlı A dizisinin en küçük elemanı bulup yazan program .
Örnek: 10 elemanlı A dizisinin en küçük elemanı bulup yazan program . #include <stdio.h> 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
Örnek: 10 elemanlı A dizisinin tek elemanlarından B dizisini oluşturan program #include <stdio.h> 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 <stdio.h> 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 <stdio.h> 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 <stdio.h> • 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 <stdio.h> • 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 <stdio.h> • 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ım 2.Adım 3.Adım 34 21 18 18 21 18 21 21 18 25 25 25 25 34 34 34
Örnek: 10 elemanlı dizinin elemanlarını sıralayan program #include <stdio.h> 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 <stdio.h> 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 <stdio.h> 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) ; }