C++ Dizilerin(Array) Fonksiyonlara Aktarımı

2 ay önce , Okuma süresi 2 dakika.

Aynı türde elemanların sabit boyutlu bir sıralı koleksiyonunu depolayabilen bir tür veri yapısı diziler. Bir dizi veri depolamak için kullanılır, ancak bir diziyi aynı tipteki değişkenlerin bir koleksiyonu olarak düşünmek daha yararlı olur.

Sayı0, sayı1, ... ve sayı99 gibi bağımsız değişkenler bildirmek yerine, sayı gibi bir dizi değişkeni bildirirsiniz ve sayıları [0], sayıları [1] ve ..., sayıları [99] temsil etmek için kullanırsınız. bireysel değişkenler. Dizideki belirli bir öğeye bir dizin tarafından erişilir.

Tüm diziler bitişik bellek konumlarından oluşur. En düşük adres ilk elemana, en yüksek adres ise son elemana karşılık gelir.

Fonksiyonlara Aktarımı:

Dizileri fonksiyonlara aktarmak, tıpkı değişkenleri aktarmaya benzemektedir. Uzun uzadıya anlatmak yerine, örnek üstünden gitmenin daha faydalı olacağını düşünüyorum. Bir fonksiyon yazalım ve bu fonksiyon kendisine gönderilen dizinin elemanlarını ekrana yazsın.

#include<stdio.h>
void elemanlari_goster( int [ 5 ] );

int main()
{
	int dizi[ 5 ] = { 1, 20, 300, 4000, 50000 };
	elemanlari_goster( dizi );
	return 0;
}
void elemanlari_goster( int gosterilecek_dizi[ 5 ] )
{
	int i;
	for( i = 0; i < 5; i++) 
		printf( "%dn", gosterilecek_dizi[ i ] );
}

Fonksiyon prototipini yazarken, dizinin tipini ve boyutunu belirttiğimizi fark etmişsinizdir. Fonksiyonu tanımlama aşamasında, bunlara ilaveten parametre olarak dizinin      adını da yazıyoruz. ( Bu isim herhangi bir şey olabilir, kendisine gönderilecek dizinin adıyla aynı olması gerekmez. ) Bir dizi yerine sıradan bir değişken kullansaydık, benzer şeyleri yapacaktık. Farklı olan tek nokta; dizi eleman sayısını belirtmemiz. Şimdi main(  ) fonksiyonuna dönelim ve elemanlari_goster(  ); fonksiyonuna bakalım. Anlayacağınız gibi, "dizi" ismindeki dizinin fonksiyona argüman olarak gönderilmesi için sadece adını yazmamız yeterli.

Program derlendiğinde sonuç aşağıdaki gibi olacaktır.

Fonksiyonlarla ilgili bir başka örnek yapalım. Bu sefer üç fonksiyon oluşturalım. Birinci fonksiyon kendisine gönderilen dizideki en büyük değeri bulsun; ikinci fonksiyon, dizinin en küçük değerini bulsun; üçüncü fonksiyon ise elemanların ortalamasını döndürsün.

#include<stdio.h>
float maksimum_bul( float [ 8 ] );
float minimum_bul( float [ 8 ] );
float ortalama_bul( float [ 8 ] );
int main()
{
	// 8 boyutlu bir dizi olusturup buna 
	// keyfi degerler atiyoruz.
	float sayilar[ 8 ] = {  12.36, 4.715, 6.41, 13,
				1.414, 1.732, 2.236, 2.645 };
	float max, min, ortalama;
	// Ornek olmasi acisindan fonksiyonlar 
	// kullaniliyor.
	max = maksimum_bul( sayilar );
	min = minimum_bul( sayilar );
	ortalama = ortalama_bul( sayilar );
	printf( "Maksimum: %.2fn", max );
	printf( "Minimum: %.2fn", min );
	printf( "Ortalama: %.2fn", ortalama );

	return 0;
}
/* Dizi icindeki maksimum degeri bulur */
float maksimum_bul( float dizi[ 8 ] )
{
	int i;
	float max;
	max = dizi[0];
	for( i = 1; i < 8; i++ ) {
		if( max < dizi[ i ] )
			max = dizi[ i ];
	}
	return max;
}
/* Dizi icindeki minimum degeri bulur */ 
float minimum_bul( float dizi[ 8 ] )
{
	int i;
	float min;
	min = dizi[ 0 ];
	for( i = 1; i < 8; i++ ) {
		if( min > dizi[ i ] ) {
			min = dizi[ i ];
		}
	}
	return min;
}
/* Dizi elemanlarinin ortalamasini bulur */
float ortalama_bul( float dizi[ 8 ] )
{
	int i;
	float ortalama=0;
	for( i = 0; i < 8; i++ )
		ortalama += dizi[ i ];

	return ortalama / 8.0;
}

Program derlendiğinde sonuç aşağıdaki gibi olacaktır.

Yukardaki örneklerimizde, dizilerin boyutlarını bilerek fonksiyonlarımızı yazdık. Ancak gerçek hayat böyle değildir; bir fonksiyona farklı farklı boyutlarda diziler göndermeniz gerekir. Mesela ortalama_bul(  ) fonksiyonu hem 8 elemanlı bir diziye hizmet edecek, hem de 800 elemanlı bir başka diziye uyacak şekilde yazılmalıdır. Son örneğimizi her boyutta dizi için kullanılabilecek hâle getirelim ve ortalama_bul( ), minimum_bul(  ) ve maksimum_bul(  ) fonksiyonlarını biraz değiştirelim.

#include<stdio.h>
float maksimum_bul( float [ ], int );
float minimum_bul( float [ ], int );
float ortalama_bul( float [ ], int );
int main()
{
	// 8 boyutlu bir dizi olusturup buna 
	// keyfi degerler atiyoruz.
	float sayilar[ 8 ] = {  12.36, 4.715, 6.41, 13,
				1.414, 1.732, 2.236, 2.645 };
	float max, min, ortalama;
	// Ornek olmasi acisindan fonksiyonlar 
	// kullaniliyor.
	max = maksimum_bul( sayilar, 8 );
	min = minimum_bul( sayilar, 8 );
	ortalama = ortalama_bul( sayilar, 8 );
	printf( "Maksimum: %.2fn", max );
	printf( "Minimum: %.2fn", min );
	printf( "Ortalama: %.2fn", ortalama );

	return 0;
}
/* Dizi icindeki maksimum degeri bulur */
float maksimum_bul( float dizi[ ], int eleman_sayisi )
{
	int i;
	float max;
	max = dizi[0];
	for( i = 1; i < eleman_sayisi; i++ ) {
		if( max < dizi[ i ] )
			max = dizi[ i ];
	}
	return max;
}
/* Dizi icindeki minimum degeri bulur */ 
float minimum_bul( float dizi[ ], int eleman_sayisi )
{
	int i;
	float min;
	min = dizi[ 0 ];
	for( i = 1; i < eleman_sayisi; i++ ) {
		if( min > dizi[ i ] ) {
			min = dizi[ i ];
		}
	}
	return min;
}
/* Dizi elemanlarinin ortalamasini bulur */
float ortalama_bul( float dizi[ ], int eleman_sayisi )
{
	int i;
	float ortalama = 0;
	for( i = 0; i < eleman_sayisi; i++ )
		ortalama += dizi[ i ];

	return ortalama / 8.0;
}

Fonksiyonlara dikkatlice bakın. Geçen sefer sadece dizi adını gönderirken,artık dizi adıyla birlikte boyutunu da yolluyoruz. Böylece dizinin boyutu n'olursa olsun, fark etmiyor. Yeni bir parametre açıp dizinin eleman sayısını isterseniz, fonksiyon her dizi için çalışabilir.

#c++