O’zbekiston respublikasi oliy va o’rta maxsus ta’lim vazirligi toshkent axborot texnologiyalari universiteti



Download 18,83 Mb.
bet107/225
Sana30.12.2021
Hajmi18,83 Mb.
#89889
1   ...   103   104   105   106   107   108   109   110   ...   225
Bog'liq
“MTA” fani boyicha oquv uslubiy qollanma

Ko’rsatkichli toifalar xotirada joylashgan bironta ma’lumot adresini saqlash uchun ishlatiladi. Ma’lumotlar ustida amal bajarishda uning adresiga ko’rsatkich orqali murojaat qilinadi. Agar ko’rsatkichga tuzilmaviy ma’lumot adresi o’zlashtirilgan bo’lsa, u bunday ma’lumotlar saqlangan birinchi bit adresini ko’rsatadi. Ko’rsatkichlar odatda dinamik ob’ektlar bilan ishlashda va katta ob’ektlarni (masalan, massivlarni, klass ob’ektlarini) funksiyalarga parametr sifatida uzatishda ishlatiladi. Ko’rsakichlarni C++ da quyidagicha ifodalash mumkin.
int *p;//ko’rsatkich e’lon qilindi

int a=3;// butun toifali o’zgaruvchi yaratilindi

p=&a;//p ko’rsatkichga a ning adresi(masalan, 0x22ff44) o’zlashtirildi

p=a// xato!!! Ko’rsatkichga qiymat berish mumkin emas

*p++;//p ko’rsatayotgan manzildagi qiymatni 1 taga oshirish, yani 3+1=4
Misol.Massiv elementlarining o’rta afirmetik qiymatidan katta bo’lgan elementlari sonini aniqlang.
#include

#include

using namespace std;

int hisoblash(int *arr,int N){

int sum=0, counter=0;

double middle;

for(int i=0; i

{

sum+=arr[i];

}

middle=(double)sum/(double)N;

cout<<"O’rta arifmetic = "<

for(int i=0; i

{

if(arr[i]>middle)

counter++;

}

return counter;

}

int main()

{

int *arr, N;

cout<<"Massiv elementlari sonini kiriting=: ";

cin>>N;

arr=new int[N];

for(int i=0; i

{

cout<

cin>>arr[i];

}

int counter=hisoblash(arr,N);

cout<<"o’rta arifmetik qiymatdan katta elementlar soni = "<

}
Yuqorida keltirilgan toifalarga aynan siz ishlatayotgan operatsion tizim tomonidan nechta bayt ajratilayotganligini bilish uchun dastur tuzamiz.
#include

#include

#include

using namespace std;
int main(int argc, char* argv[])

{

cout << " data type " << "byte" << " " << " max value " << endl // sarlavhani chiqarish

<< "bool = " << sizeof(bool) << " " << fixed << setprecision(2)/* bool toifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(bool) * 8.0) - 1) << endl

<< "char = " << sizeof(char) << " " << fixed << setprecision(2)/* char toifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(char) * 8.0) - 1) << endl

<< "short int = " << sizeof(short int) << " " << fixed << setprecision(2)/* short int toifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(short int) * 8.0 - 1) - 1) << endl

<< "unsigned short int = " << sizeof(unsigned short int) << " " << fixed << setprecision(2)

/* unsigned short int toifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(unsigned short int) * 8.0) - 1) << endl

<< "int = " << sizeof(int) << " " << fixed << setprecision(2)/* inttoifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(int) * 8.0 - 1) - 1) << endl

<< "unsigned int = " << sizeof(unsigned int) << " " << fixed << setprecision(2)/* unsigned inttoifasi uchun maksimal qiymatni hisoblaymiz */

<< (pow(2,sizeof(unsigned int) * 8.0) - 1) << endl

<< "long int = " << sizeof(long int) << " " << fixed << setprecision(2)/* long int toifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(long int) * 8.0 - 1) - 1) << endl

<< "unsigned long int = " << sizeof(unsigned long int) << " " << fixed << setprecision(2)/* unsigned long inttoifasi uchun maksimal qiymatni hisoblaymiz */

<< (pow(2,sizeof(unsigned long int) * 8.0) - 1) << endl

<< "float = " << sizeof(float) << " " << fixed << setprecision(2)/* floattoifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(float) * 8.0 - 1) - 1) << endl

<< "double = " << sizeof(double) << " " << fixed << setprecision(2)/* doubletoifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(double) * 8.0 - 1) - 1) << endl;

system("pause");

return 0;

}
Dasturga izoh:bu erda sizeof() funksiyasi argumentiga berilgan toifaga xotiradan ajratiladigan joy xajmini baytlarda ko’rsatadi. Toifaga beriladigan maksimal qiymatni aniqlash uchun 2^(b * 8 - 1) – 1formula asosida hisoblaymiz. Bu erda b toifaga ajratiladiga xotira xajmi (baytda), uni 8 ga ko’paytirib bitga o’girib olamiz va 1 ni ayiramiz. Chunki toifaga ajratilgan xotira xajmining 1-biti ishora uchun ajratiladi. Umumiy sondan 1 ni ayirishdan maqsad sonlar diapazoni 0 dan boshlanadi.
Toifalarni moslashtirish.Toifalar bilan ishlaganda ularni qiymatlarni 1 toifadan 2-siga o’girishga to’g’ri keladi. Ba’zi o’girishlarni kompilyator avtomatik tarzda o’zi bajaradi. Ba’zilariga kod yozish talab etiladi.Kompilyator avtomatik tarzda toifalarni moslashtirishiga misollar keltiramiz.

1-jadval. S++ da toifalarni moslashtirish

X bo’linuvchi

Y bo’luvchi

Bo’luv natijasi

misol x = 15 y = 2

int

int

int

15/2=7

int

float

float

15/2=7.5

float

int

float

15/2=7.5

Ba’zida toifalar foydalanuvchilar tomonidan oshkora o’giriladi. Masalan,


int i=23; float j=12.3,k;

k=(float)i+j;
Bu erda i o’zgaruvchisi haqiqiy toifaga o’girilmadi, faqat bu qiymatning vaqtinchalik haqiqiy toifadagi nusxasi yaratilindi.i o’zgaruvchini toifasini boshqa toifaga o’girish uchun C++ da quyidagi static_cast funksiyasi ishlatiladi.
int ret=15;

static_cast(ret)/2 //natija 7.5
<> qavs ichida funksiya argumentidagi qiymat yoki o’zgaruvchi qaysi toifaga o’girilishi kerakligi ko’rsatiladi.

Misol. Toifalarni avtomatik va oshkora tarzda o’girilishiga dastur tuzing.


#include

#include

using namespace std;
int main()

{

int int_value15 = 15, int_value2 = 2; // int toifali 2 ta o’zgaruvchi

float float_value15 = 15, float_value2 = 2; // float toifali 2 ta o’zgaruvchi

cout<< fixed << setprecision(2) // haqiqiy sonlarning kasr qismini aniqligini kiritish, 2 ga teng

<< "15 / 2 = " << int_value15 / int_value2 << endl

<< "15 / 2 = " << int_value15 / float_value2 <

<< "15 / 2 = " << float_value15 / int_value2 <

<< "15 / 2 = " << float_value15 / float_value2 << endl; // toifalar avtomatik moslashtiriladi

cout<< "15.0 / 2 = " << 15.0 / 2 <

<< "15 / 2.0 = " << 15 / 2.0 << endl; // toifani oshkora o’girish

cout<< "float(int_value15) / int_value2 = " << float(int_value15) / int_value2 << endl // toifani oshkora o’girish

<< "15 / double(2) = " << 15 / double(2) << endl; // toifani oshkora o’girish

cout<< "static_cast(15) / 2 = " << static_cast(15) / 2 << endl // toifani o’girish unar amali yordamida

<< "static_cast(15) = " << static_cast(15) << endl // ASCII jadvalidagi barcha belgilar kodlarini kiritish mumkin

<< "static_cast(20) = " <(20) <

system("pause");

return 0;

}

Ushbu toifalardan tashqari C++ da yana bitta satrtoifasi mavjud. Satr – bu char toifadagi elementlar massivi hisoblanadi va oxirgi elementi ikkilik 0 hisoblanadi(yani kodi 0 ga teng bo’lgan belgi). Bunday massivga satrli literallar, yani “” belgisi ichida belgilar ketma-ketligini o’zlashtirish mumkin.Masalan, quyidagi 3 ta qator bir xil.


char str1[] = "text";

char str2[] = { 't', 'e', 'x', 't', '\0' };

char* str3 = "text";
Ushbu toifaga oid bir qator funksiyalar mavjud.

Misol.strncat() funksiyasi analogini yaratish.Bu funksiya 1-satrga 2-satrning boshidagi n ta belgisini birlashtiradi.
#include

using namespace std;
char* mystrncat(char *s1, char *s2, int num);
int main()

{

char *p1=new char [20];

char *p2=new char [20];

strcpy(p1, "abce");

strcpy(p2, "fghi");

char *p3;

p3=mystrncat(p1,p2, 2);

cout<


system("pause");

}
char* mystrncat(char *s1, char *s2, int num)

{

int len;

len=strlen(s1);

int i;

for(i=0; i

{

s1[len+i]=s2[i];

}

s1[i]=0;

return s1;

}

Misol.Strchr() funksiyasi analogini yaratish. Bu funksiya satrdanqidirilayotgan belgini izlaydi va 1-uchragan joydan boshlab satr oxirigacha bo’lgan qismini qaytaradi.

#include

using namespace std;

char* findch(char ma[], char a);

int main()

{

char line[128];

char fchar;

char *pointer;

cout<<"satrni kiriting: ";

cin.getline(line,127);

cout<<"qidirilayotgan belgini kiriting ";

cin>>fchar;

pointer=findch(line,fchar);

cout<<"topilgan qism satr "<


}

char* findch(char ma[],char a)

{

int i=0;

while(ma[i]!='\0')

{

if(ma[i]==a)

return&ma[i];

else

i++;

}

return NULL;

}
Statik ma’lumotlar tuzilmasi
Ma’lumotlar tuzilmasi (MT)ni quyidagicha tasniflash mumkin.

Statik tuzilma deb dastur bajarilishi mobaynida elementlari soni yoki ular orasidagi bog’liqliklari o’zgaruvchan bo’lgan tuzilmaga aytiladi.Statik tuzilmalarni ko’rib chiqamiz.



Massivlar.Massiv bu bir xil toifadagi elementlarning tartibli ketma-ketligidir. Massiv bir yoki ikki o’lchovli bo’lishi mumkin. Bir o’lchovli massivlar S++ da quyidagicha e’lon qilinadi:

[elementlar_soni];

Masalan, int a[12];

Ikki o’lchovli massivlar esa quyidagicha ifodalanadi:

[qatorlar_soni][ustunlar_soni];

Masalan, int a[2][3];


1-misol. Massivni elyemyentlarini yig’indisini toping. Misolni yechilishi quyidagicha:

#include

using std::cout;

#include

main()

{

float s,j;

int i;

s=0;

float a[5]={2,3,4,-1,-5};

for (i=0; i<5; ++i)

s = s + a[i];

cout<<"\n s = "<

getch();

return 0;

}

Natija:
S = 3


2-misol. Bir o’lchamli n ta elyemyentdan iborat massiv byerilgan. Quyidagilarni bajaring:

a) manfiy elyemyentlarning yig’indisini;

b) maksimal va minimal qiymatli elyemyentlar orasida joylashgan elyemyentlardan yangi massiv tuzing;

v) massiv elyemyentlarini o’sish tartibida joylashtiring.



Misolni dasturi:

#include

using namespace std;

int main()

{

int x,y,n,h,a[1000],min,max;

cin >> n;

for(int i=0;i

cin >> a[i];

int s=0;

for(int i=0;i

if(s!=0){ cout << "Manfiy elementlar yigindisi:";

cout << endl; cout << s; cout << endl; }

else

{ cout << "Manfiy elementlari yoq;";cout << endl; }

min=a[0];x=0;

for(int i=0;i

if(a[i]

x=i; }

max=a[0];y=0;

for(int i=0;i

if(a[i]>max)

y=i;

}

cout << "maksimal va minimal elementlar orasidagi sonlar:";

if(y>x){

for(int i=x+1;i

cout << endl;

cout << a[i]; } }

else

{

for(int i=y+1;i

cout << endl;

cout << a[i];}

}

cout << endl;

min=a[0];int m=1;

for(int j=0;j

{ for(int i=m;i

if(min>=a[i]){

h=min;

min=a[i];a[i]=h;

} }

a[j]=min;

min=a[j+1];

m++;cout <

}

return 0;

}
3-misol. Bir o’lchovli n ta elyemyentdan iborat massiv byerilgan. Quyidagini hisoblang:

a) minimal elyemyent o’rnini aniqlang;

b) birinchi va ikkinchi raqami manfiy elyemyentlar orasidagi sonlar yig’indisini;

v) massivni shunday almashtiringki, dastlabki elyemyentlari moduli 1 dan kichik bo’lsin, kyeyin qolganlarini joylashtiring.



Misolni yechish:

#include

#include

using namespace std;

int main(){

float a[1000], min;int n,h;

cin >> n;

for(int i=0;i

cin >>a[i];

min=a[0];

for(int i=0;i

if(min>=a[i])

h=i;

}

cout <<"eng kichik element turgan o’rni:" << h <

float s=0;

for(int i=0;i

if(a[i]<0){i++;

while(a[i]>0){

s+=a[i];

i++;} } }

cout <<"manfiy sonlar orasidagi sonlar yigindisi"<

for(int i=0;i

if(fabs(a[i]<1))

cout<

for(int i=0;i

if(fabs(a[i]!=1))

cout<

}

return 0;

}

4-misol.Butun toifali matrisa berilgan. Undagi shunday A[i,j] elementlarni topingki, ular i-qatordagi minimal element bo’lsin va bir vaqtning o‘zida j-ustunning maksimal elementi bo’lib ham hisoblansin.
#include

#include

#include

using namespace std;

void randomfill(int **a,int M, int N);

void show(int **a,int M, int N);

bool sed(int **a,int N, int M, int pN, int pM);

int main()

{

srand(time(NULL));

int n,m;

int **arr;

int **sedar;

cout<<"Satrlar soni=";

cin>>n;

arr=new int* [n];

sedar=new int* [n];

cout<<"Ustunlar soni=";

cin>>m;

for(int i=0; i

{

arr[i]=new int [m];

sedar[i]=new int [m];

}

randomfill(arr, n, m);

show(arr, n, m);

for(int i=0; i

for(int k=0; k

{

if(sed(arr, n, m, i, k))

{

sedar[i][k]=1;

cout<<"Sedlovayatochkavstroke "<

}

else

{sedar[i][k]=0;}

}

show(sedar, n, m);

}

void randomfill(int **a,int N, int M)

{

for(int i=0; i

for(int k=0; k

a[i][k]=rand()%100+1;

}

void show(int **a,int N, int M)

{

for(int i=0; i

{ for(int k=0; k

{cout<

cout<

}

}

bool sed(int **a,int N, int M, int pN, int pM)

{ int ok=0,ok2=0;

for(int i=0; i

{

if(a[pN][pM]

{ok++;}

}

if(ok==M-1)

for(int i=0; i

{

if(a[pN][pM]>a[i][pM])

{ok2++;}

}

if(ok2==N-1)

return true;

else

return false;

}
Vektorlar. Vektor bu bir xil toifadagi elementlarning tartibli ketma ketligi bo’lib, massivdan farqi uning o’lchami dastur bajarilishi davomida o’zgarishi mumkin,yani vektor bu dinamik massiv hisoblanadi.

Vektorlarni turlicha initsializatsiyalash usullari mavjud:



vector vec0; // bo’sh vektor

const int size = 8;

const int value = 1024;

vector vec1(size);//8 ta elementga ega, elementlar qiymatlari 0 ga teng

vectorvec2(size,value);//8 ta elementga ega, elementlar qiymatlari 1024 ga teng

inta[4] = { 0, 1, 1, 2 };

vector vec3(a,a+4);//4 ta elementga ega, elementlar qiymatlari a massivinikiga teng

vector vec4(vec2);//vec2 ning nusxasi

Vektorlarning massivga nisbatan qulayligi haqida quyidagilarni bayon qilmoqchimiz:



  • Vektorlar bilan ishlash uchun standart kutubxona funksiyalari mavjud bo’lib, ular yordamida turli amallarni siklsiz, bir qator kod yordamida bajarish mumkin. Ulardan ayrimlarini keltirib o’tamiz:

  • test.at(i) - test[i] kabi yozuv bilan bir xil, faqat bunda agar i-element mavjud bo’lmasa, dastur hatolik ko’rsatmaydi;

  • test.asign(n,m)–vektorga n ta elementni m qiymat bilan yozadi;

  • test.asign(start,end)–boshqa vektorning boshi va oxirini ko’rsatuvchi iteratorlar startdan end gacha bo’lgan elementlarni ushbu vektorga kiritadi;

  • test.front()–1-elementga murojaat;

  • test.back() –oxirgi elementga murojaat;

  • test.begin()–vektor 1-elementi iteratori;

  • test.end()–vektor oxiri iteratori(oxirgi elementidan keying adresni ko’rsatadi);

  • test.clear()–vektorni tozalash;

  • test.erase(i)yokitest.erase(start,end)–i-iterator elementini yoki start va end oralig’idagi elementlarni o’chiradi;

  • test.size()–vektordagi elementlar sonini aniqlaydi;

  • test.swap(test2) - test va test2 vektorlar elementlarini almashtiradi;

  • test.insert(a,b) - test vektoriga iterator ko’rsatayotgan a elementdan oldin b elementni kiritadi, bunda iterator kiritilgan elementni ko’rsatadi;

  • test.insert(a,n,b)– b elementdan n ta kiritadi;

  • test.insert(a,start,end) - start va end iteratorlari oralig’idagi elementlarni a dan oldin kiritadi.

  • begin()vaend() iteratorlari mos ravishdaxotirada vektorningbirinchi elementini va oxirgi elementidan keyingiadresni ko’rsatadi.Shu o’rinda iterator nimaligiga aniqlik kiritsak. Iterator bi birorta o’zgaruvchiga ko’rsatkich hisoblanadi. Iterator bizga kerak qiymatlarni qaerdaligini biladi va uning qiymatini bizga chiqarib beradi. Itaratorlar asosan konteynerlar bilan ishlashda qo’llaniladi. Iterator yaratish uchun quyidagini yozish kerak:

iterator_nomi::iterator nomi;

Masalan:vector ::iterator begin=vec.begin();

string::iterator end,cur;

Satrlarhamkonteynerhisoblanadi.Endiiteratorko’rsatayotganelementquyidagichaolinadi.



cout<<*cur<

Bu erda tushunarliki, * belgisi cur iteratorni emas, u ko’rsatayotgan qiymatni ko’rsatadi.



cur++; // keying elementga o’tish

cur+=10; // <=>cur=cur+10 10 ta elementdan keyinga o’tish



Vektor elementlarinni iterator bilan ekranga chiqarishni ko’ramiz:

vector test;

string buffer = "";

//elementlarni kiritilsh

do {

getline(cin, buffer);

if (buffer.size() > 0) test.push_back(buffer);

} while (buffer != "");

vector::iterator cur;

for (cur=test.begin();cur

cout<<*cur<


  • 2ta uzunligi teng bo’lgan vektorni siklsiz solishtirish mumkin. Bunda ularning mos elementlari qiymatlari solishtiriladi. Masalan:


#include

#include

using namespace std;

int main()

{

vector array1(3);

array1[0] = 4;

array1[1] = 2;

array1[2] = 1;

vector array2(3);

array2[0] = 4;

array2[1] = 2;

array2[2] = 1;

// vektorlarni solishtirish

if (array1 == array2) {

cout << "array1 == array2" << endl;

}

return 0;

}

  • Vektor elementlarini siklsiz ekranga chiqarish mumkin:

#include

#include

#include

using namespace std;

int main()

{

vector array1;

array1.insert(array1.end(), 4);

array1.insert(array1.end(), 3);

array1.insert(array1.end(), 1);

copy( array1.begin(), // vektor boshi iteratori

array1.end(), // vektor oxiri iteratori

ostream_iterator(cout," ") //chiqarish potoki iteratori

);

return 0;

}

  • Vectorlar yordamida ikki o’lchovli massivlarni ham yaratish mumkin. Masalan:

#include

#include

using namespace std;

int main ()

{

const int row=10;

const int col=2;

vector> tab(row);

for(int i=0; i

{

tab[i].resize(col);

for(int j=0; j

cout<<'\n';

}

cout<

system("pause");

}
1-misol. Massiv elementlaridan vektor yarating va elementlarini o’sish bo’yicha tartiblang. Bironta elementni qidiring va vektorni invertarizatsiyalang (elementlarini teskari tartibda joylashtirish).

#include

#include

using namespace std;

int main(){

int ia[ 10 ] = {51, 23, 7, 88, 41, 98, 12, 103, 37, 6};

vector< int > vec( ia, ia+10 );//

vector::iterator it = vec.begin(), end_it = vec.end();// vektorning 1- va //oxirgi elementlariga ko’rsatkich

sort( vec.begin(), vec.end() );//vektorni saralash

it = vec.begin();

end_it = vec.end();

// vektorni ekranga chiqarish

for ( ; it != end_it; ++ it ) cout << *it << ' ';// ++it iteratorni keying elementga //surish, *it – bu ko’rsatilayotgan elementni olish

cout << "\n\n";

int search_value;

cout<<"qidirilayotgan elementni kiriting";

cin >> search_value;

vector::iterator found;

found = find( vec.begin(), vec.end(), search_value );//elementni qidirish

if ( found != vec.end() )

cout << "topildi!\n\n";

else cout << "topilmadi!\n\n";

reverse( vec.begin(), vec.end() );//vektor elementlarini teskarisiga joylashtirish

it = vec.begin(); end_it = vec.end();

for ( ; it != end_it; ++ it ) cout << *it << ' ';

cout << endl;

}
2-misol. Vektor va vektorlar ustida amal bajarish dasturi.
#include

#include

using namespace std;

int main()

{

vector q;

q.push_back(10); q.push_back(11); q.push_back(12);

vector v;

for(int i=0; i<5; ++i){

v.push_back(i);

}

// v vektori elementlari 0 1 2 3 4

std::vector::iterator it = v.begin() + 1;

// 2-el.dan oldin 33 ni kiritish:

it = v.insert(it, 33);

// v vektori elementlari 0 33 1 2 3 4

//q vektor elementlarini v vector 2-el.dan oldin kiritish:

v.insert(it, q.begin(), q.end());

// v vektori elementlari 0 10 11 12 33 1 2 3 4

it = v.begin() + 3;

// it v vektorning 4-el.ni ko’rsatyapti

// 4-el.dan oldin 3 marta -1ni kiritamiz:

v.insert(it, 3, -1);

// v vektor el.lari 0 10 11 -1 -1 -1 12 33 1 2 3 4

// v vektorning 5 – el-tini o’chiramiz

it = v.begin() + 4;

v.erase(it);

// v vektor el.lari 0 10 11 -1 -1 12 33 1 2 3 4

v.clear();//v vektorni o’chirish

return 0;

}

3-misol.Satr berilgan, unda vergul vaprobel bilan ajratilgan so’zlardan vektor xosil qiling.

Budasturnituzishdastring::find_first_of funksiyasi juda qulay.
#include

#include

#include

using namespace std;

int main()

{

vector v;

int i; string s;

cout<<"satrni kiriting=";

getline(cin,s);

while((i = s.find_first_of(", ")) != string::npos) {

// satrdagi 1-uchragan ajratgichgacha bo’lsan qism satr

v.push_back(s.substr(0, i));

// qism satrni o’chirish

s = s.substr(i+1);

}

v.push_back(s); // qolgan satrni ham yozib qo’yish

for(int i=0;i

system("pause");

}
To’plamlar. To’plam bu bir xil toifadagi elementlarning tartibsiz majmuasidir va unda elementlar takrorlanmas bo’ladi. To’plam ustida bajariladigan amallar quyidagilar: element kiritish, o’chirish, elementlar sonini aniqlash, bo’shlikka tekshirish. To’plamni C++ da quyidagicha e’lon qilinadi:
set s;

for(int i = 1; i <= 100; i++) {

s.insert(i); // to’plamga element kiritish

}

s.insert(42); // 42 to’plamda avjudligi sababli hech nima yuz bermaydi

for(int i = 2; i <= 100; i += 2) {

s.remove(i); // juft sonlarni o’chiramiz

}

// set::size() funksiyasi unsigned int toifasida qiymat qaytargani uchun uni int toifasiga o’giramiz

int N = int(s.size()); // N=50

To’plamda push_back() funksiyasi yo’q. Chunki unda elementlar tartibsiz va indeks degan tushuncha yo’q. Shu sababli to’plam elementlarini iterator bilan chiqarish mumkin.



set S;

...

// S to’plam elementlari yig’indisini hisoblaymiz

intr = 0;

for(set::const_iterator it = S.begin(); it != S.end(); it++)

r+=(*it);

To’plam bilan ishlashning afzalligi tezlikdir.Ayniqsa, qidiruvda.Set::find() funksiyasi 1 ta argumentga ega va uning qaytaradigan qiymati yoki topilgan elementni ko’rsatadi, yoki end() iteratoriga teng bo’ladi.



set s;

...

if(s.find(42) != s.end()) {

// 42 mavjud

}

else {

// 42 mavjud emas

}

To’plamdan elementni o’chirish uchun erase() funksiyasidan foydalaniladi.

set s;

...

s.insert(54);

...

s.erase(29);

s.erase(s.find(57));

Bu funksiyaning oraliqli ko’rinishi ham mavjud:



set s;

...

set::iterator it1, it2;

it1 = s.find(10);

it2 = s.find(100);

if(...) {

s.erase(it1, it2); // 10 dan 100 gacha bo’lgan elementlar //o’chiriladi(10,100 o’chirilmaydi)

}

else {

// it2 iteratorni bitta element keying suramiz

// set::iterator uchun += operatori qo’llanilmaydi, lekin ++ va – //ishlatilishi mumkin

it2++;

s.erase(it1, it2);

}

To’plamnie’lonqilishninghuddivektordagikabioraliqlikonstruktorihammavjud:



int data[5] = { 5, 1, 4, 2, 3 };

set S(data, data+5);
Misol.Matn faylida berilgan so’zlardan to’plam xosil qiling.To’plamdan bironta satrni izlash dasturini tuzing.
#include

#include

#include

#include

#include

using namespace std;

int main()

{

set s;

ifstream f("bas.txt");

copy(

istream_iterator(f),

istream_iterator(),

inserter(s, s.end())

);

copy(

s.begin(),

s.end(),

ostream_iterator(cout, "\n")

);

string a="";

cin>>a;

if(s.find(a)!=s.end()) cout<<"bor";

else cout<<"yo'q";

system("pause");

}

Misol.Satrdagi belgilarning to’plamga tegishli yoki yo’qligini aniqlash dasturi.



#include

#include

#include

using namespace std;

int main()

{

set cs;

for(int i='A';i<='Z';i++) cs.insert(i);

string str="A1bZzh2;";

for(int i=0;i

if(cs.find(str[i])!=cs.end())

cout<

else cout<
system("pause");

return 0;

}

Download 18,83 Mb.

Do'stlaringiz bilan baham:
1   ...   103   104   105   106   107   108   109   110   ...   225




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