Qarshi muhandislik-iqtisodiyot instituti "axborot texnologiyalari" kafedrasi "TEXNIK TIZIMLARDA axborot texnologiyalari"



Download 2,19 Mb.
Pdf ko'rish
bet41/105
Sana26.03.2022
Hajmi2,19 Mb.
#510793
1   ...   37   38   39   40   41   42   43   44   ...   105
Bog'liq
ma`ruza matni 2018

Dinamik massivlar bilan ishlash. 
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 dastur 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 dasturda 10 ta butun sondan iborat dinamik massiv yaratish, unga qiymat berish 
va o‘chirish amallari bajarilgan. 
 
#include  
 
#include  
 
int main() 

int * pVector; 
if ((pVector=(int*)malloc(10*sizeof(int)))==NULL) 

cout<<”Xotira yetarli emas!!!”; 
return 1; 

// ajratilgan xotira sohasini to‘ldirish
for(int i=0; i<10; i++) * (pVector+i)=i; 
 // vektor elementlarini chop etish 
for(int i=0; i<10; i++) cout<<*(pVector+i)<<”end1”; 
 // ajratilgan xotira bo‘lagini qaytarish (o‘chirish) 
free (pVector) ;
return 0; 

Keyingi dasturda nxn o‘lchamli haqiqiy sonlar massivining bosh diagonalidan yuqorida 
joylashgan elementlar yig‘indisini hisoblash masalasi yechilgan. 
#include  
 
#include  
 
int main() 

int n ; 


float * pMatr, s=0; 
cout<<”A(n,n): n=”; 
cin>>n; 
if((pMatr=(float*)malloc(n*n*sizeof(float)))==NULL) 

cout<< Xotira yetarli emas!!!”; 
return 1; 

for(int i=0; i
for(int j=0; j>*(pMatr+i*n+j); 
for(int i=0; i
for(int j=i+1; j
cout<<”Matritsa bosh diaonalidan yuqoridagi”; 
cout<<”elementlar yig’indisi S=”<
return 0; 

new 
operatori yordamida, massivga xotira ajratishda obyekt turidan keyin kvadrat qavs 
ichida obyektlar soni ko‘rsatiladi. Masalan, butun turdagi 10 ta sondan iborat massivga joy 
ajratish uchun 
pVector=new int[10]; 
ifodasi yozilishi kerak. Bunga qarama-qarshi ravishda, bu usulda ajratilgan xotirani 
bo‘shatish uchun 
delete []pVector; 
ko‘rsatmasini berish kerak bo‘ladi. 
Ikki o‘lchamli dinamik massivni tashkil qilish uchun 
int **a; 
ko’rinishidagi «ko‘rsatkichga ko‘rsatkich» ishlatiladi. 
Boshda massiv satrlari soniga qarab ko‘rsatkichlar massiviga dinamik xotiradan joy 
ajratish kerak:
a=new int *[m] // bu yerda m massiv satrlari soni 
Keyin, har bir satr uchun takrorlash operatori yordamida xotira ajratish va ularning 
boshlang‘ich adreslarini a massiv elementlariga joylashtirish zarur bo‘ladi: 
for(int i=0; i
Shuni qayd etish kerakki, dinamik massivning har bir satri xotiraning turli joylarida 
joylashishi mumkin (7.1 va 7.3-rasmlar). 
Ikki o‘lchamli massivni o‘chirishda oldin massivning har bir elementi (satri), so‘ngra 
massivning o‘zi yo‘qotiladi:
for (i=0;i
delete [] a [i] ; 
delete [] a; 
Matritsani vektorga ko‘paytirish masalasi uchun dinamik massivlardan foydalanishga 
misol: 
void main() 

int n,m; 
int I,j; float s; 
cout<<”\n n=”;cin>>n; // matritsa satrlari soni 
cout<<”\n m=”;cin>>m; // matritsa ustunlari soni 
float *b=new float[m]; 
float *c=new float[n]; 
// ko‘rsadakichlar massiviga xotira ajratish 
float **a=new float *[n]; 


for(int i=0; i
a[i]=new float[m]; //dinamik xotira ajratish 
for(j=0; j>b[j]; 
for(i=0; i
for(j=0;j>a[i,j]; 
for(i=0;i

for(j=0,s=0; j
c[i]=s; 

for(i=0; i
delete[]b; 
delete[]c; 
for(i=0; i
delete[]a; 
return; 


Download 2,19 Mb.

Do'stlaringiz bilan baham:
1   ...   37   38   39   40   41   42   43   44   ...   105




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish