1. Ikki o`lchovli massivlar Asosiy oyna – Borland C++ Builder



Yüklə 214,05 Kb.
səhifə1/5
tarix14.02.2023
ölçüsü214,05 Kb.
#84259
  1   2   3   4   5
1. Ikki o`lchovli massivlar Asosiy oyna – Borland C Builder (1)


MAVZU:BORLAND C++ BUILDERDA IKKI O'LCHOVLI MASSIVLARGA DOIR DASTUR TUZISH

REJA

1.Ikki o`lchovli massivlar
2. Asosiy oyna – Borland C++ Builder
3. Ikki o'lchamli dinamik massivlar bilan ishlash

C++ da bir o`lchamli massivlar bilan ishlash
Video darslik 
Dasturda ikki asosiy tur ma'lumot strukturalari mavjuddir. Birinchisi statik, ikkinchisi dinamikdir. Statik deganimizda hotirada egallagan joyi o'zgarmas, dastur boshida beriladigan strukturalarni nazarda tutamiz. Dinamik ma'lumot tiplari dastur davomida o'z hajmini, egallagan hotirasini
o'zgartirishi mumkin. Agar struktura bir hil kattalikdagi tiplardan tuzilgan bo'lsa, uning nomi massiv (array) deyiladi. Massivlar dasturlashda eng ko'p qo'laniladigan ma'lumot tiplaridir. Bundan tashqari strukturalar bir necha farqli tipdagi o'zgaruvchilardan tashkil topgan bo'lishi mumkin. Buni biz klas (Pascalda record) deymiz. Masalan bunday strukturamiz ichida odam ismi va yoshi bo'lishi mumkin. Bu bo'limda biz massivlar bilan yaqindan tanishib o'tamiz. Bu bo'limdagi massivlarimiz C uslubidagi, pointerlarga (ko'rsatkichlarga) asoslan strukturalardir. Massivlarning boshqa ko'rinishlarini keyingi qismlarda o'tamiz. Massivlar hotirada ketma-ket joylashgan, bir tipdagi o'zgaruvchilar guruhidir. Alohida bir o'zgaruvchini ko'rsatish uchun massiv nomi va kerakli o'zgaruvchi indeksini yozamiz. C++ dagi massivlardagi elementlar indeksi har doim noldan boshlanadi.
Massiv bir o`lchamli deyiladi, agar uning elementiga bir indeks orqali murojaat qilish mumkin bo`lsa.
Bir o`lchamli massivni e`lon qilish quyidagicha bo`ladi:
[ elementlar_soni ] = { boshlang'ich qiymatlar };
Quyida massivlarni e`lon qilishga bir necha misollar keltirilgan:
1) float a[5];
2) int m[6];
3) bool b[10];
1) a elementlari haqiqiy sonlardan iborat bo`lgan, 5 ta elementdan tashkil topgan
massiv. Indekslari esa 0 dan 4 gacha bo`lgan sonlar
float a[5];
Massiv a[0] a[1] a[2] a[3] a[4]
elementilari qiymati 4 -7 15 5.5 3
2) m elementlari butun sonlardan iborat bo`lgan, 6 ta elementdan tashkil topgan
massiv. Indekslari esa 0 dan 5 gacha bo`lgan sonlar.
int m[6];
Massiv m[0] m[1] m[2] m[3] mas2[4] mas2[5]
elementilari qiymati 2 -17 6 7 13 -3
3) b elementlari mantiqiy qiymatlardan (true, false ) iborat bo`lgan 10 ta elementdan tashkil topgan massiv. Indekslari esa 0 dan 9 gacha bo`lgan sonlar.
Massiv elementlariga murojaat qilish oddiy o`zgaruvchilarga murojaat qilishdan biroz farq qiladi. Massiv elementiga murojaat qilish uning indeksi orqali bo`ladi.
a[1] = 10; a massivining 1 – elementi 10 qiymat o’ zlashtirsin;
cin >> a[2]; a massivining 2 – elementi kirtilsin;
cout << a[3]; a massivining 3 – elementi ekranga chiqarilsin;
Massivni e'lon qilishda uning elementlariga boshlang'ich qiymat berish mumkin va buning bir nechta usuli mavjud.
1) O'lchami ko'rsatilgan massivni to'liq initsializatsiyalash.
int k[5] = { 2, 3, 7, 8, 6};
Bu yerda 5 ta elementdan iborat bo'lgan k massivi e'lon qilingan va massivning
barcha elemantlariga boshlang'ich qiymat berilgan.
2) O'lchami ko'rsatilgan massivni to'liqmas initsializatsiyalash.
int k[5] = { 2, 3, 7 };
Bu yerda 5 ta elementdan iborat bo'lgan k massivi e'lon qilingan va massivning
dastlabki 3 ta elemantlariga boshlang'ich qiymat berilgan.
3) O'lchami ko'rsatilmagan massivni to'liq initsializatsiyalash.
int k[] = { 2, 3, 7, 8, 6};
Shuni takidlash lozimki, agar massiv o'lchami ko'rsatilmasa, uni to'liq initsializatsiyalash shart. Bu xolda massiv o'lchami kompilyatsiya jarayonida massiv elementlari soniga qarab aniqlanadi. Bu yerda massiv o'lchami 5 ga teng.
4) O'lchami ko'rsatilgan massivning barcha elementlariga boshlang'ich qiymat 0
berish:
int k[5] = { 0 };
O'lchami ko'rsatilgan massivning barcha elementlariga boshlang'ich qiymat 0 berish
#include
int main()
{
int a[10] = { 0 };
//massivning barcha elementlariga 0 qiymat berish
for (int i = 0; i < 10; i++)
cout << "a[" << i << "]=" << a[i] << endl;
system ("pause");
return 0;
}
Berilgan massiv elimentlarini yig`indisini topish dasturini tuzing
#include
int main()
{
int s=0;
int a[10] ;
//massivning barcha elementlariga 0 qiymat berish
for (int i = 0; i < 10; i++)
{
cout << "a[" << i << "]="; cin >> a[i];
s=s+a[i];
}
cout << "Massivning yig`indisi=" <system ("pause");
return 0;
}

Ushbu bo‘limda quyidagilarga e`tibor berish kerak bo‘ladi: ya`ni ikki o‘lchovli massiv satrlari soni (m), ustunlari soni n, hamda elementlari soni larni e’tiborga olish lozim. Agar masalalarda satrlar va ustunlar soni aniq ko‘rsatilmagan bo‘lsa, ularni 2 dan 10 gacha bo‘lgan oraliqda o‘zgartirish tavsiya etiladi. Matritsaning boshlang‘ich qiymati 1- va 2-indekslari 1 bo‘lgan elementida joylashadi. Matritsaga kiritish va chiqarish satrlar bo‘yicha amalga oshiriladi. m o‘lchamli kvadrat matritsa 2 o‘lchovli massiv hisoblanadi. Matritsalarni tashkil eish va ularning elementlarini chiqarish. Matritsalarni tashkil etish masalalaridagi natijaviy matritsa o‘lchami 10X10 dan oshmaydi.


Ikki o`lchamli statik massivlarni e`lon qilish.
Toifa massiv_nomi [massiv_satrlari_soni][massiv_ustunlar i_soni];
Ikki o`lchamli statik massivlarning e`lon qilinishida, bir o`lchamlidan farqi, massiv nomidan keyin qirrali qavs ichida ikkita qiymat yozilganligidadir. Bulardan birinchisi, satrlar sonini, ikkinchisi esa ustunlar sonini bildiradi. Ya'ni ikki o'lchamli massiv elementiga ikkita indeks orqali murojaat qilinadi.
Ikki o`lchamli massivlar matematika kursidan ma`lum bo`lgan matritsalarni eslatadi.
Ikki o'lchamli massiv e'loniga misol:
int a[3][3], b[2][4];
A matritsa B matritsa
a00 a01 a02 b00 b01 b02 b03
a10 a11 a12 b10 b11 b12 b13
a20 a21 a22
A matritsa 3 ta satr, 3 ta ustunga ega;
B matritsa 2 ta satr, 4 ta ustunga ega;
Ikki o'lchamli massivlarda 1 - indeks satrni, 2 - indeks ustunni bildiradi.
Birinchi satrning dastlabki elementi a10 – a biru nol element deb o`qiladi. a o`n deyilmaydi.
m ta satr va n ta ustunga ega bo`lgan massivga (mxn) o`lchamli massiv deyiladi. Agar
m=n (satrlar va ustunlar soni teng) bo'lsa kvadrat massiv deyiladi.
Ko'p o'lchamli massivlarni initsializats iyalash misоllar:
int a[2][2]={1,2,7,3};
int b[2][3]={ {0,1,2}, {3,4,5} };
Massivlarni qo`llanilishiga misol keltiradigan bo`lsak, satrlar talabalarni, ustunlar fanlardan olgan baholarini bildirsin. Ya`ni m ta talaba, n ta fan. n – ustunga talabalarning o`rtacha baholari hisoblanib, shu asosida stipendiya bilan ta`minlansin.
Va hakazo, bunga o`xshash ko`plab misollar keltirish mumkin. Bu masalalarga to`xtalishdan oldin bir ikkita oddiy masalar bilan tanishib chiqaylik.
1 - Masala. A(mxn) matritsa berilgan. Shu matritsa elementlar ini kirituvchi va ekranga jadval ko`rinishida chiqaruvchi programma tuzilsin.

#include


#include
int main()
{
int m, n, a[10][10];
cout << "Satrlar sonini kiriting \nm=";cin >> m;
cout << "Ustunlar sonini kiriting \nn=";cin >> n;
cout <<"Massiv elementlarini kiriting \n";
for(int satr = 0; satr < m ; satr++)
for(int ustun = 0; ustun < n; ustun++)
{
cout << "a[" << satr << "][" << ustun << "]="; cin >> a[satr][ustun];
}
for(int satr = 0; satr < m; satr++)
{
for(int ustun = 0; ustun < n; ustun++)
cout << a[satr][ustun] << "\t"; cout<<"\n";
}
system ("pause");
return 0;
}
Funksiya parametri sifatida massivni jo'natish va funksiya natijasi sifatida massivni olish ham mumkin. Funksiyaga matritsani uzatishda matritsa nomi bilan uning satrlar va ustunlar sonini ham jo'natish kerak bo'ladi. Funksiyada massivdan foydalanishni bir necha xil usuli bor, shularning ba'zilari bilan tanishamiz.
Funksiyaga matritsani uzatish

#include


#include
void matrix_print(int a[10][10], int m, int n)
{
// matritsani jadval shaklida chiqarish
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << a[i][j] << "\t";
}
cout << "\n";
}
}
int satr_max(int a[], int n)
{
// massivning eng katta elementini aniqlash
int max = a[0];
for (int i = 1; i < n; i++)
if (max < a[i]) max = a[i];
return max;
}
int main()
{
int m, n, a[10][10];
cout << "Satrlar sonini kiriting \nm="; cin >> m;
cout << "Ustunlar sonini kiriting \nn="; cin >> n;
cout <<"Massiv elementlarini kiriting \n";
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
cout << "Kiritilgan matritsa\n";
//funksiyaga matritsa, satrlar va ustunlar soni jo'natiladi
matrix_print(a, m, n);
for (int i = 0; i < m; i++)
{
// funksiyaga i-satrning 0-elementi adresini
// va elementlar sonini jo'natamiz
cout << i << "-satrning eng kattasi=" <<
satr_max(&a[i][0], n);
cout << endl;
}
return 0;
system ("pause");
}
Matritsadagi har bir satrning eng kattasini topish
#include
#include
void matrix_print(int a[10][10], int m, int n)
{
// matritsani jadval shaklida chiqarish
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << a[i][j] << "\t";
}
cout << "\n";
}
}
int satr_max(int a[], int n)
{
// massivning eng katta elementini aniqlash
int max = a[0];
for (int i = 1; i < n; i++)
if (max < a[i]) max = a[i];
return max;
}
int main()
{
int m, n, a[10][10];
cout << "Satrlar sonini kiriting \nm="; cin >> m;
cout << "Ustunlar sonini kiriting \nn="; cin >> n;
cout <<"Massiv elementlarini kiriting \n";
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
cout << "Kiritilgan matritsa\n";
//funksiyaga matritsa, satrlar va ustunlar soni jo'natiladi
matrix_print(a, m, n);
for (int i = 0; i < m; i++)
{
// funksiyaga i-satrning 0-elementi adresini
// va elementlar sonini jo'natamiz
cout << i << "-satrning eng kattasi=" <<
satr_max(&a[i][0], n);
cout << endl;
}
return 0;
system ("pause");
}
Statistik massivlar bilan ishlashning kamchiliklar i:
1. Statik massivlarning uzunligi оldindan ma’ lum bo’ lishi kеrak;
2. Statik massivning o'lchami bеrilganlarga ajratilgan хоtiraning o’ lchami bilan chеgaralangan;
3. Katta o’lchamdagi massiv e’lоn qilib, masalani yеchilishida ajratilgan хоtira to’ liq ishlatimasligi mumkin.
Bu kamchiliklarni dinamik massivlardan fоydalanish оrqali xal qilish mumkin.
Ikki o'lchamli dinamik massivlar bilan ishlash
Ikki o’lchamli dinamik massivni tashkil qilish uchun «ko’rsatkichga ko’rsatkich» dan foydalaniladi:
int **a;
Endi satrlar sоniga qarab ko’rsatkichlar massiviga dinamik хоtira ajratish kеrak:
a = new int *[satrlar_soni];
Har bir satrga takrоrlash оpеratоri yordamida хоtira ajratish kеrak va uning bоshlang’ich adrеsini a massiv elеmеntlariga jоylashtirish zarur:
for (int i = 0; i < satrlar_soni; i++)
a[i] = new int [ustunlar_soni];
Dinamik massivda har bir satr хоtiraning turli jоylarida jоylashishi mumkin.
Dinamik massivlarni ishlatib bo’ lgandan kеyin albatta delete amali bilan uni o’ cherish kеrak.
Yuqоridagi mis оlda ikki o’ lchamli massiv uchun avval massivning har bir elеmеnti, охirida massivning o’ zi o'chiriladi:
for (int i = 0; i < satrlar_soni; i++)
delete [] a[i];
delete []a;
1 - Masalani dinamik massivdan foydalanga holda ishlashni ko'rib chiqamiz.
#include
#include
int main()
{
int m, n;
int **a; // ko'rsatkichga ko'rsatkich
cout << "Satrlar sonini kiriting \nm=";
cin >> m;
cout << "Ustunlar sonini kiriting \nn=";
cin >> n;
// m ta ko'rsatkichlar massivi uchun xotira ajratish
a = new int *[m];
// har bir satr uchun dinamik xotira ajratish
for (int i = 0; i < m; i++)
a[i] = new int [n];
cout <<"Massiv elementlarini kiriting \n";
for(int satr = 0; satr < m ; satr++)
for(int ustun = 0; ustun < n; ustun++)
{
cout << "a[" << satr << "][" << ustun << "]=";
cin >> a[satr][ustun];
}
// matritsani jadval shaklida chiqarish
for(int satr = 0; satr < m; satr++)
{
for(int ustun = 0; ustun < n; ustun++)
cout << a[satr][ustun] << "\t";
cout<<"\n";
}
// Dinamik massivdan foydalanib bo'lgandan so'ng
// uni xotiradan o'chirish lozim
// oldin massiv satrlari o'chiriladi (xotira bo'shatiladi)
for (int i = 0; i < m; i++)
delete []a[i];
// endi massivning o'zini o'chirish mumkin
delete [] a;
return 0;
system ("pause");
}
a(m, n) matritsani b(n, p) matritsaga ko'paytirishdan hosil bo'lgan c(m, p) matritsani chiqaruvchi programma tuzilsin.
#include
#include
void matrix_print(int **a, int m, int n)
{
// matritsani jadval shaklida chiqarish
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << a[i][j] << "\t";
}
cout << "\n";
}
}
void matrix_input (int **a, int m, int n)
{
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
}
void matrix_delete (int **a, int m)
{
// Dinamik massivdan foydalanib bo'lgandan so'ng
// uni xotiradan o'chirish lozim
// oldin massiv satrlari o'chiriladi (xotira bo'shatiladi)
for (int i = 0; i < m; i++)
delete []a[i];
// endi massivning o'zini o'chirish mumkin
delete []a;
}
// create_matrix - ko'rsatkichga ko'rsatkich qaytaradi
int ** create_matrix(int m, int n)
{
int **ptr;
// matritsa satrlari uchun xotira ajratish
ptr = new int *[m];
for (int i = 0; i < m; i++)
// matritsa ustunlari uchun xotira ajratish
ptr[i] = new int [n];
return ptr;
}
int main()
{
int m, n, p, **a, **b, **c;
cout << "A matritsa satrlar sonini kiriting \nm="; cin >> m;
cout << "A matritsa ustunlar sonini kiriting \nn="; cin >> n;
cout << "B matritsa ustunlar sonini kiriting \np="; cin >> p;
// matritsalarni hosil qilish
a = create_matrix(m, n);
b = create_matrix(n, p);
c = create_matrix(m, p);
cout << "A massiv elementlarini kiriting \n";
matrix_input(a, m, n);
cout << "B massiv elementlarini kiriting \n";
matrix_input(b, n, p);
cout << "Kiritilgan A matritsa\n";
matrix_print(a, m, n);
cout << "Kiritilgan B matritsa\n";
matrix_print(b, n, p);
// c matritsa elementlarini 0 qilish
for (int i = 0; i < m; i++)
for (int j = 0; j < p; j++)
c[i][j] = 0;
// A matritsani B matritsaga ko'paytirish
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
for (int k = 0; k < p; k++)
{
c[i][k] += a[i][j] * b[j][k];
}
cout << "Natija C matritsa\n";
matrix_print(c, m, p);
matrix_delete(a, m); // a matritsani o'chirish
matrix_delete(b, n); // b matritsani o'chirish
matrix_delete(c, m); // c matritsani o'chirish
return 0;
system ("pause");
1 Muhim so`zlar: massiv, bir o`lchovli massiv, ikki o`lchovli massiv, jadval, int, char, float, tip, simvolli massivlar, so`zli massivlar,ko`rsatkichli massivlar.

 Bilib olasiz: C++ tilida massivlarni e`lon qilish, o`zgarmas massivlar bilan ishlash, bir va ikki o`lchovli, simvolli va so`zli, ko`rsatkichli massivlarni yaratish va foydalanishni.


Yüklə 214,05 Kb.

Dostları ilə paylaş:
  1   2   3   4   5




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

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin