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

Post on 04-Sep-2020

11 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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Ü

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 …..

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];

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

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.

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

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ı

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.

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");

}

}

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.

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);

}

}

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));

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 }

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ı

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

top related