Birden cok subscripti olan arrayler
C'de ki arrayler birden cok subscriptlere sabip olabilirler.En yagin coklu subscript kullanimi sira ve kolonklarin bilgilerini iceren degerlerin gosterilmesidir.
Belirli bir masa(table) elementini belirtmek icin iki adet subscript belirlemek zorundayiz.Birincisi elementlerin sirasini ikincisi de elementlerin kolonlarini gostermelidir.Iki adet subscript gerektiren masalar veya arrayler double-subscripted arrays olarak bilinirler.(Ikili Subscripts kullanarak bir sinifda ki ogrencilerin uc sinav toplamini alip, her ogrenci icin genel ortalama ve sinifin en yuksek ve dusuk notunu hesaplayan programi gormek icin tiklayin)Genelde, m sirali ve n kolonlu bir arraye m-by-n array denir.
Daha once de bahsettigimi gibi en yaygin array arama methodlarindan bir de binary search dur. Assagida yazacagimiz programda sira ve kolon aramada bu arama methodunu kullanacagiz.
/*Binary Searchle Array Arama*/
#include
#define SIZE 15
int binarySearch(int [], int, int, int);
void BaslikYaz(void);
void SiraYaz(int [], int, int, int);
main()
{
int a[SIZE], i, kilit, sonuc;
for(i = 0; i <= SIZE - 1; i++_
a[i] = 2 * i;
printf("0 ila 28 arasi bir numara gir: ");
scanf("%d", &kilit);
BaslikYaz();
sonuc = binarySearch(a, kilit, 0, SIZE - 1);
if(sonuc != -1) /* (
!= ) sembolur esit degilse demektir */
printf("\n%d array element %d un
icinde bulundu\n", kilit, sonuc);
else
printf("\n%d bulunmadi\n",
kilit);
return(0);
}
int binarySearch(int b[], int arananKilit, int dusuk, int yuksek)
{
int orta;
while(dusuk <= yuksek)
{
orta = (dusuk + yuksek) / 2;
SiraYaz(b, dusuk, orta, yuksek);
if(arananKilit == b[orta])
return(orta);
else if(arananKilit < b[orta])
yuksek = orta -1;
else
dusuk = orta + 1;
}
return(-1) /*arananKilit bulunamadi*/
}
void BaslikYaz(void)
{
int i;
printf("\nSubscripts:\n");
for(i = 0; i <=SIZE -1; i++)
printf("%3d ", i);
printf("\n");
for(i = 1; i<= 4 * SIZE, i++)
printf("-");
printf("\n");
}
void SiraYaz(int b[], int dusuk, int orta, int yuksek)
{
int i;
for(i = 0; i<= SIZE -1; i++)
if(i < dusuk || i > yuksek)
/* || veya demektir*/
printf("
");
else if("i = = orta)
printf("%3d*", b[i]);
/* orta degeri isaretle*/
else
printf("%3d ", b[i]);
printf("\n");
}
Programin ciktisi:
|