Ko`rsatkichlar massivi
Ko`rsatkichlar massivi
Qiymatlar
7.3-rasm. Uch o`lchamli massivning xotirada tashkil bo`lishi
Massiv elementlariga murojaat qilish uchun nomdan keyin kvadrat qavsda har bir o`lcham uchun indeks yozilishi kerak, masalan b[i][j][k]. Bu elementga vositali murojaat ham qilish mumkin va uning variantlari:
*(*(*(bҚi)Қj)Қ)k) yoki *(*(b[i]Қj)Қk) yoki *(b[i][j] Қk);
Ko`p o`lchamli massivlarni initsializatsiyalash:[1(290), 2(121), 3(91-92)] Massivlarni initsializatsiyalash quyidagi misollarda ko`rsatilgan:
int a[2] [3]қ{0,1,2,10,11,12};
int b[3] [3]қ{{0,1,2} , {10,11,12},{20,21,22}} ;
int c[3] [3] [3]қ{{{0}},{{100,101},{110}} , {{200,201,202},{210,211,212},{220,221,222}};
Birinchi operatorda boshlang`ich qiymatlar ketma-ket yozilgan, ikkinchi operatorda qiymatlar guruhlashgan, uchinchi operatorda ham guruhlashgan, lekin ba`zi guruhlarda oxirgi qiymatlar berilmagan.
Misol uchun, matritsalar va vektor ko`paytmasini- CқA*b hisoblash masalasini ko`raylik. Bu yerda A қ {a }, b қ {b },c қ {c },iқ0..m-1,.
Hisoblash formulasi c қ .
Dinamik massivlar bilan ishlash:[1(282-290), 3(92-95)] Statistik massivlarning kamchiliklari shundaki, ularning o`lchami oldindan ma`lum bo`lishi kerak, undan tashqari bu o`lcham berilganlarga ajratilgan xotira segmentining o`lchami bilan chegaralangan. Ikkinchi tomondan, yetarlicha katta o`lchamdagi massiv e`lon qilib, konkret masala yechilishida ajratilgan xotira to`liq ishlatilmasligi mumkin. Bu kamchiliklar dinamik massivlardan foydalanish orqali bartaraf etiladi, chunki ular programma ishlashi jarayonida zarur bo`lganda kerak o`lchamdagi massivlarni yaratish va zarurat qolmaganda yo`qotish imkoniyatini beradi.
Dinamik massivlarga xotira ajratish uchun malloc(), calloc() funksiyalaridan yoki new operatoridan foydalanish mumkin. Dinamik obyektga ajratilgan xotirani bo`shatish uchun free() funksiyasi yoki delete operatori ishlatiladi.
Yuqorida qayd qilingan funksiyalar alloc.h kutubxonasida joylashgan.
Malloc() funksiyasining sintaksisi
void * malloc(size_t size) ;
ko`rinishida bo`lib, u xotiraning uyum qismidan size bayt o`lchamidagi uzluksiz sohani ajratadi. Agar xotira ajratish muvaffaqiyatli bo`lsa, malloc() funksiyasi shu soha boshlanishining adresini qaytaradi. Talab qilingan xotirani ajratish muvaffaqiyatsiz bo`lsa, funksiya NULL qiymatini qaytaradi.
Sintaksisdan ko`rinib turibdiki, funksiya void turidagi qiymat qaytaradi. Amalda esa konkret turdagi obyekt uchun xotira ajratish zarur bo`ladi. Buning uchun void turini konkret turga keltirish texnologiyasidan foydalaniladi. Masalan, butun turdagi uzunligi 3 ga teng massivga joy ajratishni quyidagicha amalga oshirish mumkin:
int * pIntқ(int*)malloc(3*sizeof(int));
malloc() funksiyasidan farqli ravishda calloc() funksiyasi massiv uchun joy ajratishdan tashqari massiv elementlarini 0 qiymati bilan initsializatsiya qiladi. Bu funksiya sintaksisi
void * calloc (size_t num, size_t size) ;
ko`rinishda bo`lib, num parametri ajratilgan sohada nechta element borligini, size har bir element o`lchamini bildiradi.
Free() xotirani bo`shatish funksiyasi o`chiriladigan xotira bo`lagiga ko`rsatkich bo`lgan yagona parametrga ega bo`ladi:
void free (void * blok)
free() funksiyasi parametrining void turida bo`lishi ixtiyoriy turdagi xotira bo`lagini o`chirish imkonini beradi.
Quyidagi programmada 10 ta butun sondan iborat dinamik massiv yaratish, unga qiymat berish va o`chirish amallari bajarilgan.
#
Keyingi programmada nxn o`lchamli haqiqiy sonlar massivining bosh diagonalidan yuqorida joylashgan elementlar yig`indisini hisoblash masalasi yechilgan.
Do'stlaringiz bilan baham: |