Vi fəsil. C++ dilində proqramlaşdırma
Birləşmənin sahələri bir-birini örtə-örtə yerləşirlər. Ayrılan yaddaş sahəsinin həcmi ən böyük sahənin həcminə bərabər olur. İstənilən bir sahənin qiymətinin dəyişməsi digər sahələrin qiymətlərinin dəyişməsinə səbəb olur. Misal 2. Aşağıdaki nəsələnin həlli üçün proqram tərtib edin: Klaviaturadan daxil edilən simvolun 2-lik kodunu ekrana çıxarmalı. //Simvolun 2-lik kodunun alınması #include using namespace std; //bit sahələrinin strukturu struct byte {int b1:1; int b2:1; int b3:1; int b4:1; int b5:1; int b6:1; int b7:1; int b8:1; }; //dəyişən-birləşmə union bits {char ch; byte cod; } u; //Dekodlaşdırma funksiyasının prototipi void dekode(bits x); //əsas proqram int main( ) {do {cin>>u.ch; cout<<”\n: n; decode(u);} while (u.ch!=’q’); //q-simvolu //daxil etmə prosesinin sonu əlamətidir } //Dekodlaşdırma funskiyası void decode(bits u) { if(u.cod.b8)cout<<”1”; else cout<<”0”; if(u.cod.b7)cout<<”1”; else cout<<”0”; if(u.cod.b6)cout<<”1”; else cout<<”0”; if(u.cod.b5)cout<<”1”; else cout<<”0”; if(u.cod.b4)cout<<”1”; else cout<<”0”; if(u.cod.b3)cout<<”1”; else cout<<”0”; if(u.cod.b2)cout<<”1”; else cout<<”0”; if(u.cod.b1)cout<<”1”; else cout<<”0”; cout<<”\n”; } Burada u - dəyişən-birləşmədir və onun tipi bits-dir. u – dəyişən-birləşməsinin 2 elementi var: ch-simvol sahəsi və cod-bit strukturu. Bu sahələr bir-birini örtə bilir. Hər iki sahə üçün 8-bit yer ayrılır.
Beləliklə, samvolun kodunun hər bir bitinə müraciət etmək mümkündür. Proqramın işi o vaxt yekunlaşır ki, q-simvolu klaviaturadan daxil edilsin. Proqramın işləməsi nəticsində aşağıdakiları almaq olur: s: 01110011 d: 01100100 j: 01101010 a: 01100001 b: 01100010 c: 01100011 q: 01110001. Məsələlər. 1. D.İ.Mendeleyevin dövri cədvəlində hər bir kimyəvi element haqqında məlumatı struktur şəklində verin. Cədvəli komputerin yaddaşına daxil edən proqram yazın. 2. Üç ölçülü fəzada nöqtənin koordinatlarını struktur şəklində verin. İki nöqtənin koordinatlarını daxil edən və onlar arasındaki məsafəni hesablayan proqram yazın. 3. Kompleks ədədə iki həqiqi sahədən ibarət struktur kimi baxaraq, kompleks ədədlər üzərində aparılan dörd hesab əməlini funksiya şəklində tərtib edin. 6.34.İstinadlar (ссылки) və onların istifadə edilməsi qaydaları C++ dilində göstəriciyə yaxın olan element istinad adlanır. İstinadlara obyektlərin digər bir adı kimi baxmaq olar. İstinadlardan üç üsulla istifadə edilir: istinadlardan funksiyaların parametrləri kimi istifadə olunması; isitinadlardan funksiyaların qiymətlərini qaytarmaq üçün istifadə olunması; asılı olmayan istinadlar yaratmaq üçün. Əvvəlcə istinadların funksiyaların parametri kimi istifadə olunmasına baxaq. Parametr-istinadların işləmə prinsipi ilə tanış olmaq üçün aşağıdaki misala baxaq: #include using namespace std; void f(int*n); //parametr-göstəricidən istifadə edilir int main( ) {int i=0; f(& i); cout<<”i-nın yeni qiyməti:”< return 0; } void f (int*n) {*n=100; //n-nın göstərdiyi arqumentə 100 //ədədini mənimsətmək } Burada f( ) funksiyası 100-ədəddini n-göstəricisi ilə müəyyən olunan ünvana yükləyir. f( ) funksiyasına main funksiyasından müraciət edilir. Bu halda faktiki parametr i-dəyişəninin ünvanı olur. f( ) funksiyasının yerinə yetirilməsi nəticəsində i-dəyişəninin qiyməti 100 ədədi olur. Yuxarıdaki proqramı aşağıdaki kimi dəyişərək prosesi tam avtomatlaşdırmaq olar: #include using namespace std; void f(int & n); //parametr-istinadın elan olunması int main( ) {int i=0; f(i); cout<<”i-nın yeni qiyməti:”< return 0; } //Indi f( )-funksiyasında parametr-istinad istifadə olunur void f(int & n) { //növbəti operatorda *-işarəsi yazılmır n=100; } Burada funksiyaya müraciət zamanı arqumentdən əvvəl ampersand (&) işarəsi qoyulmur. Çünki f( )-funksiyası parametr-istinad parametrini alan kimi onu arqumentin ünvanına avtomatik olaraq çevirir. İndi istinadlardan funksiyanın qiymətinin qaytarılması kimi istifadə olunmsına baxaq. İstinadların qaytarılmasından funksiyaları mənimsətmə operatorunun sol tərəfində istifadə etməyə imkan verir. Aşağıdaki misala baxaq: #include using namespace std; int & f( ) int x; int main( ) {f( )=100; //f( )-funksiyası ilə qaytarılan istinada //100-ədədinin mənisədilməsi cout< return 0; } //Istinada tam ədədin qaytarılması int & f( ) {return x; //x-ə istinadın verilməsi } Funksiyanın gösvdəsində return x; operatoru x-qlobal dəyişəninin qiymətini qaytarmır, onun ünvanını qaytarır. Main( )-funksiyasının daxilində f( )=100; -operatoru 100-qiymətini x-dəyişəninə verir. Çünki f( ) funksiyası ona olan istinadı təyin etmişdir. Asılı olmayan istinad vasitəsi ilə bir dəyişənin adı olaraq digər dəyişənin adına müraciət etmək olar. Asılı olmayan istinadı onun elan olunması zamanı inisiallaşdırmaq olar. Aşağıdaki proqrama baxaq: #include using namespace std; int main( ) {int x; int & ref=x; //Asılı olmayan istinadın-yaradılması x=10; //Bu iki operator ref=10; //funksional olaraq eynidir ref=100; //Burada 100 ədədi 2dəfə çıxışa verilir cout< return 0; } Bu proqramda asılı olmayan ref istinadı x-dəyişəninin başqa bir adıdır. İstinadlar inisiallaşmalıdır. İstinadların inisiallaşması mənimsətmə əməlindən fərqlənir. İstinadlar üzərində əməliyyatlar aparmaq olar, lakin əməliyyat istinadın özünü dəyişdirmir. Məsələ, int ii=0; int & rr=ii; rr++ //ii bir vahid artırılır Burada ++ əməli mümkün olan əməldir, lakin rr++ əməli rr- istinadının özünü bir vahid artırmır. İnisiallaşdırmadan sonra istinad dəyişmir və o həmişə inisiallaşdırma ilə əlaqədar olan obyekti göstərir. rr- istinadı ilə işarə olunan obyektə göstərici almaq üçün &rr yazmaq lazımdır. Yüklə 1,02 Mb. Dostları ilə paylaş: |