Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Değişkenler isimlendirilirken her bir değişken için bir ad kullanmak zorunludur. Bu ise değişken sayısının çok olması durumunda uygun bir yöntem değildir. Bu durumda benzer özelliklere sahip elemanları bir küme gibi düşünerek bu doğrultuda işlem yapmak daha uygun olacaktır. Belli özelliklere sahip bu elemanların oluşturdukları kümeler dizi (array) olarak adlandırabilir. Diziler, indisli değişkenler kullanılarak adlandırılırlar. Örneğin n elemanlı bir A dizisi için A1, dizinin birinci elemanını ve An, dizinin son elemanını ifade etmektedir. C programlamada, dizi adı herhangi bir geçerli değişken adı olabilir, fakat indis kare parantez( [.. ] ) içine alınmalıdır.
Örneğin 10 elemanlı bir A dizisinin elemanları sırasıyla A[1], A[2], A[3],…, A[10] şeklinde ifade edilir. Dizi, art arda gelen aynı tip verileri saklayan bellek elemanları veya bellek hücreleri olarak tanımlanabilir. Dizi tanımlanırken diziye bir isim verilir. Dizi tanımlandıktan sonra programda bu isimle çağrılır. C/C++ programlama dillerinde dizi bildirimi genel olarak aşağıdaki şekilde yapılır; DiziTipi DiziAdı[Büyüklük]
Örnek olarak 10 adet tam sayıyı tutacak bir A dizisi C/C++’ da aşağıdaki şekilde bildirilebilir; int A[10]; Bir dizi bellekte sabit büyüklükte bir yere yerleşir. Dizi tanımlandıktan sonra program içerisinde dizinin bellekte kapladığı alan miktarında artma veya azalma yapmak mümkün değildir. Örmeğin, 100 elemanlı bir dizi tanımlanırsa, program içerisinde dizinin sadece 10 elemanı kullanılsa bile geri kalan 90 elemanı bellekte yer işgal etmeye devam eder. Bu nedenle diziler tanımlanırken, dizilerde saklanılacak veri miktarı iyi analiz edilmelidir.
Örnek 1: n elemanlı bir sayı dizisinin girişini yapan bir C/C++ programı yazalım ve akış diyagramını çizelim;
#include int i,n; int A[100]; void main(void) {clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=1;i<=n;i++) {printf("dizi elemanı giriniz: "); scanf("%d",&A[i]); printf(" \n"); } getch(); }
Örnek 2: Girilen n elemanlı bir sayı dizisinin en büyük elemanını bulan bir C/C++ programı yazalım ve akış diyagramını çizelim;
#include int i,eb,n; int A[100]; void main(void) {clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=0;i<n;i++) {printf("dizi elemani giriniz: "); scanf("%d",&A[i]); printf(" \n"); } eb=A[0]; for(i=1;i<n;i++) { if(eb<A[i]) eb=A[i]; } printf("en buyuk sayi= %d\n",eb); getch(); }
Örnek 3: Klavyeden okunan bir dizi harfin alfabetik sıraya konulmasını sağlayan ve sonucu ekrana yazan bir bir C/C++ programı ve akış diyagramını Örnek alg.4’ te oluşturduğumuz algoritma mantığına göre oluşturalım. Daha önce oluşturduğumuz algoritmadan bir fark olarak, C’ de döngü yapılarını öğrendiğimiz için yapısal programlama kavramında istenmeyen “goto” deyimini kullanmadan akış diyagramını ve programı oluşturalım. Gireceğimiz harfleri söz dizisi tipine sahip olan bir dizi değişkeninde tutabiliriz. Fakat burada söz dizisinin son elemanı olan “NULL” karakterini sıralamaya sokmadığımıza ve ayrıca söz dizisinin ilk elemanı 0 nolu indis ile gösterildiğine dikkat edelim.
/* Karakter Siralama Programı*/ #include char h[100]; char b; int i,j,k,n; void main(void) {clrscr(); printf("karakter dizisi eleman sayisini giriniz: "); scanf("%d",&n); printf("karakter dizisini bosluksuz giriniz: "); scanf("%s",h); printf(" \n"); k=n; for(i=0;i<n;i++) /* dizinin ilk elemani 0 indisinde dizinin son elemani NULL*/ { k--; for(j=0;j<k;j++) { if(h[j+1]<h[j]) { b=h[j]; h[j]=h[j+1]; h[j+1]=b; } printf("siralanmis dizi: = %s\n",h); getch(); }
Örnek 5: Girilen n elemanlı bir sayı dizisinde hem 4’e hem 5’e bölünebilen sayıları bulan ve başka bir diziye yükleyen bir C/C++ programı yazalım ve akış diyagramını çizelim. Bir değer hem 4’ e hem de 5’ e bölünebiliyor ise en küçük ortak katları olan 20’ ye de kalansız bölünebilmelidir. Yani bu sayının mod 20’ ye göre değeri 0 olmalıdır.
#include int i,k,say,n; int A[100], C[100]; void main(void) {clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=0;i<n;i++) {printf("dizi elemani giriniz: "); scanf("%d",&A[i]); printf(" \n"); } k=0; say=0; for(i=0;i<n;i++) { if(A[i]%20==0) {k++; C[k]=A[i]; say++; } for(k=1;k<=say;k++) { printf("%d ",C[k]); } printf(" \n"); getch(); }
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz