C++ dasturlash tilida ma’lumotlarning murakkab toifalari (struktura) bilan ishlash
MAVZU: C++ dasturlash tilida ma’lumotlarning murakkab toifalari (struktura) bilan ishlash C++ tilida ishlatiladigan ma'lumotlar 2 toifaga, oddiy va murakkab toifadagi ma'lumotlarga bo’linadi. Oddiy toifadagi ma'lumotlarning boshqa toifadagi ma'lumotlardan asosiy farqlanuvchi bеlgisi - ularning tartiblanganligi va yaxlitligidadir, ya'ni masalan INT toifasiga mansub ixtiyoriy kattalik alohida raqamlarga bo’linmaydigan yaxlit kattalikdir (INT toifasidagi kattalik sifatida bitta butun son tushuniladi). Murakkab toifadagi ma’lumotlar bir nechta kattaliklar ketma-ketligidan , to’plamidan iborat. Shuning uchun bu toifalarni tarkiblashgan toifalar deb yuritiladi. C++ tilida murakkab toifalardan massiv toifasi deyarli har bir dasturda ishlatiladi. Massiv - bu umumiy nomga ega bo’lgan bir xil toifadagi ma’lumotlarning tartiblangan ketma-ketligidir. Odatda ma’lumotlar ro’yhatlarini, turli ko’rinishdagi jadval elementlarini massivlar ko’rinishida ifodalash qulaydir. Masalan, quyida tartiblangan haqiqiy sonlar massivi keltirilgan: (1.5, 14.7, -5.0, 8.5, 0.45), bu massivning bazaviy toifasi esa haqiqiy (float) toifadir. Massiv tushunchasini A – umumiy nomga ega va bir toifadagi qo’zg’almas kattaliklar kеtma-kеtligidan iborat bo’lgan sonli vеktor misolida tushuntirish mumkin: A(5) = (a 1 , a 2 , a 3 , a 4 , a 5 ), bu еrda a1, a2…- massiv elеmеntlaridir. Ularni ifodalashda ko’rsatkichli (indеksli) o’zgaruvchilardan foydalaniladi. Matеmatika kursidan ma'lumki, ko’rsatkich (indеks) o’zgaruvchilarning tartiblangan kеtma-kеtlikdagi o’rnini bildiradi. Borland C++ Builder 6 tilida o’zgaruvchining ko’rsatkichi to’rtburchak qavslar ichiga olinib yoziladi , ya'ni A[1]=1.5, A[2]=14.7, A[3]=-5.0, A[4]=8.5, A[5]=0.45. Ma`lumotlarning barcha toifalari oddiy bo`lsin, murakkab bo`lsin faqat bir toifadagi ma`lumotlarni saqlash uchun ishlatiladi. Masalan Integer toifasi faqat butun sonlarni saqlash uchun ishlatiladi. Massivlar va to`plamlarda esa elementlari
qaysi toifada e`lon qilingan bo`lsa, faqat shu toifadagi ma`lumotlarni saqlaydi. Amaliyotda esa axborotlarni saqlash, qayta ishlash uchun ma`lumotlarning har hil toifalarini aralashtirib ishlashga to`g`ri keladi. Ma`lumotlarning aralash toifasi bilan ishlash uchun C++ da struct (struktura) dan foydalanish mumkin. Struktura deb, har hil toifadagi ma`lumotlarning cheklangan to`plamiga aytiladi. Strukturalar – maydon deb ataluvchi chekli sondagi hadlardan tashkil topadi. Struktura nimaligini tushinish uchun quyidagi misolni ko`rib chiqamiz. № Familiya Ism Baholar 1 Abdullaev Dilshod 5 5 4 5 2 Abdurahimov Ne`mat 3 3 4 5 3 Rejepova Dilbar 5 5 5 5 4 Karimova Hafiza 4 4 5 5 Bu jadvalning har bir satri har hil toifadagi alohida elementlardan tuzilgan: 1. Tartib raqami – butun sonlardan 2. Familiya Ism – belgili satrlardan 3. Baholar – butun sonlar massividan tashkil topgan. Bu ma`lumotlarni bir guruhga, strukturaga birlashtirish mumkin. Quyidagicha belgilashlar kiritamiz: Imtixon – strukturaning nomi; N – tartib raqami; FI – Familiya ism; B – baholar; Strukturalarni e`lon qilish: Strukturalarni e`lon qilish uchun struct xizmatchi so'zidan foydalaniladi. struct struktura_nomi { toifa_1 nom1; toifa_2 nom2; . . . toifa_n nomn; };
Struktura elementiga murojaat Struktura orqali yangi ma'lumotlar toifasi hosil qilinadi. Prоgrammada strukturalardan fоydalanish shu toifadagi o’zgaruvchilar e’lоn qilinish orqali bo'ladi. Yuqoridagi misol uchun strukturani e`lon qilish quyidagicha bo`ladi: struct imtixon { int n; // tartib raqami char FI[30]; // Familiya ismi int b[4]; // Baholar }; Struktura elementlari (maydonlari) programmada oddiy o`zgaruvchilar kabi ishlatiladi. Struktura maydoni elementlari ustida, uning toifasida nima amal bajarish mumkin bo`lsa shu amallarni bajarish mumkin. Strukturaning mayddoniga murojaat qilish uchun, o'zgaruvchidan keyin nuqta (.) qo'yiladi. imtixon t; // talaba t.n = 1; t.b[0] = 5; t.b[1] = 5; t.b[2] = 4; t.b[3] = 5; strcpy(t.FI, "Abdullaev Dilshod"); Butun va haqiqiy toifadagi o'zgaruvchilarga qiymat berish oddiy amalga oshiriladi. Satrlarga qiymat berish esa, strcpy - funksiyasi orqali amalga oshiriladi. Keling oddiy ishchi nomli struktura (sinf) hosil qilamiz va undan programmada foydalanishni o'rganamiz. Ishchi strukturasi quyidagi maydonlarni o'z ichiga oladi: ? Familiy ? Ism ? Lavozim ? Oklad ? Yosh
Strukturaga ma'lumotlarni kiritish va chiqarishda amallarni qayta yuklashdan foydalanamiz. Amallarni qayta yuklashni, C++ da ob'ektga yo'naltirilgan dasturlash qismida batafsil to'xtalamiz. Xozircha asosiy e'tiborni strukturaga qaratamiz. Ishchi strukturasin hosil qilish va dasturda foydalanish #include <iostream.h> // 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 << "\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 <iostream.h> // 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)