Ishni bajarishga namuna
Topshiriq variantlariga o‟xshash bitta misolni yechish dasturini ko‟rib
chiqamiz. Quyidagicha masala qo‟yilgan bo‟lsin. Ro‟yhatning maksimal elementi
topilsin. Ushbu masalaning algoritmi, dasturiy kodi va natijasi quyida keltirilgan.
Algoritm
1. Ekranga menyu chiqaramiz: 1 - element qo’shish; 2 - ro’yhatni ko’rish;
3 - ro’yhat maksimalini topish; 0 - chiqish; tanlash uchun tanla o‟zgaruvchisiga
qiymat so‟raymiz. 2-qadamga o‟tish.
2. Agar tanla=1 bo‟lsa, 3-qadamga, 2 ga teng bo‟lsa, 4-qadamga, 3 tanlansa,
6-qadamga o‟tish, 0 tanlansa dasturni yakunlash.
3. Navbatdagi elementni yaratish p; (p ning info maydoniga qiymat so‟rab
olib yozish va ptr maydoniga NULL yozish) Agar ro‟yhat boshi ko‟rsatkichi
lst=NULL bo‟lsa, lst=p va last=p; aks holda last – ro‟yhat oxirgi elementi ptr
maydoniga p ni yozib, p elementni last qilib belgilaymiz. 1-qadamga o‟tamiz.
4. Agar lst NULL ga teng bo‟lsa, ro‟yhat bo‟shligini ekranga chiqarib,
1-qadamga o‟tish. Aks holda, p=lst va 5-qadamga o‟tish.
5. Agar p ning ptr maydoni NULL bo‟lmasa, p ning info maydonini ekranga
chiqaramiz va keyingi elementga o‟tamiz, ya‟ni p=p->ptr, 5-qadamga o‟tamiz, aks
holda, 1-qadamga o‟tamiz.
6. max=lst->info, ya‟ni max o‟zgaruvchisiga ro‟yhat 1-elementi info
maydoni qiymatini o‟zlashtiramiz. p=lst va 7-qadamga o‟tish.
57
7. Agar p NULL ga teng bo‟lmasa, 8-qadamga o‟tamiz, aks holda max ni
ekranga chiqaramiz va 1-qadamga o‟tamiz.
8. Agar max< p->info bo‟lsa, max=p->info. Keyingi elementga o‟tamiz,
ya‟ni p=p->ptr. 7-qadamga o‟tamiz.
Dastur kodi
#include
using namespace std;
class Node{
public: int number;
Node* next;
};
int main()
{ Node* head = NULL;
Node* lastPtr = NULL;
short action = -1;
while (1)
{ cout<<"1. element qo’shish\n";
cout<<"2. ro’yhatni ko’rish\n";
cout<<"3. ro’yhat maksimalini topish\n";
cout<<"0. chiqish\n\n";
cout<<"tanlang: ";
cin>>action;
if (action == 0) {
system("CLS");
break;}
if (action == 1)
{ system("CLS");
Node* ptr = new Node;
int numb = -1;
58
cout<<"son kiriting: ";
cin>>numb;
ptr->number = numb;
ptr->next = NULL;
if (head == 0)
{ head = ptr;
lastPtr = ptr;
system("CLS");
continue;
}
lastPtr->next = ptr;
lastPtr = ptr;
system("CLS");
continue;
}
if (action == 2){
Node* ptr = NULL;
system("CLS");
if (head == 0)
{ cout<<"\t!!! ro’yhat bo’sh !!!\n\n";
system("PAUSE");
system("CLS");
continue;
}
cout<<"* * * * * ro’yhat * * * * *\n\n";
ptr = head;
while (1) {
cout<
number<<" ";
if (ptr->next == 0) break;
59
ptr = ptr->next;
}
cout<<"\n\n";
system("PAUSE");
system("CLS");
continue;
}
if (action == 3)
{
system("CLS");
Node* p = head;
Node* q = new Node;
Node* last = new Node;
int max=p->number; q=head;
while(p){
if(max
number){ max=p->number;}
p=p->next;
}
system("CLS");
cout<<"max="<
system("pause");
continue;
}
}}
Dastur bajarilishi natijasi
1. element qo’shish
2. ro’yhatni ko’rish
3. ro’yhat maksimalini topish
0. chiqish
tanlang:1
60
{1,2,3,55,4,6} sonlari kiritildi. 2-holat tanlanganda natija:
*****ro’yhat*****
1 2 3 55 4 6
3-holat tanlanganda natija:
max=55
Nazorat savollari
1. Dinamik ma‟lumotlar tuzilmasi nima va uning statik tuzilmalardan
afzalligini tushuntiring?
2. Ro‟yhat tuzilmasi nima va ro‟yhatning qanday turlarini bilasiz?
3. Ro‟hat tuzilmasini dasturda ifodalash qanday amalga oshiriladi?
4. Ro‟hat tuzilmasi ustida amal bajarish algoritmlarini tushuntiring
5. Ikki bog‟lamli ro‟yhat nima va uni bir bog‟lamli ro‟hatdan afzalligi va
kamchiligini tushuntiring.
Topshiriq
Variantlar:
1. Elementni n pozitsiyaga siljitish dasturini tuzing.
2. Ro‟yhat nusxasini yarating.
3. Ro‟yhat boshiga element qo‟yish.
4. Ikkita ro‟yhat birlashtirilsin.
5. Ro‟yhatning n-inchi elementi o‟chirilsin.
6. Ro‟yhat n-inchi elementidan keyin yangi element qo‟yilsin.
7. Ikkita ro‟yhat umumiy elementlaridan tashkil topgan ro‟yhat yaratilsin.
8. Ro‟yhat elementlari o‟sish tartibida joylashtirilsin.
9. Ro‟yhat har ikkinchi elementi o‟chirilsin.
10. Ro‟yhat har uchinchi elementi o‟chirilsin.
11. Ro‟yhat elementlari kamayish tartibida joylashtirilsin.
12. Ro‟yhat tozalansin.
61
13. Futbol jamosining 20 ta o‟yinchilari familiyalaridan tashkil topgan
halqasimon ro‟yhat berilgan. O‟yinchilar 2 ta guruhga 10 tadan ajratilsin. Ikkinchi
guruhga umumiy o‟yinchilarni har 12-inchisi kirsin.
14. Sportchi familiyalaridan tashkil topgan ikkita halqasimon ro‟yhat
berilgan. Qura tashlash amalga oshirilsin. Birinchi guruhdagi har n-inchi sportchi,
ikkinchi guruhdagi har m-inchi sportchi bilan raqib bo‟lsin.
15. Lotoreya ishtirokchilari familiyalari va mukofotlar nomlaridan tashkil
topgan 2 ta halqasimon ro‟yhat berilgan. N ta ishtirokchi g‟olib bo‟lsin (har K-
inchi). Mukofotlarni qayta hisoblash soni - t.
16. O‟quvchilar familiyalari va imtihon biletlari raqamlaridan tashkil topgan
2 ta halqasimon ro‟yhat berilgan. O‟quvchilar tomonidan olingan bilet raqamlari
aniqlansin. Imtihon biletlari uchun qayta hisoblash soni - E, o‟quvchilar uchun esa
- K.
17. Mahsulot nomlaridan tashkil topgan ro‟yhat berilgan. Ro‟yhat
elementlaridagi SONY firmasida ishlab chiqilgan mahsulotlardan tashkil topgan
yangi ro‟yhat yarating.
18. 2 ta guruh talabalari familiyalaridan tashkil topgan 2 ta ro‟yhat berilgan.
Birinchi guruhdan L ta talaba ikkinchi guruhga o‟tkazilsin. Qayta hisoblashlar soni
- K.
19. BOSCH va PHILIPS konsernlari tomonidan ishlab chiqilgan mahsulot
nomlaridan tashkil topgan ikkita ro‟yhat berilgan. Har ikkala firma tomonidan
ishlab chiqilgan bir xil mahsulotlar ro‟yhati tuzilsin.
20. Futbol jamoasining asosiy va zahira tarkibi o‟yinchilari familiyalaridan
tashkil topgan ikkita ro‟yhat berilgan. K ta o‟yinchi almashtirilsin.
21. 1- va 2-vzvod askarlari familiyalaridan tashkil topgan ikkita ro‟yhat
berilgan. Hujum natijasida 1-chi vzvoddan M ta askar halok bo‟ldi. Ikkinchi vzvod
askarlaridan birinchi vzvod to‟ldirilsin.
22. Mahsulot nomlari va xaridorlar familiyalaridan tashkil topgan ikkita
ro‟yhat berilgan. Har bir N-chi xaridor M-chi mahsulotni sotib oladi. Xarid
62
qilingan mahsulotlar ro‟yhatini chiqaring.
23. SONY va SHARP firmalari tomonidan ishlab chiqilgan mahsulot
nomlaridan tashkil topgan ikkita ro‟yhat berilgan. O‟zaro raqobat qiluvchi
mahsulotlar ro‟yhatini tuzing.
24. Talabalar ismlaridan iborat ro‟yhat berilgan. Ismining uzunligi eng katta
bo‟lgan talabani ro‟yhat boshiga joylang.
25. Talabalar familiyalaridan iborat halqasimon ro‟yhat berilgan. Har k-inchi
talabadan 3 tasi ro‟yhatdan ajratib olinsin.
26. Talabalar ismlaridan iborat massiv elementlarini berilgan halqasimon
ro‟yhatning har k-elementidan keyin joylashtiring.
27. 2 ta halqasimon ro‟yhatni galma-galdan har 3-elementidan umumiy bitta
yangi ro‟yhat hosil qiling.
28. 2 ta ro‟yhatning bir xil qiymatli elementlaridan yangi halqasimon ro‟yhat
yarating.
29. 2 ta ro‟yhatning bir xil qiymatli elementlarini ro‟yhat boshiga o‟tkazing.
30. 2 ta ro‟yhatning bir xil qiymatli elementlarini ro‟yhat oxiriga
joylashtiring.
|