10.7 Dizilerin Fonksiyonlarda Kullanılması
10.7 Dizilerin Fonksiyonlarda Kullanılması
Diziler de sıradan değişkenler gibi bir fonksiyona parametere olarak akratılabilir. Fakat, aktarma kuralı biraz farklıdır. Her zaman dizinin yanında boyutunun da bilinmesi gerekir.
Program 10.10’da, bir dizinin elemanlarının yazdırılması işi bir fonksiyona yaptırılmıştır. Fonkisyona parametre olarak dizinin yanında boyutu da ilave edilmiştir. İnceleyiniz.
Program 10.10: Bir dizinin yazdırılması
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/* 10prg10.c: bir dizinin yazdırılması */ #include <stdio.h> void dizi_yaz(float x[], int n); int main(){ float kutle[5]= { 8.471, 3.683, 9.107, 4.739, 3.918 }; dizi_yaz(kutle, 5); return 0; } void dizi_yaz(float x[], int n) { int i; for(i=0; i<n; i++) printf("%7.3f", x[i]); printf("\n"); } |
ÇIKTI
1 |
8.471 3.683 9.107 4.739 3.918 |
Eğer dizi boyutu #define önişlemcisi ile belirtilirse boyutun ayrıca parametre olarak kullanılmasına gerek youktur. Bu durumda Program 10.10 şöyle değiştirlebilir:
1 2 3 4 5 6 7 8 9 10 |
... #define BOYUT 5 void dizi_yaz(float x[]); void main(void) { float kutle[BOYUT]= { 8.471, 3.683, 9.107, 4.739, 3.918 }; dizi_yaz(kutle); } ... |
Program 10.3’de bir dizinin en büyük elemanının nasıl bulunduğu gösterilmişti. En büyük elemanı bulma işlemi bir fonksiyona nasıl yaptırıldığı Program 10.11’de gösterilmiştir.
Program 10.11: Bir dizinin en büyük elemanının bulunması
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/* 10prg11.c Bir dizinin en büyük elemanının fonksiyonla bulunması */ #include <stdio.h> /* n elemanlı bir dizinin enbüyük elemanını gönderir */ int enBuyuk(int a[], int n) { int k, en_buyuk_eleman; /* ilk eleman en büyük kabul ediliyor */ en_buyuk_eleman = a[0]; for(k=1; k<n; k++) if( a[k]>en_buyuk_eleman ) en_buyuk_eleman = a[k]; return en_buyuk_eleman; } int main() { int a[10] = {100, -250, 400, 125 ,550, 900, 689, 450, 347, 700}; int eb; eb = enBuyuk(a,10); printf("En buyuk eleman = %d\n",eb); return 0; } |
ÇIKTI
1 |
En buyuk eleman = 900 |
Son olarak, bir kare matrisin iz (trace) değerini bulup ekrana yazan bir fonksiyon Program 10.12’de verilmişitir. Bir kare matrisin izi, matrisin asal köşegen üzerinde bulunan elemanların toplamı olarak tanımlıdır. Bu tanıma göre, aşağıdaki matrisin izi 2 + 8 + 4 = 14 tür..
İz matematiksel olarak şöyle gösterilir:
Program 10.12: Bir matrisin izi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/* 10prg12.c Bir 3x3 bir matrisin izinin fonksiyonla bulunması */ #include <stdio.h> double iz(double a[][3], int); int main() { double a[3][3], izA; int i,j; puts("matrisi girin:"); for(i=0; i<3; i++) for(j=0; j<3; j++) scanf("%lf",&a[i][j]); izA = iz(a,3); printf("matrisin izi = %lf\n",izA); return 0; } double iz(double a[][3], int n) { int i; double toplam = 0.0; for(i=0; i<n; i++) toplam += a[i][i]; return toplam; } |
ÇIKTI
1 2 3 4 5 |
matrisi girin: 2 1 -5 3 8 6 7 1 4 matrisin izi = 14.000000 |
Matrisler, fonksiyonlara parametre olarak geçirilirken ikinci boyununda verildiğine dikkat edin.