"Dasturlash I" fanidan yakuniy nazorat savollari


  Konstanta havola parametrlari (constant reference parameter).  Const qiymatiga havola


Download 422.12 Kb.
Pdf ko'rish
bet3/3
Sana15.03.2023
Hajmi422.12 Kb.
#1269287
1   2   3
Bog'liq
Dasturlash I fanidan yakuniy nazorat savollari

48. 
Konstanta havola parametrlari (constant reference parameter). 
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. 


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. 
49. 
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]; 
50. 
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. 
51. 
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. 
52. 
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) 
53. 
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. 
54. 
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 
55. 
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. 
56. 
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]; 
57. 
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<58. 
Ikki o‘lchovli massivlarga oid masalalar (massivdagi barcha elementlar yig‘indisini 
hisoblash, elementlari yig‘indisi eng katta bo‘lgan satrni aniqlash). 
59. 
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]; 
60. 
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! 
61. 
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. 

Download 422.12 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling