C++ da bir o‘lchovli ikki o‘lchovli va dinamik massivlar“ kurs ishi



Yüklə 203,88 Kb.
səhifə3/3
tarix08.06.2023
ölçüsü203,88 Kb.
#126971
1   2   3
C DA 1 O‘LCHOVLI 2 O‘LCHOVLI VA DINAMIK MASSIVLAR

#include
using namespace std;


int main()
{
short k,i,j,m,x,y,z,w;
float a[100][100];
cin>>m;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
x=m; y=m; z=1; w=1;
for(k=1;k<=m/2;k++)
{
for(i=z;i<=x;i++)
cout<<"a["<


for(j=y-1;j>=w;j--)
cout<<"a["<


for(i=x-1;i>=z;i--)
cout<<"a["<


for(j=w+1;j<=y-1;j++)
cout<<"a["<
x--;y--;z++;w++;
}
// bu dastur toq sonlar uchun ham o`rinli
if(m%2==1)
cout<<"a["<
return 0;
}


Ekranga quyidagicha natija chiqadi:


2-misol.



Berilgan mхn o`lchamli matrisaning bosh diaganali elementlarini nollarga aylantirish dasturi tuzilsin.



#include
int main ()


{
int k[100][100];
int i,j,n,m;
cout<<" sonini kiriting=";
cin>>n>>m;
for ( i=1; i<=n; i++)
for ( j=1; j<=m; j++)
cin>>k[i][j];
for ( i=1; i<=n; i++)
for ( j=1; j<=m; j++)
{ if (i==j)
k[i][j]=0;
cout<<"k["<
system("pause");
return 0;
}

Ekranga quyidagicha natija chiqadi:



Dinamik massivlar bilan ishlash.

Statik massivlarning kamchiliklari shundaki, ularning o`lchamlari oldindan ma`lum bo`lishi kerak, bundan tashqari bu o`lchamlar berilganlarga ajratilgan xotira segmentining o`lchami bilan chegaralangan . Ikkinchi tomondan, yetarlicha kata o`lchamdagi massiv e`lon qilinib, konkret masala yechilishida ajratilgan xotira to`liq ishlatilmasligi mumkin. Bu kamchiliklar dinamik massivlardan foydalanish orqali bartaraf etiladi, chunki ular programma ishlashi jarayonida kerak bo`lgan o`lchamdagi massivlarni yaratish va zarurat qolmaganda yo`qotish imkoniyatini beradi.
Dinamik massivlarga xotira ajratish uchun malloc(), calloc() funksiyalaridan yoki neu operatoridan foydalanish mumkin. Dinamik obyektga ajratilgan xotirani bo`shatish uchun delete operatori ishlatiladi
Yuqorida qayd qilingan funksiyalar <> kutubxonasida joylashgan.
Malloc() funksiyasining sintaksisi
Void * malloc(size_t size);
Ko`rinishida bo`lib , u hotiraning uyum qismidan size bayt o`lchamdagi uzluksiz sohani ajratadi. Agar xotira ajratish
muvaffaqiyatli bo`lsa, malloc() funksiyasi ajratilgan sohaning boshlanish adresini qaytaradi. Talab qilingan xotirani ajratish muvaffaqiyatli bo`lsa , funksiya NULL qiymatni qaytaradi.
Sintaksisdan ko`rinib turibdiki, funksiya void turidagi qiymat qaytaradi. Amalda esa konkret turdagi obyekt uchun xotira ajratish zarur bo`ladi. Buning uchun void 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));
Calloc() funksiyasi malloc funksiyasidan farqli ravishda massiv uchun joy ajratishdan tashqari massiv elementlarini 0 qiymati bilan initsializatsiya qiladi.
Bu funksiya sintaksisi .
Void * calloc(size_t num, size_ t size);
Ko`rinishida bo`lib , num parametri ajratilgan sohada nechta element borligini, size xar 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* block);
Free() funksiyasi parametrining void turida bo`lishi ixtiyoriy turdagi xotira bo`lagini ochirish imkonini beradi .
Quyidagi programmada 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 soxasini to`ldirish
For (int i=0; i<10; i++) *(pvektor+i)=I;

// vector elementlarini hop etish


For (int i=0; i<10; i++) cout<<*(pvector+i)<// ajratilgan xotira bo`lagini qaytarish (o`chirish)
Free(pvector);
Return 0;
}
new operatori yordamida ,massivga hotira ajratishda obyrkt 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 hosil qilish uchun
int **a;
ko`rinishidagi <> ishlatiladi.
Boshqa massiv satrlari soniga qarab ko`rsatkichlar massiviga dinamik xotiradan joy ajratish kerak:
A=new int *[m] // bu yerda m massiv satrlar soni
Keyin , xar bir satr uchun takrorlash operatori yordamida xotira ajratish va ularning boshlang`ich adreslarini a massiv elementlariga joylashtirish zarur bo`ladi:
For (int i=0; iShuni qayd etish kerakki , dinamik massivning har bir satri xotiraning turli joylarida joylashishi mumkin.
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;

FUNKSIYALARNING MASSIV KIRISH PARAMETRLARI


Funksiyalarga massivlarni kirish argument sifatida berish uchun parametr e'lonida [] qavslar qo'yiladi. Masalan:
...
void sortArray(int [], int ); // funksiya e'loni
void sortArray(int n[], int hajm) { // funksiya aniqlanishi
...
}
...
Dasturda esa, funksiya chaqirilganda, massivning faqat ismi beriladi halos, [] qavslarning keragi yo'q.
int size = 10;
int array[size] = {0};
...
void sortArray(array, size); // funksiya chaqirig'i,
// faqat massiv ismi - array berildi
...
Funksiyaga massivlarni berganimizda, eng katta muammo bu qanday qilib massivdagi elementlari sonini berishdir. Eng yaxshi usul bu massiv kattaligini qo'shimcha kirish parametri orqali funksiyaga bildirishdir. Bundan tashqari, massiv hajmini global konstanta orqali e'lon qilishimiz mumkin. Lekin bu ma'lumotni ochib tashlaydi, global sohani ortiqcha narsalar bilan to'ldirib tashlaydi. Undan tashqari massiv hajmini funksiyaning o'ziga yozib qoyishimiz mumkin. Biroq bunda bizning funksiyamiz faqat bitta kattalikdagi massivlar
bilan ishlaydigan bo'lib qoladi. Yani dasturimiz dimamizmni yo'qotadi. Klaslar yordamida tuzilgan massivlar o'z hajmini biladi. Agar bunday ob'ektlarni qo'llasak, boshqa qo'shimcha parametrlarni
qo'llashimizning keragi yo'q.
Funksiyalarga massivlar ko'rsatkich ko'rinishida beriladi. Buni C++, biz ko'rsatmagan bo'lsak ham, avtomatik ravishda bajaradi. Agar massivlar qiymat bo'yicha chaqirilganda edi, har bir massiv elementining nushasi olinishi kerak bo'lardi, bu esa dastur ishlash tezligiga salbiy ta'sir ko'rsatar edi.
Lekin massivning alohida elementi argument o'rnida funksiyaga berilganda, ushbu element, aksi ko'rsatilmagan bo'lsa, qiymat bo'yicha beriladi. Masalan:
...
double m[3] = {3.0, 6.88, 4.7};
void foo(double d){
...
}
...
int main()
{
...
void foo(m[2]); // m massivining uchinchi elementining qiymati - 4.7 berildi
...
return (0);
}
Agar kiritilayatgan massiv funksiya ichida o'zgarishi ta'qiqlansa, biz funksiya massiv parametri oldiga const sifatini qo'ysak bo'ladi:
foo(const char []);
Bunda funksiyaga kiradigan massiv funksiya tomonidan o'zgartirilmaydi. Agar o'zgartirishga urinishlar bo'lsa, kompilyator hato beradi.
Massivlar va funksiyalarning birga ko'llanilishiga misol beraylik.
// Massiv argumentli funksiyalar
# include
const int arraySize = 10;
double ortalama(int m[], int size) {
double temp = 0;
for (int i = 0; i < size; i++) {
temp += m[i];
}
return ( temp / size );
}
void printArray(const int n[], int size, int ortalama) {
for (int i = 0; i < size; i++) {
cout << n[i]; << endl;
}
cout << "Ortalama: " << ortalama << endl;
}

int main()


{
int m[10] = {89,55,99,356,89,335,78743,44,767,346};

printArray(m, arraySize, ortalama(m, arraySize)) ;


return (0);
}
Ekranda:
89
55
99
356
89
335
78743
44
767
346
Ortalama: 8092.3

XULOSA


Xulosa qilib shuni aytish mumkinki , C++ dasturlash tilida ishlash boshqa dasturlash tillariga nisbatan ancha qulay va imkonoyati ham kengroq. Men C++ dasturi strukturasi xaqida, belgilar bayoni , Algoritm va dastur tushunchasi, ma’lumotlarni kiritish va chikarish operatorlari xamda dasturda massivlar va satrlar bilan ishlash xaqida o`zimga keraklicha bilim va ko`nikmaga ega bo`ldim.


C++ dasturi Windows muhitida ishlaydigan dastur tuzish uchun qulay bo`lgan vosita bo`lib, kompyuterda dastur yaratish ishlarini avtomatlashtiradi, xatoliklarni kamaytiradi va dastur tuzuvchi mehnatini yengillashtiradi.
C++ dasturlash tilida massivlarning ishlatilishi boshqa dasturlash tillariga qaraganda bir muncha afzalliklarga ega. Massivlar bilan ishlash bazi hisoblash masalalarida ancha qulayliklar tug`diradi. Ularning xotirada egallaydigan joyini hisobga olsak dasturning ishlash tezligi xam bir necha marta ortadi.
Men bu kurs ishimda shuni yoritib berganmanki , massivlar xaqida umumiy ma`lumot (bir o`lchamli va ko`p o`lchamli), ularning xotiradan egallaydigan tartibi, saralash, tartiblash, funksiyalar bilan bog`lash , dasturlarda foydalanish kabi yechimlariga oid turli masalalarni misollar yordamida yoritib chiqdim. Bundan shuni xulosa qilishim mumkinki , bundan keyingi ishlarimni yanada boyitgan xolda massivlar ustida dastur tuzib ularni kengroq yoritib berishdir.



FOYDALANILGAN ADABIYOTLAR

1. A.A. Xoidjigitov , Sh.f.Madraximov, U.E.Adamboyev “Informatika va programmalash ” .O`quv qo`llanma, O`z.MU . 2005-yil.

2. B. Straustrop. “Yazik programmirovaniya C++. ” Binom press, 2006-yil.

3. I. Qobulov “C++ tili “


Toshkent nash. 2008-yil.

4. WWW.C++dastur.uz

5.Madraximov. F “C++ dasturlash tili” uslubiy qo`llanma.
2009-yil.

6. Sayfiyev J.F “C++ tiliga kirish”-uslubiy qo`llanma


Buxoro-2005.

7.http.//dastur.uz




Yüklə 203,88 Kb.

Dostları ilə paylaş:
1   2   3




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin