TOSHKENT AXBOROT TEXNALOGIYALAR
UNIVERSITETI FARG’ONA FILIALI
715-22 GURUH TALABASI
IBROHIMOVA ODINANING
DASTURLASH
FANIDAN TAYYORLAGAN
MUSTAQIL ISHI
TAYYORLADI: IBROHIMOVA . O
TEKSHIRDI: JO’RAYEVA. G
FARG’ONA 2024
Mavzu : Bir o`lchovli massivlarni funksiya
parametrlari
Reja:
1. Bir o’lchovli massivlar
2. Massivlarni navlarga ajratish
3.
Umumiy massiv algoritmlari
1 Bir o’lchovli massivlar 15.2 Massivlarni navlarga ajratish Kalit so’zlar:,
ro’yxat, manzil, nolinchi ko’rchsatkich, tugun, adres olish &, bo’shatish,
ko’rsatkich, virtual destruktor, xotira, xotira chiqishi, destruktor, toifani
o’zlashtirish, resurslar chiqishi, a’zo destruktori. 15.1. Bir o’lchovli massivlar
Massiv tushunchasi. Massiv bu bir turli nomerlangan ma’lumotlar jamlanmasidir.
Massiv indeksli o’zgaruvchi tushunchasiga mos keladi. Massiv ta’riflanganda turi,
nomi va indekslar chegarasi ko’rsatiladi. Masalan, type turidagi length ta
elementdan iborat a nomli massiv shunday e’lon qilinadi: type a[length]; Bu maxsus
a[0], a[1], ..., a[length -1] nomlarga ega bo’lgan type turidagi o’zgaruvchilarning
e’lon qilinishiga to’g’ri keladi. Massivning har bir elementi o’z raqamiga - indeksga
ega. Massivning x-nchi elementiga murojaat indekslash operasiyasi yordamida
amalga oshiriladi: int x = ...; //butun sonli indeks TYPE value = a[x]; //x-nchi
elementni o‘qish a[x] = value; //x- elementga yozish Indeks sifatida butun tur
qiymatini qaytaradigan har qanday ifoda qo’llanishi mumkin: char, short, int, long.
C da massiv elementlarining indekslari 0 dan boshlanadi (1 dan emas), length
elementdan iborat bo’lgan massivning oxirgi elementining indeksi esa - bu length -
1 (length emas) ga teng. Massivning int z[3] shakldagi ta’rifi, int turiga tegishli
z[0],z[1],z[2] elementlardan iborat massivni aniqlaydi. Massiv chegarasidan
tashqariga chiqish (ya’ni mavjud bo’lmagan elementni o’qish/yozishga urinish)
dastur bajarilishida kutilmagan natijalarga olib kelishi mumkin. Shuni ta’kidlab
o’tish lozimki, bu eng ko’p tarqalgan xatolardan biridir. Agar massiv inisializasiya
qilinganda elementlar chegarasi ko’rsatilgan bo’lsa, ro’yxatdagi elementlar soni bu
chegaradan kam bo’lishi mumkin, lekin ortiq bo’lishi mumkin emas. Misoluchun int
a[5] = {2,-2}. Buholda a[0] va a[1] qiymatlarianiqlanganbo’lib, mosholda 2 va –2
gateng.
Agarmassivuzunligigaqaragandakamroqelementberilganbo’lsa,
qolganelementlar 0 hisoblanadi: int a10[10] = {1, 2, 3, 4}; //va 6 ta nol Agar
nomlangan massivning tavsifida uning o’lchamlari ko’rsatilmagan bo’lsa,
kompilyator tomonidan massiv chegarasi avtomatik aniqlanadi:
15.2 Massivlarni navlarga ajratish Navlarga ajratish - bu berilgan ko’plab
ob’ektlarni biron-bir belgilangan tartibda qaytadan guruhlash jarayoni.
Massivlarning navlarga ajratilishi tez bajarilishiga ko’ra farqlanadi. Navlarga
ajratishning n*n ta qiyoslashni talab qilgan oddiy usuli va n*log(n) ta qiyoslashni
talab qilgan tez usuli mavjud. Oddiy usullar navlarga ajratish tamoyillarini
tushuntirishda qulay hisoblanadi, chunki sodda va kalta algoritmlarga ega.
Murakkablashtirilgan usullar kamroq sonli operasiyalarni talab qiladi, biroq
operasiyalarning o’zi murakkabroq, shuning uchun uncha katta bo’lmagan massivlar
uchun oddiy usullar ko’proq samara beradi. Oddiy usullar uchta asosiy kategoriyaga
bo’linadi: - oddiy kiritish usuli bilan navlarga ajratish; - oddiy ajratish usuli bilan
navlarga ajratish; - oddiy almashtirish usuli bilan navlarga ajratish. Oddiy kiritish
usuli bilan navlarga ajratish Massiv elementlari avvaldan tayyor berilgan va
dastlabki ketmaketliklarga bo’linadi. i = 2 dan boshlab, har bir qadamda dastlabki
ketmaketlikdan i-nchi element chiqarib olinadi hamda tayyor ketma-ketlikning
kerakli o’rniga kiritib qo’yiladi. Keyin i bittaga ko’payadi va h.k. Kerakli joyni
izlash jarayonida, ko’proq o’ngdan bitta pozisiyadan tanlab olingan elementni
uzatish amalga oshiriladi, ya’ni tanlab olingan element, j: = i-1 dan boshlab, navlarga
ajratib bo’lingan qismning navbatdagi elementi bilan qiyoslanadi. Agar tanlab
olingan element a[i] dan katta bo’lsa, uni navlarga ajratish qismiga qo’shadilar, aks
holda a[j] bitta pozisiyaga suriladi, tanlab olingan elementni esa navlarga ajratilgan
ketma-ketlikning navbatdagi elementi bilan qiyoslaydilar. To’g’ri keladigan joyni
qidirish jarayoni ikkita turlicha shart bilan tugallanadi: agar a[j]>a[i] elementi
topilgan bo’lsa; agar tayyor ketma-ketlikning chap uchiga bo’lsa. int i, j, x; for(i =
1; i < n; i++) { x = [i]; // kiritib qo‘yishimiz lozim bo‘lgan elementni esda saqlab
qolamiz j = i - 1; while(x = 0)//to‘g‘ri keladigan joyni qidirish } a[j+1] =
a[j]; //o‘ngga surish j--; } a[j+1] = x; //elementni kiritish } Oddiy tanlash usuli bilan
navlarga ajratish Massivning minimal elementi tanlanadi hamda massivning birinchi
elementi bilan joy almashtiriladi. Keyin jarayon qolgan elementlar bilan takrorlanadi
va h.k. int i, min, n_min, j; for(i = 0; i < n-1; i++) { min = a[i]; n_min = i; //minimal
qiymatni qidirish for(j = i + 1; j < n; j++) if(a[j] < min){min = a[j]; n + min = j;}
a[n_min] = a[i]; //almashtirish a[i] = min; } Oddiy almashtirish usuli bilan navlarga
ajratish Elementlar juftlari oxirgisidan boshlab qiyoslanadi va o’rin almashinadi.
Natijada massivning eng kichik elementi uning eng chapki elementiga aylanadi.
Jarayon massivning qolgan elementlari bilan davom ettiriladi. for(int i = 1; i < n;
i++) for(int j = n - 1; j > = i; j— if(a[j] < a[j-1]) {int r = a[j]; a[j] = a[j-1]; a[j - 1] =
r;} } Bir o’lchamli massivlarni funksiya parametrlari sifatida uzatish. Massivdan
funksiya parametri sifatida foydalanganda, funksiyaning birinchi elementiga
ko’rsatkich uzatiladi, ya’ni massiv hamma vaqt adres bo’yicha uzatiladi. Bunda
massivdagi elementlarning miqdori haqidagi axborot yo’qotiladi, shuning uchun
massivning o’lchamlari haqidagi ma’lumotni alohida parametr sifatida uzatish
kerak. Umumiy massiv algoritmlari Quyidagi bo’limlarda biz, qiymatlar ketma-
ketligini qayta ishlash uchun ba’zi eng keng tarqalgan algoritmlarni muhokama
qilamiz.Biz algoritmlarni shunday taqdim etamizki, siz ularni to’liq va qisman
to’ldirilagan massivlar hamda (6.7 bo’limda tanishtiradigan)vektorlar yordamida
foydalanishingiz mumkin.Qiymatlar miqdori (size of values) ifodasini
ishlatganimizda, siz uni massivda elementlar miqdorini anglatuvchi doimiy yoki
o’zgaruvchan bilan almashtirishingiz kerak. ( yoki values.size() if values is a vector
ifodasi.) Elementni olib tashlash Joriy miqdori o’zgaruvchan joriy miqdorda
saqlanovchi qisman to’ldirilgan massiv miqdorini ko’rib chiqamiz. Deylik, siz pos
indeksli elementni qiymatdanolib tashlamoqchisiz.Agar elementlar hyech qanday
aniq tartibda bo’lmasa, buvazifani amalag oshirish yengil kechadi.Shunchaki, oxirgi
elementdan olibtashlangan elementni qaytadan yozing.So’ng, miqdorni kuzatuvchi
o’zgaruvchinikamaytiring. (6 - shaklga qarang). values[pos] = values[current_size -
1]; current_size--; Agar elementlar tartibi muhim bo’lsa vaziyat yanada
murakkablashadi. Bundayholda siz barcha elementlarni keyingi indeksi pastroq
elementgaalmashtirishingiz kerak.So’ng massivni miqdorini saqlagan holda
o’zgaruvchinikamaytirishingiz kerak.
Dastur kodi :
#include
void funksiya(int arr[], int uzunlik) {
for (int i = 0; i < uzunlik; i++) {
std::cout << arr[i] << " ";
}
}
int main() {
int massiv[] = {1, 2, 3, 4, 5};
int uzunlik = sizeof(massiv) / sizeof(massiv[0]);
funksiya(massiv, uzunlik);
return 0;
}
Dastur natijasi:
|