Samarqand davlat universiteti raqamli texnologiyalar fakulteti dasturiy injiniring yo



Yüklə 218,52 Kb.
tarix29.01.2023
ölçüsü218,52 Kb.
#122718
Bobomalikov Abduaziz


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

  1. Organization (Tashkilot) va Bank (Bank), School (Maktab) sinflari hosil qiling. Avlod sinflar ajdod sinfidan meros olgan olgan holda qo’shimcha metodlar hosil qiling.

Dastur kodi:
#include
using namespace std;
class Organization{
protected:
string m_name;
string m_chief;
int m_year;
Organization(){
m_name = "NaN";
m_chief = "NaN";
m_year = 0;
}
Organization(string name,string chief,int year){
m_name = name;
m_chief = chief;
m_year = year;
}
};
class Bank:public Organization{
private:
string m_region;
public:
Bank():Organization(){
m_region = "NaN";
}
Bank(string name,string region,string chief,int year):Organization(name,chief,year){
m_region = region;
}
string getInfo(){
cout<}
string getName(){
return m_name;
}
string getChif(){
return m_chief;
}
int getYear(){
return m_year;
}
string getRegion(){
return m_name;
}
};
class School:public Organization{
private:
string m_region;
short m_number;
int m_capacity;
public:
School():Organization(){
m_region = "NaN";
}
School(short number,int capacity,string name,string region,string chief,int year):Organization(name,chief,year){
m_number = number;
m_region = region;
m_capacity = capacity;
}
string getInfo(){
cout<cout<}
string getName(){
return m_name;
}
string getChif(){
return m_chief;
}
int getYear(){
return m_year;
}
string getRegion(){
return m_name;
}
short getNumber(){
return m_number;
}
string getInspection(int num){
if(m_capacity>=num)
return "o'quvchilar soni yetarli";
else
return "o'quvchilar soni ko'p";

}
};


int main()
{
School nSchool(12,600," Al-Farg'oni ","Farg'ona","Aliyev Ahmat",2013);
nSchool.getInfo();
cout<return 0;
}
Natija :


  1. 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;
}
};

int main()


{
fstream file("D:/club.txt");
Football_club A;
string str;
if(file){
LINER(file,str);
cout<}
return 0;
}
Natija :


  1. 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 :


  1. 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();

return log(x)/log(y);


}
};

int main()


{
Math m1,m2;
float x,z,a,b;
float y;

cout<<"y = log(x,a) + log(z,b);"<
cout<<"x : ";cin>>x;cout<<"a : ";cin>>a;
cout<<"z : ";cin>>z;cout<<"b : ";cin>>b;
try{
y = m1.mlog(a,x)+ m2.mlog(b,z);
cout<<"log(x,a) + log(z,b) = "<}catch(Math::LogAsos){
cout << "matematik xato log funksiyasida asosga xato qiymat berildi!" << endl;
}catch(Math::LogDarja){
cout << "matematik xato log funksiyasida darajaga xato qiymat berildi!" << endl;
}
return 0;
}
Natija :




  1. A” futbol klubining 30 ta o’yinda to’plagan ochkolari quyidagi ko’rinishda faylda yozilgan:

3 0 0 0 0 1 0 0 0 3 0 0 3 3 3 3 3 1 1 1 0 0 0 0 0 0 0 3 3 3 …
3 – g’alaba
1 – during
0 – mag’lubiyat.
Quyidagilarni aniqlash uchun sinf hosil qiling:

  1. Jamoaning umumiy ochkosini aniqlash metodi

  2. Jami g’alabalar sonini aniqlash metodi

  3. Jami duranglar sonini aniqlash metodi

  4. Jami mag’lubiyatlar sonini aniqlash metodi

Dastur kodi:
#include
#include
#define LINER getline
using namespace std;
class Football_club{
fstream file;
string path;
public:
int elm;
class fileOpen{};;
Football_club(string str){
path = str;
file.open(str);
if(!file.is_open())
throw fileOpen();
}
void newFile(string str){
path = str;
file.close();
fOpen();
}
void fOpen(){
file.open(path);
if(!file.is_open())
throw fileOpen();
}
int allElm(){
int elmt=0;
while(!file.eof()){
file>>elm;
if(elm==3 or elm==1 or elm==0){
elmt++;
}
}
file.close();
fOpen();
return elmt;
}
int allVictory(){
int victory = 0;
while(!file.eof()){
file>>elm;
if(elm==3)
victory++;
}
file.close();
fOpen();
return victory;
}
int allDraw(){
int draw = 0;
while(!file.eof()){
file>>elm;
if(elm==1)
draw++;
}
file.close();
fOpen();
return draw;
}
int allDefeat(){
int defeat = 0;
while(!file.eof()){
file>>elm;
if(elm==0)
defeat++;
}
file.close();
fOpen();
return defeat;
}

int allPoint(){


int point = 0;
while(!file.eof()){
file>>elm;
if(elm==3 or elm==1)
point++;
}
file.close();
fOpen();
return point;
}
float Statistics(){
int maxs =allElm();
int defeat = allDefeat();
if(maxs!=0)
return (defeat*100/maxs);
else
return 0;
}
};

int main()


{
try{
Football_club A("D:/club.txt");
cout<}catch(Football_club::fileOpen){
cout<<"Football club faylini ochishda xatolik"<}
return 0;
}
Natija :

2-TOPSHIRIQ


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.

Yüklə 218,52 Kb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin