7-Ma’ruza mashg’uloti.
Mavzu: Ko'p o'lchovli statik matritsalar.
Reja:
Kо‘p о‘lchamli statik massivlar
Kо‘p о‘lchamli massivlarni initsializatsiyalash
Tayanch tushunchalar: massiv, statik, matritsa, elemen turi, tayanch tur, indekisli o’zgaruvchi, to’liq o’zgaruvchi, element selektori.
Kо‘p о‘lchamli statik massivlar
C++ tilida massivlar elementining turiga cheklovlar qо‘yil-maydi, lekin bu turlar chekli о‘lchamdagi obyektlarning turi bо‘lishi kerak. Chunki kompilyator massivning xotiradan qancha joy (bayt) egallashini hisoblay olishi kerak. Xususan, massiv komponentasi massiv bо‘lishi mumkin («vektorlar-vektori»), natijada matritsa deb nomlanuvchi ikki о‘lchamli massiv hosil bо‘ladi.
Agar matritsaning elementi ham vektor bо‘lsa, uch о‘lchamli massivlar - kub hosil bо‘ladi. Shu yо‘l bilan yechilayotgan masalaga bog‘liq ravishda ixtiyoriy о‘lchamdagi massivlarni yaratish mumkin.
Ikki о‘lchamli massivning sintaksisi quyidagi kо‘rinishda bо‘ladi:
[] []
Masalan, 1020 о‘lchamli haqiqiy sonlar massivining e’loni:
float a[10][20];
E’lon qilingan A matritsani kо‘rinishi 7.2-rasmda keltiril-gan.
7.2-rasm. Ikki о‘lchamli massivning xotiradagi joylashuvi
Endi adres nuqtai - nazaridan kо‘p о‘lchamli massiv element-lariga murojaat qilishni kо‘raylik. Quyidagi e’lonlar berilgan bо‘lsin:
int a[3][2]; float b[2][2][2];
Birinchi e’londa ikki о‘lchamli massiv, ya’ni 2 satr va 3 ustundan iborat matritsa e’lon qilingan, ikkinchisida uch о‘lchamli -3 ta 2x2 matritsadan iborat bо‘lgan massiv e’lon qilingan. Uning elementlariga murojaat sxemasi:
7.3-rasm. Ikki о‘lchamli massiv elementlariga murojaat
Bu yerda a[i] kо‘rsatkichda i-chi satrning boshlang‘ich adresi joyla-shadi, massiv elementiga a[i][j] kо‘rinishidagi asosiy murojaatdan tashqari vositali murojaat qilish mumkin: *(*(a+i)+j) yoki *(a[i]+j).
7.3-rasm. Uch о‘lchamli massivning xotirada tashkil bо‘lishi
Massiv elementlariga murojaat qilish uchun nomdan keyin kvadrat qavsda har bir о‘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);
Kо‘p о‘lchamli massivlarni initsializatsiyalash
Massivlarni initsializatsiyalash quyidagi misollarda kо‘rsa-tilgan:
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 kо‘paytmasini - S Ab hisoblash masalasini kо‘raylik. Bu yerda Hisoblash formulasi -
void main()
{
const int n=4,m=5;
float a[m][n],b[n],c[m];
int i,j; float s;
for(i=0;i;i++)
for(j=0;j;i++)cin>>a[i][j];
for(i=0;i;i++)cin>>b[i];
for(i=0;i;i++)
{
for (j=0,s=0;j;j++)s+=a[i,j]*b[j];
c[i]=s;
}
for (i=0;i;i++)cout<<”\t c[“<<i<<”]=”<<c[i];
return;
}
Do'stlaringiz bilan baham: |