Strukturalarni e’lon qilish Struktura elementiga murojaat Birlashmalar va ular ustida amallar


Download 18.8 Kb.
bet2/3
Sana18.06.2023
Hajmi18.8 Kb.
#1585244
1   2   3
Bog'liq
3-Amaliy mashg\'ulot

cout << "Ismni kiriting\n";
input >> k.ism;

cout << "Lavozimini kiriting\n";
input >> k.lavozim;

cout << "Okladni kiriting ($)\n";
input >> k.oklad;

cout << "Yoshini kiriting\n";
input >> k.yosh;

return input;
}
// chiqarish amalini qayta yuklash
ostream& operator << (ostream& out, ishchi k)
{
out << "\nFamiliya:\t" << k.familiya;
out << "\nism:\t\t" << k.ism;
out << "\nlavozim:\t" << k.lavozim;
out << "\noklad:\t\t" << k.oklad << "$";
out << "\nyosh:\t\t" << k.yosh << endl;

return out;
}
int main()
{
// ishchi sinfidagi ob'ektni e'lon qilish
ishchi p;

cin >> p;
cout << p;
system (“pause”); 
return 0;
}

n ta ishchi haqidagi ma'lumotlarni o'zida saqlovchi fayl hosil qiling. 21 yoshdan kichik bo'lgan ishchilarni chiqaruvchi programma tuzilsin.
#include
// ishchi sinfini e'lon qilish
struct ishchi
{
char familiya[30];
char ism[30];
char lavozim[30];
float oklad;
int yosh;
};
// kiritish amalini qayta yuklash
istream& operator >> (istream& input, ishchi& k)
{
cout << "Familiyani kiriting\n";
input >> k.familiya;

cout << "Ismni kiriting\n";
input >> k.ism;

cout << "Lavozimini kiriting\n";
input >> k.lavozim;

cout << "Okladni kiriting ($)\n";
input >> k.oklad;

cout << "Yoshini kiriting\n";
input >> k.yosh;

return input;
}
// chiqarish amalini qayta yuklash
ostream& operator << (ostream& out, ishchi k)
{
out << k.familiya;
out << " " << k.ism;
out << "\t" << k.lavozim;
out << "\t" << k.oklad << "$";
out << "\t" << k.yosh << endl;

return out;
}
int main()
{
// ishchi sinfidagi ob'ektni e'lon qilish
ishchi p;
FILE * f;
int n = 0;

f = fopen("ishchi.txt", "a+");
cout << "Faqat ro'yxatni ko'rish uchun 0 kiriting\n";
cout << "Yangi kiritiladigan ishchilar sonini kiriting\n"; cin >> n;

if (n >= 1)
for (int i = 1; i <= n; i++)
{
cout << i << " - ishchi ma'lumotlarini kiriting\n";
cin >> p;

// faylga ma'lumotlarni yozish
fwrite(&p, sizeof(ishchi), 1, f);
}
// fayl boshiga o'tish
rewind(f);

cout << "Ishchilar ro'yxati\n";
n = 0;
while (fread(&p, sizeof(ishchi), 1, f))
{
n++;
cout << n << " ";
cout << p;
}

// fayl boshiga o'tish
rewind(f);
cout << "21 - yoshdan kichik dasturchilar ro'yxati\n";
n = 0;
while (fread(&p, sizeof(ishchi), 1, f))
{
if (p.yosh <= 21)
{
n++;
cout << n << " ";
cout << p;
}
}

fclose(f);
system (“pause”); 
return 0;
}

Birlashmalar va ular ustida amallar
Birlashmalar xotiraning bitta sohasida (bitta adres bo‘yicha) har xil turdagi bir nechta berilganlarni saqlash imkonini beradi.
Birlashma e’loni union kalit so‘zi, undan keyin identifikator va blok ichida har xil turdagi elementlar e’lonidan iborat bo‘ladi, masalan:
union Birlashma
{
int n;
unsigned long N;
char Satr[10];
};
Birlashmaning bu e’lonida kompilyator tomonidan Birlashma uchun uning ichidagi eng ko‘p joy egallovchi elementning - Satr satri­ning o‘lchamida, ya’ni 10 bayt joy ajratiladi. Vaqtning har bir mo­mentida birlashmada, e’lon qilingan maydonlarning faqat bittasi­ning turidagi berilgan mavjud deb hisoblanadi. Yuqoridagi misolda Birlashma ustida amal bajarilishida uning uchun ajratilgan xotirada yoki int turidagi n yoki unsigned long turidagi N yoki Satr satr qiymati joylashgan deb hisoblanadi.
Birlashma maydonlariga xuddi struktura maydonlariga murojaat qilgandek ‘.’ orqali murojaat qilinadi.
Strukturalardan farqli ravishda birlashma e’lonida faqat uning birinchi elementiga boshlang‘ich qiymat berish mumkin:
union Birlashma
{
int n;
unsigned long N;
char Satr[10];
}
birlashma={25};
Bu misolda birlashma birlashmasining n maydoni boshlang‘ich qiymat olgan hisoblanadi.
Birlashma elementi sifatida strukturalar kelishi mumkin va ular odatda berilganni «bo‘laklarga» ajratish yoki «bo‘laklardan» yaxlit berilganni hosil qilish uchun xizmat qiladi. Misol uchun so‘zni baytlarga, baytlarni tetradalarga (4 bitga) ajratish va qaytadan birlashtirish mumkin.
Quyida baytni katta va kichik yarim baytlarga ajratishda bir­lashma va strukturadan foydalanilgan programmani matni keltirilgan.
#include
union BCD
{unsigned char bayt;
struct
{
unsigned char lo:4;
unsigned char hi:4;
} bin;
} bcd;
int main()
{
bcd.bayt=127;
cout<<”\n Katta yarim bayt : “<<(int)bcd.bin.hi;
cout<<”\n Kichik yarim bayt: “<<(int)bcd.bin.lo;
return 0;
}
Programma bosh funksiyasida bcd birlashmasining bayt o‘lchamida bayt maydoniga 127 qiymati beriladi va uning katta va kichik yarim baytlari chop etiladi.
Programma ishlashi natijasida ekranga quyidagi natijalar chiqadi:
Katta yarim bayt : 7
Kichik yarim bayt: 15
Masala. Haqiqiy turdagi sonning kompьyuter xotirasidagi ichki ko‘rinishini chop qilish. Haqiqiy son float turida deb hisoblanadi va u xotirada 4 bayt joy egallaydi (1-ilovaga qarang). Qo‘yilgan masalani echish uchun birlashma xususiyatdan foydalani­ladi, ya’ni xotiraning bitta adresiga haqiqiy son va belgilar mas­sivi joylashtiriladi. Haqiqiy son xotiraga o‘qilib, belgilar massivining har bir elementining (baytining) ikkilik ko‘rinishi chop etiladi.
Programma matni: #include

Download 18.8 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling