1. Ko'rsatkichlar va massivlar o'rtasidagi munosabat Ko’rsatgichga ko’rsatgich Ko’p o’lchovli massivlar



Yüklə 26,08 Kb.
səhifə3/6
tarix09.10.2023
ölçüsü26,08 Kb.
#153353
1   2   3   4   5   6
5-mavzu Massivlar va vektorlar

Ko’p o’lchovli massivlar
  • Ko’p o’chovli massivlarni e’lon qilish:
  • Тip Massiv_nomi [1-o’lcham][2-o’lcham]…[N-o’lcham] ;
  • Oxirgi indeks eng tez o'zgaradi, ya’ni ko'p o'lchovli massivlar kompyuter xotirasiga birin-ketin ketma-ket joylashtiriladi.
  • Ko'p o'lchovli massivlar bilan ishlash xususiyatlarini ikki o'lchovli massiv misolida ko'rib chiqamiz.
  • Ikki o'lchovli massiv quyidagicha e'lon qilingan bo’lsin:
  • int а[3][4];
  • a[3][4] ikki o‘lchovli massivi kompilyator tomonidan uchta ko‘rsatkichli massiv sifatida ko‘riladi, ularning har biri 4 o‘lchamli bir o‘lchovli massivning boshiga o‘rnatiladi.
    • a massivning xotirada joylashuv sxemasi:
    • Ko’rsatgichlar
    • а [0]
    • а[0][0]
    • а[0][1]
    • а[0][2]
    • а[0][3]
    • а [1]
    • а[1][0]
    • а[1][1]
    • а[1][2]
    • а[1][3]
    • а [2]
    • а[2][0]
    • а[2][1]
    • а[2][2]
    • а[2][3]
    • Ushbu holatda, a[1] ko'rsatkichi a[0] + 4*sizeof (int) ga teng adresga ega, ya'ni keyingi satrning har bir birinchi elementi oldingi qatorning oxirgi elementidan keyin keladi.
    • Qiymatlar
    • Indekslash amalidan foydalanib massiv a[i][j] elementiga murojaat qilish *(*(a + i) + j) adresli arifmetikasi qo’llanilgan ekvivalent ifodaga mos keladi.
    • Xuddi shunday, o'lchamlarning ixtiyoriy miqdoriga ega ko'rsatkichlar va massivlar orasidagi mosliklarni o'rnatish mumkin.
    • ↓ a[0]
    • ↓ a[1]
    • ↓ a[2]
    • a[0][0]
    • a[0][3]
    • a[1][0]
    • a[1][3]
    • a[2][0]
    • a[2][3]
    • a massiv xotirada ketma-ket ajratilgan sohalarda joylashadi:
    • Dinamik massivlar
    • Dinamik massivlar bilan ishlash statik massivlardagi kabi dasturni qayta ishlash bosqichida amalga oshirilmaydigan, balki dastur talabiga binoan bajarilishi davomida ularni yaratish va o‘chirish amallari bilan bog'liq;
    • Dinamik massivlarni e'lon qilish uchun ko'rsatkichlar ishlatiladi.
    • C tilida xotirani bo‘shatish va ajratish kutubxona funksiyalari (calloc, malloc, free) yordamida amalga oshiriladi.
    • C++ tilida xotirani bo‘shatish va ajratish uchun oddiyroq mexanizm - new va delete amallari qo'llaniladi.
    • Bu amallarni sodda misollarda ko’rib chiqamiz:
    • 1) type *p = new type (Qiymat);
    • sizeof(type) hajmli xotira sohasini unga ko'rsatgichni o'rnatish va ushbu sohaga ko’rsatilgan Qiymatni yozish orqali ajratish; misol uchun:
    • int *p = new int(5); mos keladi int *p = new int;
    • *p = 5;
    • Ajratilgan xotirani bo’shatish
    • delete p;
    • 2) type *p = new type [n];
    • n ta ketma-ket joylashadigan ob'ektlar uchun xotira ajratish, bunda ko'rsatgich n*sizeof(type) o'lchamdagi operativ xotira soha boshini qaytaradi; bu massiv yaratish uchun foydalaniladi;
    • Bu holatda barcha ajratilgan xotirani bo’shatish quyidagicha bo’ladi:
    • delete [ ] p;
    • new amal natijasi - belgilangan turdagi va miqdordagi ma'lumotlarni joylashtirish uchun ajratilgan xotira sohasining boshi adresini beradi; agarda xatolik yuzaga kelsa (masalan, xotira etarli bo'lmaganda), natija NULL bo'ladi.
    • Bundan tashqari, delete (uchirish) amali ko'rsatilgan adresda joylashgan qiymatlarni yo'q qilmaydi, lekin kompilyatorga ilgari band xotiradan foydalanishga imkon beradi. Ammo bu qiymatlardan foydalanishga urinish kutilmagan natijalarga olib kelishi mumkin.
    • Massiv band qilgan xotirani bo'shatishda delete amalidagi kvadrat qavslar majburiy hisoblanadi. Ularning bo’lmasligi ham kutilmagan natijalarga olib kelishi mumkin.
    • Bir o’lchovli dinamik massivlarni yaratish
    • n o'lchamli x haqiqiy bir o’lchovli dinamik massiv bilan ishlash va uni joylashtirishda yetarli xotira mavjudligini tekshirish uchun zarur bo'lgan dasturiy kodni qismi:
    • double *x; - Massiv uchun ko’rsatgichni e’lon qilish
    • int i, n;
    • cout << " Size = : "; - Dastur bajarilish davomida
    • cin >> n; o’lchamini aniqlash
    • x = new double [n] ; - Massivni yaratish
    • if (x == NULL) { - Xatolikka tekshirish
    • cout << " Error ! “ << endl; (Xato)
    • return;
    • }
    • - Massivni qayta ishlash
    • delete [ ]x; - Xotirani bo’shatish
    • Ikki o’lchovli dinamik massivni yaratish
    • Ikki o’lchovli dinamik massivni yaratish ikki bosqichda amalga oshiriladi:
    • 1-bosqich: ko'rsatkichlar uchun ketma-ket joylashadigan (satrlar soniga ko’ra) xotira ajratiladi;
    • 2-bosqich: har bir ko'rsatgichga elementlar uchun xotira sohasi (ustunlar soni bo'yicha) ajratilgan.
    • . . .
    • int **a, n, m, i, j; - ikki o’lchovli a massiv uchun
    • ko’rsatgichga ko’rsatgich e’loni
    • cout << " n, m : "; - Dastur bajarilish davomida nxm
    • massiv o’lchamini aniqlash
    • cin >> n >> m;
    • a = new int* [n]; - 1. n ta ko’rsatgich uchun xotira ajratish
    • for (i=0; i2. Har bir satrning m ta elementri
    • a[i] = new int [m]; uchun xotira ajratish
    • . . . - Massivni qayta ishlash
    • for ( i=0; i
    • delete []a[i]; dastlab, elementlar
    • delete []a; keyin esa ko’rsatgichlar uchiriladi
    • . . .
    • n = 3, m = 4 uchun a massivga xotiradan joy ajratish sxemasi:
    • 1) Satrga 3 ta ko’rsatgich uchun xotiradan joy ajratish, ya’ni ko’rsatgichlardan iborat bir o’lchovli massiv yaratiladi:
    • a
    • a[0]
    • a[1]
    • a[2]
    • a[0][0]
    • a[1][0]
    • a[2][0]
    • . . .
    • . . .
    • . . .
    • a[0][3]
    • a[1][3]
    • a[2][3]
    • 2) Satrning har bir ko'rsatkichi elementlar uchun ajratilgan xotira sohasi o'rnatiladi
    • Masala: dinamik ikki o’lchovli massiv yarating, uning minimal elementini hamda har bir satrning minimal elementlarini topish.
    • E’lon quyidagi ko’rinishda bo’ladi
    • int **а, n, m, i, j, va boshqalar …;
    • **a – dinamik ikki o’lchovli massivni yaratish uchun ko’rsatgichga ko’rsatgich, i, j – satr va ustunlarning joriy indekslari, n – satrlarning miqdori, m – ustunlarning miqdori (o’lchamlar klaviaturadan kiritiladi).
    • 1) Massiv elementlarini kiritish:
    • for (i = 0; i < n; i++)
    • for (j = 0; j < m; j++)
    • {
    • cout << " a[ " << i+1 << " ] [ " << j+1 << " ] = " ;
    • cin >> a[i][j];
    • }
    • 2) a massivni [-10,10] oraliqdagi tasodifiy sonlar bilan to’ldirish va ularni matritsa ko’rinishda ekranga chop etish
    • for (int i = 0; i < n; i++) {
    • for (int j = 0; j < m; j++) {
    • a[i][j] = rand() % (21 - 10 + 1) + 10;
    • cout << setw(5) << a[i][j] ;
    • }
    • cout << endl ;
    • }
    • 3) a massivning minimal elementini toppish (minimal elementning indekslari uchun int bo’limida i_min-satr, j_min-ustun qo’shamiz):
    • i_min = j_min = 0;
    • for (i = 0; i < n; i++)
    • for (j = 0; j < m; j++)
    • if ( a[i][j] < a[i_min][j_min] ) {
    • i_min = i;
    • j_min = j;
    • }
    • cout << " Min = " << a[i_min][j_min]
    • << " Row = " << i_min
    • << " Col = " << j_min << endl ;
    • 4) a massivning satrlardagi minimal elementini toppish (massivning minimal elementlari uchun e’lonlar bo’limiga int *min ko’rsatgichni qo’shamiz):
    • min = new int [n]; - Xotirani band qilish
    • for (i = 0; i < n; i++) {
    • min[i] = a[i][0];
    • for (j = 1; j < m; j++)
    • if ( a[i][j] < min [ i ] )
    • min[i] = a[i][j];
    • }

    Yüklə 26,08 Kb.

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




    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