|
1 – dars. C++ Dasturlash tilining kelib chiqishi xaqida ma’lumot
|
bet | 64/89 | Sana | 16.11.2023 | Hajmi | 313,45 Kb. | | #100010 |
Bog'liq @AKT Official C haqida o\'zbekcha darslar majmui65 - DARS. BIRLASHMALAR.
Strukturalarga yaqin tushuncha bu birlashma tushunchasidir. Birlashmalar union hizmatchi so’zi yordamida kiritiladi. Misol uchun union {long h; int I,j; char c[4]}UNI;
Birlashmalarning asosiy hususiyat shundaki uning hamma elementlari bir hil boshlangich adresga ega bo’ladi.
Qo’yidagi dastur yordamida bu hususiyatni tekshirish mumkin:
#include
void main()
{ union {long h; int k; char c[3]}U={10l;-3;”ALI”);
Cout<<(“\n l=%d”;&u.l);
Cout<<(“\n k=%d”;&u.k);
Cout<<(“\n c=%d”;&u.c);
};
Birlashmalarning asosiy avfzalliklaridan biri hotira biror qismi qiymatini har hil tipdagi qiymat shaklida qarash mumkindir. Misol uchun qo’yidagicha birlashma union {float f; unsigned long k; char h[4];}fl;
Hotiraga fl.f=2.718 haqiqiy son yuborsak uning ichki ko’rinishi kodini fl.l yordamida ko’rishimiz, yoki alohida baytlardagi qiymatlarni fl.h[0]; fl.h[1] va hokazo yordamida qo’rishimiz mumkin.
Birlashmalar imkoniyatlarini ko’rsatish uchun bioskey() funktsiyasidan foydalanishni ko’rib chiqamiz. Bu funktsiya bios.h sarlavhali faylda joylashgan bo’lib, qo’yidagi prototipga ega:
int bioskey(int);
MS DOS operatsion tizimida ihtiyoriy klavishaning bosilishi klaviatura buferiga ieei bayt ma'lumot yozilishiga olib keladi.
Agar funktsiyaga bioskey(0) shaklda murojat qilinsa va bufer bo’sh bo’lsa biror klavishaga bosilishi kutiladi, agar bufer bo’sh bo’lmasa funktsiya buferdan ikki baytli kodli o’qib butun son sifatida qaytaradi. Funktsiyaga bioskey(0) shaklda murojat qilinsa va bufer bo’sh bo’lsa biror klavisha bosilishi kutiladi, agar bufer bo’sh bo’lmasa funktsiya buferdagi navbatdagi kodni qaytaradi. Funktsiyaga bioskey(1) shaklda murojat qilish bufer bush yoki bo’shmasligini aniqlashga imkon beradi. Agar bufer bo’sh bo’lmasa funktsiya buferdagi navbatdagi kodni qaytaradi, lekin bu kod buferdan o’chirilmaydi.
Qo’yidagi dastur buferga kelib tushuvchi kodlarni ukib monitorga chikarishga imkon beradi:
# include
# include
void main()
{
union
{ char rr[2];
int ii;
} cc;
unsigned char scn,asc;
Cout<<(“\n\n Ctrl+Z bilan chikish.”
Cout<<(“\n Klavigani bosib, kodini oling. \n ”);
Cout<<(“\n SCAN || ASCII”);
Cout<<(“\n (10) (16) (10) (16)”);
do
{ Cout<<(“\n”);
cc.ii=bioskey(0);
asc=cc.hh[0];
scn=cc.hh[1];
Cout<<( “ %4d %3xH || %4d %3xH |”,scn,scn,asc,asc);
}
while(asc!=26 || scn!=44);
}
Bu dasturda cc nomli birlashma kiritilgan bo’lib, cc.ii elementiga bioskey(0) funktsiyasi natijasi yoziladi. So’ngra natijaning alohida baytlari sken va ASCII kodlar sifatida monitorga chiqariladi.
Tsikl to 26 ASCII kod va 44 sken kod paydo bo’lmaguncha (CTRL+Z klavishlari bosilmaguncha) davom etadi.
|
| |