1- LABORATORIYA ISHI
OBYEKTGA YO’NALTIRILGAN DASTURLASH
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 g‘oyasi: 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:
#include
#include
#include
#include
using namespace std;
namespace talaba{
class Talaba{
private:
string familiyasi, ismi;
int kursi, baholari[7];
int stipendiyasi;
public:
friend void Qidirish(talaba::Talaba t[], int n);
friend void Saralash(talaba::Talaba t[], int n);
friend void Kurs_ozgartirish(talaba::Talaba t[], int n);
void set(string F, string I, int K) {
familiyasi = F;
ismi = I;
kursi = K;}
void get() {
cout<<"Fam: "<
cout<<"Ismi: "<
cout<<"Yoshi: "<
void setBaholari(int baho_soni) {
srand(time(NULL));
for (int i = 0; i
baholari[i]=rand()%6+1;
}}
void setKursi() {
kursi++;}
void setStipendiyasi(int baho_soni) {
int minBaho=baholari[0];
for (int i = 0; i
if(minBaho>baholari[i]) minBaho=baholari[i];}
switch (minBaho){
case 3: stipendiyasi=270000; break;
case 4: stipendiyasi=400000; break;
case 5: stipendiyasi=550000; break;
default:stipendiyasi=0;
}}
};
void Qidirish(talaba::Talaba t[], int n) {
cout<<"Qidirilayotgan talaba ismini kiriting: "<
string s; cin>>s; bool bor=false;
for (int i = 0; i < n; i++) {
if(t[i].ismi.compare(s)==0) {bor=true;
t[i].get();}
}
if(!bor) cout<<"Bu ismli talaba ro'yhatda yo'q!"<
cout<
}
void Saralash(talaba::Talaba t[], int n) {
cout<<"Familiya bo'yicha saralangan holati: \n";
talaba::Talaba temp;
for (int i = 0; i
for (int j = 0; j
if(t[i].familiyasi.compare(t[j].familiyasi)<0)
{
temp=t[i];
t[i]=t[j];
t[j]=temp;
}
}}
for (int i = 0; i
t[i].get();
}
cout<
}
void Kurs_ozgartirish(talaba::Talaba t[], int n) {
cout<<"Kursdan kursga o'tganligi haqida ma'lumot:\n";
bool bitiruvchi=false;
for (int i = 0; i
{
if(t[i].stipendiyasi!=0 && t[i].kursi==4)
bitiruvchi=true;
if(t[i].stipendiyasi!=0 && t[i].kursi<4)
t[i].setKursi();
if(!bitiruvchi) t[i].get();
else{
t[i].get();
cout<<" Siz bitiruvchisiz!!"<
bitiruvchi = false;
}
}
}
int main(){
string fam[]={"Xoshimov", "Saidaliyeva", "Baxodirov","Nishonov"};
string ism[]={"Doston", "Xurshida", "Temur", "Botir"};
int yoshlari[]={18,19,20,21};
talaba::Talaba t[100];
for (int i = 0; i <4; i++) {
t[i].set(fam[i],ism[i],yoshlari[i]);
t[i].setBaholari(4);
t[i].setStipendiyasi(4);
t[i].get();
}
cout<
talaba::Qidirish(t,4);
talaba::Saralash(t,4);
talaba::Kurs_ozgartirish(t,4);
}
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
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 g‘oyasi: 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:
#include
#include
#include
#include
using namespace std;
namespace talaba{
class Talaba{
private:
string familiyasi, ismi;
int kursi, baholari[7];
int stipendiyasi;
public:
template friend void Qidirish( X t[], int n);
template friend void Saralash(X t[], int n);
void set(string F, string I, int K) {
familiyasi = F;
ismi = I;
kursi = K;}
void get() {
cout<<"Fam: "<
cout<<"Ismi: "<
cout<<"Yoshi: "<
void setBaholari(int baho_soni) {
srand(time(NULL));
for (int i = 0; i
baholari[i]=rand()%6+1;
}
}
void setKursi() {
kursi++;
}
void setStipendiyasi(int baho_soni) {
int minBaho=baholari[0];
for (int i = 0; i
if(minBaho>baholari[i]) minBaho=baholari[i];
}
switch (minBaho){
case 3: stipendiyasi=270000; break;
case 4: stipendiyasi=400000; break;
case 5: stipendiyasi=550000; break;
default:stipendiyasi=0;
}
}
};
class oquvchi : public Talaba{
public:
int sinf_nomeri;
string muallifi;
};
template void Qidirish( X t[], int n) {
cout<<"Qidirilayotgan talaba ismini kiriting: "<
string s; cin>>s; bool bor=false;
for (int i = 0; i < n; i++) {
if(t[i].ismi.compare(s)==0) {bor=true;
t[i].get();}
}
if(!bor) cout<<"Bu ismli talaba ro'yhatda yo'q!"<
cout<
}
template void Saralash(X t[], int n) {
cout<<"Familiya bo'yicha saralangan holati: \n";
X temp;
for (int i = 0; i
for (int j = 0; j
if(t[i].familiyasi.compare(t[j].familiyasi)<0)
{
temp=t[i];
t[i]=t[j];
t[j]=temp;
}
}
}
for (int i = 0; i
t[i].get();
}
cout<
}}
int main(){
string fam[]={"Xoshimov", "Saidaliyeva", "Baxodirov","Nishonov"};
string ism[]={"Doston", "Xurshida", "Temur", "Botir"};
int yoshlari[]={18,19,20,21};
talaba::oquvchi t[100];
for (int i = 0; i <4; i++) {
t[i].set(fam[i],ism[i],yoshlari[i]);
t[i].setBaholari(4);
t[i].setStipendiyasi(4);
t[i].get();
}
cout<
talaba::Qidirish(t,4);
talaba::Saralash(t,4);
}
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
|
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 g‘oyasi: 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:
#include
#include
#include
#include
using namespace std;
namespace OverLoad{
class Telefon {
public:
string modeli;
int xotirasi,kamerasi, yili, narxi;
void T(string modeli, int kamerasi, int xotirasi, int yili) {
this->modeli = modeli;
this->kamerasi = kamerasi;
this->xotirasi = xotirasi;
this->yili = yili;}
bool Yaroqlimi(){
if(this->yili>3) return true;
else return false; }
int getNarxi(int Baho){
if(Yaroqlimi()) narxi = kamerasi*5+xotirasi*10+Baho;
else narxi=10+Baho;
return narxi + Baho;
}
virtual void Malumot(){
cout<<"Telefon sinfi"<
cout<
xotirasi<<" gb "<
}
};
class Samsung_S6 : public Telefon {
public: int narx = 6;
void T(string M, int K, int X, int Y) {
modeli = M;
kamerasi = K;
xotirasi = X;
yili = Y;
}
void Malumot()
{
cout<<"Sumsung S6 sinfi"<
cout<
xotirasi<<" gb "<
}
};
class Nokia_1280 : public Telefon
{
int narx = 1280;
public:
void T(string M, int K, int X, int Y)
{
modeli = M;
kamerasi = K;
xotirasi = X;
yili = Y;
}
void Malumot(){
cout<<"Nokia_1280 sinfi"<
cout<
xotirasi<<" gb "<
}
};
template void Malumot( X t){
int narx = 000;
cout<
cout<
t.xotirasi<<" gb "<
}
}
int main(){
OverLoad::Telefon t; t.T("Galaxy S6", 16, 32, 2017); t.Malumot();
cout<<"______________________________"<
OverLoad::Samsung_S6 y; y.T("Samsung S8", 16, 64, 2018); y.Malumot();
cout<<"______________________________"<
OverLoad::Nokia_1280 t_3; t_3.T("Nokia_1280 ",64, 120, 2019); t_3.Malumot();
cout<<"______________________________"<
OverLoad::Malumot(t); cout<<"______________________________"<
OverLoad::Malumot(y); cout<<"______________________________"<
OverLoad::Malumot(t_3); cout<<"______________________________"<
}
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 $
______________________________
|
Dostları ilə paylaş: |