1.10-rasm. Berilgan x, y, z sonlar ichidan eng kattasini topish blok-sxemasi
Ushbu masalani yechish algoritmining yana bir usulini ko‘rib chiqamiz. 1) kiritish (x, y, z);
2) p = x;
3) agar (p < y ) bo‘lsa, u holda p= y; 4) agar (p < z ) bo‘lsa, u holda p= z; 5) muhrlash (r).
Bu algoritmga mos blok-sxema 1.11-rasmda tasvirlangan.
Bu usulga asosan, avvalo sonlar ichida birinchisi eng kattasi deb faraz qilinadi, ya’ni p = x. So‘ngra har bir qadamda navbatdagi son – r ning qiymati bilan solishtiriladi va shart bajarilsa, u eng kattasi deb qabul qilinadi. Bu algoritmning afzalligi shundaki, uning asosida uchta va undan ko‘p sonlar ichidan eng kattasini (kichigini) topishning qulay imkoniyati mavjud.
18
1.11-rasm. Hisoblash blok-sxemasi
3-misol. Quyidagi ifoda bilan berilgan munosabatni hisoblang [2, 52 b.].
b x, Y x a,
a b,
agar x 0, agar x 0,
aks holda .
Bu misol natija x ning qiymatiga bog‘liq shart bilan berilgan va masala
quyidagicha so‘zlar orqali ifodalangan algoritm asosida aniqlanadi: agar x > 0 bo‘lsa, u holda u = b - x bo‘ladi, aks holda;
agar x < 0 bo‘lsa, u holda u = x + a, aks holda u = a+ b.
aga x
Avvalo, birinchi shart tekshiriladi va agar u bajarilsa, y = b - x amal bajariladi, aks holda Y x a, aksrholda . 0, munosabat hisoblanadi.
Bu fikrlar quyidagi blok-sxemada o‘z aksini topgan (1.12-rasm). 19
1.12-rasm. Hisoblash blok-sxemasi
Ba’zan takrorlanuvchi algoritmlar bir nechta parametrga bog‘liq bo‘ladi. Odatda bunday algoritmlar ichma-ich joylashgan jarayonlar deb ataladi.
n
n
1-misol. Munosabatni hisoblang: S (i j)2 . i1 j1
Yig‘indi hisoblash uchun, i indeksning har bir qiymatida j indeks bo‘yicha ko‘paytmani hisoblab, avval yig‘indi ustiga ketma-ket qo‘shib borish kerak bo‘ladi. Bu jarayon quyidagi ichma-ich joylashgan jarayonga doir blok–sxemada aks ettirilgan (1.22-rasm). Bu yerda indeks i dan tashqi takrorlash yig‘indi uchun, j-dan esa-ichki takrorlash - ko‘paytmani hosil qilish uchun foydalanilgan.
1.22-rasm. Ichma-ich joylashgan algoritmga doir blok-sxema
Shu bilan birga, keltirilgan murakkab munosabatni ikki nisbatan sodda munosabatlar ketma-ketligi bilan almashtirish (dekompozitsiya amali) maqsadga
muvofiq:
1)
n
i
n
P (i j)2 ,i 1,2,...,n; 2) S P i . j1 i1
2-misol. B = b[i] (i=1,2,…,n) massiv elementlarini o‘sish (kamayish)
tartibida joylashtirish algoritmi va dasturini yaratish uchun yuqorida keltirilgan
massiv elementlarining minimal (maksimal) qiymatli elementi va uning indeksini aniqlash algoritmidan foydalaniladi va quyidagi amallar ketma-ketligi bajariladi (bunda algoritmning so‘zlar orqali ifodalangan usulidan foydalaniladi) [2, 16-18 b.]:
1) kiritish (bi , n); 2) i=1;
3) massivning i chidan to n chi elementlari orasidagi eng kichik (katta) element - z va uning indeksi - k aniqlanadi;
4) “uch likobcha” usuli asosida i-chi va minimal (maksimal) qiymatli elementlar joyma-joy almashtiriladi: c=b[i]; b[i]= z; b[k]=c, bunda c - yordamchi o‘zgaruvchi;
5) i=i+1;
6) agar i bo‘lsa, u holda =(2).
Yuqoridagi algoritmning amallar ketma-ketligini to‘laligicha keltiramiz: 1) kiritish (n, bi )
2) i =1; 3) z = b i ; 4) k = i;
5) j = i +1;
6) agar ( z < bj ) shart bajarilsa, u holda {z= bj; k=j;} 7) j = j + 1;
8) agar ( j <= n ) shart bajarilsa, u holda =(6) 9) c = bi;
10) bi = z; 11) bk =c; 12) i = i+1;
13) agar ( j <= n-1 ) shart bajarilsa, u holda =(3) 14) muhrlash (bi ).
Natijada, B = {bi}– massiv elementlari o‘sish (kamayish) tartibida qayta joylashtiriladi.
3-misol. A={aij} matritsaning satr elementlari ko‘paytmalarining yig‘indisini hisoblash algoritmi tuzish talab etilsin. Bu masalaning matematik modeli quyidagicha ko‘rinishga ega:
m
n
S ai j . i1 j1
Xususiy holda, agar n=3 va m=4 bo‘lsa, u holda {aij} matritsaning ko‘rinishi
a11a12a13a14 quyidagicha bo‘ladi: A a21a22a23a24
a31a32a33a44
Demak, masalaning echimi S= (a11*a12*a13*a14)+(a21*a22*a23*a24)+ (a31*a32*a33*a34) bo‘ladi.
Tashqi (satrlar) bo‘yicha takrorlash jarayonini – i indeks bilan, (i=1,2,3), ichki (ustunlar) bo‘yicha j - indeks bilan (j=1,2,3,4) belgilanadi. Tashqi indeks i bo‘yicha yig‘indi bajariladi, demak, uning boshlang‘ich qiymati S=0 deb olinadi. Tashqi indeksning har bir qiymatida ichki indeksning barcha qiymatlari bajariladi. Endi, ichki takrorlash jarayonida satr elementlarining ko‘paytmasi bajarilishi kerak bo‘ladi. Ko‘paytmaning boshlang‘ich qiymati uchun yordamchi R=1 o‘zgaruvchi ishlatiladi, va joriy amal P = P * aij ifoda yordamida satr elementlarining ko‘paytmasi hisoblanadi. Tashqi takrorlash jarayonining joriy amali S=S+R dan iborat. Shunday qilib, masalani yechish algoritmini so‘zlar orqali ifodalangan usulidan foydalanilsa, quyidagi ko‘rinishga ega:
1) kiritish (n, m, a i j); 2) S = 0;
3) i = 1; 4) P = 1; 5) j =1;
6) P = P * a i j ;
36
7) j = j + 1;
8) agar ( j <= m) bo‘lsa, u holda =(5); 9) S = S + P;
10) i = i + 1;
11) agar ( i <= n) bo‘lsa, u holda =(4); 12) muhrlash (S).
m
n
Yuqoridagi keltirilgan munosabat ancha murakkab ma’noga va ko‘rinishga ega. SHu sababli masalani yechish uchun dekompozitsiya usulidan foydalanib, berilgan murakkab masalani ikki sodda masala ketma-ketligi ko‘rinishda tasvirlash mumkin, ya’ni
1) pi aij, i1
i 1,2,...,n; 2) S pi . i1
Bunda, avval mos satr elementlarning yig‘indisi {ri} oraliq massivga jamlanib, so‘ngra uning elementlari yig‘indisi S da hisoblanadi.
4- misol. Matritsani va vektorga ko‘paytmasini – C=A*B ni hisoblash masalasini ko‘riladi. Natija vektorning har bir elementi matritsa satr elementlarining vektorga skalyar ko‘paytmasidan iborat.
Bu yerda: A={a i j }, b={b j }, C={c i }, 1 ≤ i ≤ m, 1 ≤ j ≤ n.
m
Matematik modeli: ci a i j bj , i 1,2,...,n. j1
Bu masalani yechish algoritmi quyidagi amallardan iborat: 1) kiritish (n, m, a i j , bj );
2) i = 1; 3) P = 0; 4) j = 1;
5) P = P + a i j* b j ; 6) j = j + 1;
7) agar ( j <= m) bo‘lsa, u holda =(5); 8) C i = P;
37
9) i = i + 1;
10) agar ( i <= n) bo‘lsa, u holda =(3); 11) muhrlash ( C i ).
5-misol. Matritsani va matritsaga ko‘paytmasini – C=A*B hisoblash
masalasi ko‘riladi. Bu yerda:
A={aik }, B={bkj }, C={cij }, 1 ≤ i≤ n, 1 ≤ j≤ m, 1 ≤ k≤ l.
Hisoblash formulasi:
l
ci j aik bk j, k1
Natijaviy C={c i j} matritsasi har bir elementi a i j matritsaning i chi satr
elementlarini bkj matritsa j-chi ustun elementlariga skalyar ko‘paytmasidan iborat. Shuni hisobga olib, matritsa va matritsaga ko‘paytirish algoritmi
quyidagicha tasvirlanadi:
1) kiritish (n, m, aij, bkj); 2) i = 1;
3) j = 1; 4) S=0; 5) k = 1;
6) S = S + a i k* b k j ; 7) k = k + 1;
8) agar ( k <= l) bo‘lsa, u holda =(6); 9) Ci j = S;
10) j = j + 1
11) agar ( j <= m) bo‘lsa, u holda =(4); 12) i = i + 1;
13) agar ( i <= n) bo‘lsa, u holda =(3); 14) muhrlash (Ci j).
6-misol. A={aij} matritsaning “egar” nuqtasini aniqlang. Matritsaning “egar” nuqtasi deganda bir vaqtda i - chi sart elementlari ichida eng katta va j chi
38
ustun elementlari ichida eng kichik bo‘lgan ai j elementidir. Agar matritsa elementlari har xil qiymatli bo‘lsa, u holda “egar” nuqtasi yagona bo‘ladi yoki mavjud emas. Demak, masalaning yechish algoritm, avvalo, tashqi takror jarayonida har bir i-satr bo‘yicha eng katta elementi joylashgan ustun indeksini aniqlab, shu ustun elementlar ichida eng kichik elementining indeksi k = i ga tengligini tekshirishdan iborat bo‘ladi. Agar bu shart hech qaysi satrda bajarilmasa,-demak bu matritsada “egar” nuqta mavjud emas. Shu usulga moc algoritmni keltiramiz:
1) kiritish (n, m, ai j) 2) p1=false;
3) i=1; 4) t=0; 5) p=ai 1; 6) k=1 7) j=2;
8) agar p < ai j bo‘lsa, u holda { p = ai j; k = j }; 9) j=j+1;
10) agar j <= m bo‘lsa, u holda =(8); 11) i=i+1;
12) agar i <= n bo‘lsa, u holda =(4); 13) l=1;
14) agar p < a l k bo‘lsa, u holda t=t+1;
15) agar (t = n) bo‘lsa, u holda {p1=true; muhrlash (i, k, p)}. 16) l=l+1;
17) agar (l <= n) bo‘lsa, u holda =(14);
18) agar (p1 = false) u holda muhrlash (egar nuqta yoq);
Ma`lumki, programma mashina kodlarining qandaydir ketma – ketligi bo`lib, aniq bir xisoblash vositasini amal qilishini boshqaradi. Programmata`minotini yaratish jarayonini osonlashtirish uchun yuzlab programma - lash tillari yaratilgan . Barcha programmalash tillarinai ikki toifaga ajratish mumkin. - Quyi darajadagi programmalash tillari; - Yuqori darajadagi programmalash tillari; Quyi darajadagi programmalash tillariga Assembler turidagi tillar kiradi . Bu tillar nisbatan qisqa va tezkor bajariluvchi kodlarni yaratish imkoniyatini beradi. Lekin, assembler tilida programma tuzish zaxmatli, nisbatan uzoq davom etadigan jarayondir . Bunga qarama – qarshi ravishda yuqori bosqich tillari yaratilganki , ularda tabiiy tilning cheklangan ko`rinishidan foydalangan holda programma tuziladi. Yuqori bosqich tillaridagi operatorlar , berilganlarning turlari , o`zgaruvchilar va programma yozishning turli usullari tilning ifodalash imkoniyatini oshiradi va programmani <> bo`lishini ta`minlaydi. Yuqori bosqich tillariga Fortran, PL/1, Prolog, Lisp, Basic, Pascal, C va boshqa tillarni misol keltirish mumkin. Kompyuter arxitekturasini takomillashuvi, kompyuter tarmog`ining rivojlanishi mos ravishda yuqori bosqich tillarini yangi variantlarini yuzaga kelishiga, yangi tillarni paydo bo`lishiga ayrim tillarni esa yo`qolib ketishiga olib keldi . Xozirda keng tarqalgan tillarga Object Pascal, C++, C#, Php, Java , Asp tillari xisoblanadi. Xususan , C tilining takomillashgan variant C++ tilini olishimiz mumkin. 1972 – yilda Denis Ritch va Brayan Kernegi tomonidan C tili yaratildi . 1980 – yilda Byarn Straustrop C tilining avlodi C++ tilini yaratdiki, unda strukturali va obektga yo`naltirilgan programmalash texnologiyasiga tayangan xolda programma yaratish imkoniyati tug`ildi. С++ funksiya va obyektlarning juda boy kutubxonasiga ega . Yani C++ da dasturlashni o`rganish ikki qismga bo`linadi . Birinchisi bu C++ ni o`zini o`rganish , ikkinchisi esa C++ ning standart kutubxonasidagi tayyor obyekt funksiyalarni qo`llashni o`rganishdir. Massiv – bu bir toifali , chekli qiymatlarning tartiblangan to`plamidir .
2) b elementi butun sondan iborat bo`lgan , 6 ta elementdan tashkil topgan massiv. Indekslari esa 0 dan 5 gacha bo`lgan sonlar.
3) c elementlari mantiqiy qiymatlardan ( true, false ) iborat bo`lgan 7 ta elementdan tashkil topgan massiv. Indekslari esa 0 dan 6 gacha bo`lgan sonlardir. Massivni e`lon qilishda uning elementlariga boshlang`ich qiymat berish mumkin va buning bir necha usuli mavjud. 1) O`lchami ko`ratilgan massivni to`liq initsializatsiyalash. int k[5] = {2, 15 , -9, 45, 3 , 7}; Bu yerda 5 ta elementdan iborat k massivi e`lon qilingan va massivning barcha elementlariga boshlang`ich qiymat berilgan. 2) O`lchami ko`rsatilgan massivni to`liqmas to`liqmas initsializatsiyalash. int k[5] = {2, 15, -9 }; Bu yerda 5 ta elementdan iborat bo`lgan k massivi e`lon qilingan va dastlabki 3 ta elementlariga boshlang`ich qiymat berilgan. 3) O`lchami ko`rsatilmagan massivni to`liq initsializatsiyalash. int k[] = {2, 15 , -9, 45, 3 , 7}; Shuni takidlash lozimki , agar massiv o`lchami ko`rsatilmasa , uni to`liq initsializatsiyalash shart. Bu xolda massiv o`lchami kompilyatsiya jarayonida massiv elementlar soniga qarab aniqlanadi. Bu yerda massiv o`lchami 5 ga teng. 4) O`lchami ko`rsatilgan massivning barcha elementlariga boshlang`ich qiymat 0 berish. intk[5] = {0}; Masalan: 1-misol O`lchami ko`rsatilgan massivning barcha elementlariga boshlang`ichqiymat 0 berish. #include int main () { int k[5]={0}; // massivning barcha elementlariga 0 qiymat berish. for (int i=0; i<<"k["<Ko`p o`lchovli statik massivlar C++ tilida massivlar elementining turiga cheklovlar qo`yilmaydi , lekin bu turlar chekli o`lchamdagi obyektlarning turi bo`lishi kerak. CHunki kompliyator massivning hotiradan qancha joy (bayt) egallashini xisoblay olish kerak. Xususan , massiv komponentasi massiv bo`lish mumkin (“vektorlar - vektori”) , natijada matritsa deb nomlanuvchi ikki o`lchamli massiv xosil bo`ladi. Agar matritsaning elementi xam vektor bo`lsa , uch o`lchamli massivlar - kub xosil bo`ladi. Shu yo`l bilan yechilayotgan masalaga bog`liq ravishda ixtiyoriy o`lchamdagi massivlarni yaratish mumkin. Ikki o`lchamli massivda birinchi indeks satrlar sonini , ikkinchisi esa ustunlar sonini bildiradi. Birinchi satrning dastlabki elementi a10 – a biri nol element deb o`qiladi . a o`n deyilmaydi. M ta satr n ta ustunga ega bo`lgan massivga (mхn)o`lchamli massiv deyiladi. Agar m=n (satrlar va ustunlar soni teng) bo`lsa kvadrat massiv deyiladi . Ikki o`lchamli massivning sintaksi quyidagi ko`rinishda bo`ladi: [][] Masalan, 10Х20 o`lchamli xaqiqiy sonlar massivning e`loni: Float a[10][20]; E`lon qilingan a matritsa ko`rinishi quyidagicha ko`rinishda bo`ladi. J a[0]: (a[0][0], a[0][2], …. , ….a[0][18], a[0][19], ) a[1]:(a[1][0], a[1][1], …. , ….a[1][18], a[1][19],) . . . . i a[i]:(…, ... , …. , ….a[i][j] …. , ….…….) . . . . a[9]:(a[9][0], a[9][1], …. , …. a[9][18], a[9][19],). Ikki o`lchamli massivning hotirada joylashuvi Endi adres nuqtayi - nazaridan ko`p o`lchamli massiv elementlariga murojat qilishni ko`raylik. Quyidagi elonlar berilgan bo`lsin: Int a[3][2]; Float b[2][2][2]; Birinchi elonda ikki o`lchamli massiv, yani 2 ta satr va 3 ustundan iborat matritsa e`lon qilingan , ikkinchisida uch o`lchamli - 3 ta 2х2 matritsadan iborat bo`lgan massiv e`lon qilingan . Uning elementlariga murojat sxemasi: Adres ko`rsatkichlar massivi b a[0] a[1] a[2] ↙ ↘ ↘ qiymatlar a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] Ikki `olchamli massiv elementlariga murojat ; Bu yerda a[i] ko`rsatkichida i-chi satrning boshlang`ich adresi joylashadi, massiv elementiga a[i][j] ko`rinishidagi asosiy murojatdan tashqari vositali murojat qilish mumkin: *(*(a+i)+j) yoki *(a[i]+j).
Uch o`lchamli massivning xotirada tashkil bo`lishi: Adres ko`rsatkichlar massivi b b[0] b[1] ↙ ↘ b[0][0] b[0][1] b[1][0] b[1][1] ↙ ↙ ↓ ↘ b[0][0][ 0] b[0][0][1] b[0][1][0] b[0][1][1] b[1][0][0] b[1][0][1] b[1][1][0] b[1][1][ 1] Massiv elementlariga murojat qilish uchun nomdan keyin kvadrat qavsda xar bir o`lcham uchun indeks yozilishi kerak , masalan b[i][j][k]. Bu elementga vositali murojat xam qilish mumkin va uning variantlari: *(*(*(b+i)+j)+k) yoki *(*(b[i]+j)+k) yoki *(b[i][j]+k); Ko`p o`lchovli massivlarni initsializatsiyalash Int a[2][3] = {2, 6, 8, 7, 12, 5}; Int b[3][3] = {{2, 6, 8}, {7, 12, 5}, {20, 21, 22 }} Birinchi operatorda boshlang`ich qiymatlar ketma – ket yozilgan, Ikkinchi operatorda qiymatlar guruxlangan. Misollar: 1-misol. M o`lchamli kvadrat matrisa berilgan . Bu massivning elementlarini spiral shaklida chop etish dasturi tuzilsin.
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 ayaratish 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<<<*(pvector+i)<<> 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; i
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 berad
XULOSA .
Xulosa qilib shuni aytish mumkinki , C++ dasturlash tilida ishlash boshqa dasturlash tillariga nisbatan ancha qulay va imkonoyati ham kengroq. MenC++ dasturistrukturasixaqida, belgilarbayoni , Algoritmvadasturtushunchasi, ma’lumotlarnikiritishvachikarishoperatorlarixamdadasturdamassivlarvasatrla rbilanishlashxaqidao`zimga keraklicha bilimvako`nikmaga egabo`ldim. C++ dasturi Windowsmuhitidaishlaydigandasturtuzishuchunqulaybo`lganvositabo`lib, kompyuterdadasturyaratishishlariniavtomatlashtiradi, xatoliklarnikamaytiradivadasturtuzuvchimehnatini 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 kabiyechimlariga 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++ dasturlashtili” uslubiyqo`llanma. 2009-yil. 6. Sayfiyev J.F “C++ tiliga kirish”-uslubiy qo`llanma Buxoro-2005. 7.http.//dastur.uz
Dostları ilə paylaş: |