1. Simvolli Massivlar haqida tushuncha. Simvolli toifalar ustida amallar

Simvolli toifalar ularni elon qilish ular ustida matematik amallarni bajarish 5 qator hosil qilish ularni har birida unli harflarni aniqlash dasturini tuzish
Reja:
1.Simvolli Massivlar haqida tushuncha.
2.Simvolli toifalar ustida amallar.
3.Simvolli toifalarga oid dastur.
C ++ tilida satrlar simvolli massivlar sifatida ta'riflanadi. Simvolli massivlar quyidagicha tasvirlanishi mumkin: Char pas[10]; Simvolli massivlar quyidagicha initsializatsiya qilinadi: Char capital[]=‖TASHKENT‖; Bu holda avtomatik ravishda massiv elementlari soni aniqlanadi va massiv ohiriga satr ko‘chirish ‗\n‘ simvoli qo‘shiladi. Yuqoridagi initsializatsiyani quyidagicha amalga oshirish mumkin: Char capital[]={‗T‘,‘A‘,‘S‘,‘H‘,‘K‘,‘E‘,‘N‘,‘T‘,‘\n‘}; Bu holda so‘z ohirida ‗\n‘ simvoli aniq ko‘rsatilishi shart. Misol uchun palindrom masalasini ko‘rib chiqamiz. Palindrom deb oldidan ham ohiridan ham bir hil o‘qiladigan so‘zlarga aytiladi. Misol uchun non. Dasturda kiritilgan so‘z palindrom ekanligi aniqlanadi: #include void main() { gets(a); for( int j=0, a[j]!=‘\0‘;j++); I=0; while(I1) Cout<< void main() { char s[]; int c; gets(a); int i, j; for ( i = j = 0; s[i] != '\0'; i++) if ( s[i] != c ) s[j++] = s[i]; s[j] = '\0'; puts(s); } Har gal 's' dan farqli simvol uchraganda , u J pozitsiyaga yoziladi va faqat shundan so‘ng J qiymati 1 ga oshadi. Bu quyidagi yozuvga ekvivalent: if ( s[i] != c ) s[j] = s[i]; j++;
C++ da har xil maqsadlarda ishlatiladigan turli xil belgilar mavjud. C++ da ba'zi keng tarqalgan belgilar turlariga quyidagilar kiradi:
Arifmetik belgilar: Bu belgilar qoʻshish (+), ayirish (-), koʻpaytirish (*), boʻlish (/), modul (%) va boshqalar kabi matematik amallar uchun ishlatiladi.
Relyatsion belgilar: Bu belgilar ikki qiymat o'rtasidagi munosabatni tekshirish uchun taqqoslash operatsiyalari uchun ishlatiladi. Masalan, kichik (<), katta (>), kichik yoki teng (<=), katta yoki teng (>=), teng (==), teng emas (!=) va hokazo. .
Mantiqiy belgilar: Bu belgilar mantiqiy VA (&&), mantiqiy OR (||) va mantiqiy EMAS (!) kabi mantiqiy amallar uchun ishlatiladi.
Belgilash belgilari: Bu belgilar o'zgaruvchilarga qiymat berish uchun ishlatiladi. Eng keng tarqalgan belgilash belgisi tenglik belgisi (=) dir, lekin +=, -=, *=, /= va boshqalar kabi murakkab belgilash belgilari ham mavjud.
Bitli belgilar: Bu belgilar sonlarning ikkilik ko'rinishlarida bitli operatsiyalar uchun ishlatiladi. Masalan, bit boʻyicha VA (&), bit boʻyicha YOKI (|), bit boʻyicha XOR (^), bit boʻyicha chapga siljish (<<), bit boʻyicha oʻngga siljish (>>) va boshqalar.
Maxsus belgilar: C++ tili maxsus belgilar uchun qavslar (), jingalak qavslar {}, kvadrat qavslar [], vergul (,), nuqtali vergul (;), nuqta (.), strelka operatori (->) va boshqalar kabi maxsus belgilardan foydalanadi. sintaksis va kod tuzilishidagi maqsadlar.
Ushbu belgilar C++ dasturlashda hal qiluvchi rol o'ynaydi va ishlab chiquvchilarga turli operatsiyalarni bajarish va dastur oqimini boshqarish imkonini beradi.
for takrorlash operatori for takrorlash operatorining sintaksisi qo‗yidagi ko‗rinishga ega: for (1; 2;3) ; Bu operator amal qilishni 1 bajarishdan boshlaydi. Keyin takrorlash qadamlari boshlanadi. Har bir qadamda 2 bajariladi, agar natija rost (true) bo‗lsa, takrorlash tanasi - bajariladi va oxirida 3 bajariladi, aks holda boshqaruv takrorlash operatoridan keyingi operatorga o‗tiladi. Takrorlash tanasi – sifatida bitta operator yoki operatorlar bloki kelishi mumkin. Misol uchun 10 dan 20 gacha bo‗lgan butun sonlar yig‗indisini hisoblash masalasini ko‗raylik. #include int main() { int Summa=0; for (int i=10; i<=20; i++) Summa +=i; sout<<<=20 takrorlash sharti yolg‗on bo‗ladi va takrorlash tugaydi va boshqaruv takrorlash operatoridan keyingi cout operatoriga o‗tiladi va ekranga yig‗indi chop etiladi. Yuqorida keltirilgan misolga qarab takrorlash operatorlarining qavs ichidagi ifodalariga izoh berish mumkin: 1 – takrorlash sanagichi vazifasini bajaruvchi o‗zgaruvchisiga boshlag‗ich qiymat berishga xizmat qiladi; 2 – takrorlashni bajarish yoki yo‗qligini aniqlab beruvchi mantiqiy ifoda, agar shart rost bo‗lsa, takrorlash davom etadi, aks holda yo‗q; 3 – odatda takrorlash sanagichi qiymatini oshirish (kamaytirish) uchun xizmat qiladi yoki bu yerda takrorlash shartiga ta‘sir qiluvchi boshqa amallar bo‗lishi mumkin. Takrorlash operatorila qavs ichidagi ifodalar bo‗lmasiligi mumkin, lekin sintaksis ‗;‘ bo‗lmasligiga ruxsat bermaydi. Shu sababli, eng sodda ko‗rinishdagi takrorlash operatori quyidagicha bo‗ladi: for ( ; ; ) cout <<”Cheksiz takrorlash…” ;
Bir o`lchamli massivlar uchun ishlatilgan o`zgaruvchilar, bir хil jinsdagi berilganlarni хotirada saqlash uchun foydalaniladi. Ikki o`lchamli massivlarda esa, satr va ustunlar orqali bir хil jinsdagi qiymatlarni ikki o`lchamli o`zgaruvchilar ichida saqlash uchun foydalaniladi. Ikki o`lchamli statik massivlarni e`lon qilish. toifa massiv_nomi [massiv_satrlari_soni][massiv_ustunlari_soni]; Ikki o`lchamli statik massivlarning e`lon qilinishida, bir o`lchamlidan farqi, massiv nomidan keyin qirrali qavs ichida ikkita qiymat yozilganligidadir. Bulardan birinchisi, satrlar sonini, ikkinchisi esa ustunlar sonini bildiradi. Ya'ni ikki o'lchamli massiv elementiga ikkita indeks orqali murojaat qilinadi. Ikki o`lchamli massivlar matematika kursidan ma`lum bo`lgan matritsalarni eslatadi. Ikki o'lchamli massiv e'loniga misol: int a[3][3], b[2][4]; A matritsa 3 ta satr, 3 ta ustunga ega; B matritsa 2 ta satr, 4 ta ustunga ega; Ikki o'lchamli massivlarda 1 - indeks satrni, 2 - indeks ustunni bildiradi. Birinchi satrning dastlabki elementi a10 – a biru nol element deb o`qiladi. a o`n deyilmaydi. m ta satr va n ta ustunga ega bo`lgan massivga (mxn) o`lchamli massiv deyiladi. Agar m=n (satrlar va ustunlar soni teng) bo'lsa kvadrat massiv deyiladi. Ko'p o'lchamli massivlarni initsializats iyalash misоllar: int a[2][2]={1,2,7,3}; int b[2][3]={ {0,1,2}, {3,4,5} }; Massivlarni qo`llanilishiga misol keltiradigan bo`lsak, satrlar talabalarni, ustunlar fanlardan olgan baholarini bildirsin. Ya`ni m ta talaba, n ta fan. n - ustunga talabalarning o`rtacha baholari hisoblanib, shu asosida stipendiya bilan ta`minlansin. Va hakazo, bunga o`xshash ko`plab misollar keltirish mumkin. Bu masalalarga to`xtalishdan oldin bir ikkita oddiy masalar bilan tanishib chiqaylik. 1 - Masala. A(mxn) matritsa berilgan. Shu matritsa elementlarini kirituvchi va ekranga jadval ko`rinishida chiqaruvchi dastur tuzilsin. #include using namespace std; int main() { int m, n, a[10][10]; cout << "Satrlar sonini kiriting \nm="; cin >> m; cout << "Ustunlar sonini kiriting \nn="; cin >> n; cout <<"Massiv elementlarini kiriting \n"; for(int satr = 0; satr < m ; satr++) for(int ustun = 0; ustun < n; ustun++) { cout << "a[" << satr << "][" << ustun << "]="; cin >> a[satr][ustun]; } // matritsani jadval shaklida chiqarish for(int satr = 0; satr < m; satr++) { for(int ustun = 0; ustun < n; ustun++) 36 cout << a[satr][ustun] << "\t"; cout<<"\n"; } return 0; } JADVALLAR. Ikki o‘lchovli massivlar matematikada matritsa yoki jadval tushunchasiga mos keladi. Jadvallarning initsializatsiya qilish qoidasi, ikki o‘lchovli massivning elementlari massivlardan iborat bo‘lgan bir o‘lchovli massiv ta'rifiga asoslangandir. Misol uchun ikki qator va uch ustundan iborat bo‘lgan haqiqiy tipga tegishli d massiv boshlang‘ich qiymatlari quyidagicha ko‘rsatilishi mumkin: float d[2][3]={(1,-2.5,10),(-5.3,2,14)}; Bu yozuv quyidagi qiymat berish operatorlariga mosdir: d[0][0]=1;d[0][1]=-2.5;d[0][2]=10;d[1][0]=-5.3;d[1][1]=2;d[1][2]=14; Bu qiymatlarni bitta ro‘yhat bilan hosil qilish mumkin: float d[2][3]={1,-2.5,10,-5.3,2,14}; Initsializatsiya yordamida boshlang‘ich qiymatlar aniqlanganda massivning hamma elementlariga qiymat berish shart emas. Misol uchun: int x[3][3]={(1,-2,3),(1,2),(-4)}. Bu yozuv quyidagi qiymat berish operatorlariga mosdir: x[0][0]=1;x[0][1]=-2;x[0][2]=3;x[1][0]=-1;x[1][1]=2;x[2][0]=-4; Initsializatsiya yordamida boshlang‘ich qiymatlar aniqlanganda massivning birinchi indeksi chegarasi ko‘rsatilishi shart emas, lekin qolgan indekslar chegaralari ko‘rsatilishi shart. Misol uchun: Double x[][2]={(1.1,1.5),(-1.6,2.5),(3,-4)} Bu misolda avtomatik ravishda qatorlar soni uchga teng deb olinadi. Quyidagi ko‘radigan misolimizda jadval kiritilib har bir qatorning maksimal elementi aniqlanadi va bu elementlar orasida eng kichigi aniqlanadi: #include void main() { double a[4,3]; double s,max=0.0,min=0.0; int i,j; for(i=0;i<>(―%f‖,s);a[i,j]=s; if (max<< void main() { char a[10][10]; char c; for (int i=0;i void main() { char a[10][10]; char s[10]; int k[10]; gets(s); for (int i=0;i>(―%d‖,k[i]}; for (int i=0;i< idx; i++) { // massivning birinchi indeksini // o'zgartirsa bo'ladi for (int k = 0; k < 4; k++){ // massivning ikkinchi indeksi o'zgarmaydi cout << mass[i][k]; } cout << endl; } return; } ... int main() { ... printArray(intArray); // funksiya chaqirig'i ... return (0); } Massivning indekslarini funksiyaga bildirish yana muammoligicha qoladi. Albatta, birinchi indeksdan tashqari qolgan boshqa indekslar kattaligini funksiya ichida berish ma'noga egadir. Lekin birinchi indeks kattaligini tashqaridan, qo'shimcha parametr sifatida bersak, funksiyamiz chiroyliroq chiqadi, turli kattalikdagi massivlarni o'lish imkoniga ega bo'ladi.
Dastur matnida o‗zgaruvchi e‘lon qilinganda, kompilyator o‗zgaruvchiga xotiradan joy ajratadi (dastur kodi xotiraga yuklanganda berilganlar uchun segmentning boshiga nisbatan siljishini aniqlaydi) va ob‘ekt kod hosil qilishda shu o‗zgaruvchi uchragan joyga uning adresini joylashtiradi. Umuman olganda, dastur ob‘ektlarining (o‗zgaruvchilar, funksiyalarning) adreslarini xotiraning alohida joyida saqlash va ular ustidan amallar bajarish mumkin. Qiymatlari adres bo‗lgan o‗zgaruvchilarga ko‗rsatkich o‗zgaruvchilar deyiladi. Ko‗rsatkich uch xil turda bo‗lishi mumkin: a) birorta ob‘ektga, xususan o‗zgaruvchiga ko‗rsatkich; b) funksiyaga ko‗rsatkich; v) voidga ko‗rsatgich. Ko‗rsatgichning bu xususiyatlari uning qabul qilishi mumkin bo‗lgan qiymatlari bilan farqlanadi. Ko‗rsatkich albatta birorta turga bog‗langan bo‗lishi kerak, ya‘ni u ko‗rsatgan adresda qandaydir qiymat joylanishi mumkin va bu qiymatning xotirada qancha joy egallashi oldindan ma‘lum bo‗lishi shart. Funksiyaga ko‗rsatkich dastur joylashgan xotiradagi funksiya kodining boshlang‗ich adresi ko‗rsatadi, ya‘ni funksiyaga murojaat bo‗lganda (chaqirilganda) boshqarish shu adresga uzatiladi. Funksiyaga ko‗rsatkich orqali murojaat, funksiyaga vositali murojaat hisoblanadi. Chunki, funksiyaga uning nomi bo‗yicha emas, balki funksiyaga ko‗rsatuvchi o‗zgaruvchi orqali amalga oshiriladi. Funksiyani boshqa funksiyaga argument sifatida uzatish ham funksiya ko‗rsatkichi orqali bajariladi. Funksiyaga ko‗rsatkichning yozilish sintaksisi quyidagicha: (* ) (); bunda – funksiya qaytaruvchi qiymat turi; * - ko‗rsatkich o‗zgaruvchining nomi; - funksiya parametrlarining (yoki ularning turlarining) ro‗yxati. Masalan: int (*fun)(float,float); Bu yerda fun nomidagi funksiyaga ko‗rsatkich e‘lon qilingan - funksiya butun son turida qiymat qaytaradi va u ikkita haqiqiy turdagi parametrlardan iborat. Biror ob‘ektga (shu jumladan o‗zgaruvchiga) ko‗rsatkich. Bunday ko‗rsatkichda ma‘lum turdagi (tayanch yoki hosilaviy) berilganlarning xotiradagi adresi joylashadi. Ob‘ektga ko‗rsatkich quyidagicha e‘lon qilinadi: *nom; 40 Bu yerda - ko‗rsatkich aniqlaydigan adresdagi qiymat turi bo‗lib, u maydon turidan tashqari xar qanday tur bo‗lishi mumkin. Agar bir turda bir nechta ko‗rsatkichlar e‘lon qilinadigan bo‗lsa, har bir ko‗rsatkich uchun ‗*‘ belgisi qo‗yilishi shart: int *i, j,* k; float x,*y,*z; Bu misolda i va k - butun turdagi ko‗rsatkichlar va j - butun turdagi o‗zgaruvchi, ikkinchi operatorda x- haqiqiy o‗zgaruvchi va y,z haqiqiy turdagi ko‗rsatkichlar e‘lon qilingan . void ko‗rsatkich. Bu ko‗rsatkich ob‘ekt turi oldindan ma‘lum bo‗lmaganda ishlatiladi, ya‘ni bir ko‗rsatkichda turli vaqtda har xil turdagi ob‘ektlar adresi saqlanishi mumkin. Faqat void ko‗rsatkichga har qanday turdagi ko‗rsatkichning qiymatini yuklash mumkin. Lekin, ko‗rsatilgan adresdagi qiymatni ishlatishdan oldin, uni turi aniq bir turga oshkor ravishda keltirilishi kerak. void ko‗rsatkichni e‘lon qilish kuyidagicha bo‗ladi: void *; Ko‗rsatrichni o‗zi o‗zgarmas yoki o‗zgaruvchan bo‗lishi va o‗zgarmas yoki o‗zgaruvchiga ko‗rsatiishi mumkin, masalan: int i; // butun o‗zgaruvchi const int ci=1; // butun o‗zgarmas int *pi; // butun o‗zgaruvchiga ko‗rsatkich const int *pci; // butun o‗zgarmasga ko‗rsatkich int *const cp=&i; // butun o‗zgaruvchiga o‗zgarmas-ko‗rsatkich const int * const cpc=&ci; // butun o‗zgarmasga o‗zgarmas-ko‗rsatkich Misollardan ko‗rinib turibdiki, ‗*‘ va ko‗rsatkich nomi orasida turgan const modifikatori faqat ko‗rsatkichning o‗ziga tegishli hisoblanadi va uni o‗zgartish mumkin emasligini bildiradi, ‗*‘ belgisidan chapda turgan const esa ko‗rsatgan adresdagi qiymatni o‗zgarmas ekanligini bildiradi. Ko‗rsatkichga boshlang‗ich qiymatni berish uchun ‗&‘ - adresni olish amali ishlatiladi. Ko‗rsatkich o‗zgaruvchilarning amal qilish sohasi, yashash davri va ko‗rinish sohasi umumiy qoyidalarga bo‗ysunadi. Ko‗rsatkichga boshlang‗ich qiymatlar berish (initsializatsiyalash) Ko‗rsatkichlar ko‗pincha dinamik xotira (boshqa nomi ―uyum‖ yoki ―heap‖) bilan bog‗liq holda ishlatiladi. Xotiraning deyilishiga sabab, bu sohadagi bo‗sh xotira dastur ishlash jarayonida, kerakli paytida ajratib olinadi va bu xotiraga zarurat qolmaganida qaytariladi (bo‗shatiladi) va u keyinchalik dastur tomonidan yana ishlatilishi mumkin. Bunday xotiraga faqat ko‗rsatkichlar yordamida murojaat qilish mumkin. Bunday o‗zgaruvchilar dinamik o‗zgaruvchilar deyiladi va ularni yashash vaqti yaratilgan nuqtadan boshlab dastur oxirigacha yoki oshkor ravishda bo‗shatilish joyigacha. Ko‗rsatkichlarni e‘lon qilishda unga boshlang‗ich qiymatlar berish mumkin. Boshlang‗ich qiymat (initsializator) ko‗rsatkich nomidan so‗ng yoki qavs ichida yoki ‗=‘ belgidan keyin beriladi. Boshlang‗ich qiymatlar quyidagi usullar bilan berilishi mumkin: 1. Ko‗rsatkichga mavjud bo‗lgan ob‘ektning adresini berish: adresni olish amal orqali: int i=5,k=4; // butun o‗zgaruvchilar int *p = &i; // p ko‗rsatkichga i o‗zgaruvchini adresi yoziladi int *p1(&k); // p1 ko‗rsatkichga k o‗zgaruvchini adresi yoziladi boshqa initsializatsiyalangan ko‗rsatkichni qiymatini berish: int * r=p; // p oldin e‘lon qilingan va qiymatga ega bo‗lgan ko‗rsatkich massiv yoki funksiya nomini berish: int b[10]; //massivni e‘lon qilish int * t=b; //massivning boshlang‗ich adresini berish 41 … void f(int a) { /* … */} // funksiyani aniqlash void (*pf)(int); // funksiyaga ko‗rsatkichni e‘lon qilish pf=f; // funksiyani adresini ko‗rsatkichga berish 2. Oshkor ravishda xotirani absolyut adresini berish: char *vp = (char *)0xB8000000; bunda 0xB8000000 – o‗n oltilik o‗zgarmas son va (char *) – turga keltirish amali bo‗lib, u vp o‗zgaruvchini xotirani absolyut adresidagi baytlarni char sifatida qayta ishlovchi ko‗rsatkich turiga aylantiriladi. 3. Bo‗sh qiymat berish: int *suxx = NULL; int *r=0; Birinchi satrda maxsus NULL o‗zgarmasi ishlatilgan, ikkinchi satrda 0 qiymat ishlatilgan. Ikkala holda ham ko‗rsatkich hech qanday ob‘ektga murojaat qilmaydi. Bo‗sh ko‗rsatkich asosan ko‗rsatkichni aniq ob‘ektga ko‗rsatyotganligi yoki yo‗qligini aniqlash uchun ishlatiladi. 4. Dinamik xotirada new amali bilan joy ajratish va uni adresini ko‗rsatkichga berish: int * n =new int; // birinchi operator int * m =new int(10); // ikkinchi operator int * q=new int [10]; // uchinchi operator Birinchi operatorda new amali yordamida dinamik xotirada int uchun yetarli joy ajratib olinib va uning adresi n ko‗rsatkichga yuklangan. Ko‗rsatkichning o‗zi uchun joy kompilyatsiya vaqtida ajratiladi. Ikkinchi operatorda joy ajratishdan tashqari m adresiga boshlang‗ich qiymat - 10 sonini joylashtiradi. Uchinchi operatorda int turidagi 10 element uchun joy ajratigan va uni boshlang‗ich adresi q ko‗rsatkichga berilayapti. Bu misolda, aniqrog‗i massivga joy ajratilib, unga q nomi berilgan bo‗lib, keyinchalik shu nom orqali massiv elementlariga murojaat qilish mumkin. Xotira new amali bilan ajratilgan bo‗lsa, u delete amali bilan bo‗shatilishi kerak : delete n; delete m; delete [ ] q; Agarda xotira new[] amali bilan ajratilgan bo‗lsa, uni bo‗shatish uchun delete [] amalini o‗lchovi ko‗rsatilmagan holda qo‗llash kerak. Xotira bo‗shatilganligiga qaramasdan ko‗rsatkichni o‗zini qayta ishlatish mumkin. Ko‗rsatkich ustidan amallar Ko‗rsatkich ustidan quyidagi amallar bajarilishi mumkin: 1) ob‘ektga vositali murojaat qilish amali; 2) qiymat berish amali; 3) ko‗rsatkichga konstanta qiymatni qo‗shish; 4) ayirish amali; 5) inkrement va dekrement amallari; 6) solishtirish amali; 7) turga keltirish amali. Vositali murojaat qilish amali: Bu amal ko‗rsatkichdagi adres bo‗yicha joylashgan qiymatni olish yoki qiymat berish uchun ishlatiladi: shar a; // char turidagi o‗zgaruvchi e‘loni shar *p =new char; // ko‗rsatkichni e‘lon qilinib, unga dinamik // xotiradan ajratilgan xotiraning adresi berish *p=‘b‘; // p adresiga qiymat joylashtirish 42 a =*p; // a o‗zgaruvchiga p adresiga qiymatni berish Shuni qayd qilib o‗tish kerakki, xotirani bitta joyining adresini bir paytni o‗zida bir nechta va turli turdagi ko‗rsatkichlarga berish mumkin va murojaat qilganda har xil qiymatlar olish mumkin: unsigned long int A=0Xcc77ffaa; unsigned short int* pint = (unsigned short int*) &A; unsigned char* pshar=(unsigned char *) &A; cout<<<*pint<<) qiymatiga o‗zgaradi. Agar ko‗rsatkichning qiymati k o‗zgarmas qiymatga oshirilsa yoki kamaytirilsa, u k* sizeof() qiymatiga o‗zgaradi. Masalan short int *p=new short [5]; long * q = new long [5]; p++; // p qiymati 2 oshadi q++; // q qiymati 4 ga oshadi q+=3; // q qiymati 3*4=12 oshadi Ko‗rsatkichlarning ayirmasi deb, ular ayirmasining tur o‗lchamiga bo‗linishiga aytiladi. Ko‗rsatkichlarni o‗zaro qo‗shish mumkin emas. Murojaatlar Murojaatlar e‘londa ko‗rsatilgan nomning sinonimi sifatida ishlatiladi, yani bitta o‗zgaruvchiga xar xil nom bilan murojaat qilish mumkin. Murojaatni doimiy qiymatga ega bo‗lgan ko‗rsatkich deb qarash mumkin xam bo‗ladi. Murojaat quyidagicha e‘lon qilinadi: & ; Bu yerda – murojaat ko‗rsatuvchi qiymatning turi, ‗&‘ belgisi, undan keyin yozilgan - murojaat turidagi nom ekanligini bildiruvchi operator. Boshqacha aytganda ‗&‘ belgisiga adresni olish amali deyiladi. 43 Misol: int kol; int & pal=kol; // pal murojaati - kol o‗zgaruvchisining alternativ nomi const char & cr=‘\n‘; // cr – konstantaga murojaat Murojaatni ishlatishda quyidagi qoidalarga rioya qilish kerak: murojaat, funksiya parametri sifatida ishlatilgan, extern bilan tavsiflangan va sinf maydoniga murojaat qilgan hollardan tashqarida barcha holatlarda boshlang‗ich qiymatga ega bo‗lishi kerak. Murojaat asosan funksiyalarda adres orqali uzatiluvchi parametrlar sifatida ishlatiladi. Murojaatni ko‗rsatkichdan farqi shundaki, u alohida xotira egallamaydi u faqat o‗zgaruvchining boshqa nomi sifatida ishlatiladi. Satrlar Standart C++ tili ikki xildagi belgilar majmuasini qo‗llab–quvvatlaydi. Birinchi toifaga, an‘anaviy, ―tor‖ belgilar deb nomlanuvchi 8-bitli belgilar majmuasi kiradi, ikkinchisiga 16-bitli ―keng‖ belgilar kiradi. Til kutubxonasida har bir guruh belgilari uchun maxsus funksiyalar to‗plami aniqlangan. C++ tilida satr uchun maxsus tur aniqlanmagan. Satr char turidagi belgilar massivi sifatida qaraladi va bu belgilar ketma–ketligi satr terminatori deb nomlanuvchi nol kodli belgi bilan tugaydi (‗\0‘). Odatda, nol-terminator bilan tugaydigan satrlarni ASCIIZ –satrlar deyiladi. Sart konstanta deb qo‗shtirnoqlar ichiga olingan belgilar ketma–ketligiga aytiladi: ―Ushbu belgilar ketma–ketligiga satr deyiladi.‖ Quyidagi jadvalda C++ tilida belgi sifatida ishlatilishi mumkin bo‗lgan konstantalar to‗plami keltirilgan. Belgilar sinflari Belgi konstantalar Katta harflar ‗A‘ …‗Z‘, ‗A‘…‘Я‘ Kichik harflar ‗a‘ …‗z‘, ‗a‘…‘я‘ Raqamlar ‗0‘ …‗9‘ Bo‗sh joy gorizontal tabulyatsiya (ASCII kodi 9), satrni o‗tkazish (ASCII kodi 10), vertikal tabulyatsiya (ASCII kodi 11), formani o‗tkazish (ASCII kodi 12), karetkani qaytarish (ASCII kodi 13) Punktuatsiya belgilari (ajratuvchilar)! ‖ # $ & ‗ ( ) * + - , . / : ; < = > ? @ [ \ ] ^ _ { | } ~ Boshqaruv belgilari ASCII kodi 0...1Fh oralig‗ida va 7Fh bo‗lgan belgilar Probel ASCII kodi 32 bo‗lgan belgi O‗n oltilik raqamlar ‗0‘…‘9‘, ‗A‘…‘F‘, ‗a‘…‘f‘ Satr uzunligini aniqlash funksiyalari Satrlar bilan ishlashda, aksariyat hollarda satr uzunligini bilish zarur bo‗ladi. Buning uchun string.h kutubxonasida strlen() funksiyasi aniqlangan bo‗lib, uning sintaksisi quyidagicha bo‗ladi: size_t strlen (const char* string) Bu funksiya uzunligi hisoblanishi kerak bo‗lgan satr boshiga ko‗rsatgich bo‗lgan yagona parametrga ega va u ishlash natijasi sifatida ishorasiz butun sonni qaytaradi. strlen() funksiyasi satrning real uzunligidan bitta kam qiymat qaytaradi, ya‘ni nol-terminator o‗rni hisobga olinmaydi. Xuddi shu maqsadda sizeof() funksiyasidan ham foydalanish mumkin va u strlen() funksiyasidan farqli ravishda satrning real uzunligini qaytaradi. Quyida keltirilgan misolda satr uzunligini hisoblashning har ikkita varianti keltirilgan: #include #include int main() { 44 char Str[]="1234567890"; cout <<"strlen(Str)="<Strukturaga ko‘rsatkichlar oddiy ko‘rsatkichlar kabi tasvirlanadi: Complex *cc,*ss; struct goods *p_goods; Strukturaga ko‘rsatkich ta'riflanganda initsializatsiya qilinishi mumkin. Misol uchun ekrandagi rangli nuktani tasvirlovchi quyidagi strukturali tip va strukturalar massivi kiritiladi. Strukturaga ko‘rsatkich qiymatlari initsializatsiya va qiymat berish orqali aniqlanadi: Struct point {int color; int x,y; } a,b; struct point *pa=&a,pb; pb=&b; Ko‘rsatkich orqali struktura elementlariga ikki usulda murojaat qilish mumkin. Birinchi usul adres bo‘yicha qiymat olish amaliga asoslangan bo‘lib quyidagi shaklda qo‘llaniladi: (* strukturaga ko‘rsatkich).element nomi; Ikkinchi usul mahsus strelka (->) amaliga asoslangan bo‘lib quyidagi ko‘rinishga ega: strukturaga ko‘rsatkich->element nomi Struktura elementlariga quyidagi murojaatlar o‘zaro tengdir: (*pa).color==a.color==pa->color 54 Struktura elementlari qiymatlarini ko‘rsatkichlar yordamida quyidagicha o‘zgartirish mumkin: (*pa).color=red; pa->x=125; pa->y=300; Dasturda nuqtaviy jismni tasvirlovchi particle strukturali tipga tegishli m_point strukturasi aniqlangan bo‘lsin. Shu strukturaga pinta ko‘rsatkichini kiritamiz: Struct particle * pinta=&m_point; Bu holda m_point struktura elementlarini quyidagicha o‘zgartirish mumkin: Pinta->mass=18.4; For (I=0;Icoord[I]=0.1*I; Strukturalarga ko‘rsatkichlar ustida amallar. Strukturalarga ko‘rsatkichlar ustida amallar oddiy ko‘rsatkichlar ustida amallardan farq qilmaydi. Agar ko‘rsatkichga strukturalar massivining biror elementi adresi qiymat sifatida berilsa, massiv buyicha uzluksiz siljish mumkin bo‘ladi. Misol tariqasida kompleks sonlar massivi summasini hisoblash masalasini ko‘rib chiqamiz: #include void main() { sruct complex {float x; float y;} array[]={1.0,2.0,3.0,-4.0,-5.0,-6.0,-7.0,-8.0}; struct complex summa={0.0,0.0}; struct complex *point=&array[0]; int k,I; k=sizeof(array)/sizeof(array[0]); for(i=0;ix; summa.y+=point->y; point++; } Cout< void main() { union {long h; int k; char c[3]}U={10l;-3;‖ALI‖); 55 Cout<<<
Array C++
#include
int main() {
// Declare an array of integers
int numbers[5];
// Initialize the array elements
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
// Access and print array elements
for (int i = 0; i < 5; i++) {
std::cout << "Element " << i << ": " << numbers[i] << std::endl;
}
return 0;
}
Foydalanilgan adabiyotlar
1. www.zivonet.iiz - Axborot ta‟lim portal
2. www.edu.uz - Oliy va o„rta maxsus ta‟lim vazirligi portal
3. www.tdpu.uz -Nizomiy nomidagi TDPU rasmiy sayti
4. http://acm.tuit.uz/ - dasturiy yechim to‗g‗riligini avtomatik testlovchi tizim.
5. http://acm.timus.ru/ - dasturlarni testlovchi tizim.0>
|