Ахборот хавфсизлигига бўладиган хавфлар


Strukturalarga ko‘rsatkich


Download 127.93 Kb.
bet3/6
Sana18.06.2023
Hajmi127.93 Kb.
#1569147
1   2   3   4   5   6
Bog'liq
Ma’ruza 13. Tuzilmalar

13.4. Strukturalarga ko‘rsatkich
Struktura elementlariga ko‘rsatkichlar orqali murojaat qilish mumkin. Buning uchun strukturaga ko‘rsatkich o‘zgaruvchisi e’lon qilinishi kerak. Masalan, yuqorida keltirilgan misolda Talaba strukturasiga ko‘rsatkich quyidagicha e’lon qilinadi:
Talaba * k_talaba;
Ko‘rsatkich orqali aniqlangan struktura elementlariga murojaat «.» bilan emas, balki «->» vositasida amalga oshiriladi:
cout<FISh;
Strukturalarni ko‘rsatkich va adresni olish (&) vositasida funksiya argumenti sifatida uzatish mumkin. Quyida keltirilgan dastur bo‘lagida strukturani Talaba_Kiritish() funksiyasiga ko‘rsatkich orqali, Talabalar_FISh() funksiyasiga esa adresni olish vositasida uzatishga misol keltirilgan.
...
void Talaba_Kiritish(Talaba *t);
void Talabalar_FISh(Talaba & t);
int main( )
{
Talaba * k_talaba;
k_talaba=(Talaba*)malloc(n*sizeof(Talaba));
Talaba_Kiritish(k_talaba);
Talabalar_FISh(*k_talaba);
return 0;
}
void Talabalar_FISh(Talaba & t)
{
for(int i=0; i{cout<<(&t+i)->FISh<}
void Talaba_Kiritish(Talaba *t)
{
for(int i=0; i{
cout<cout<<" Talaba FISh :";
cin.getline((t+i)->FISh,30);
cout<<" Kurs:";
cin>>(t+i)->Kurs;
...
}
}
Shunga e’tibor berish kerakki, dinamik ravishda hosil qilingan strukturalar massivi elementi bo‘lgan strukturaning maydoniga murojaatda «*» belgisi qo‘llanilmaydi.
Masala. Futbol jamoalari haqidagi ma’lumotlar - jamoa nomi, ayni paytdagi yutuqlar, durang va mag‘lubiyatlar sonlari, hamda raqib darvozasiga kiritilgan va o‘z darvozasidan o‘tkazib yuborilgan to‘plar sonlari bilan berilgan. Futbol jamoalarining turnir jadvali chop qilinsin. Jamoalarni jadvalda tartiblashda quyidagi qoidalarga amal qilinsin:
1) jamoalar to‘plagan ochkolarini kamayishi bo‘yicha tartibla-nishi kerak;
2) agar jamoalar to‘plagan ochkolari teng bo‘lsa, ulardan nisbatan ko‘p g‘alabaga erishgan jamoa jadvalda yuqori o‘rinni egallaydi;
3) agar ikkita jamoaning to‘plagan ochkolari va g‘alabalar soni teng bo‘lsa, ulardan nisbatan ko‘p to‘p kiritgan jamoa jadvalda yuqori o‘rinni egallaydi.
Jamoa haqidagi berilganlar struktura ko‘rinishida, jadval esa struktura massivi sifati aniqlanadi:
struct Jamoa
{
string Nomi;
int Yutuq, Durang, Maglub, Urgan_tup, Utkazgan_tup;
int Uyin, Ochko;
};
Bu yerda Uyin maydoni Yutuq, Durang va Maglub maydonlar yig‘indisi, jamoa to‘plagan ochkolar - Ochko=3*Yutuq+1*Durang ko‘rinishida aniqlanadi. Jamoalar massivi Ochko, Yutuq va Urgan_tup maydonlari bo‘yicha tartiblanadi.
Dastur matni:
struct Jamoa
{
string Nomi;
int Yutuq, Durang, Maglub, Urgan_tup, Utkazgan_tup;
int Uyin, Ochko;
};
const nom_uzunligi=10;
int jamoalar_soni;
Jamoa * Jamoalar_Jadvali()
{
char *jm_nomi=(char*)malloc(nom_uzunligi+1);
cout<<" Jamoalar soni: ";
cin>>jamoalar_soni;
Jamoa * jm=new Jamoa[jamoalar_soni];
for(int i=0; i{
cin.ignore();
cout<cout<<" Nomi: ";
cin.getline(jm_nomi,nom_uzunligi);
while(strlen(jm_nomi)strcat(jm_nomi," ");
jm[i].Nomi.assign(snomi);
cout<<" Yutuqlar soni: ";
cin>> jm[i].Yutuq;
cout<<" Duranglar soni: ";
cin>>jm[i].Durang;
cout<<" Mag'lubiyatlar soni: ";
cin>>jm[i].Maglub;
cout<<" Raqib darvozasiga urilgan to'plar soni: ";
cin>>jm[i].Urgan_tup;
cout<<" O'z darvozasigan o'tkazgan to'plar soni: ";
cin>>jm[i].Utkazgan_tup;
jm[i].Uyin=jm[i].Yutuq+jm[i].Durang + jm[i].Maglub;
jm[i].Ochko=jm[i].Yutuq*3 +jm[i].Durang;
}
free(snomi);
return jm;
}
void Utkazish(Jamoa & jamoa1, const Jamoa & jamoa2)
{
jamoa1.Nomi=jamoa2.Nomi;
jamoa1.Yutuq=jamoa2.Yutuq;
jamoa1.Durang=jamoa2.Durang;
jamoa1.Maglub=jamoa2.Maglub;
jamoa1.Urgan_tup=jamoa2.Urgan_tup;
jamoa1.Utkazgan_tup=jamoa2.Utkazgan_tup;
jamoa1.Uyin=jamoa2.Uyin;
jamoa1.Ochko=jamoa2.Ochko;
}
Jamoa * Jadvalni_Tartiblash(Jamoa * jm)
{
bool urin_almashdi=true;
for(int i=0;i{
Jamoa Vaqtincha;
urin_almashdi=false;
for(int j=i; j{
// j-jamoaning ochkosi (j+1)- jamoa ochkosidan katta
// bo‘lsa, takrorlashning keyingi qadamiga o‘tilsin.
if(jm[j].Ochko>jm[j+1].Ochko) continue;
//j va (j+1)-jamoalarning ochkolari teng va j-jamoa
// yutuqlari (j+1)- jamoa yutuqlaridan ko‘p bo‘lsa,
// takrorlashning keyingi qadamiga o‘tilsin.
if(jm[j].Ochko==jm[j+1].Ochko &&
jm[j].Yutuq>jm[j+1].Yutuq) continue;
//j va (j+1)-jamoalarning ochkolari va yutuqlar soni
// teng va j-jamoa urgan to‘plar soni (j+1)- jamoa
//urgan to‘plardan ko‘p bo‘lsa, takrorlashning
//keyingi qadamiga o‘tilsin.
if(jm[j].Ochko==jm[j+1].Ochko &&
jm[j].Yutuq==jm[j+1].Yutuq &&
jm[j].Urgan_tup>jm[j+1].Urgan_tup) continue;
//yuqoridagi shartlarning birortasi ham bajarilmasa,
//j va (j+1)-jamoalar o‘rinlari almashtirilsin.
urin_almashdi=true;
Utkazish(Vaqtincha,jm[j]);
Utkazish(jm[j],jm[j+1]);
Utkazish(jm[j+1], Vaqtincha);
}
}
return jm;
}
void Jadavlni_Chop_Qilish(const Jamoa *jm)
{
char pr=’ ’;
cout<<" FUTBOL JAMOALARINING TURNIR JADVALI\n" ;
cout<<"------------------------------------------\n";
cout<<"| JAMOA | O | Y | D | M |UrT|O'T|OCHKO|\n";
cout<<"------------------------------------------\n";
for(int i=0; i{
cout<<"|"<if(jm[i].Uyin<10)cout<
if(jm[i].Yutuq<10)cout<
if(jm[i].Durang<10)cout<
cout<if(jm[i].Maglub<10)cout<
cout<if(jm[i].Urgan_tup<10)cout<
cout<if(jm[i].Utkazgan_tup<10)cout<
cout<if(jm[i].Ochko<10)cout<
cout<}
cout<<"------------------------------------------\n";
}
int main()
{
Jamoa *jamoa;
jamoa=Berilganlarni_kiritish();
jamoa=Jadvalni_Tartiblash(jamoa);
Jadvalni_Chop_Qilish(jamoa);
return 0;
}
Dastur bosh funksiya va quyidagi vazifalarni bajaruvchi to‘rtta funksiyadan tashkil topgan:
1) Jamoa * Jamoalar_Jadvali() - jamoalar haqidagi berilganlarni saqlaydigan Jamoa strukturalaridan tashkil topgan dinamik massiv yaratadi va unga oqimdan har bir jamoa berilganlarni o‘qib joylashtiradi. Hosil bo‘lgan massivga ko‘rsatkichni funksiya natijasi sifa-tida qaytaradi;
2) Jamoa * Jadvalni_Tartiblash(Jamoa * jm) - argument orqali ko‘rsa-tilgan massivni masala sharti bo‘yicha tartiblaydi va shu massivga ko‘rsatkichni qaytaradi;
3) void Utkazish(Jamoa & jamoa1, const Jamoa & jamoa2) - jamoa2 strukturasidagi maydonlarni jamoa1 strukturasiga o‘tkazadi. Bu funksiya Jadvalni_Tartiblash() funksiyasidan massivdagi ikkita strukturani o‘zaro o‘rinlarini almashtirish uchun chaqiriladi;
4) void Jadavlni_Chop_Qilish(const Jamoa *jm) - argumentda berilgan massivni turnir jadvali qolipida chop qiladi.
Uchta jamoa haqida ma’lumot berilganda dastur ishlashining natijasi quyidagicha bo‘lishi mumkin:
FUTBOL JAMOALARINING TURNIR JADVALI
------------------------------------------
| JAMOA | O | Y | D | M |UrT|O‘T |OChKO|
------------------------------------------
|Bunyodkor |20 |15 | 3 | 2 |30 |10 | 48 |
|Paxtakor |20 |11 | 5 | 4 |20 |16 | 38 |
|Neftchi |20 | 8 | 5 | 7 |22 |20 | 29 |
------------------------------------------



Download 127.93 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6




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