Vi fəsil. C++ dilində proqramlaşdırma


Massivlərin funksiyaların parametri kimi istifadə olunması



Yüklə 1,02 Mb.
səhifə35/74
tarix04.01.2023
ölçüsü1,02 Mb.
#121980
1   ...   31   32   33   34   35   36   37   38   ...   74
Alqoritmik dillər(C kitab) (10)

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<
}

//vektoru nizamlayan funksiya


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

Nizamlamadan sonraki matris



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:


void f( )
char v[ ]=”Amerika”;
char*p=v;
strlen(p);
strlen(v);
}


Yüklə 1,02 Mb.

Dostları ilə paylaş:
1   ...   31   32   33   34   35   36   37   38   ...   74




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin