2. hafta - Çok boyutlu diziler...2020/02/02  · 2 Çok boyutlu diziler ―Çok boyutlu dizileri,...

15
2. Hafta - Çok Boyutlu Diziler Dr. Öğr. Üyesi Nesibe YALÇIN https://nesibeyalcin.wordpress.com/bsm104/ BARTIN ÜNİVERSİTESİ MÜHENDİSLİK, MİMARLIK VE TASARIM FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Upload: others

Post on 04-Sep-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

2. Hafta - Çok Boyutlu Diziler

Dr. Öğr. Üyesi Nesibe YALÇIN

https://nesibeyalcin.wordpress.com/bsm104/

BARTIN ÜNİVERSİTESİ

MÜHENDİSLİK, MİMARLIK VE TASARIM FAKÜLTESİ

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Page 2: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

2

Çok Boyutlu Diziler

―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz.

―Diziye eklenen her bir boyut için yine [] işaretleri arasında bir sayı tanımlanmaktadır. Dizinin türü Dizinin ismi [ElemanSayısı] [ElemanSayısı] …. [ElemanSayısı]

Boyut_1 Boyut_2 Boyut_N …..

Page 3: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

3

Çok Boyutlu Diziler

İki boyutlu diziler (matrisler): Dizinin türü Dizinin ismi [Satır Sayısı] [Sütun Sayısı]; int a[4][5]; float x[3][2]; double y[2][2];

Çok boyutlu diziler: int a[4][3][5]; float x[2][1][3][2]; double y[2][2][2][2][2];

Page 4: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

4

Değer Atama

int a[4][2] = {8, 22, -3, 49, 14, 5, -5, 2}; Eleman sayısı=8

int a[][2] = {8, 22, -3, 49, 14, 5, -5, 2}; int a[][2] = {{8, 22}, {-3, 49}, {14, 5}, {-5, 2}};

a[0][0] a[0][1]

a[1][0] a[1][1]

a[2][0] a[2][1]

a[3][0] a[3][1] 4x2

8 22

-3 49

14 5

-5 2 4x2

Page 5: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

5

Çok Boyutlu Diziler

―İster tek boyutlu, ister çok boyutlu bir dizi içerisinde bulunan elemanlar, birbiri ardına gelen bellek hücrelerinde tutulur.

―İlk elemanın boyutunu yazmaya gerek yoktur.

―İlk boyut hariç diğer boyutların eleman sayısı mutlaka yazılmalıdır.

Page 6: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

6

Bellekte Yerleşimi

for(int i=0; i<4; i++)

for(int j=0; j<2; j++)

//scanf("%d",&a[i][j]);

printf("%d",a[i][j]);

Dizi Elemanı

Değer

a[0][0] 8

a[0][1] 22

a[1][0] -3

a[1][1] 49

a[2][0] 14

a[2][1] 5

a[3][0] -5

a[3][1] 2

1.Satır 2.Satır 3.Satır 4.satır

8 22

-3 49

14 5

-5 2

Page 7: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

7

Uygulama-1

#include <stdio.h>

#include <conio.h>

#define SAT 2

#define SUT 3

int main() {

int a[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;

puts("A Matrisi:");

for(i=0; i<SAT; i++){

for(j=0; j<SUT; j++)

printf("%4d",a[i][j]);

printf("\n");

}

puts("B Matrisi:");

for(i=0; i<SAT; i++){

for(j=0; j<SUT; j++)

printf("%4d",b[i][j]);

printf("\n");

}

puts("\nC Matrisi:");

for(i=0; i<SAT; i++){

for(j=0; j<SUT; j++){

c[i][j] = a[i][j] + b[i][j];

printf("%4d",c[i][j]);

}

printf("\n");

}

getch ();

}

İki matrisin toplamı

Page 8: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

8

Uygulama-2

Aşağıdaki matrisin saat yönünde 90o döndürülmesi ile elde edilecek yeni matrisi ekrana yazan programı C dilinde yazınız.

Page 9: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

9

Uygulama-2 #include <stdio.h>

int main(){

int matris[4][4] = {{31, 24, 42, 76},

{18, 34, 98, 22},

{50, 11, 92, 93},

{38, 68, 20, 14} };

int i, j;

for( i = 0; i < 4; i++ ) {

for( j = 0; j < 4; j++ )

printf("%d ", matris[i][j] );

printf("\n");

}

printf("\n");

for( i = 0; i < 4; i++ ) {

for( j = 3; j >= 0 ; j-- )

printf("%d ", matris[j][i] );

printf("\n");

}

}

Page 10: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

10

Uygulama-3

Satır ve sütun sayısı, kullanıcı tarafından girilen bir A matrisinin elemanları [-20, 20] arasında rastgele sayılardan oluşmaktadır. A matrisinin her bir satırındaki en büyük elemanı bulan programı C dilinde yazınız.

Page 11: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

11

Uygulama-3 #include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main(){

int satir,sutun,max;

printf("Dizi satir ve sutun sayisi:");

scanf("%d %d",&satir, &sutun);

int a[satir][sutun];

srand(time(0));

for(int i=0;i<satir;i++){

a[i][0]=-20+rand()%41;

printf("a[%d][%d]= %d \n",i,0,a[i][0]);

max=a[i][0];

for(int j=1;j<sutun;j++){

a[i][j]=-20+rand()%41;

printf("a[%d][%d]= %d \n",i,j,a[i][j]);

if(a[i][j]>max)

max=a[i][j];

}

printf("%d satir en buyuk deger: %d \n",(i+1),max);

}

}

Page 12: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

12

Dizinin Boyutu

―sizeof(a) : a’nın byte türünden uzunluğu döndürür. int main(){

double a;

float x[2][3];

int y[10][4][2];

printf("int boyutu : %d \n",sizeof(int));

printf("char boyutu: %d \n",sizeof(char));

printf("a degiskeninin boyutu : %d \n",sizeof(a));

printf("x float dizisinin boyutu:%d \n",sizeof(x));

printf("y int dizisinin boyutu: %d ",sizeof(y)); }

printf("x float dizisinin eleman sayisi:%d \n",sizeof(x)/sizeof(float));

Page 13: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

13

Fonksiyonlarda Dizilerin Kullanımı

―Çok boyutlu bir diziyi fonksiyona parametre göndermek;

void topla(int x[][3][2][2], int y[][4]) { // işlemler } int main(){ topla(x,y); //fonksiyon çağırma }

Page 14: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

14

Uygulama-4

#include <stdio.h> int main() { float s_not[10][4][3]; int i, j, k;

puts("Notlar:");

for(i=0; i<10; i++){ printf("%d.ogrenci\n",i+1); for(j=0; j<4; j++) { printf("%d.dersi\n",j+1); for(k=0; k<2; k++) { scanf("%f",&s_not[i][j][k]); } s_not[i][j][2]=0.4*s_not[i][j][0]+0.6*s_not[i][j][1]; printf("Ortalama:%.2f\n", s_not[i][j][2]); } }

}

10 öğrencinin 4 adet dersinin vize ve final notlarını kullanıcıdan alan ve geçme notunu hesaplayıp ekrana yazdıran C programı

Page 15: 2. Hafta - Çok Boyutlu Diziler...2020/02/02  · 2 Çok Boyutlu Diziler ―Çok boyutlu dizileri, elemanları dizilerden oluşan diziler olarak düşünebiliriz. ―Diziye eklenen

15

Uygulama-5 #include <stdio.h> void verial(float A[][4][3]){ int i, j, k; puts("Not Giris:"); for(i=0; i<2; i++){ printf("%d.ogrenci\n",i+1);

for(j=0; j<4; j++) { printf("%d.dersi\n",j+1); for(k=0; k<2; k++) scanf("%f",&A[i][j][k]); A[i][j][2]=0.4*A[i][j][0]+0.6*A[i][j][1]; } } } int main(){ float not[2][4][3]; verial(not); printf("Vize \t Final \t Ortalama \n"); for(int i=0; i<2; i++){ printf("%d.ogrenci\n",i+1); for(int j=0; j<4; j++) printf("%.2f \t %.2f \t %.2f\n",

not[i][j][0],not[i][j][1],not[i][j][2]); } }

Fonksiyon tanımlama

Fonksiyon çağırma