3-ma'ruza ma'lumotlar massivi. Dinamik ma'lumotlar massivi


new operatori massiv yaratish uchun ishlatiladi. new



Yüklə 43,34 Kb.
səhifə2/2
tarix08.06.2023
ölçüsü43,34 Kb.
#126634
1   2
4.uz

new operatori massiv yaratish uchun ishlatiladi. new operatordan keyin yaratilgan massivning elementlari turiga mos keladigan tur identifikatori keladi va massivning o‘lchami tur identifikatoridan keyin kvadrat qavs ichida ko‘rsatiladi. Massiv yaratish buyrug'i uchun quyidagi andozadan foydalaniladi:

new tur [hajm]


Misol uchun, agar biz 12 ta elementdan iborat bir o'lchovli butun son massivni yaratmoqchi bo'lsak, unda bunday massivni yaratish buyrug'i new int [12] ko’rinishida bo’ladi. 10 ta belgi turidagi elementlardan iborat massiv yaratish uchun new char [10] buyrug'idan foydalaniladi. Massiv o'zgaruvchisi massivning o'zi bilan qanday bog'liqligi hqida savol ochiqligicha qolmoqda. Javob juda oddiy: massiv o'zgaruvchisi massivga ishora qiladi. Massiv o'zgaruvchisining qiymati xotiradagi massivning manzili bo'lishi mumkin.


Massiv yaratish buyrug'i nafaqat massiv hosil qiladi, balki natijaga ham ega bo'lishini ham hisobga olish kerak. Bu yaratilgan massivning manzili. Va massivning manzili, yuqorida ko’rib o’tilganidek, massiv o'zgaruvchisining qiymati bo'lishi mumkin. Asosiysi, massiv o'zgaruvchisining turi massivdagi elementlarning turiga mos keladi. Agar yuqorida aytilganlarning barchasini umumlashtirsak, massivni yaratishning umumiy sxemasi quyidagi buyruqlar bilan amalga oshiriladi:

tur [] o'zgaruvchi;


o'zgaruvchi=yangi turdagi[o'lcham];

Ya'ni, massiv yaratish vazifasi ikki bosqichdan iborat:



  • massiv o'zgaruvchilari deklaratsiyasi;

  • massiv yaratish va massiv o‘zgaruvchisiga massivga havolani belgilash.

Ushbu ikki qadam birlashtirilishi va quyidagi buyruqni ishlatishi mumkin:

type[] o'zgaruvchi=new tur [o'lcham];


Bir o'lchovli massivni amalga oshirish sxemasi 4.1-rasmda ko'rsatilgan.


Masalan, int [ ] nums=new int [12] buyrug'i 12 ta elementdan iborat butun sonli massivni yaratadi, nums massiv o'zgaruvchisini e'lon qiladi va yaratilgan massivga ushbu o'zgaruvchiga havola yozadi. char [] symbs=new char [10] buyrugʻi 10 ta belgi elementidan iborat massiv hosil qiladi, symbs massiv oʻzgaruvchisini eʼlon qiladi va massivga havolani oʻzgaruvchiga yozadi.





turi [] o'zgaruvchi = yangi tur [o'lcham]
4.1-rasm. Bir o'lchovli massivning sxemasini amalga oshirish

Massiv yaratilgandan so'ng, qiymatlarni belgilash va qiymatlarni o'qish uchun uning elementlariga kirish mumkin. Bu juda sodda tarzda amalga oshiriladi: massiv nomidan so'ng (massiv nomi ushbu massivga tegishli massiv o'zgaruvchisi bilan aniqlanadi), element indeksi kvadrat qavs ichida ko'rsatiladi. Elementni indekslash har doim noldan boshlanishini yodda tutish kerak. Shunday qilib, birinchi element indeksi 0, ikkinchi element indeksi 1 va hokazo. Massivdagi oxirgi elementning indeksi massiv o'lchamidan 1 ga kichik bo’ladi. Massiv hajmini esa Length xossasi yordamida aniqlash mumkin. Misol uchun, agar biz bir o'lchovli nums massivi bilan ishlayotgan bo'lsak, u holda nums qiymati. Uzunlik ifodasi nums massividagi elementlarning soni bo’ladi. nums massividagi birinchi elementga havola - nums[0], ikkinchi elementga havola - nums[1].


Massivni yaratish va ishlatishga misol sifatida 4.1 listingdagi dasturni ko'rib chiqiamiz. U erda butun sonlar massivi yaratiladi va keyin bu massiv 3 ga bo'linganda 1 qoldig'iga ega bo'lgan raqamlar bilan to'ldiriladi (ya'ni, biz 1, 4, 7,10,13,16 raqamlarini nazarda tutayapmiz).

4.1-listing. Bir o'lchovli sonli massivni yaratish


using System;


class IntArrayDemo


{
static void Main()
{
// 12 ta raqamdan iborat massiv yaratish:
int[] nums = new int[12];
// Massiv elementlarini takrorlash:
for (int k = 0; k < nums.Length; k++)
{
// Massiv elementiga qiymat berish:
nums[k] = 3 * k + 1;
// Massiv elementining qiymatini ko'rsatish:
Console.Write("| " + nums[k] + " ");
}
Console.WriteLine("|");
Console.ReadKey();
}
}

Dasturni bajarish natijasi (4.1 listingdan)


| 1 | 4 | 7 | 10 | 13 | 16 | 19 | 22 | 25 | 28 | 31 | 34 |


Dastur juda oddiy. Main metodining tanasida int [] nums=new int [12] buyrug'i 12 ta butun elementdan iborat massiv hosil qiladi. Massivga havola nums massiv o'zgaruvchisiga yoziladi. Massiv yaratilgandan so'ng uning elementlari mavjud bo'ladi, lekin ularga qiymatlar berilishi kerak. Buning uchun biz sikl operatorini ishga tushiramiz, unda k indeks o'zgaruvchisi boshlang'ich qiymat sifatida 0 ni oladi. Bu massivdagi birinchi (boshlang'ich) elementning indeks qiymati.


Massiv yaratish, massivni to‘ldirish va uning elementlarining qiymatlarini ko‘rsatish massivlarda bajarilishi mumkin bo‘lgan amallarning bir nechtasi xolos. Massivlar mavzusi ancha kengroq. Ushbu bo'limda biz massivlar bilan ishlash usullarini ko'rsatadigan misollarni ko'rib chiqamiz. Avval, 4.2 Listingdagi kodni tahlil qilaylik.

4.2-listing. Massivlarni nusxalash va tayinlash


using System;


class CopyArrayDemo
{
static void Main()
{
// Butun sonlar massivi:
int[] A = { 1, 3, 5, 7, 9 };

// Massiv o'zgaruvchilari:


int[] B, C;

// Massivni o’zlashtirish:


B = A;

// Yangi massiv yaratish:


C = new int[A.Length];

// Massivni element bo’yicha nusxalash:


for (int k = 0; k < A.Length; k++)
{
C[k] = A[k];
}
// A massivdagi birinchi elementning qiymatini
//o'zgartirish:
A[0] = 0;

// B massivda


// oxirgi elementning qiymatini o'zgartirish:
B[B.Length - 1] = 0;

// Konsol oynasidagi xabar:


Console.WriteLine("A:\tB:\tC:");

// Massivlar tarkibini ko'rsatish:


for (int k = 0; k < A.Length; k++)
{
// Massivlar elementlari qiymatlarini ko'rsatish:
Console.WriteLine("{0}\t{1}\t{2}", A[k], B[k], C[k]);
}
Console.ReadKey();
}
}
Dasturni bajarish natijasi (4.2-listingdan)

A: B: C:


3 3 3
5 5 5
7 7 7
0 0 9
Dasturda int [] A={1,3,5,7,9} buyrug'i 5 ta elementdan iborat A butun son massivini yaratadi va ishga tushiradi (qiymatlar 1 dan 9 gacha bo'lgan toq sonlar). Lekin int [ ] B, C buyrug'i ikkita massiv o'zgaruvchisini e'lon qiladi (lekin massivlarning o'zi yaratilmagan!). B va C o'zgaruvchilari e'lon qilish usuliga ko'ra (tip identifikatori int [ ] ifodasini belgilaydi). Bir o'lchovli butun sonli massivlarga murojaat qilishi mumkin. B o'zgaruvchining qiymati B=A buyrug'i bilan beriladi. Ammo bu holda A massivning nusxasini ko’chirilmaydi. B=A buyrug'ining natijasini tushunish uchun massiv o'zgaruvchisining qiymati aslida mos yozuvlar yoki massiv manzili ekanligini hisobga olish zarur. Shuning uchun A o'zgaruvchining qiymati o'zgaruvchi murojaat qiladigan massivning manzilidir. Bu manzil B o‘zgaruvchisiga ko‘chiriladi. Natijada B o‘zgaruvchisi bir xil massivga murojaat qiladi.
Diqqat: B=A buyrug'i bajarilganda yangi massiv yaratilmaydi. A o'zgaruvchisi va B o'zgaruvchisi jismoniy jihatdan bir xil massivga murojaat qiladi.
Aks holda, biz C o'zgaruvchisi bilan ishlaymiz. Buyruq C=new int [A. Length] yangi bo'sh massiv yaratiladi va bu massivga havola C o'zgaruvchisiga yoziladi. Yaratilgan massivning o'lchami A uzunlik ifodasi bilan aniqlanadi va shuning uchun u A massiv bilan bir xil bo'ladi. Keyin, sikl operatoridan foydalanib, A massiv tarkibidan C massivga elementma-element nusxa ko‘chiriladi (C[k ] = A [k] buyrug‘i sikl operatori tanasida). Natijada, biz bu ikki A va C bir xil massivlarni hosil qilamiz, lekin aslida ular hali ham ikkita alohida massivdir (garchi ular bir xil element qiymatlariga ega bo’lsa ham).
A o'zgaruvchisi (va B o'zgaruvchisi) tomonidan havola qilingan massivda A [0]=0 buyrug'i bajarilganda, birinchi elementning qiymati 1 dan 0 ga o'zgaradi. B buyrug'i [B. Uzunlik-1]=0 massivdagi B oʻzgaruvchisi (va oʻzgaruvchisi) tomonidan havola qilingan massivdagi oxirgi elementning qiymati 9 dan 0 ga oʻzgaradi. Ammo C massivida barcha elementlar o’z qiymatlarida qoladi toki elementma-element nusxalash boshlanmagunicha. Xususan, birinchi element 1 qiymati bilan, oxirgi element esa 9 qiymati bilan qoldi. Bu dasturning bajarilishi natijasini tasdiqlaydi.
Ikki o'lchovli massivda massivdagi elementni yagona aniqlash uchun ikkita indeks ko'rsatilishi kerak. Ikki o'lchovli massiv qulay tarzda jadval sifatida taqdim etiladi. Birinchi indeks element joylashgan qatorni, ikkinchi indeks esa ustunni belgilaydi. Ikki o'lchovli massiv deyarli bir o'lchovli kabi yaratiladi: massiv o'zgaruvchisi e'lon qilinadi, massivning o'zi yaratiladi va massiv o'zgaruvchisiga ushbu massivga havola yoziladi. Ikki o'lchovli massivning o'zgaruvchisini e'lon qilishda tip identifikatoridan keyin [,] ichida vergul qo'yilgan kvadrat qavslar ko'rsatiladi. Misol uchun, agar biz ikki o'lchovli butun massiv uchun o'zgaruvchini e'lon qilmoqchi bo'lsak, unda mos keladigan buyruq int [,] nums kabi ko'rinishi mumkin.
Ikki o'lchovli massivni yaratishda yangi ko'rsatma qo'llaniladi va undan keyin massiv elementlari uchun tip identifikatori ko'rsatiladi va har bir indeks uchun massiv hajmini aniqlaydigan kvadrat qavs ichida vergul bilan ajratilgan ikkita butun son (raqam) ikki o'lchovli massivdagi qatorlar va ustunlar). Masalan, yangi int [3,5] ko'rsatmasi yordamida 3 qator va 5 ustundan iborat ikki o'lchovli butun sonli massiv yaratishingiz mumkin. Bir o'lchovli massivda bo'lgani kabi, ikki o'lchovli massivni yaratuvchi ko'rsatmaning qiymati ham ushbu massivga havola hisoblanadi. Demak, agar nums o'zgaruvchisi avval int [,] nums buyrug'i bilan e'lon qilingan bo'lsa, u holda nums=new int [3,5] buyrug'i qonuniy bo'ladi. Massiv o'zgaruvchisini e'lon qilish va massiv yaratish buyruqlari birlashtirilishi mumkin: int [,] nums=new int [3,5].

Quyida ikki oʻlchovli massiv uchun oʻzgaruvchini eʼlon qilish va ikki oʻlchovli massiv yaratish uchun shablon keltirilgan:


tip[,] o'zgaruvchi;


o'zgaruvchi=yangi tip [o'lcham, o'lcham];


Bundan tashqari, ushbu shablondan foydalanishingiz mumkin:


type[,] o'zgaruvchi=yangi tip[o'lcham, o'lcham];


Massiv elementiga kirish uchun massiv nomini va kvadrat qavs ichida vergul bilan ajratilgan holda ushbu elementning indekslarini belgilang. Har bir indeks uchun indeksatsiya noldan boshlanadi. Ya'ni nums [0,0] ko'rsatmasi birinchi qatorda va birinchi ustunda (0 indeksli satr va 0 indeksli ustunda) joylashgan nums massivi elementiga kirishni bildiradi. Nums [1,2] ifodasi 1-qator indeksida (ikkinchi qator) va 2-ustun indeksida (uchinchi ustun) joylashgan elementga ishora qiladi.


Ikki o‘lchovli massiv uchun Length xossasi massivdagi elementlarning umumiy sonini qaytaradi. Ya'ni, 3 qator va 5 ustundan iborat nums massivi uchun raqamlarning qiymati. Uzunlik ifodasi 15 raqami (3 marta 5). Massiv hajmini qandaydir indeks (ya’ni massivdagi qatorlar yoki ustunlar soni) bo‘yicha bilish uchun GetLength() usulidan foydalaning. Usul massiv o'zgaruvchisidan chaqiriladi va usulning argumenti massivning o'lchami qaytariladigan indeksni belgilaydigan butun sondir.
Masalan, agar nums massivida 3 ta satr va 5 ta ustun bo'lsa, u holda sonlar ifodasining qiymati. GetLength (0) - 3 raqami (birinchi indeksdagi o'lcham - qatorlar soni), ifodaning qiymati esa sonlar. GetLength(1) - bu 5 raqami (o'lcham, lekin ustunlarning ikkinchi indeksi soni).
Ro'yxat 4.3 ikki o'lchovli massivni qanday yaratishni ko'rsatadigan misolni ko'rsatadi: butun sonli massiv yaratiladi va satr satr natural sonlar bilan to'ldiriladi.

Listing 4.3. Ikki o'lchovli massiv


using System;
class TwoDimArrayDemol
{
static void Main()
{
// Massivdagi satr va ustunlar soni:
int rows = 3, cols = 5;

// Ikki o'lchovli massiv yarating:


int[,] nums = new int[rows, cols];

// Massivdagi birinchi elementning qiymati:


int value = 1;

//Massivni to'ldiring va ko'rsating.


// Massivdagi satrlar bo'ylab takrorlang:
for (int i = 0; i < nums.GetLength(0); i++)
{
// Bir qator ustunlar ustida takrorlash:
for (int j = 0; j < nums.GetLength(1); j++)
{
// Massiv elementiga qiymat berish:
nums[i, j] = value;

// Bu keyingi elementning qiymati bo'ladi:


value++;

// Elementni qatorda ko'rsatish:


Console.Write(nums[i, j] + "\t");
}
// Yangi qatorga o'tish:
Console.WriteLine();
}
Console.ReadKey();
}
}

Dasturni bajarish natijasi (4.3 listingdan)


1 2 3 4 5


6 7 8 9 10
o'n bir 12 13 14 15

Dasturda ikki o'lchovli massivdagi satrlar va ustunlar soni satrlar va ustunlar (mos ravishda 3 va 5 qiymatlari) butun o'zgaruvchilari orqali belgilanadi.


Ikki o'lchovli massiv int [ , ] nums=new int [rows, cols] buyrug'i bilan yaratiladi. O'rnatilgan tsikl bayonotlari massivni to'ldirish va uning elementlarining qiymatlarini ko'rsatish uchun ishlatiladi. Tashqi tsikl bayonotida indeks o'zgaruvchisi i ikki o'lchovli massivning qatorlari bo'ylab takrorlanadi. O'zgaruvchining boshlang'ich qiymati 0 ga teng, yuqori chegara esa nums .GetLength(0) ifodasining qiymati bilan aniqlanadi (nums massividagi qatorlar soni - i bu qiymatdan qat'iy kam). Ichki tsikl bayonotida j o'zgaruvchisi ikki o'lchovli massivning ustunlari bo'ylab aylanadi. O'zgaruvchining boshlang'ich qiymati 0 ga teng va har bir tsikl uchun o'zgaruvchi bittaga oshiriladi. O'zgaruvchining qiymati nums.GetLength(1) (nums massividagi ustunlar soni) ifoda qiymatidan qat'iy kichikroq bo'lsa, tsikl operatori bajariladi. i va j indekslarining berilgan qiymatlari bilan nums[i, j]=value mos massiv elementiga qiymat beriladi. Qiymat o'zgaruvchisining boshlang'ich qiymati 1 ga teng, shuning uchun massivdagi birinchi element (ikki nol indeksli element - birinchi ustunning birinchi qatoridagi element) 1 ga o'rnatiladi. value++ buyrug'i bajarilgandan so'ng, qiymat o'zgaruvchisining qiymati bittaga oshiriladi. Keyingi siklda bu yangi qiymat keyingi elementga tayinlanadi.
Elementga qiymat berilgandan so'ng, Console.Write (nums [i, j] + "\t") buyrug'i uni konsol oynasida ko'rsatadi. Massivdagi bir qatordagi elementlar konsol oynasida bir qatorda paydo bo'ladi. Yorliqlar elementlarni chiziqqa joylashtirish uchun ishlatiladi.
Tashqi sikl operatorining tanasi ichki sikl operatori va Console.WriteLine() buyrug'idan iborat. Ichki tsikl bayonoti massiv qatorlarini to'ldirish va konsol oynasida elementlarning qiymatlarini ko'rsatish uchun kerak. Ichki tsikl bayonoti chiqqanda Console.WriteLine() buyrug'i yangi qatorga o'tadi. Bu tashqi sikl operatorining keyingi siklini yakunlaydi. Tashqi sikl operatorining keyingi siklida yana ichki sikl operatori, keyin esa Console.WriteLine() buyrug‘i va ikki o‘lchovli massivning barcha satrlari takrorlanmaguncha bajariladi.
Bir o'lchovli massiv kabi, ikki o'lchovli massivni yaratishda ishga tushirish mumkin. Bunday holda, massiv o'zgaruvchisiga ikki o'lchovli massivni ishga tushiradigan qiymatlar ro'yxati tayinlanadi. Qadriyatlar ro'yxati jingalak qavslar ichiga olingan. Uning elementlari ichki ro'yxatlardir. Har bir ichki ro'yxat jingalak qavslar to'plami bilan ajratilgan. Ichki ro'yxatlarda ko'rsatilgan qiymatlar ikki o'lchovli massivning qatorlarini belgilaydi. Masalan, int [,] nums= {{1,2,3}, {4,5,6}} buyrug'i ikki qator va uchta ustundan iborat butun ikki o'lchovli massivni yaratadi. Birinchi qatordagi elementlar 1, 2 va 3 qiymatlarini, ikkinchi qatordagi elementlar esa 4, 5 va 6 qiymatlarini oladi. Agar siz int [, ] buyrug'idan foydalansangiz nums= { {1,2}, {3,4}, {5 , 6} }, keyin biz uchta qator va ikkita ustunli massivni olamiz (birinchi qatorda 1 va 2 qiymatli elementlar mavjud,
Yüklə 43,34 Kb.

Dostları ilə paylaş:
1   2




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