6.27.Massivlərin funksiyaların parametri kimi istifadə olunması Massivləri funksiyaların təşkilində parametr kimi də istifadə etmək olar. Aşağıdaki misalda massivin funksiyalarda parametr kimi işlədilməsi nümayiş etdirilmişdir. Tutaq ki, həqiqi tipə malik a[m][n]-massivi verilmişdir. Bu massivin sətirlərinin Evklid normasının hesablanması və ekrana verilməsi tələb olunur. Vektorun Evklid norması onun elementlərinin kvadratları cəminin kvadrat kökünə deyilir:
L= . (1)
Matrisin sətirlərinə vektor kimi baxsaq, onda (1) düsturunu hər sətr üçün hesablamaq lazımdır. Nəticədə m-ədəd alarıq. İxtiyari vektorun normasının hesablanması üçün aşağıdaki kimi funksiya təyin edək:
double Norma(int n, double x[ ]) {int i; double s=0; for(i=0; i<0; i++) s+=x[i]*x[i]; return sqrt(s); } Funksiyanın başlığını aşağıdaki formada da yazmaq olar:
double Norma(int n, double *x)
Hər iki halda funksiyanın 2-ci parametri olaraq massivin başlanğıcını göstərən göstəricidən istifadə olunur.
Norma( )-funksiyasına müraciət zamanı ikinci parametrə massivin (vektorun) başlanğıc ünvanı ötürülür. 5 10-ölçülü massiv üçün verilmiş funksiyadan istifadə edən proqrama baxaq:
void main ( ) {double a[5][10]; int i; //matrisin elementlərini daxil etmək
. . . . . . . //sətirlərin normasını hesablamaq və çıxışa vermək
for (i=0; i<5; i++) cout <<”Norma”< } Funksiyaya müraciət zamanı 2-ci faktik parametr olan a[i] a matrisinin i-ci sətrinin başlanğıcını göstərən göstəricidir.
Matrisin sətrlərinin artan sıra ilə nizamlanması Misal. İki ölçülü matrisi 0:99 diapozonunda təsadüfi tam ədədlərlə doldurmalı. Alınmış matrisin sətirlərini artan sıra ilə nizamlamalı. Nizamlanmış matrisin elementlərini ekrana verməli.
Proqram aşağıdaki kimi olar:
#include #include #include using namespace std; const int n=5 //qlobal sabitin elanı //Funksiyaların protopləri
void matr(int m[ ][n]); void sort(int, int x[ ]); //əsas proqram void main( ) {int i, j, a[n][n]; clrscr; cout <<”\n”<<”nizamlanmaya qədər olan matris”<<”\n”; Matr(a); for (i=0; i cout <<”\n”<<”nizamlanmadan sonraki matris”<<”\n”; for (i=0; i {for (j=0; j cout < cout< }
void sort (int k, int x[ ]) {int i, j, y; for(i=0; i for(j=0; j if (x[j]>x[j+1]) {y=x[j]; x[j]=x[j+1]; x[j+1]=y;} } //Matrisin doldurulması və ekrana verilməsi funksiyası
void matr(int m[ ][n]) {int i, j; randomize( ); //Təsadüfi ədədlərin alınması datçikin qoyulması for (i=0; i {for (j=0; j {m[i][j]=rand( )%100; cout < end l;} }
matr( ) funksiyasının başlığına və prototipinə fikir verək. Onlarda ikinci parametrin ölçüsü aşikar olaraq göstərilib. Birinci parametrin ölçüsünü də göstərmək olar. Ancaq bu vacib deyil. Məlumdur ki, iki ölçülü massivə bir ölçülü massiv kimi baxmaq olar. Bu bir ölçülü massivin elemtləri də massivdir (bu halda sətirlərdir). Kompilyator bu elementlərin ölçüsünü “bilməlidir”. Böyük ölçülü massivlər üçün (məsələn, 3, 4 və s. ölçülü) funksiyanın başlığında 2-cidən başlayaraq bütün elementlərin ölçüləri göstərilmişdir.
matr( ) funksiyasına müraciət zamanı faktiki parametr a-ölçülü matrisinin göstəricisi olur, sort( ) funksiyasına müraciət zamanı isə parametr sətirlərin başlanğıcını göstərən göstərici olur.
Proqramın testləşməsi zamanı aşağıdaki nəticələr alınmışdır:
Nizamlanmaya qədər olan matris
46 23 57 35 18 8 48 68 4 70 56 98 16 71 40 70 84 66 67 11 20 44 37 57 38
18 23 35 46 57 4 8 48 68 70 16 40 56 71 98 11 66 67 70 84 20 37 38 44 57 Göründüyü kimi massivin adı onun 1-ci elementinin göstəricisi kimi istifadə olunur.
Məsələ, int main( ) {char alpha[ ]=”abcdefghk” Char*p=alpha; Char ch; While(ch=*p++) Cout< } p-dəyişəninin təsvirini aşağıdaki kimi də vermək olar:
Char*p=&alpha[0];
Yazılışların belə ekvivalentliyi funksiyalara müraciətdə parametr-massivlərdən istifadə edildikdə tətbiq olunur. Aşağıdaki misalda strlen funksiyasına hər iki müraciət eyni bir nəticə verir: