C# bizga tanlash uchun 3 xil turdagi massivlarni beradi

|
C# bizga tanlash uchun 3 xil turdagi massivlarni beradi
|
bet | 2/2 | Sana | 31.12.2023 | Hajmi | 2,29 Mb. | | #129258 |
Bog'liq alimov mikro protsessor 2-mustaqil ish olimjonovaC# bizga tanlash uchun 3 xil turdagi massivlarni beradi:
Bir o'lchovli massiv. U faqat bitta qator maʼlumotlarni oʻz ichiga oladi, shuning uchun massivda saqlangan elementga bitta raqamli indeks (0, 1, 2, va hokazo) bilan kiriladi.
Ko'p o'lchovli massiv. Bir nechta ma'lumotlar qatorini o'z ichiga oladi, shuning uchun uning indeksi qatorni aniqlaydigan va ustunni aniqlaydigan juft raqamlardan iborat bo'ladi. Bunday massiv ko'pincha to'rtburchaklar massivi deb ataladi, chunki u sxematik tasvirlanganda to'rtburchak shaklini oladi.
Qirrali massiv. Bu kichik massivlardan tashkil topgan massivdir (va bu kichik massivlar har qanday hajmda bo'lishi mumkin).
Massivlar yagona o‘zgaruvchi bilan kompyuter xotirasiga saqlanadi, uning elementlari ma’lum bir indekslar bilan tartiblab joylashtiriladi. Massivlar yagona nom bilan bir nechta qiymatni o‘zida mujassamlashtiradi, bularga matematikadagi vektorlarni misol keltirish mumkin. Vektor ham yagona nom bilan saqlanib uning tarkibida bir nechta qiymatni o‘zida mujassamlashadi. Vektorning ham elementlari bir turga mansub va tartiblangan bo‘ladi.
Massiv tarkibida elementlar mavjud bo‘ladi. Massivning eng ko‘pi bilan ketishi mumkin bo‘lgan elementlar soni uning o‘lchamini bildiradi. Massivning elementi turgan o‘rni uning indeksi deyiladi. Massivning elementiga uning indeksi orqali murojaat qilinadi. Massivning indeksi sifatida butun sonlar xizmat qiladi. Har bir massiv o‘zining individual nomiga ega bo‘lishi kerak, ya’ni bir xil nomdagi massivlar bo‘lmaydi. Ularning nomi oldin e’lon qilingan oddiy o‘zgaruvchi nomi bilan ustma-ust tushmasligi kerak.
Statik massivlarni e’lon qilishning umumiy ko‘rinishi quyidagicha:
[] ={boshlang’ich qiymatlar}
Dinamik tarzda massivni e’lon qilishning umumiy ko‘rinishi quyidagicha:
[] =new [o’lcham]
Bu yerda tur-massiv elementining muayyan turini bildiradi. Element turi massiv tashkil etuvchi har bir elementning ma’lumot turini belgilaydi. Tur bilan birga kvadrat qavslar ham ishlatiladi. Ular bir o‘lchamli massiv e’lon qilinganligini ko‘rsatadi. [o’lcham] massiv elementlari sonini belgilaydi. new operatori [o’lcham] ga mos ravishda xotiradan joy ajratadi.
Dinamik massiv o‘lchami ham statik massiv kabi aniqlanishi lozim, faqat bunda u dastur ishlashi davomida aniqlanishi bilan static massivdan farq qiladi.
Quyida massivlarni e’lon qilishga oid bir necha misollar keltirilgan:
1) float jadval[7]; // 7 ta haqiqiy elementli massiv;
2) int vektor[6]; // 6 ta butun sonli massiv;
3) bool ab[15]; // 15 ta mantiqiy elementli massiv.
Massiv o‘lchami va uning elementlari tipi massivni saqlash uchun zarur bo‘lgan xotira hajmini aniqlaydi. Massivni tavsiflashning yana bir usulini ko‘rib chiqamiz:
const int k=15; // Butun sonli o‘zgarmasni e’lon qilish; double A[k]; // 15 ta haqiqiy sonli massiv;
Statik massivni tavsiflashda o‘lchov sifatida musbat butun sondan yoki oldindan belgilangan o‘zgarmasdan foydalanish mumkin.
C++ dasturlash tilidagi massiv elementlari noldan raqamlangan. Birinchi element har doim nol indeksga ega va oxirgi element indeksi, uning tavsifida ko‘rsatilgan o‘lchovdan bitta kam bo‘ladi:
char z[4]; // bunda 4 ta belgili massiv, elementlari 0 dan 3 gacha raqamlangan.
Massiv elementlariga murojaat qilish oddiy o‘zgaruvchilarga murojaat qilishdan biroz farqli bo‘lgan jihati mavjud. Massiv elementiga murojaat qilish, uning indeksi orqali amalga oshiriladi. Masalan:
max[1] = 20; // max massivning 1- elementi 20 qiymat o‘zlashtirish; max[2] = min[3]; // max massivni 2- elementiga min massivning 3-elementini
o‘zlashtirish;
max[5] > min[6]; // max massivni 5- elementi bilan min massivning 6-
elementini taqqoslash;
Massivni e’lon qilishda, uning elementlariga boshlang‘ich qiymat berish mumkin va buni bir nechta usullari mavjud.
1) O‘lchami ko‘rsatilgan massivni to‘liq e’lon qilish: int a[4] = { 5, 6, 7, 8};
Bu yerda 4 ta elementdan iborat bo‘lgan a massivi e’lon qilingan va massivning barcha elementlariga boshlang‘ich qiymat berilgan.
2) O‘lchami ko‘rsatilgan massivni to‘liqmas e’lon qilish: int b[6] = { 7, 5, 3 };
Bu yerda 6 ta elementdan iborat bo‘lgan b massivi e’lon qilingan va massivning dastlabki 3 ta elementlariga boshlang‘ich qiymat berilgan.
3) O‘lchami ko‘rsatilmagan massivni to‘liq e’lon qilish: int x[] = { 5, 3, 2, 1, 8, 0};
Agar massiv o‘lchami ko‘rsatilmasa, uni to‘liq e’lon qilish talab etiladi. Bu holda massiv o‘lchami kompilyatsiya jarayonida elementlari soniga qarab aniqlanadi. Bunda massivning o‘lchami 6 ga teng bo‘ladi.
4) O‘lchami ko‘rsatilgan massivning barcha elementlariga boshlang‘ich qiymatda 0 berish: int y[4] = { 0 };
Bir o‘lchamli massivlar uchun ishlatilgan o‘zgaruvchilar bir хil tipdagi berilganlarni хotirada saqlashda foydalaniladi.
Yuqorida bayon qilingan fikrlarni tekshirib ko‘rish uchun C++ dasturlash tilida bir nechta dasturlarni ko‘rib o‘tamiz.
1-misol. n (n>0) butun son berilgan. Dastlabki n ta musbat juft sonlarni saqlaydigan n o‘lchamli butun sonli massiv tashkil etish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){ int n; cout<<"n = "; cin>>n; int a[n]; for(int i=0,k=2; i<=n; i++,k+=2) a[i]=k; for(int i=0; i}
Massiv - bitta identifikator bilan nomlangan bir xil turdagi ma'lumotlarning ketma-ket to'plami
Initializatsiya misollari
M1 DD 0,1,2,3,4,5,6,7,8,9
M2 DD 0,1,2,3
Barcha massiv elementlarini bir xil qiymatlar bilan ishga tushirish uchun DUP operatoridan foydalaning :
ID turi hajmi DUP (qiymat)
Identifikator - massivning nomi;
Type - bitta element egallagan baytlar sonini aniqlaydi;
Hajmi - massivdagi elementlar sonini tavsiflovchi doimiydir
Qiymat - elementlarning boshlang'ich qiymati.
a DD 20 DUP (0) - boshlang'ich qiymatlari 0 bo'lgan 20 ta elementdan iborat massivni tavsiflaydi.
Agar siz xotirani ajratishingiz kerak bo'lsa, lekin uni ishga tushirmasangiz, Qiymat maydoni sifatida ? dan foydalaning. Masalan,
b DD 20 DUP(?)
2-misol. Butun n (n>1) soni, arifmetik progressiyaning birinchi hadi a va uning ayirmasi d berilgan. Ulardan foydalanib, o‘zida arifmetik progressiyaning dastlabki n ta hadini saqlovchi massiv tashkil etish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){ int a,d,n; cout<<"n = "; cin>>n; int b[n]; cout<<"a = "; cin>>a; cout<<"d = "; cin>>d; for(int i=0,k=a; i<=n; i++,k+=a) b[i]=k; for(int i=0; i}
3-misol. n (n>2) butun soni berilgan. f1=1, f2=1, fk=fk-2+fk-1, k=3,4, ... . fk Fibonachchi sonlar ketma-ketligida birinchi n ta elementni o‘z ichiga
oladigan n o‘lchamli butun sonli massivni ifodalash va chop etish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){ int n; cout<<"n = "; cin>>n; int a[n]; a[0]=1; a[1]=1; for(int i=2; ia[i]=a[i-1]+a[i-2];
for(int i=0; icout<}
Dastur org 100h
.model tiny
.data
N dw 10 ; Massivdagi elementlar soni.
A db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
B db 3, 4, 15,6, 1, 0, 0, 2, 2, 18
C dw 10 dup(0)
.code
Start:
mov si, 0 ; A va B massivlar indeksi.
mov di, 0 ; massiv indeksi C.
M1: mov ah, 0
mov al, A[si]
mul B[si] ; Ko'paytirish AX = AL*B[si].
mov C[di], ax ; Natijani yozib olish.
inc si ; Tugallash
add di, 2 ; halqa jismlari (тела цикла).
cmp si, N
jb M1
end Start
ret
4-misol. n (n>2), a va b butun sonlar berilgan. 1-elementi a ga, 2-elementi b, har bir keyingi elementi barcha avvalgi elementlar (o‘zidan oldingi barcha element) yig‘indisiga teng bo‘lgan n o‘lchamli butun sonli massivni ifodalash va chop etish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){ int n; cout<<"n = "; cin>>n; int x[n]; int a, b;
cout<<"a = "; cin>>a; cout<<"b = "; cin>>b; x[0]=a; x[1]=b; int s=a; for(int i=2; is=s+x[i-1]; x[i]=s;
} for(int i=0; icout<}
5-misol. n o‘lchamli nol bo‘lmagan butun tipli a massiv berilgan. Uning akBerilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){
int n; cout<<"n = "; cin>>n; int a[n]; for(int i=1; i<=n; i++)
cin>>a[i];
for(int i=1; i<=n; i++) if (a[i]cout<}
}
6-misol. n o‘lchamli butun sonli a massiv berilgan. Massivdagi barcha juft sonlar yangi butun tipli b massivga yozilsin. Hosil qilingan b massivning o‘lchami hamda uning elementlarini chiqarish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){ int n, k=0; cout<<"n = "; cin>>n; int a[n], b[n]; for(int i=1; i<=n; i++)
cin>>a[i];
for(int i=1; i<=n; i++) if (a[i]%2==0){
k++;
b[k]=a[i];
}
cout<cout<}
7-misol. n o‘lchamli butun tipli massiv berilgan. Birinchi juft sonning dastlabki qiymatini massivdagi barcha juft sonlarga ko‘paytirish (Agar massivda juft son bo‘lmasa, massiv o‘zgartirishsiz qoldirilsin) dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){ int n, k; cout<<"n = "; cin>>n; int a[n], b[n]; for(int i=1; i<=n; i++)
cin>>a[i];
for(int i=1; i<=n; i++) if (a[i]%2==0) {
k=a[i]; break;
}
for(int i=1; i<=n; i++) if (a[i]%2==0) a[i]=k*a[i]; for(int i=1; i<=n; i++)
cout<}
Ikki o‘lchovli massivlar. Agar ma’lumotlarni jadval ko‘rinishida, ya’ni satrlar va ustunlar formatida saqlash talab etilsa, unda ikki o‘lchovli massivlardan foydalanish lozim bo‘ladi.
3.10 - jadvalda to‘rt qatorli va beshta ustundan iborat massiv berilgan. Bu ikki o‘lchovli massiv hisoblanadi. Undagi qatorlarni birinchi o‘lchov, ustunlarni ikkinchi o‘lcham deb hisoblash mumkin. Ushbu jadvalda saqlangan ma’lumotlarga murojaat qilish uchun massiv nomini va ikkita indeksni ko‘rsatish kerak bo‘ladi. Bunda indeksning birinchisi satr raqamiga, ikkinchisi kerakli element saqlanadigan ustun raqamiga to‘g‘ri keladi.
3.10-jadval Ikki o‘lchovli massiv
3.5 -1.9 0.8 5.07 -2.16
1.6 2.5 3.7 0.01 -2.32
3.01 -0.35 15.18 7.09 -15.66
9.5 10.5 5.3 1.9 1.11
Ikki o‘lchovli massiv – bu matritsa hisoblanadi, uning har bir elementi ikkita indeksga ega: qator raqami – i, ustun raqami – j.
Umumiy holda ikki o‘lchovli massiv quyidagicha e’lon qilinadi:
[n] [m] = { boshlang‘ich qiymatlar };
Bu yerda toifa massiv elementlari turini belgilaydi, – massivning nomi, n – satrlar soni, m – massivning ustunlar soni. Satrlar 0 dan n - 1 gacha, ustunlar esa 0 dan m - 1 gacha raqamlangan.
Masalan: double m[5][7];
Bunda satrlar soni 5 ta va ustunlari soni 7 ta bo‘lgan haqiqiy sonli m massiv e’lon qilingan, satrlar 0 dan 4 gacha, ustunlar 0 dan 6 gacha raqamlangan.
Ixtiyoriy o‘zgaruvchiga o‘xshab, matritsaga ham boshlang‘ich qiymat berilishi mumkin, masalan: int B[2][3] ={{2,3,4}, {7,8,9}};
Matritsa elementiga murojaat qilish uchun uning nomiga, to‘rtburchak qavslarda qator va ustun soni ko‘rsatilishi lozim. Masalan, a [2] [4]- uchinchi satrda va beshinchi ustunda joylashgan a matritsaning elementi degan ma’noni bildiradi.
Matritsa elementlari bilan ishlash uchun ikkita takrorlanishdan foydalanish talab etiladi. Matritsani qayta ishlash uchun birinchi (tashqi) sikl parametrining qiymatlari matritsa satrlari sonlari, ikkinchi (ichki) sikl parametri qiymatlari esa ustunlar raqamlarini anglatadi (3.19-rasm). Matritsa elementlariga ishlov berishda tartib bilan birinchi qator (ustun) elementlari, so‘ngra ikkinchisi va boshqalar oxirigacha ko‘rib chiqiladi. Agar matritsani ustunlar bo‘yicha qayta ishlash zarur bo‘lsa, tashqi siklni ustunlar bilan, ichki siklni qatorlar bo‘yicha tashkil qilish kerak (3.20-rasm).
Massivlarni qayta ishlash. Matritsalar ustida bajariladigan asosiy amallarni ko‘rib chiqamiz.
Matritsalar ham massivlar kabi element bo‘yicha kiritib chiqariladi.
3.21-rasm.
Matritsa elementlarini kiritib chiqarish uchun quyidagi dastur kodi kiritiladi:
#include using namespace std ; int main()
{ int i , j ,N,M, a [ 20] [20] ; cout<<"N=" ; cin>>N; // Satrlar sonini kiritish cout<<"M=" ;
cin>>M; // Ustunlar sonini kiritish cout<<"A matritsa elementlarini kiriting"<>a [ i ] [ j ] ; //Matritsa elementlarini ketma-ket kiritish cout<<"A matritsa elementlarini chiqarish"<}
Matritsa elementlarini jadval shaklida chiqarish uchun quyidagi dastur kodidan ham foydalanish mumkin:
for ( i =0;iN=2
M=3
A matritsa elementlarini kiriting
1 2 3 4 5 6
A matritsa elementlarini chiqarish
1 2 3
4 5 6
C++ dasturlash tilida matritsalarni qayta ishlash bo‘yicha amaliy masalalarni ko‘rib chiqamiz. Bundan oldin matritsaning quyidagi asosiy xususiyatlarini eslab o‘tamiz (3.22-rasm):
• agar satr tartib raqami bilan ustun tartib raqami teng bo‘lsa (i = j), bu element bosh diagonalda yotishini anglatadi;
• agar satr tartib raqami ustun tartib raqamidan kata bo‘lsa (i > j), bu element bosh diagonaldan pastda yotishini anglatadi;
• agar ustun tartib raqami satr tartib raqamidan kata bo‘lsa (i < j), bu element bosh diagonaldan yuqorida yotishini anglatadi;
• agar matritsaning indekslari quyidagi tenglikni qanoatlantirsa i + j = n – 1, element qo‘shimcha diagonalda yotadi;
• agar i + j < n − 1 tenglik bajarilsa, qo‘shimcha diagonaldan yuqorida joylashgan elementlar uchun taalluqli hisoblanadi;
• element qo‘shimcha diagonaldan pastda joylashishi uchun i + j > n – 1 tenglik bajarilishi kerak:
3.22-rasm. Matritsaning asosiy xususiyatlari.
Yuqorida bayon qilingan fikrlarni tekshirib ko‘rish uchun C++ dasturlash tilida funksiyalarga doir bir nechta dasturlarni ko‘rib o‘tamiz.
1-misol. Berilgan A(n,n) kvadrat matritsaning diagonal elementlari yig‘indisini topish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){ int n, s=0; cout<<"n = "; cin>>n; int a[n][n]; for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
cin>>a[i][j];
for(int i=1; i<=n; cout<cout<for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if (i==j) s+=a[i][j]; cout<<"Yig‘indi: "<}
2-misol. Berilgan A(n,n) kvadrat matritsaning bosh diagonalidan yuqorida joylashgan elementlari yig‘indisini topish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){ int n, s=0; cout<<"n = "; cin>>n; int a[n][n]; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) cin>>a[i][j];
for(int i=1; i<=n; cout<cout<for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if (i}
3-misol. Berilgan A(n,n) kvadrat matritsaning birlik matritsa ekanligini tekshirish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){ int n, s=1; cout<<"n = "; cin>>n; int a[n][n]; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) cin>>a[i][j];
for(int i=1; i<=n; cout<cout<for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if (((i==j)&&(a[i][j]!=1)) || ((i!=j)&&(a[i][j]!=0))){
s=0; break;
}
if (s) cout<<"Birlik matritsa "; else cout<<"Birlik matritsa emas ";
}
4-misol. Berilgan A(n,m) matritsaning toq elementlari sonini aniqlash dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){
int n, m, k=0; cout<<"n = "; cin>>n; cout<<"m = "; cin>>m; int a[n][m]; for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++) cin>>a[i][j];
for(int i=1; i<=n; cout<cout<for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) if (a[i][j]%2==1) k++; cout<<"Toq elementlari soni: "<}
5-misol. Berilgan A(n,m) matritsaning har bir satr elementlari o‘rta arifmetigini topish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include using namespace std; int main(){ int n, m, s=0; cout<<"n = "; cin>>n; cout<<"m = "; cin>>m; int a[n][m]; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) cin>>a[i][j];
for(int i=1; i<=n; cout<for(int j=1; j<=m; j++)
cout<for(int i=1; i<=n; s=0, i++){ for(int j=1; j<=m; j++)
s+=a[i][j];
cout<<"s"<}
}
Foydalanilgan adabiyotlar:
www.freepik.com
Paul A. Carter. PC Assembly Language. 2006. Oklahoma.
The NASMDevelopment Team. NASM — The Netwide Assembler. 2008.
Randall Hyde. The Art of Assembly Language. No Starch Press, 2010. California.
|
| |