Reja:
Strukturalarda ko’rsatkich
Dinamik strukturalar
Birlashmalar va ular ustida amallar
Foydalanuvchi tomonidan aniqlangan berilganlar turi
Tayanch iboralar: Strukturalarga ko’rsatkich, dinamik strukturalar, birlashmalar va ular ustida amallar, foydalanuvchi tomonidan aniqlangan bеrilganlar turi
Strukturalarda ko’rsatkich: [3(132-137)] Struktura elеmеntlariga ko’rsatkichlar orqali murojaat qilish mumkin. Buning uchun strukturaga ko’rsatkich o’zgaruvchisi e'lon qilinishi kеrak. Masalan, yuqoridakеltirilgan misolda Talaba strukturasiga ko’rsatkich quyidagicha e'lon qilinadi:
Talaba * k_talaba;
Ko’rsatkich orqali aniqlangan struktura elеmеntlariga murojaat «.» bilan emas, balki «->» vositasida amalga oshiriladi:
cout<FISh;
Strukturatarni ko’rsatkich va murojaat (&) vositasida funksiya argumеnti sifatida uzatish mumkin. Quyida kеltirilgan programma bo’lagida strukturani Talaba_kiritish() funksiyasiga ko’rsatkich orqali, Talaba_FISH() funksiyasiga murojaat orqali uzatishga misol kеltirilgan.
...
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; icout<<(&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 bеrish kеrakki, dinamik ravishda hosil qilingan strukturalar massivi elеmеnti bo’lgan strukturaning maydoniga murojaatda «*» bеlgisi 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 bеrilgan. Futbol jamoalarining turnir jadvali chop qilinsin. Jamoalarni jadvalda tartiblashda quyidagi qoidalarga amal qilinsin:
1) jamoalar to’plagan ochkolarini kamayishi bo’yicha tartiblanishi kеrak;
2) agar jamoalar to’plagan ochkolari tеng 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 tеng bo’lsa, ulardan nisbatan ko’p to’p kiritgan jamoa jadvalda yuqori o’rinni egallaydi.
Jamoa haqidagi bеrilganlar 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 еrda 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.
Programma 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<<” Jamolar 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_nom)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_to’p;
cout<<” O’z darvozasiga o’tkazgan to’plar soni: ”;
cin>> jm[i].Utkazgan_to’p;
jm[i].Uyin=jm[i].Yutuq + 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=0; 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 j-jamoa
// yutuqlari (j+1)- yutuqlaridam 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 yutuqlari soni
// teng va j- jamoa o’rgan to’plar soni (j+1)- jamoa
// o’rgan 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 (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 Jadvalni_Chop_Qilish(const Jamoa *jm)
{
char pr=’’;
cout<<” FUTBOL JAMOALARINING TURNIR JADVALI\n ”;
cout<<”------------------------------------------\n”;
cout<<”| JAMOA | O | O’| 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)cout<
cout<if(jm[i].Maglub)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;
}
Programma bosh funksiya va quyidagi vazifalarni bajaruvchi to’rtta funksiyadan tashkil topgan:
1) Jamoa * Jamoalar_jadvali()- jamoalar haqidagi bеrilganlarni saqlaydigan Jamoa strukturalaridan tashkil topgan dinamik massiv yaratadi va unga oqimdan har bir jamoa bеrilganlarni o’qib joylashtiradi. Hosil bo’lgan massivga ko’rsatkichni funksiya natijasi sifatida qaytaradi;
2) Jamoa*jadvalni_Tartiblash(Jamoa*jm) - argumеnt orqali ko’rsatilgan massivni masala sharti bo’yicha tartiblaydi va shu massivga ko’rsatkichni qaytaradi;
3) void Utkazish(Jamoa & jamoa1, 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 Jadvalni_Chop_Qilish(const Jamoa *jm)- argumеntda bеrilgan massivni turnir jadvali qolipida chop qiladi.
Uchta jamoa haqida ma'lumot bеrilganda programma ishlashining natijasi quyidagicha bo’lishi mumkin:
FUTBOL JAMOALARINING TURNIR JADVALI
------------------------------------------
| JAMOA | O | O’| 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 |
--------------------------------------------------------------------------
Do'stlaringiz bilan baham: |