O’ZBEKISTON RESPUBLIKASI OLIY VA O’RTA-MAXSUS TA’LIM VAZIRLIGI SAMARQAND DAVLAT UNIVERSITETI RAQAMLI TEXNOLOGIYALAR FAKULTETI
DASTURIY INJINIRING YO’NALISHI 209-guruh talabasi BOBOMALIKOV ABDUAZIZNING DASTURLASH ASOSLARI FANIDAN SINFLAR, OB'EKTLAR VA XOTIRA -MAVZUSIDA MUSTAQIL ISH Tekshirdi: ESHONQULOV.E
SAMARQAND – 2022 1-TOPSHIRIQ Organization (Tashkilot) va Bank (Bank), School (Maktab) sinflari hosil qiling. Avlod sinflar ajdod sinfidan meros olgan olgan holda qo’shimcha metodlar hosil qiling.
int main()
{
School nSchool(12,600," Al-Farg'oni ","Farg'ona","Aliyev Ahmat",2013);
nSchool.getInfo();
cout<return 0;
}
Natija :
Virtual arifmetik amallar va chop etish funksiyasi bilan abstrakt ajdod Integer (butun) sinfini yarating. O'z arifmetik amallarini va chop etish funksiyasini amalga oshiradigan Decimal (o'nlik) va Binary (ikkilik) hosila sinflarini aniqlang. Raqam massiv sifatida ifodalanadi, uning har bir elementi raqamdir.
Dastur kodi: #include #include #define LINER getline
using namespace std;
class Football_club{
public:
Football_club(){}
int allVictory(string str){
int victory = 0;
for(int i=0;iif(str[i]=='3')
victory++;
}
return victory;
}
int allDraw(string str){
int draw = 0;
for(int i=0;iif(str[i]=='3')
draw++;
}
return draw;
}
int allDefeat(string str){
int defeat = 0;
for(int i=0;iif(str[i]=='3')
defeat++;
}
return defeat;
}
int allPoint(string str){
int point = 0;
for(int i=0;iif(str[i]=='3' or str[i]=='1')
point++;
}
return point;
}
float Statistics(string str){
int point = allPoint(str);
int defeat = allDefeat(str);
if(point!=0)
return (defeat*100/point);
else
return 0;
}
};
Calculator nomli sinf hosil qiling. Unda asosiy amallar: qo’shish, ayirish, ko’paytirish, bo’lish amallarini bajarish metodlarini hosil qiling. Sinf shablonidan foydalaning.
Dastur kodi: #include #include using namespace std;
template
class Calculator {
public:
Calculator(){};
cal add(cal a, cal b){
return a+b;
}
cal split(cal a, cal b){
return a-b;
}
cal multiply(cal a, cal b){
return a*b;
}
cal subdivision(cal a, cal b){
try{
if(a/b)
return a/b;
else
throw(b);
}catch(cal b){
cout<<"nolga bo'lish kuzatildi"<}
}
cal powPro(cal a, int b){
cal pw = a;
while(b>1){
pw*=a;
b--;
}
return pw;
}
cal myLog(int a, int b){
return log(b)/log(a);
}
cal mySqrtSta(float x,float b){
float k = 1/b;
return pow(x,k);
}
cal mySqrtPro(float x,float b){
int i=1;
while(true){
cout<<" birinchi if i:"<if(x
return --i;
}
if(x==pow(i,b)){
cout<<" ikkinchi if i:"<return i;
}
i++;
}
}
cal mySqrt(cal x)
{
cal sqr = 0;
cal res = x;
if (x <= 0) {
return 0;
}
for (long int i = 1; i <= x + i; i++) {
if (!(i & 1)) {
continue;
}
if (res == i) {
sqr++;
return sqr;
}
if (res <= i) {
return sqr;
}
res = res - i;
sqr++;
}
}
};
int main()
{
Calculator f;
cout<
return 0;
}
Natija :
funksiyani hisoblashda yuz beradigan istisnolarni generatsiya qiling. (x, a, z, b lar ma’lum qiymatlar).
Dastur kodi: #include #include using namespace std;
class Math{
public:
Math(){}
class LogAsos{};
class LogDarja{};
float mlog(int x,int y){
if(y<=0)
throw LogDarja();
if(x<=0 or x==1)
throw LogAsos();
Sinflar, ob'ektlar va xotira Ehtimol, biz sizga sinfdan yaratilgan har bir ob'ekt shu sinf ma'lumotlari va a'zo funktsiyalarining alohida nusxalarini o'z ichiga oladi degan taassurot qoldirganmiz. Bu yaxshi birinchi taxmindir, chunki u ob'ektlar sinf ta'rifi yordamida yaratilgan to'liq, o'z-o'zidan mavjud ob'ektlar ekanligini ta'kidlaydi. Bu erda aqliy tasvir yig'ish liniyasidan aylanib chiqayotgan avtomobillar (ob'ektlar) bo'lib, ularning har biri chizma (sinf ta'riflari) bo'yicha qilingan.
A slida, hamma narsa unchalik oddiy emas. To'g'ri, har bir ob'ektning o'ziga xos alohida ma'lumotlar elementlari mavjud. Boshqa tomondan, siz ishongan narsadan farqli o'laroq, ma'lum bir sinfdagi barcha ob'ektlar bir xil a'zo funktsiyalaridan foydalanadi. A'zo funktsiyalari faqat bir marta yaratiladi va xotiraga joylashtiriladi - ular sinf ta'rifida aniqlanganda. Bu mantiqiy; Har safar ushbu sinfning boshqa ob'ektini yaratganingizda, sinfdagi barcha a'zo funktsiyalarni takrorlashning ma'nosi yo'q, chunki har bir ob'ekt uchun funktsiyalar bir xil. Biroq, ma'lumotlar elementlari turli qiymatlarga ega bo'ladi, shuning uchun har bir ob'ekt uchun har bir ma'lumot elementining alohida nusxasi bo'lishi kerak. Shuning uchun har bir ob'ekt aniqlanganda ma'lumotlar xotiraga joylashtiriladi, shuning uchun har bir ob'ekt uchun alohida ma'lumotlar to'plami mavjud. Quyidagi rasmda bu qanday ko'rinishi ko'rsatilgan.
Ushbu bobning boshidagi SMALLOBJ misolida smallobj tipidagi ikkita ob'ekt mavjud, shuning uchun ba'zi ma'lumotlar xotirasining ikkita nusxasi mavjud. Biroq, functionssetdata() va showdata() ning faqat bitta nusxasi mavjud. Ushbu funktsiyalar sinfning barcha ob'ektlari tomonidan taqsimlanadi. Hech qanday ziddiyat yo'q, chunki (hech bo'lmaganda bitta tarmoqli tizimda) bir vaqtning o'zida faqat bitta funktsiya bajariladi. Ko'pgina hollarda butun sinf uchun faqat bitta a'zo funktsiyasi mavjudligini bilishingiz shart emas. Har bir ob'ektni o'z ma'lumotlarini va o'z a'zolari funktsiyalarini o'z ichiga olgan holda tasavvur qilish osonroq. Ammo ba'zi holatlarda, masalan, bajariladigan dastur hajmini baholashda, sahna ortida nima sodir bo'layotganini bilish foydali bo'ladi.
Statik sinf ma'lumotlari Har bir ob'ekt o'zining alohida ma'lumotlarini o'z ichiga oladi, deb aytgan bo'lsak, endi buni biroz o'zgartirishimiz kerak. Agar sinfdagi ma'lumotlar elementi statik deb e'lon qilinsa, qancha ob'ekt bo'lishidan qat'i nazar, butun sinf uchun faqat bitta shunday element yaratiladi. Statik ma'lumotlar elementi bir xil sinfning barcha ob'ektlari umumiy ma'lumot elementini almashishi kerak bo'lganda foydalidir. Statik sifatida aniqlangan a'zo o'zgaruvchisi oddiy statik o'zgaruvchiga o'xshash xususiyatlarga ega: u faqat sinf ichida ko'rinadi, lekin uning ishlash muddati butun dasturdir. U sinfning ob'ektlari bo'lmasa ham mavjud bo'lib qoladi. (Statik o'zgaruvchilarni muhokama qilish uchun 5-bobga qarang.) Biroq, oddiy statik o'zgaruvchi funktsiyaga qo'ng'iroqlar orasidagi ma'lumotni saqlash uchun ishlatilsa, sinf ob'ektlari o'rtasida ma'lumot almashish uchun sinf a'zolarining statik ma'lumotlari ishlatiladi.
Statik sinf ma'lumotlaridan foydalanish Nima uchun statik a'zo ma'lumotlaridan foydalanmoqchisiz? Misol tariqasida, ob'ekt o'z sinfining qancha boshqa ob'ektlari dasturda mavjudligini bilishi kerak edi deylik. Yo'l poygasi o'yinida, masalan, poyga mashinasi poygada qancha boshqa mashinalar borligini bilishni xohlashi mumkin. Bunday holda, statik o'zgaruvchini sinf a'zosi sifatida kiritish mumkin. Barcha ob'ektlar ushbu o'zgaruvchiga kirish huquqiga ega bo'ladi. Ularning barchasi uchun bir xil o'zgaruvchan bo'lar edi; ularning hammasi bir xil hisobni ko'radi.
Statik sinf ma'lumotlariga misol Mana, oddiy statik ma'lumotlar a'zosini ko'rsatadigan STATDATA misoli:
// statdata.cpp
// static class data
#include using namespace std;
////////////////////////////////////////////////////////////////
class foo
{
private:
static int count; //only one data item for all objects
//note: “declaration” only!
public:
foo() //increments count when object created
{ count++; }
int getcount() //returns count
{ return count; }
};
//--------------------------------------------------------------
int foo::count = 0; //*definition* of count
////////////////////////////////////////////////////////////////
int main()
{
foo f1, f2, f3; //create three objects
cout << “count is “ << f1.getcount() << endl; //each object
cout << “count is “ << f2.getcount() << endl; //sees the
cout << “count is “ << f3.getcount() << endl; //same value
return 0;
}
Ushbu misolda fooin sinfida bitta ma'lumot elementi, count mavjud, u static int turidir. Ushbu sinf uchun konstruktor hisobni ko'paytirishga olib keladi. main() da biz classfoo ning uchta ob'ektini aniqlaymiz. Konstruktor uch marta chaqirilganligi sababli, countis uch marta ortadi. Boshqa a'zo funktsiyasi getcount(), countdagi qiymatni qaytaradi. Biz bu funksiyani barcha uchta ob'ektdan chaqiramiz va biz kutganimizdek, har biri bir xil qiymatni chiqaradi. Mana chiqish:
count is 3 ← statik ma'lumotlar
count is 3
count is 3
Agar biz hisoblash uchun statik o'zgaruvchidan farqli o'laroq, oddiy avtomatik o'zgaruvchidan foydalanganimizda, har bir konstruktor o'zining shaxsiy nusxasini ko'paytirgan bo'lardi va natija shunday bo'lar edi
count is 1 ← avtomatik ma'lumotlar
count is 1
count is 1
S tatik sinf o'zgaruvchilari oddiy statik bo'lmagan o'zgaruvchilar kabi tez-tez ishlatilmaydi, lekin ular ko'p holatlarda muhim ahamiyatga ega. Quyidagi rasmda statik o'zgaruvchilarning avtomatik o'zgaruvchilar bilan qanday taqqoslanishi ko'rsatilgan.