MAK 1005 Bilgisyr Progrmlmy Giriş Diziler Prof. Dr. Necmettin Ky
DİZİ: Bir değişken içinde birden fzl ynı tip veriyi sklmk için kullnıln veri tipidir. Dizi elemnlrı indis numrsı (sır no) ile çğrılıp işlenirler. Dizi tnımı: veritipi diziadı[elemn_syısı]; Örneğin, 5 elemnlı, uzunluk verilerini bellekte tutmk için, uzunluk dizisi şöyle tnımlnbilir: flot uzunluk[5]; Bu dizinin elemnlrın bir değer tm işlemi şöyle ypılbilir: uzunluk[0] = 8.471 uzunluk[1] = 3.683 uzunluk[2] = 9.107 uzunluk[3] = 4.739 uzunluk[4] = 3.918 (Dizi indisinin bşlngıç değeri 0 dır.)
Dizilerin Okunmsı ve Yzdırılmsı printf ve scnf fonksiyonlrı bir dizinin okunmsı ve yzdırılmsı için de kullnılır. Örneğin bir A dizisinin şğıdki gibi tnımlndığını vrsylım: int A[10]; Bu dizinin elemnlrını klvyeden okumk için döngü ypısı içinde: for (i=0; i<10; i++) scnf("%d",&a[i]); dh sonr bu değerlerini ekrn yzmk için: for (i=0;i<10;i++) printf("%d\n",a[i]);
Dizilere Bşlngıç Değerlerinin Girilmesi Progrm içinde dizi elemnlr scnf fonksiyonu ile okutulcğı gibi bşlngıç değerleri de girilebilir: flot kutle[5]= 8.471, 3.683, 9.107, 4.739, 3.918; int mliyet[3] = 25, 72, 94; double [4] = 10.0, 5.2, 7.5, 0.0; Bir dizinin uzunluğu belirtilmeden de bşlngıç değeri tmk mümkündür. int [] = 100, 200, 300, 400; flot v[] = 9.8, 11.0, 7.5, 0.0, 12.5; Derleyici bu şekilde bir tm ile krşılştığınd, küme prntezi içindeki elemn syısını hesplr ve dizinin o uzunlukt çıldığını vrsyr. Yukrıdki örnekte, dizisinin 4, v dizisinin 5 elemnlı olduğu vrsyılır. Bşlngıç değerlerinin tndığı durumlrd indis numrsı 0 dn bşlr. (Örn: kutle[0]=8.471)
Örnek 1: N tne syının ortlmsını buln C progrmını (dizi kullnrk) yzınız. int N,i; flot x[100], ort, toplm = 0.0; min() printf("n="); scnf("%d",&n); for(i=0; i<n; i++) printf("%d. syi : ",i+1); scnf("%f",&x[i]); toplm += x[i]; /* toplm=toplm+x[i] */ ort = toplm/n; printf("syilrin ortlmsi = %f\n",ort); Ekrn Çıktısı:
Örnek 2: 10 tne syının stndrt spmsını buln C progrmını yzınız. #include <mth.h> int i; #define N 10 flot x[n],toplm=0.0, ktoplm=0, ort, std_sp=0.0; min() /* ortlm hesbı */ for(i=0; i<n; i++) printf("%d. syi : ",i+1); scnf("%f",&x[i]); toplm=toplm+x[i]; ort = toplm/n; /* stndrt spm hesbı */ for(i=0; i<n; i++) ktoplm=ktoplm+pow(x[i]-ort,2.0); std_sp = sqrt(ktoplm/(n-1) ); printf("ortlm = %f\n",ort); printf("stndrt spm = %f\n",std_sp); Ekrn Çıktısı:
Örnek 3: Elemn syısı N oln bir dizinin elemnlrını okutup diziyi tersten yzdırn C progrmını yzınız. #include <mth.h> int i,n; int dizi[100]; min() printf("n=");scnf("%d",&n); for(i=0; i<n; i++) printf("%d. syi=",i+1); scnf("%d",&dizi[i]); printf("tersten dizi:\n"); for (i=n-1; i>=0; i--) printf("%d\n",dizi[i]); Ekrn Çıktısı:
Örnek 4: Elemnlrı girilen N elemnlı bir A dizisi için şğıdki işlemleri ypn C progrmını yzınız. ) Girilen bir B syısındn büyük oln elemnlrın syısı, b) A dizisinin ortlmsı, c) ortlmnın üzerinde oln elemn syısı. #include <mth.h> int i,n,b,s=0,p=0,toplm=0; int [100]; flot ort; min() printf("n=");scnf("%d",&n); printf("b=");scnf("%d",&b); for(i=0; i<n; i++) printf("%d. syi=",i+1); scnf("%d",&[i]); if ([i]>b) s=s+1; toplm=toplm+[i]; ort=(flot) toplm/n; for(i=0; i<n; i++) if ([i]>ort) p=p+1; printf("b den buyuk elemn syisi=%d\n",s); printf("ortlm=%f\n",ort); printf("ort. buyuk elemn syisi=%d\n",p); Ekrn Çıktısı:
İKİ BOYUTLU DİZİLER İki boyutlu dizi tnımı: flot mt[5][4]; Mtris işlemleri de 2 boyutlu dizi mntığı ile gerçekleştirilebilir. 3 stır ve 3 sütünlu bir A mtrisi: A mtrisinin tnımı: flot A[3][3]; A mtrisinin elemnlrının okunmsı: int i,j; int A[50][50]; min() for(i=1; i<=3; i++) for(j=1; j<=3; j++) A ij printf("a[%d,%d]=",i,j); scnf("%d",&a[i][j]); 11 21 31 12 22 32 13 23 33 İndislerin değişimi: i j 1 2 1 2 3 1 2 3 3 1 2 3 A 11 A 12 A 13 A 21 A 22 A 23 A 31 A 32 A 33
İKİ BOYUTLU DİZİLER Örnek 5: İki mtrisin toplmı #define SAT 2 #define SUT 3 int [SAT][SUT] = 5, 3, 7, 0, 1, 2; int b[sat][sut] = 1, 2, 3, 4, 5, 6; int c[sat][sut]; int i, j; min() puts("a Mtrisi:"); for(i=0; i<sat; i++) for(j=0; j<sut; j++) printf("%4d",[i][j]); printf("\n"); puts("b Mtrisi:"); for(i=0; i<sat; i++) for(j=0; j<sut; j++) printf("%4d",b[i][j]); printf("\n"); puts("\nc Mtrisi:"); for(i=0; i<sat; i++) for(j=0; j<sut; j++) c[i][j] = [i][j] + b[i][j]; printf("%4d",c[i][j]); printf("\n"); Ekrn Çıktısı:
LABORATUVAR UYGULAMASI UYGULAMA SORULARI 1. A(NxM) boyutlrındki mtris elemnlrındn pozitif olnlrın toplmının, negtif olnlrın toplmın ornını hesplyn C progrmını yzınız. 2. N elemnlı bir A dizisinin elemnlrının sırsını ters çevirerek B dizisine ktrn C progrmını yzınız. ÖDEV SORULARI 1. N öğrencinin bulunduğu bir sınıft öğrencilerin dını ve notunu okuyup, sınıf ortlmsının üzerinde not ln öğrencilerin dını ve notunu ekrn yzn C progrmını yzınız. 2. N elemnlı bir A dizisinde negtif ve pozitif elemn syısı birbirine eşittir ve bu elemnlr dizide krışık şekilde bulunmktdır. Negtif elemnlrı dizinin ilk yrısın, pozitif elemnlrı ikinci yrısın yerleştirerek B dizisini oluşturn C progrmını yzınız. Örnek: A=1, -2, -4, 6, 7, -1, 5, -8 B=-2, -4, -1, -8, 1, 6, 7, 5 3. A(MxN) ile B(NxP) mtris çrpımını ypn C progrmını yzınız.