1- laboratoriya ishi obyektga yo’naltirilgan dasturlash



Download 41,77 Kb.
Sana14.04.2020
Hajmi41,77 Kb.
#44565
Bog'liq
1-лаборатория ишини бажариш учун услубий кўрсатма

1- LABORATORIYA ISHI

  1. OBYEKTGA YO’NALTIRILGAN DASTURLASH

    1. Noma’lum turlar va noma’lum nomlar fazosi

Ishning maqsadi: C++ dasturlash tilida obyektga yo’naltirilgan dasturlash tamoyilaridan foydalanib noma’lum nomlar fazosini tashkil qilish ko’nikmalarini shakllantirish.

Masalaning qo’yilishi:

Variantda berilgan class, konstruktor va class maydonlari yordamida noma’lum nomlar fazosini yarating. Class da obyektlar massivi ustida quyidagi funksiyalarni bajaruvchi 3 ta static metod yozing:

- Qidirish metodi

- Saralash metodi

- O’zgartirish metodi

Yuqoridagi metodlar uchun class maydonlaridan ixtiyoriysi tanlansin.



Masala: “talaba” nomli nomlar fazosi va unda Talaba” classini yarating. Class maydonlari: Familiyasi, ismi, kursi, baholari, stipendiyasi. Class komponentalarini inkapsulyastiyalash, konstruktorlar va class metodlarini ishlab chiqing. Obyektlar massivini yarating va ular ustida qidirish, saralash, o’zgartirish amallarini bajaring.

Masalani yechish goyasi: talaba fazosida Talaba classi yaratiladi va unda maydonlarni yopiq holda e’lon qilinadi. Konstruktor orqali talabaning familiyasi, ismi va kursi kiritiladi. Baholari massiv ko’rinishda e’lon qilinib, tasodifiy baholar oladigan metod yoziladi. Stipendiyasini baholariga qarab belgilovchi metod ham qilinadi. Talaba sessiyani yopganligiga qarab kursdan-kursga o’tkaziladi, agar u 4 kurs bo’lsa bitiruvchi ekanligi haqida habar chiqariladi. Bu uchun Talaba classida setKurs() metodi yoziladi. Main classda familiya va ism uchun string massivi tuzilib(tashqaridan kiritmaslik uchun), Talaba classiga tegishli obyektlar massivi konstruktoriga parametr sifatida beriladi va talabalar haqida ma’lumot chop etiladi. Main classida obyektlar massivi ustida talaba ismi bo’yicha qidiruvchi, familiyasi bo’yicha tartiblovchi va kursini o’zgartiruvchi funksiyalar do’st funksiya qilib yoziladi. Natija funksiya ichida to’g’ridan-to’g’ri murojaat etiladi.

Dastur matni:

Talaba sinfi:

  1. #include

  2. #include

  3. #include

  4. #include

  5. using namespace std;

  6. namespace talaba{

  7. class Talaba{

  8. private:

  9. string familiyasi, ismi;

  10. int kursi, baholari[7];

  11. int stipendiyasi;

  12. public:

  13. friend void Qidirish(talaba::Talaba t[], int n);

  14. friend void Saralash(talaba::Talaba t[], int n);

  15. friend void Kurs_ozgartirish(talaba::Talaba t[], int n);




  1. void set(string F, string I, int K) {

  2. familiyasi = F;

  3. ismi = I;

  4. kursi = K;}




  1. void get() {

  2. cout<<"Fam: "<

  3. cout<<"Ismi: "<

  4. cout<<"Yoshi: "<




  1. void setBaholari(int baho_soni) {

  2. srand(time(NULL));

  3. for (int i = 0; i

  4. baholari[i]=rand()%6+1;

  5. }}




  1. void setKursi() {

  2. kursi++;}




  1. void setStipendiyasi(int baho_soni) {

  2. int minBaho=baholari[0];

  3. for (int i = 0; i

  4. if(minBaho>baholari[i]) minBaho=baholari[i];}




  1. switch (minBaho){

  2. case 3: stipendiyasi=270000; break;

  3. case 4: stipendiyasi=400000; break;

  4. case 5: stipendiyasi=550000; break;

  5. default:stipendiyasi=0;

  6. }}

  7. };




  1. void Qidirish(talaba::Talaba t[], int n) {

  2. cout<<"Qidirilayotgan talaba ismini kiriting: "<




  1. string s; cin>>s; bool bor=false;

  2. for (int i = 0; i < n; i++) {

    1. if(t[i].ismi.compare(s)==0) {bor=true;

      1. t[i].get();}

  3. }

  4. if(!bor) cout<<"Bu ismli talaba ro'yhatda yo'q!"<

  5. cout<

  6. }




  1. void Saralash(talaba::Talaba t[], int n) {

  2. cout<<"Familiya bo'yicha saralangan holati: \n";

  3. talaba::Talaba temp;

  4. for (int i = 0; i

  5. for (int j = 0; j

  6. if(t[i].familiyasi.compare(t[j].familiyasi)<0)

  7. {

  8. temp=t[i];

  9. t[i]=t[j];

  10. t[j]=temp;

  11. }

  12. }}




  1. for (int i = 0; i

  2. t[i].get();

  3. }

  4. cout<

  5. }




  1. void Kurs_ozgartirish(talaba::Talaba t[], int n) {

  2. cout<<"Kursdan kursga o'tganligi haqida ma'lumot:\n";

  3. bool bitiruvchi=false;

  4. for (int i = 0; i

  5. {

  6. if(t[i].stipendiyasi!=0 && t[i].kursi==4)

  7. bitiruvchi=true;

  8. if(t[i].stipendiyasi!=0 && t[i].kursi<4)

  9. t[i].setKursi();

  10. if(!bitiruvchi) t[i].get();

  11. else{

  12. t[i].get();

  13. cout<<" Siz bitiruvchisiz!!"<

  14. bitiruvchi = false;

  15. }

  16. }

  17. }




  1. int main(){

  2. string fam[]={"Xoshimov", "Saidaliyeva", "Baxodirov","Nishonov"};

  3. string ism[]={"Doston", "Xurshida", "Temur", "Botir"};

  4. int yoshlari[]={18,19,20,21};

  5. talaba::Talaba t[100];

  6. for (int i = 0; i <4; i++) {

  7. t[i].set(fam[i],ism[i],yoshlari[i]);

  8. t[i].setBaholari(4);

  9. t[i].setStipendiyasi(4);

  10. t[i].get();

  11. }

  12. cout<

  13. talaba::Qidirish(t,4);

  14. talaba::Saralash(t,4);

  15. talaba::Kurs_ozgartirish(t,4);

  16. }


Dastur natijasi:

Fam: Xoshimov

Ismi: Doston

Yoshi: 18

Fam: Saidaliyeva

Ismi: Xurshida

Yoshi: 19

Fam: Baxodirov

Ismi: Temur

Yoshi: 20

Fam: Nishonov

Ismi: Botir

Yoshi: 21
Qidirilayotgan talaba ismini kiriting:

Temur


Fam: Baxodirov

Ismi: Temur

Yoshi: 20
Familiya bo'yicha saralangan holati:

Fam: Baxodirov

Ismi: Temur

Yoshi: 20

Fam: Nishonov

Ismi: Botir

Yoshi: 21

Fam: Saidaliyeva

Ismi: Xurshida

Yoshi: 19

Fam: Xoshimov

Ismi: Doston

Yoshi: 18
Kursdan kursga o'tganligi haqida ma'lumot:

Fam: Baxodirov

Ismi: Temur

Yoshi: 20

Fam: Nishonov

Ismi: Botir

Yoshi: 21

Fam: Saidaliyeva

Ismi: Xurshida

Yoshi: 19

Fam: Xoshimov

Ismi: Doston



Yoshi: 18

    1. Classlar o’rtasida vorislikni tashkil qilish. Overriding va overloading bo’ladigan funksiyalarni yaratish

Ishning maqsadi: Merosxo’rlik imkoniyatlaridan foydalanib dasturlash ko’nikmalarini shakllantirish.

Masalaning qo’yilishi: oquvchi nomli ajdod va Talaba nomli avlod class yarating.

Ajdod classda quyidagilarni yozing:

  • maydonlari (familiya, ism va yoshi, kursi);

  • funksiyalari (set(), get(), setBaholari(), setKursi(), setStipendiyasi());

  • qidirish va saralash funksiyalarini shablonini yaratish va ularni friend qilib belgilash.

Voris classda quyidagilarni yozing:

  • Xususiy maydonlari(sinf_nomeri, muallimi).

Voris classning obyektlari haqida ma’lumotlarni kiritish, chiqarish, qidirish va saralash vazifalarini bajaruvchi loyiha yarating.

Masalani yechish goyasi: oquvchi nomli ajdod class yaratiladi, unda familiya, ismi, yoshi va kursi maydonlari, set() va get() ma’lumotlar o’zlashtiruvci va chop qiluvchi funksiya mavjud. Talaba classi oquvchi classining vorisi sifatida yaratiladi. Talaba classining shaxsiy maydonlariga frined funksiyalardan foydalanildi va kiruvchi obyektlar sifatida shablonlardan foydalnildi.

Dastur matni:

  1. #include

  2. #include

  3. #include

  4. #include

  5. using namespace std;

  6. namespace talaba{

  7. class Talaba{

  8. private:

  9. string familiyasi, ismi;

  10. int kursi, baholari[7];

  11. int stipendiyasi;

  12. public:

  13. template friend void Qidirish( X t[], int n);

  14. template friend void Saralash(X t[], int n);




  1. void set(string F, string I, int K) {

  2. familiyasi = F;

  3. ismi = I;

  4. kursi = K;}




  1. void get() {

  2. cout<<"Fam: "<

  3. cout<<"Ismi: "<

  4. cout<<"Yoshi: "<




  1. void setBaholari(int baho_soni) {

  2. srand(time(NULL));

  3. for (int i = 0; i

  4. baholari[i]=rand()%6+1;

  5. }

  6. }

  7. void setKursi() {

  8. kursi++;

  9. }

  10. void setStipendiyasi(int baho_soni) {

  11. int minBaho=baholari[0];

  12. for (int i = 0; i

  13. if(minBaho>baholari[i]) minBaho=baholari[i];

  14. }

  15. switch (minBaho){

  16. case 3: stipendiyasi=270000; break;

  17. case 4: stipendiyasi=400000; break;

  18. case 5: stipendiyasi=550000; break;

  19. default:stipendiyasi=0;

  20. }

  21. }

  22. };




  1. class oquvchi : public Talaba{

  2. public:

  3. int sinf_nomeri;

  4. string muallifi;

  5. };




  1. template void Qidirish( X t[], int n) {

  2. cout<<"Qidirilayotgan talaba ismini kiriting: "<




  1. string s; cin>>s; bool bor=false;

  2. for (int i = 0; i < n; i++) {

    1. if(t[i].ismi.compare(s)==0) {bor=true;

      1. t[i].get();}

  3. }

  4. if(!bor) cout<<"Bu ismli talaba ro'yhatda yo'q!"<

  5. cout<

  6. }




  1. template void Saralash(X t[], int n) {

  2. cout<<"Familiya bo'yicha saralangan holati: \n";

  3. X temp;

  4. for (int i = 0; i

  5. for (int j = 0; j

  6. if(t[i].familiyasi.compare(t[j].familiyasi)<0)

  7. {

  8. temp=t[i];

  9. t[i]=t[j];

  10. t[j]=temp;

  11. }

  12. }

  13. }

  14. for (int i = 0; i

  15. t[i].get();

  16. }

  17. cout<

  18. }}




  1. int main(){

  2. string fam[]={"Xoshimov", "Saidaliyeva", "Baxodirov","Nishonov"};

  3. string ism[]={"Doston", "Xurshida", "Temur", "Botir"};

  4. int yoshlari[]={18,19,20,21};

  5. talaba::oquvchi t[100];

  6. for (int i = 0; i <4; i++) {

  7. t[i].set(fam[i],ism[i],yoshlari[i]);

  8. t[i].setBaholari(4);

  9. t[i].setStipendiyasi(4);

  10. t[i].get();

  11. }

  12. cout<

  13. talaba::Qidirish(t,4);

  14. talaba::Saralash(t,4);

  15. }




Dastur natijasi:

Fam: Xoshimov

Ismi: Doston

Yoshi: 18

Fam: Saidaliyeva

Ismi: Xurshida

Yoshi: 19

Fam: Baxodirov

Ismi: Temur

Yoshi: 20

Fam: Nishonov

Ismi: Botir

Yoshi: 21
Qidirilayotgan talaba ismini kiriting:

Botir


Fam: Nishonov

Ismi: Botir

Yoshi: 21
Familiya bo'yicha saralangan holati:

Fam: Baxodirov

Ismi: Temur

Yoshi: 20

Fam: Nishonov

Ismi: Botir

Yoshi: 21

Fam: Saidaliyeva

Ismi: Xurshida

Yoshi: 19

Fam: Xoshimov

Ismi: Doston



Yoshi: 18




    1. OYD ning merosxo’rlik va polimorfizm xususiyatlaridan foydalangan holda vazifaga muvofiq dasturlar yaratish


Ishning maqsadi: Polimorfizm(overload va override) metodlarni qayta e’lon qilish va qayta yuklash orqali dasturlash ko’nikmalarini shakllantirish.

Masalaning qo’yilishi: Telefon nomli class yarating. Undan SamsungS6 va Nokia1280 avlod classlarini oling.

Ajdod classda quyidagilarni yozing:

  • Maydonlari (modeli, xotirasi, kamerasi, yili, narxi);

  • Konstruktor;

  • Yaroqligini tekshiruvchi, narxni o’rnatuvchi metod.

  • Telefon haqida ma’lumotlarni chop qiluvchi metodlar yozing.

Voris classlarda quyidagilarni yozing:

  • Xususiy maydonlari;

  • Konstruktor;

  • Ajdod classdan metodlarni qayta yuklansin;

  • Avlod obyektlari haqida ma’lumotlarini chop qiluvchi metod.

Masalani yechish goyasi: Telefon nomli ajdod class yaratiladi, unda modeli, xotirasi, kamerasi, yili, narxi maydonlari, konstruktor, yaroqligini tekshiruvchi, narxni o’rnatuvchi metod va ma’lumot chop qiluvchi metod yozamiz. SamsungS6 va Nokia1280 classlari Telefon classining vorisi sifatida yaratiladi. SamsungS6 va Nokia1280 classining shaxsiy maydonlari kiritiladi, konstruktor(super kalit so’zi orqali ajdod class maydonlaridan foydalanamiz). SamsungS6 va Nokia1280 class obyektlarini kiritamiz va ular haqida ma’lumotlarni chop qilamiz.

Dastur matni:

  1. #include

  2. #include

  3. #include

  4. #include

  5. using namespace std;

  6. namespace OverLoad{




  1. class Telefon {

  2. public:




  1. string modeli;

  2. int xotirasi,kamerasi, yili, narxi;




  1. void T(string modeli, int kamerasi, int xotirasi, int yili) {

  2. this->modeli = modeli;

  3. this->kamerasi = kamerasi;

  4. this->xotirasi = xotirasi;

  5. this->yili = yili;}




  1. bool Yaroqlimi(){

  2. if(this->yili>3) return true;

  3. else return false; }




  1. int getNarxi(int Baho){

  2. if(Yaroqlimi()) narxi = kamerasi*5+xotirasi*10+Baho;

  3. else narxi=10+Baho;

  4. return narxi + Baho;

  5. }




  1. virtual void Malumot(){

  2. cout<<"Telefon sinfi"<

  3. cout<

  4. xotirasi<<" gb "<

  5. }

  6. };




  1. class Samsung_S6 : public Telefon {

  2. public: int narx = 6;

  3. void T(string M, int K, int X, int Y) {

  4. modeli = M;

  5. kamerasi = K;

  6. xotirasi = X;

  7. yili = Y;

  8. }

  9. void Malumot()

  10. {

  11. cout<<"Sumsung S6 sinfi"<

  12. cout<

  13. xotirasi<<" gb "<

  14. }

  15. };




  1. class Nokia_1280 : public Telefon

  2. {

  3. int narx = 1280;

  4. public:

  5. void T(string M, int K, int X, int Y)

  6. {

  7. modeli = M;

  8. kamerasi = K;

  9. xotirasi = X;

  10. yili = Y;

  11. }

  12. void Malumot(){

  13. cout<<"Nokia_1280 sinfi"<

  14. cout<

  15. xotirasi<<" gb "<

  16. }

  17. };




  1. template void Malumot( X t){

  2. int narx = 000;

  3. cout<

  4. cout<

  5. t.xotirasi<<" gb "<

  6. }

  7. }




  1. int main(){

  2. OverLoad::Telefon t; t.T("Galaxy S6", 16, 32, 2017); t.Malumot();

  3. cout<<"______________________________"<

  4. OverLoad::Samsung_S6 y; y.T("Samsung S8", 16, 64, 2018); y.Malumot();

  5. cout<<"______________________________"<

  6. OverLoad::Nokia_1280 t_3; t_3.T("Nokia_1280 ",64, 120, 2019); t_3.Malumot();

  7. cout<<"______________________________"<

  8. OverLoad::Malumot(t); cout<<"______________________________"<

  9. OverLoad::Malumot(y); cout<<"______________________________"<

  10. OverLoad::Malumot(t_3); cout<<"______________________________"<

  11. }


Dastur natijasi:

Telefon sinfi

Galaxy S6 16 mpx 32 gb 2017 yili ishlab chiqarilgan narxi 65924 $

______________________________

Sumsung S6 sinfi

Samsung S8 16 mpx 64 gb 2018 yili ishlab chiqarilgan narxi 720 $

______________________________

Nokia_1280 sinfi

Nokia_1280 64 mpx 120 gb 2019 yili ishlab chiqarilgan narxi 1520 $

______________________________

Galaxy S6

Galaxy S6 16 mpx 32 gb 2017 yili ishlab chiqarilgan narxi 400 $

______________________________

Samsung S8

Samsung S8 16 mpx 64 gb 2018 yili ishlab chiqarilgan narxi 720 $

______________________________

Nokia_1280

Nokia_1280 64 mpx 120 gb 2019 yili ishlab chiqarilgan narxi 1520 $

______________________________



Download 41,77 Kb.

Do'stlaringiz bilan baham:




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish