Strukturalar 2 Strukturalar Maʼlumki, biror predmet sohasidagi masalani yechishda undagi obʼektlar bir nechta, har xil turdagi parametrlar bilan aniqlanishi mumkin. Masalan, tekislikdagi nuqta haqiqiy turdagi X - abtsissa va Y - ordinata juftligi – (x,y) koʼrinishida beriladi. 3 Strukturalar Talaba haqidagi maʼlumotlar – satr turidagi Talaba Familiyasi, Ismi, Sharifi (satr), Mutaxassislik yoʼnalishi (satr), Talaba yashash adresi (satr), tugʼilgan yili (butun), oʼquv bosqichi (butun), haqiqiy turdagi reyting bali(butun), mantiqiy turdagi talaba jinsi haqidagi maʼlumot va boshqalardan shakllanadi. 4 Strukturalar S++ tilida bir yoki har xil turdagi berilganlarni jamlanmasi struktura deb nomlanadi. Struktura foydalanuvchi tomonidan aniqlangan berilganlarning yangi turi hisoblanadi. Struktura quyidagicha aniqlanadi: struct <struktura_nomi> // struktura nomi { <1_tur> <1_maydon_nomi>; // 1-maydon e`loni <2_tur> <2_maydon_nomi>; // 1-maydon e`loni . . . <n_tur> <n_maydon_nomi>; // 1-maydon e`loni }; 5 Strukturalar Xossalari: • muallif (satr) • nomi (satr) • nashr qilingan yili (butun son) • varaqlar soni (butun son) Masala: bu berilganlarni birlashtirish Struktura – o’ziga bir nechta har xil tiplardagi ma’lumotlarni o’z ichiga oluvchi ma’lumotlar tipi. Strukturaga yangi ma’lumotlar tipi qanday kiritiladi? struktura nomi struct Book { char author[40]; char title[80]; int year; int pages; }; ! maydon // // // // muallif, satrli nomi, satrli nashr qilingan yil, butun son varaqlar soni, butun son Xotira ajratilmaydi! 6 Struktura bilan qanday ishlanadi? Elon qilish: Book b; // bu yerda xotira ajratiladi! Book b1 = { “Yu. Golosinskiy", “Ingliz tili … ", 2010, 576}; Maydonlarni to’ldirish: strcpy ( b.author, "Yu.Golosinskiy" ); strcpy ( b.title, “Ingliz tili … " ); b.year = 2010; b.pages = 576; Strukturani ! maydoniga murojaat qilishda nuqtadan foydalaniladi! Klaviaturadan kiritish: Cout<< “Muallif" ; Cin>> b.author; Cout<< “Kitob nomi" ; Cin>> b.title; Cout<< “Nashr qilingan yili, varaqlar soni " ; Cin>>b.year; Cin>>b.pages ); To’ldirilgan ma’lumotni chiqarish dasturti struct Book { char author[40]; // muallif, satrli char title[80]; // nomi, satrli int year; // nashr qilingan yil, butun son int pages; // varaqlar soni, butun son }; void Kitob_nomi(Book); int main() { Book b; strcpy(b.author,"Yu.Golosinskiy"); strcpy(b.title,"Ingliz tili ... "); b.year=2010; b.pages=576; Kitob_nomi(b); } void Kitob_nomi(Book b) { cout << "Kitob nomi: " << b.title << endl; cout << "Kitob muallifi: " << b.author << endl; getch();} 7 8 Klaviaturadan kiritish va chiqarish #include <iostream> #include <string.h> using namespace std; struct Book { char author[40]; // muallif, satrli char title[80]; // nomi, satrli int year; // nashr qilingan yil, butun son int pages; // varaqlar soni, butun son }; void Kitob_nomi(Book); int main() { Book b; cout<< "Muallif " ; cin>> b.author ; cout<<"Kitob nomi "; cin>> b.title; cout<<"Nashr qilingan yili, varaqlar soni " ; cin>> b.year; cin>>b.pages ; Kitob_nomi(b); } void Kitob_nomi(Book b) { cout << "Kitob nomi: " << b.title << endl; cout << "Kitob muallifi: " << b.author << endl; return;} 9 Birlashmalar Xotiraning bitta sohasida (bitta adres boʼyicha) har xil turdagi bir nechta berilganlarni saqlash birlashmalar orqali amalga oshiriladi. 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]; }; 10 Birlashmalar struct kitob{int narxi, yili; kitob t34 = {25000,2012,200}; kitob pz4 = {80000,2011,300}; Strukturani barcha fayllarini chiqarish cout << t34.narxi << "\n"; cout << t34.yili << "\n"; cout << t34.beti << "\n"; Birdaniga hammasini sikl orqali chiqarish for (int i; i < 3; i++) { cout << t34.t[i] << "\n";} int beti;}; Birlashmalar Bu ikki xil usulni birlashtirish mumkin. Bunda structura ko’rinishi quyidagicha bo’ladi union kitob { struct { int narxi,yili; int beti; }; int t[3]; }; 11 Birlashmalar struct union ga almashtirildi va uning ichida barcha o’zgaruvchilar ishlatilmoqda. Endi o’zgaruvchi yaratamiz va unga murojaat qilamiz kitob t34; t34.narxi = 25000; t34.yili = 2013; t34.beti = 200; cout << t34.t[0] << "\n"; cout << t34.t[1] << "\n"; cout << t34.t[2] << "\n"; 12 Birlashmalar 13 Bu yerda narxi va t[0] xotiradagi bitta joyni har xil ko’rinishda nomlanishidir. yili va t[1], beti va t[2] lar ham xuddi shunday. Keyinchali union quyidagicha ishlatiladi struct kitob { union { struct { int narxi,yili; int beti; }; int t[3]; }; }; struct kitob va union kitob bir xil ishlaydi.