Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Muasir proq dil C++.doc
Скачиваний:
15
Добавлен:
01.05.2025
Размер:
7 Мб
Скачать
☆

6.7. Statik lokal dəyişənlər

İndiyə qədər dəyişənin mövcudolma vaxtı onun görünmə ob­lastı ilə təyin olunurdu. Lokal dəyişənin görünmə oblastı onun təyin olunduğu funksiya ilə məhdudlanırdı, varlıq vax­tı isə funksiya sona çatdıqda sona çatırdı. Qlobal dəyişən üçün görünmə oblastı bütün proqrama genişləndirilir, dəyi­şə­nin varlıq şərti isə proqram sona çatmamış qurtarmırdı.

Statik lokal dəyişən isə belə deyil. O, lokal dəyişənin gö­rü­n­mə oblastına və qlobal dəyişənin varlıq vaxtına malik olur. Sta­tik lokal dəyişən qlobal dəyişən kimi bütün funk­si­ya­lar üzərində deyil, hər bir lokal dəyişən kimi funksiya da­xi­lində elan olunur.

Statik və statik olmayan lokal dəyişənlərin elan olun­ma­sın­da fərq ondadır ki, statik lokal dəyişən static xidməti sözü ilə adə­tən başlanğıc qiymətlə elan olunur.

Beləliklə, yuxarıdakı proqramda

int times;

elanı əvəzinə

static int times = 0;

elanı yazılacaq.

6.8. Məlumatın funksiyaya göndərilməsi

Deyildiyi kimi, funksiyanın başlanğıcında onun adından sonra gələn mötərizədə onun parametrləri yazılır. Parametrlər – funk­siyaya onun qarşısında qoyulan məsələni yerinə yetirmək üçün verilən məlumatdır.

Parametrlərin ötürülməsinin iki üsuluna baxaq: qiymətə görə və müraciətə görə.

Aşağıdakı misalda çıxarılan məlumatın məzmunu printmessage funksiyası ilə parametr kimi ötürülür:

# include < …….>

# include <string>

using namespace std;

void printmessage (string);

int main()

{

string str;

cout << ”enter a string:”;

cin >> str;

printmessage(str);

return 0;

void printmessage(string s)

{

cout << ”you inputted” << s;

}

Qeyd edək ki, yuxarıdakı kodda həm prototipin, həm də funk­siyanın başlığının yalnız bir parametri – string parametri var. Lakin funksiyanın prototipinin parametrində yalnız verilən parametrin tipi (string) göstərildiyi halda, funksiyanın baş­lı­ğı­nın parametrində həm verilənlərin tipi, həm də parametrin adı (string s) göstərilmişdir.

Funksiyanın prototipində verilənlərin tipindən başqa (məc­bu­ri olan), parametrin adı da ola bilər:

void printmessage (string somearg);

Lakin bu parametr fiktiv parametr adlanır, cünki o heç bir məq­səd daşımır.

Aşağıdakı kodda printmessage funksiyası çağrılır:

printmessage(str);

str – sətir dəyişəni printmessage funksiyasının parametri ki­mi ötürülür. Sonra str qiyməti printmessage funksiyasının baş­lı­­ğında parametr adı olan s sətir dəyişəni ilə ötürülür:

void printmessage(stringe s);

Daha sonra s sətir dəyişəni printmessage funksiyasının göv­də­sində

cout << “you inputted”<< s;

məlumatının çıxraılması üçün istifadə olunur.

Funksiyanın başlığındakı parametrin adı funksiyanın parametrinə ötürülən dəyişənin adı ilə eyni ola bilər:

printmessage(str);

void printmessage(string str)

Hətta bu halda da main funksiyasındakı str dəyişəni printmessage funksiyasındakı dəyişəndən fərqlənir.

Yuxarıdkı misalda funksiyanın yalnız bir parametrinə baxılırdı. Lakin funksiya iki və ya daha çox parametrə də malik ola bilər.

Aşağıdakı proqramda printmessage funksiyasında iki parametr ( biri ad və digəri soyad üçün ) istifadə olunur:

#include <…. . . >

# include <string>

using namespace std;

void printmessage (string, string);

int main()

{

string name 1, name 2;

cout <<” adı daxil et:”;

cin >> name1;

cout << ”soyadı daxil et:”;

cin >> name2;

printmessage(name1, name2);

return 0;

}

void printmessage(string firstname, string lastname)

{

cout << “ Sizin adiniz-”<< firstname <<”soyadınız-”<<lastname<<end1;

}

Funksiyaların çağırılması zamanı parametrlər sırası baş­lıq­dakı parametrlər sırası ilə eyni olmalıdır.Yuxarıdakı misalda funk­siyanın çağırılması və onun başlığı aşağıdakı kimidir:

printmessage (name1, name2);

void printmessage(string firstname, string lastname)

Funksiya çağırıldıqda name1 qiyməti funksiyanın baş­lı­ğın­da­kı firstname, name2 qiyməti isə lastname dəyişəninə təqlid olu­nur.

İndi isə parametrlərin müraciətə əsasən ötürülməsinə baxaq.

Parametrlərin qiymətə görə ötürülməsi o vaxt əlveriş­li­dir ki, ça­ğırılan funksiyada onların yerini dəyişmək lazım gəl­mə­sin. printmessage funksiyası öz parametrlərinin qiymə­t­lə­rini də­yiş­dir­mir, sadəcə olaraq onları ekrana çıxarır.

Buna baxmayaraq bəzən funksiyaya onunla ötürülən pa­ra­met­rin qiymətini dəyişmək lazım gəlir.

Aşağıdakı misalda double funksiyası onun ötürdüyü qiy­mə­ti iki dəfə artırmalıdır:

# include <inter>

using namespace std;

void double (int);

int main ()

{

int num;

cout <<” enter number:”;

cin >>num;

double (num);

cout <<”the number doubled in main is”<<num<<endl;

return0;

}

void double (int x)

{

cout <<”the number to double is”<<x<<end1;

x*=2;

cout<< “the number doubled in double is”<<x<<end1;

}

Buradan görünür ki, double funksiyasında onun para­met­ri­ni iki dəfə artırdıqda num qiyməti dəyişmədi. main funk­si­ya­sın­da num qiyməti ona görə dəyişmədi ki, double funk­si­yasına onun surəti ötürülür. Çağırılan funksiyanın onun ötür­düyü də­­yişəni main funksiyasında dəyişməsi üçün həmin dəyişən müraciətə görə ötürülməlidir. Çağırılan funk­siyadakı dəyişən müraciət tipli dəyişən adlanır. Müraciət tipli dəyişən – də­yi­şə­nin main funksiyasındakı surəti deyil, təxəllüsüdür.

Aşağıdakı funksiyada dəyişənin müraciətə əsasən ikiqat artırılmaqla ötürülməsi göstərilir:

void double (int &x)

{ cout <<”the number double is”<<x<<end1;

x*=2;

cout<<the number;

Dəyişənin müraciətə əsasən ikiqat artırılmaqla ötürül­mə­si üçün əvvəlki proqramda double funksiyasının prototip və başlığı

void double(int);

void double(int x)

əvəzinə

void double(int &);

void double(int &x)

kimi yazılmalıdır.

Qeyd edək ki, müraciətə və ya qiymətə görə bir neçə qiy­məti də ötürmək olar. Hətta bir neçə qiyməti müraciətə , di­gər­lərini isə qiymətə görə ötürmək olar. Müraciətə görə o qiy­mətlər ötürülür ki, onları dəyişmək lazım gəlmir, qiymətə görə isə dəyişilməli olan qiymətlər ötürülür.

Aşağıdakı proqramda AddNumbers funksiyasının üç para­met­ri var: ilk iki parametr - cəmlənən ədədlərdir, onlar qiy­mətə gö­rə ötürülürlər, üçüncü parametr – iki ədədin cə­mi­dir, o, mü­raciətə görə ötürülür və onun qiyməti çagırılan funksiya ilə dəyişdirilir.

# include <inter>

using namespace std;

void AddNumbers (int, int ,int &);

int main()

{

int firstnum, secondnum, sum=0;

cout <<”Birinci ededi daxil et:”;

cin >>firstnum;

cout<<”Ikinci ededi daxil et:”;

cin>>secondnum;

AddNumbers(firstnum, secondnum, sum);

cout <<firstnum<<”+”<<secondnum<<”=”<<sum;

return 0;

}

void AddNumbers(int x,int y,int& z)

{

z=x+y;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]