Toshkent Axborot Texnologiyalar Universiteti
qoshidagi 2 – sonli akademik litseyi
Mavzu: C++ dasturlash tilida strukturalar bilan ishlash texnologiyasi
Bajardi: 305 – guruh o’quvchisi Jalilov S.
Ilmiy rahbar: Mallayev O.
Toshkent - 2012
Reja:
1. Strukturali tiplar va strukturalar.
2. Konkret strukturalarni tasvirlash.
3. Strukturalar uchun hotiradan joy ajratish.
4. Strukturalarga murojaat.
5. Strukturalar va massivlari.
6. Strukturalar va ko’rsatkichlar.
Strukturali tip.
Struktura bu turli tipdagi ma'lumotlarning birlashtirilgan tipdir. Struktura har hil tipdagi elementlar-komponentalardan iborat buladi. Strukturalar qo’yidagicha ta'riflanishi mumkin:
Struct struturali_tip_nomi
{Elementlar_ta'riflari}
Misol uchun ombordagi mollarni tasvirlovchi strukturani quramiz. Bu struktura qo’yidagi komponentalarga ega bo’lishi mumkin:
- Mol nomi (char*)
- Sotib olish narhi (long)
- Ustiga quyilgan narh, foizda (float)
- Mol soni (int)
- Mol kelib tushgan sana (char[9])
Bu struktura dasturda qo’yidagicha ta'riflanadi:
struct goods {
char* name;
long price;
float percent;
int vol;
char date[9];
} year;
Konkret strukturalar va strukturaga ko’rsatkichlar bu tip yordamida qo’yidagicha ta'riflanishi mumkin:
Struct goods food, percon; struct goods *point_to;
Strukturalarni tasvirlashda ihtiyoriy murakkab tip uchun nom berishga imkon beruvchi typedef hizmatchi so’zidan foydalanish mumkin. Bu holda strukturali tip qo’yidagi shaklda ta'riflanadi:
Typedef struct
{Elementlar_ta'riflari}
strukturali_tip_nomi
Misol uchun:
Typedef struct
{ double real;
double imag;
}
complex;
Bu misolda kompleks sonni tasvirlovchi strukturali tip complex kiritilgan bo’lib, kompleks son haqiqiy qismini tasvirlovchi real va mavhum qismini tasvirlovchi komponentalaridan iboratdir. Konkret strukturalar bu holda qo’yidagicha tasvirlanadi:
Complex sigma,alfa;
Strukturali tip typedef yordamida aniqlangan nomdan tashqari, standart usulda aniqlangan nomga ega bo’lishi mumkin. Qo’yidagi misolda kasr sonni tasvirlovchi numerator –sur'at va denominator-mahraj komponentalaridan iborat struktura ta'rifi keltirilgan.
Typedef struct rational_fraction
{ int numerator;
int denominator;
} fraction;
Bu misolda fraction kasrning Typedef orqali kiritilgan nomi, rational_fraction standart usulda kiritilgan nom. Bu holda konkret strukturalar qo’yidagicha tasvirlanishi mumkin:
Struct rational_fraction alfa; fraction beta;
Yuqoridagi misollarda konkret strukturalarni ta'riflashni ikki usuli ko’rib chiqilgan. Agar strukturali tip standart usulda kiritilgan bo’lsa konkret strukturalar qo’yidagi shaklda ta'riflanadi:
Struct < struktura nomi>
Masalan Struct goods food
Agar strukturali tip typedef hizmatchi so’zi yordamida kiritilgan bo’lsa konkret strukturalar qo’yidagi shaklda ta'riflanadi:
< struktura nomi>
Masalan Complex sigma
Bu usullardan tashqari konkret strukturalarni ta'riflashning boshqa usullari ham mavjuddir. Strukturalar ta'riflanganda konkret strukturalar ruyhatini kiritish mumkin:
Struct struturali_tip_nomi
{Elementlar_ta'riflari}
Konkret_strukturalar_ruyhati.
Misol:
Struct student
{
char name[15];
char surname[20];
int year;
} student_1, student_2, student_3;
Bu holda student strukturali tip bilan birga uchta konkret struktura kiritiladi. Bu strukturalar student ismi (name[15]), familiyasi (surname[20]), tugilgan yilidan (year) iborat.
Strukturali tip ta'riflanganda tip nomi ko’rsatilmay, konkret st'rukturalar ruyhati ko’rsatilishi mumkin:
Struct
{Elementlar_ta'riflari}
Konkret_strukturalar_ruyhati.
Qo’yidagi ta'rif yordamida uchta konkret struktura kiritiladi, lekin strukturali tip kiritilmaydi.
struct {
char processor [10];
int frequency;
int memory;
int disk;
} IBM_486, IBM_386, Compaq;
Strukturali tip kiritilishi bu tip uchun hotiradan joy ajratilishiga olib kelmaydi. Har bir konkret struktura (ob'ekt) ta'riflanganda, shu ob'ekt uchun elementlar tiplariga qarab hotiradan joy ajratiladi. Hotiradan joy zich ajratilganda struktura uchun ajratilgan joy hajmi har bir element uchun zarur bo’lgan hotira hajmlari yig’indisiga teng bo’ladi. Shu bilan birga hotiradan joy zich ajratilmasligi ham mumkin ya'ni elementlar orasida bo’sh joylar ham qolishi mumkin. Bu bo’sh joy keyingi elementni hotira qismlarining qabul qilingan chegaralari bo’yicha tekislash uchun qoldiriladi. Misol uchun butun tipdagi elementlar juft adreslardan boshlansa, bu elementlarga murojaat tezroq amalga oshiriladi. Konkret strukturalarni joylashuviga ba'zi kompilyatorlarda #pragma preprotsessor direktivasi yordamida ta'sir o’tkazish mumkin. Bu direktivadan qo’yidagi shaklda:
Pragma pack(n)
Bu erda n qiymati 1,2 eki 4 ga teng bo’lishi mumkin.
Pack(1) – elementlarni bayt chegaralari bo’yicha tekislash;
Pack(2) – elementlarni so’zlar chegaralariga qarab tekislash;
Pack(4) – elementlarni ikkilangan muzlar chegaralariga qarab tekislash.
Struktura uchun ajratilgan joy hajmini qo’yidagi amallar yordamida aniqlash mumkin:
Sizeof (strukturali_tip_nomi);
Sizeof (struktura_nomi);
Sizeof struktura_nomi.
Ohirgi holda struktura nomi ifoda deb qaraladi. Ifodaning tipi aniqlanib, hajmi hisoblanadi.
Misol uchun:
Sizeof (struct goods)
Sizeof (tea)
Sizeof coat
Konkret strukturalar ta'riflanganda massivlar kabi initsializatsiya qilinishi mumkin. Masalan
complex sigma {1.3;12.6};
Struct goods coats={“pidjak’,40000,7.5,220,”12.01.97”);
Bir hil tipdagi strukturalarga kiymat berish amalini kullash mumkin:
Complex alfa; alfa=sigma;
Lekin strukturalar uchun solishtirish amallari aniqlanmagan.
Strukturalar elementlariga qo’yidagicha murojaat qilish mumkin:
Struktura nomi.element_nomi.
Nuqta amali’ struktura elementiga murojaat qilish amali deyiladi. Bu amal qavs amallari bilan birga eng yuqori ustivorlikka egadir.
Misol:
Complex alfa={1.2,-4.5},betta={5.6,-7.8),sigma;
Sigma.real=alfa.real+betta.real;
Sigma.imag=alfa.imag+betta.imag;
Konkret strukturalar elementlari dasturda alohida kiritilishi va chiqarilishi zarurdir. Qo’yidagi misolda ikki kompleks son qiymatlari kiritilib, yigindisi hosil qilinadi:
#include
typedef struct {
double real;
double imag;
} complex;
void main()
{
complex x,y,z;
Cout<<(“\n :”);Cin>>(“%f”,&x.real);
Cout<<(“\n :”);Cin>>(“%f”,&x.imag);
Cout<<(“\n :”);Cin>>(“%f”,&y.real);
Cout<<(“\n :”);Cin>>(“%f”,&y.imag);
z.real=x.real+y.real;
z.imag=x.imag+y.imag;
Cout<<(“\n %f”,&z.real);
Cout<<(“\n %f”,&z.imag);
}
Massivlar strukturalar elementlari sifatida.
Massivlarni strukturalar elementi sifatida ishlatilishi hech qanday qiyinchilik tug’dirmaydi. Biz yuqorida simvolli massivlardan foydalanishni ko’rdik. Qo’yidagi misolda fazoda berilgan nuqtaviy jismni tasvirlovchi komponentalari jism massasi va koordinatalaridan iborat struktura kiritilgan bo’lib, nuqtaning koordinatalar markazigacha bo’lgan masofasi hisoblangan.
Include
#include
void main()
{
struct
{
double mass;
float coord[3]
} point={12.3,{1.0,2.0,-3.0}};
int i;
float s=0.0;
for (i=0;i<3; i++)
s+=point.coord[i]*point.coord[i];
Cout<<(“\n masofa=%f”,sqrt(s));
}
Bu misolda point strukturasi nomsiz strukturali tip orqali aniqlangan bo’lib, qiymatlari initsializatsiya yordamida aniqlanadi.
Do'stlaringiz bilan baham: |