Strukturalarni e’lon qilish Struktura elementiga murojaat Birlashmalar va ular ustida amallar
Download 18.8 Kb.
|
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 satrining o‘lchamida, ya’ni 10 bayt joy ajratiladi. Vaqtning har bir momentida birlashmada, e’lon qilingan maydonlarning faqat bittasining 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 birlashma 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 foydalaniladi, ya’ni xotiraning bitta adresiga haqiqiy son va belgilar massivi 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling