1-Amaliy ishi
Mavzu: Tiplarni dinamik tarzda aniqlash. Tiplarni almashtirish operatorlari. Yangi nomlar fazosi yaratish. Buferlashtirilgan kiritish va chiqarish
Ishning maqsadi: C++ dasturlash tilida obyektga yo’naltirilgan dasturlash tamoyilaridan foydalanib noma’lum nomlar fazosini tashkil qilish ko’nikmalarini shakllantirish.
Nazariy qism
Namespace – bir-xil identifikatorlarni bitta dasturda ishlatish muammosini hal qiladi.
Namespace ni umumiy strukturasi quyidagicha:
namespace {
………
}
Umimiy nomlar sohasidan foydalanish
#include
#include
using namespace std;
namespace Mynamespace {
int i,k;
void myfunc(int j){
cout<}
}
using namespace Mynamespace;
int main(){
i = 23;
k = 10;
myfunc(i);
myfunc(k);
}
Natija:
23
10
Nomlar fazosida xatoliklar:
Ichma – ich joylashgan nomlar fazosi
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.
Chelak va tog’ora class larini yarating va ularni bog’lovchi funksiyalar yarating
Dastur:
#include
using namespace std;
namespace yangi_nomlar_fazosi { //Yangi nomlar fazosi
class Chelak {
protected:
int razmer, ishlab_chiqarilgan_yili;
string materiali;
public:
Chelak() {}
Chelak(int razmer, int yil, string materiali) {
this->razmer = razmer;
this->ishlab_chiqarilgan_yili = yil;
this->materiali =materiali;
}
static void qidirish(Chelak* massiv, int n, string mat) { //qidirish materiali bo'yicha
for (int i = 0; i if (massiv[i].materiali ==mat) massiv[i].print();
}
}
static void saralash(Chelak* massiv, int n) { //saralash, razmeri bo'yicha
for (int i = 0; i for (int j = i + 1; j if (massiv[i].razmer >massiv[j].razmer)
swap(massiv[i], massiv[j]);
}
}
}
void ozgartirish(int razmer, int yil, string materiali) {//o'zgartirish metodi
this->razmer = razmer;
this->ishlab_chiqarilgan_yili = yil;
this->materiali =materiali;
}
void print() {
cout <<"\nRazmeri: "<< razmer
<<"\nIshlab chiqarilgan yili: "<< ishlab_chiqarilgan_yili
<<"\nMateriali : "<< materiali << endl;
}
};
class Togora :public Chelak {
public:
Togora(){}
Togora(int razmer, int yil, string materiali) {
this->razmer = razmer;
this->ishlab_chiqarilgan_yili = yil;
this->materiali =materiali;
}
};
}
int main() {
using namespace yangi_nomlar_fazosi; // Yangi hosil qilingan nomlar fazosidan foydalanish
int n, m;
cout <<"Nechta chelak haqida ma'lumot kiritmoqchisiz?\nn = "; cin >> n;
Chelak* chelaklar;
chelaklar = new Chelak[n];
if (n) cout <<"\nChelaklar haqida ma'lumotlarni kiritish:\n\n";
for (int i = 0; i < n; i++) {
int razmer, yili;
string materiali;
cout <<"Chelakning razmeri: "; cin >> razmer;
cout <<"Chelakning ishlab chiqarilgan yili: "; cin >> yili;
cout <<"Chelakning materiali: "; cin >> materiali;
chelaklar[i] =Chelak(razmer, yili, materiali);
}
cout <<"\nChelaklarni saralash, razmeri bo'yicha:\n";
chelaklar[0].saralash(chelaklar, n);
//Ekranga chiqarish:
for (int i = 0; i < n; i++) {
chelaklar[i].print();
}
cout <<"\nQidirish: \nMaterialni kiriting: ";
string man; cin >> man;
chelaklar[0].qidirish(chelaklar, n, man);
cout <<"Nechta tog'ora haqida ma'lumot kiritmoqchisiz?\nn = "; cin >> m;
Togora* togoralar;
togoralar = new Togora[m];
if (m) cout <<"\nTog'oralar haqida ma'lumotlarni kiritish:\n\n";
for (int i = 0; i < m; i++) {
int razmer, yili;
string material;
cout <<"Tog'oraning razmeri: "; cin >> razmer;
cout <<"Tog'oraning ishlab chiqarilgan yili: "; cin >> yili;
cout <<"Tog'oraning materiali: "; cin >> material;
togoralar[i] =Togora(razmer, yili, material);
}
cout <<"\nTog'oralarni saralash, razmeri bo'yicha:\n";
togoralar[0].saralash(togoralar, m);
//Ekranga chiqarish:
for (int i = 0; i < m; i++) {
togoralar[i].print();
}
cout <<"\nQidirish: Materialni kiriting: ";
cin >> man;
togoralar[0].qidirish(togoralar, m, man);
}
Do'stlaringiz bilan baham: |