Const qiymatiga havola - "Dasturlash I" fanidan yakuniy nazorat savollari

Const qiymatiga havola
Konst qiymatiga ko'rsatgichni e'lon qilish mumkin bo'lganidek, const qiymatiga havolani ham e'lon qilish mumkin. Bu const kalit so'zidan foydalanib ma'lumotnomani e'lon qilish orqali amalga oshiriladi.
1
2
|
const int value = 5;
const int &ref = value; // ref is a reference to const value
|
Konst qiymatiga havola ko'pincha qisqa uchun const havolasi deb nomlanadi , ammo bu ba'zi bir nomenklaturani ko'rsatgichlar bilan nomuvofiqlashtiradi.
Bir o‘lcho`vli massivlarni e’lon qilish (single-dimensional arrays, declare arrays).
Massivlardan bir turli, ko`p sonli qiymatlarni yozishda foydalaniladi. Massivdagi alohida elementga uning tartib raqami – indeksi orqali murojaat qilish mumkin.
Massiv ma’lumotlar jamlanmasini yozishda ishlatiladi, lekin ko`proq massiv bir turli qiymatlar to`plami deb tushuniladi. Ko`p sonli qiymatlarni ta’minlash uchun son0, son1, son2, … sonN kabi ko`p sonli o`zgaruvchilarni e’lon qilish o`rniga faqat bitta nom bilan (masalan: son) massiv e’lon qilgan holda, son[0], son[1], son[2] … son[N] kabi alohida massiv elementlariga murojaat qilish mumkin. Massivni e’lon qilishda element turi va massiv hajmini belgilash quyidagicha sintaksis asosida amalga oshiriladi:
double Sonlar[10];
Bu ko`rsatma bajarilgandan so`ng kompilyator Sonlar massivi uchun, xotiradan 10 ta double turiga loyiq joy ajratadi. Standart C++ da massivni e’lon qilishda uning hajmi o`zgarmas (const) turda ko`rsatilishi lozim. . Agar dasturda bir nechta massivlarni e’lon qilish kerak bo`lsa va barchasi bir xil ma’lumot turiga ega bo`lsa, ularni birdaniga e’lon qilish mumkin:
ElementTuri MassivNomi1[hajm1], MassivNomi2[hajm2], … MassivNomin[hajmN];
Massiv elementlariga murojaat va massivni yuklash (accessing array elements, array initializers).
Massiv elementlariga ularning indekslari orqali murojaat qilinadi. Massiv 0 dan boshlab indekslanadi va 0 dan Hajm-1 gacha oraliq uchun ishlaydi. Massivning birinchi elementi 0-indeksga yoziladi, ikkinchi elementi 1-indeksga yoziladi va hokazo. 12.1-rasmda myList massivi 10 ta double qiymatni o`zida saqlagan, tartib raqamlari esa, 0 dan 9 gacha bo`lgan massiv keltirilgan.
Massivning har bir elementi quyidagi sintaksis asosida taqdim qilinadi:
massivNomi [indeks]
Masalan myList[9] massivning eng so`nggi elementini ifodalaydi. Shu o`rinda bir narsani yoddan chiqarmaslik kerak, massivni e’lon qilishda uning hajmini ko`rsatish – undagi elementlar sonini ifodalaydi. Massiv elementi muayyan bir elmentga murojaatmi amalga oshirish uchun xizmat qiladi. Misol uchun, quyidagi kod myList[2] ga myList[0] va myList[1] ni ta’minlaydi:
myList[2] = myList[0] + myList[1];
Quyidagi kod esa, myList[0] ning qiymatini bittaga oshiradi:
myList[0]++
Quyidagi kod myList[1] va myList[2] lar orasidagi kattasini chop etish uchun max funksiyasini chaqiradi:
cout << max(myList[1], myList[1]) << endl;
Massiv elementlariga indeks chegarasi bo`yicha murojaat qilish chegaradan oshib ketish xatoligining yuzaga kelishiga sabab bo`ladi. Chegaradan o`tib ketish jiddiy xatolik hisoblanadi va C++ kompilyatori uni qayta ishlamaydi. Massiv elementlariga qiymat berishda chegara ichida bo`lish shartlariga e’tibor qaratish lozim.
Massiv elementlariga oid masalalar (massivga konsoldan qiymat kiritish, massivga tasodifiy qiymatlar berish).
Massiv elementlariga konsoldan qiymat berish uchun massivning har bir elementiga alohida qiymat berish kerak. Masalan int a[5] 5 o’zgaruvchili massivi unga qiymat berish uchun sikldan foydalanish dastur kodini qisqartirishga yordam beradi.
Masalan:
Int a[5];
For(int i=0; i<5; i++)
Cin>>a[i];
Tasodifiy qiymat berish uchun sikl orqali massiv elementlarini navbati bilan rand() funksiyasiga tenglash ularni qiymatini tasodifiy qilishga yordam beradi.
53.Massivlarni funksiyalarga argument sifatida yuborish (passing arrays to functions).
Funksiyaga argument sifatida massiv yuborilganda, uning elementlari funksiyadagi parametr massivga ta’minlanishni boshlaydi. Bunda parameter va argumentlarning har ikkalasi ham massiv ko`rinishida bo`ladi.Funksiyaga argument sifatida bitta qiymatni yubora olganimiz singari, yaxlit bir massivni ham yuborishimiz mumkin. Funksiyaga argument sifatida massivni yuborishda uninghajmini ham ko`rsatish yoddan ko`tarilmasligi lozim. Bunda funksiya massivning nechta elementi borligini aniqlab oladi.
C++ da funksiyaga massivni argument sifatida uning qiymatlari bilan yuborish qo`llaniladi. Oddiy ma’lumot turidagi o`zgaruvchilarni va massivni funksiyaga argument sifatida, qiymat bilan yuborilishida muhim ahamiyatga ega bo`lgan bir qancha farqlar mavjud.
Oddiy turdagi argument uchun, argumentning faqat qiymati yuboriladi;
Massiv ko`rinishidagi argument uchun, argument qiymati xotiradagi massiv qiymatlarga murojaat qilishdan boshlanadi; bu qiymmatlar funksiyadagi massiv parametrga yuboriladi. Massivni argument sufatida, qiymati bilan funksiyaga yuborishni tasvirlashning eng yaxshi usuli – bo`laklab-yuborish deb tasavvur qilishdir. Ya’ni, yuborilgan massiv funksiyada ham massiv sifatida qabul qilinadi. Shundan kelib chiqqan holda aytish mumkinki, agar massivga o`zgartirish kiritmoqchi bo`lsak, buni funksiyadan tashqarida qilog`imiz lozim.
Massivlarning funksiyadan qaytarilishi (returning arrays from functions).
Funksiyadan massiv ko`rinishidagi qiymatlarni olish uchun uni parametr ko`rinishida funksiyaga yuborish kerak.
Biz funksiyani oddiy turdagi qiymat yoki ob’yekt qaytaruvchi sifatida e’lon qilishimiz mumkin. Masalan:
// list dagi elementlar yig`indisi – sum ni chiqarish
int sum(const int list[], int hajm)
Xo`sh, bu kabi sintaksis bilan funksiyadan massivni qaytarish mumkinmi? Masalan, o`zgartirisshlar kiritilgandan so`ng, yangicha qiymatlarga ega bo`lgan massivni qaytaruvchi funksiyani quyidagicha e’lon qilishga urinib ko`rsak:
// o`zgartirilgan list ni qaytarish
int[] ishlangan(const int list[], int hajm).C++ da bunga ruxsat berilmagan. Shunday bo`lsa ham, bu ta’qiqlanishni funksiyaga ikkita massivni argument sifatida yuborish orqali chetlab o`tishimiz mumkin:
// list ga ishlov berilgandan kalitingi YangiList
void reverse(const int list[], int YangiList[], int hajm)
Massivlarda qidirish (massivda qidiruv, chiziqli qidiruv, binar qidiruv).
Agar massiv saralangan bo`lsa, massivdan biror elementni topish uchun chiziqli qidiruvdan ko`ra ikkilik qidiruvi ko`proq samara beradi.
Massivda qidiruv – kerakli elementni topish jarayonidir. Masalan, aniq bir qiymat turining massiv tarkibidagi elementlardan birida mavjudligini tekshirish. Kompyuter dasturlashda eng ko`p qidiruv masalasi uchraydi. Qidirishni amalga oshirishga yo`naltirilgan ko`plab algoritmlar va ma’lumot tuzilmalari mavjud. Bu qismda qidirishni amalga oshirishning ikki xil yondoshuvlari – chiziqli qidiruv va ikkilik qidiruv o`rganiladi.Chiziqli qidirish yondoshuvi kalit – kalit so`zini massivning har bir elementi blan, ketma-ket solishtirishga ixtisoslashtirilgan. Funksiya bu ishni massiv tarkibidagi elementlardan birontasi kalit ga mos kelgunicha yoki, massiv so`nggiga qadar amalga oshiradi. Agar massiv tarkibida biror element kalit ga mos kelsa, chiziqli qidirish uning indeksini qaytaradi. Aks holda, qidiruv -1 ni qaytaradi. Bir qancha qiymatlarni qidirishning eng ko`p tarqalgan yodoshuvlaridan biri – ikkilik qidiruv yondoshuvidir. U massivdagi elementlar avvaldan tartiblangan bo`lishini talab qiladi. Tasavvur qiling, massiv o`sish tartibida. Ikkilik qidiruv birinchi navbatda kalit so`zni massivning markazidagi element bilan solishtiradi. Quyidagi holatlarni ko`rib chiqamiz:
Agar kalit markaziy elementdan kichik bo`lsa, qidirish massivning faqat birinchi yarimtaligida davom ettiriladi;
Agar kalit markaziy elementga mos bo`lsa, qidirish brinchi urinishdayoq to`xtatiladi;
Agar kalit markaziy elementdan katta bo`lsa, qidirish massivning faqat ikkinchi yarimtaligida davom ettiriladi.
Massivlarni saralash (sorting arrays).
Saralash ham qidirish kabi, kompyuterli dasturlashda ko`p qo`llaniladigan masalalar sirasiga kiradi. Saralashga mo`ljallangan turli xil algoritmlar ishlab chiqilgan. Bu qismda tanlab saralash algoritmi yoritib beriladi.Tanlab saralash algoritmi takroriy ravishda massiv tarkibidagi eng kichik sonni topadi va qidiruvdagi massiv qismining birinchi elementi qiymati bilan almashtiradi. Faraz qilaylik, biz list nomli massivimizni o`suvchi tartibda saralamoqchimiz. Tanlab saralash algoritmi massivdagi eng kichik sonni topib, uni birinchisi bilan almashtiradi. Undan keyin, birinchi sondan tashqari, yana eng kichik sonni topadi va uni ikkinchi elementga joylashtiradi, bu jarayon toki oxirida bitta son qolmaguncha davom etadi.
SatrlaC-r(c-strings va string type, null terminator).
C-satr nolli chegaraviy birikma (‘\0’) bilan tugallanuvchi belgilar massividir. C++ kutubxonasida C-satrlarni C-satr funksiyalaridan foydalanib qo`llash mumkin.C-satr xotirada satr chegarasini belgilovchi nolli chegaraviy birikma (‘\0’) bilan tugallanuvchi belgilar massividir. Har bir satrli literal – C-satrdir. Massivni satrli literallar bilan yuklash mumkin. Quyidagi ko`rsatma satri C-satr uchun, 'D', 'a', 'l', 'l', 'a', 's' belgilari va chegaraviy birikma – (‘\0’ dan iborat bo`lgan massivni e’lon qiladi. C++ da satrli massivni o`qishning yana bir alternative variant mavjud. C++ tili iostream kutubxona fayli tarkibida mavjud bo`lgan cin.getline funksiyasini taqdim etadi. C-satri chegaraviy birikma bilan tugashini hisobga olganda, C++ da bu faktdan C-satrlar bilan samarali ishlashda foydalanishimiz mumkin. C-satrni funksiyaga yuborganimizda biz uning uzunligini yubormaymiz, chunki, uzunlik chegaraviy birikma uchragunga qadar, chapdan-o`ngga o`qish orqali hisoblanishi mumkin.
C++ turi. Ko`pgina kompilyatorlar uchun u unsigned int deb qabul qilinadi. Shu kabi barcha funksiyalar cstring kutubxonasida, atoi, atof, atol va itoa funksiyalari cstdlib kutubxonasida aniqlanadi.
Satr funksiyalari.
Funksiya
|
Vazifasi
|
size_t strlen(char s[])
|
Chegaraviy birikmadan oldingiz belgilar sonini, ya’ni, satr uzunligini qaytaradi.
|
strcpy(char s1[], const char s2[])
|
s2 satrni s1 satrga nusxalaydi
|
strncpy(char s1[], const char s2[], size_t n)
|
s2 satrdan n ta belgini s1 satrga nusxalaydi
|
strcat(char s1[], const char s2[])
|
s2 satrni s1 satrga qo`shadi
|
strncat(char s1[], const char s2[], size_t n)
|
s2 satrdan n ta belgini s1 satrga qo`shadi
|
int strcmp(char s1[], const char s2[])
|
s1 belgilarining sonli kodi s2 nikidan katta, teng, yoki undan kichik bo`lsa, 0 dan katta, 0, yoki 0 dan kichik qiymat qaytaradi
|
int strncmp(char s1[], const char s2[], size_t n)
|
strcmp ning o`zi, biroq u n soniga qadar s1 va s2 belgilarini solishtiradi
|
int atoi(char s[])
|
Satr uchun int qiymat qaytaradi
|
double atof(char s[])
|
Satr uchun double qiymat qaytaradi
|
long atol(char s[])
|
Satr uchun long qiymat qaytaradi
|
void itoa(int value, char s[], int radix)
|
Maxsus ko`rsatilgan oraliqdan Butun qiymat oladi
|
Ikki o‘lchovli massivlarni e’lon qilish (declaring two dimensional arrays).
Ikki o`lchovli massiv elementiga uning ustun va satrdagi indekslari orqali murojaat qilinadi.Bizga ma’lumki, bir o`lchovli massivlar bir satrda joylashgan elementlar jamlanmasidan tashkil topadi. Matritsa yoki jadvallarni hosil qilish uchun ikki o`lchovli massivlardan foydalanishimiz mumkin. Ikki o`lchovli massivni e’lon qilish sintaksisi quyidagicha:
elementNomi massivNomi[Satr_hajmi][Ustun_hajmi];
Bunga misol sifatida, int qiymatlardan iborat matsitsa massivining e’lon qilinishini ko`rishimiz mumkin:
int matritsa[5][5];
Bu yerda ikkita burchakli qavslarga olingan qiymatlarning birinchisi – satrelementlari sonini, ikkinchisi esa, ustun elementlari sonini ifodalaydi. Xuddi bir o`lchovli massiv singari, bu yerda ham barcha indekslardagi elementlar bir xil turda, ya’ni, int turida berilgan va 0 dan boshlab tartiblangan. Buni 13.1-rasmda ko`rishimiz mumkin.Dasturchilar tomonidan ko`p hollarda yo`l qo`yiladigan xatoliklardan biri – masalan, 2-satr, 1-ustun elementiga murojaatni matritsa[2, 1] ko`rinishda yozilishidir. C++ da element indekslari alohida burchakli qavslar ichiga olib yozilishi kerak.
Ikki o‘lchovli massivlarga oid masalalar (massivga konsoldan qiymat kiritish, massivdagi barcha elementlar yig‘indisini hisoblash).
Massivga konsoldan qiymat berish huddi bir o’lchamdagidek bo’ladi faqat sikl 2 ichma ich bo’ladi masalan:
Int a[2][3];
For(int i=0; i<2; i++)
For(int j=0; j<3; j++)
Cin>>a[i][ j ];
Ularni yig’indisini hisoblash ham sikl orqali:
Int a[2][3];
Int sum=0; // Yig’indini hisoblash uchun;
For(int i=0; i<2; i++)
For(int j=0; j<3; j++)
Sum+=a[i][ j];
Ikki o‘lchovli massivlarga oid masalalar (massiv elementlariga tasodifiy qiymatlar berish, massivni konsolga chop etish).
Massivga tasodifiy qiymat berish huddi bir o’lchamdagidek bo’ladi faqat sikl 2 ichma ich bo’ladi masalan:
Int a[2][3];
For(int i=0; i<2; i++)
For(int j=0; j<3; j++)
a[i][ j ]= rand() ;
Massivga konsolga chop etish huddi bir o’lchamdagidek bo’ladi faqat sikl 2 ichma ich bo’ladi masalan:
Int a[2][3];
For(int i=0; i<2; i++)
For(int j=0; j<3; j++)
Cout<
Ikki o‘lchovli massivlarga oid masalalar (massivdagi barcha elementlar yig‘indisini hisoblash, elementlari yig‘indisi eng katta bo‘lgan satrni aniqlash).
Ikki o‘lchovli massivlarga oid masalalar (ustun elementlari yig‘indisini hisoblash, massiv elementlari qiymatlarini tasodifiy almashtirish).
Ustun elementlari yig’indisi:
Int a[4][3];
Int sum=0; // ustunlar yig’indisi
For(int i=0; i<3; i++)
For(int j=0; j<4; j++)
Sum+=a[ j][i];
Ikki o‘lchovli massivlarni funksiyaga argument sifatida uzatish (passing two-dimensional arrays to functions).
Ikki o`lchovli massiv funksiyaga yuborilganda, C++ da ustun hajmi funksiyada e’lon qilingan parametrga mos bo`lishi talab etiladi. Massivni argument qilib yuborishda massivni shunchaki ismini yozish kerak (misol: funk(a); ). Faqat yuborayotgan funksiyangizning parametridagi massivning elementlari avvaldan nechraligi tayinlangan bo’lishi kerak!
Rekursiv funksiyalar (recursive functions).
Rekursiya – oddiy sikl yordamida dasturlash mushkul bo`lgan masalalarni oqilona hisoblash usulidir. Rekursiyadan foydalanish – bu o`z-o`zini chaqiruvchi funksiyalardan foydalanib dasturlash demakdir. Rekursiya – dasturlashning foydali usuli. Ba'zi hollarda, bu bizga boshqa murakkab muammolarga tabiiy, sodda, oddiy yechimlar asosida yondoshish imkonini beradi. Rekursiv funksiya – o`zini-o`zi chaqiruvchi yagona funksiya.
http://fayllar.org
|