CodeGym /Kurslar /C# SELF /İkiölçülü massivlər

İkiölçülü massivlər

C# SELF
Səviyyə, Dərs
Mövcuddur

1. Giriş

Təsəvvür elə ki, adi massiv elə uzun pizza qutusu kimidir, bütün dilimlər sırayla düzülüb — dadlıdır, amma bir az yeknəsəkdir.

İndi isə iş cədvəlini və ya şahmat taxtasını təsəvvür elə. Orda artıq hər şey sətirlər və sütunlar şəklində təşkil olunub — yəni cədvəl formasında. Bax, bu klassik ikiölçülü massiv məsələsidir.

Real həyatda ikiölçülü massivlər hər addımda qarşımıza çıxır:

  • İşçilərin maaş cədvəlləri (sətirlər — işçilər, sütunlar — aylar).
  • Ekrandakı şəkil (hər bir "hüceyrə" — pikselin rəngi, iki koordinatı var: X və Y).
  • Matris hesablamaları və məlumatların işlənməsi.
  • Şahmat taxtası və ya "X və 0" oyun sahəsi.

Bəzən ikiölçülü massivə matris deyirlər (bu ad riyaziyyatdan gəlib).

Proqramçı kimi sənə ikiölçülü massiv lazım ola biləcək çox yer var. Demək olar ki, istənilən stolüstü oyunun reallaşdırılması — hazır ikiölçülü massivdir: “Şahmat”, “Dama”, “X və 0”, “Dəniz döyüşü”:

İkiölçülü massivlər 2

“Şahmat” və ya “Dəniz döyüşü” oyun sahəsi elədir ki, ikiölçülü massivlər üçün əladır, burada hüceyrələrin koordinatları kimi sadəcə ədədlərdən istifadə edəcəksən. “Piyada e2 → e4” yox, “piyada (4,1) → (4,3)”. Proqramçı kimi sənin üçün belə daha rahat olacaq.

2. İkiölçülü massivlərin elan sintaksisi

Qorxulu görünür, amma ilk elanadək! Addım-addım baxaq.

Ümumi qayda

tip[,] massivinAdi;
İkiölçülü massiv elan etmək

Burada mötərizənin içindəki vergül , səhv deyil, yəni massiv ikiölçülüdür.

Nümunələr

int[,] matris;
double[,] qiymetCədvəli;
string[,] şahmatTaxtası;

Massiv yaratmaq

Ölçüləri veririk: sətir və sütun sayı.

matris = new int[3, 4]; // 3 sətir, 4 sütun

Bu 3x4-lük cədvəldir: Excel-də 3 sətir və 4 sütunlu cədvəl kimi təsəvvür et.

Dərhal dəyişəni elan edib ikiölçülü massiv yarada bilərsən:

int[,] matris = new int[3, 4];

Dərhal dəyərlərlə də başlaya bilərsən (birölçülü massivdəki kimi):

int[,] nümunə = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
// Cədvəl 3 sətir, 3 sütun
İkiölçülü massivə dəyərlərlə başlanğıc vermək

Vacibdir: Bu cür başlanğıcda BÜTÜN sətirlər eyni uzunluqda olmalıdır. Birinci sətirdə 3 element, ikinci sətirdə 2 element ola bilməz.

Vizual sxem

┌─────┬─────┬─────┬─────┐
│  0  │  1  │  2  │  3  │  ← sütunlar (Columns)
├─────┼─────┼─────┼─────┤
│ 0,0 │0,1  │0,2  │0,3  │  ← sətir 0 (Row 0)
├─────┼─────┼─────┼─────┤
│ 1,0 │1,1  │1,2  │1,3  │  ← sətir 1 (Row 1)
├─────┼─────┼─────┼─────┤
│ 2,0 │2,1  │2,2  │2,3  │  ← sətir 2 (Row 2)
└─────┴─────┴─────┴─────┘

Hər element [sətir, sütun] indeks cütü ilə verilir.

3. İndeksləmə və elementlərə çıxış

İkiölçülü massivdə elementə çıxış üçün iki indeks göstərilir:

  • Birinci — sətirin nömrəsi
  • İkinci — sütunun nömrəsi

matris[1, 2] = 99;  // İkinci sətir (indeks 1), üçüncü sütun (indeks 2)
İkiölçülü massiv elementinə dəyər vermək

Şahmata öyrəşənlər üçün xatırladım: indeksləmə sıfırdan başlayır. Yəni, birinci element [0, 0]-dır.

Yazmaq və oxumaq

int[,] data = new int[5, 2];
data[1, 1] = 5;         // yazmaq
int value = data[1, 1]; // oxumaq

Bax, yaddaşda belə görünəcək:

İkiölçülü massivlər

4. İkiölçülü massiv doldurmaq

Gəlin elə bir kod yazaq ki, matrisə 1-dən 12-yə qədər ardıcıl ədədlər yazılsın, necə işlədiyini başa düşəsən.

int[,] matris = new int[3, 4];
int value = 1;

for (int row = 0; row < 3; row++)
{
    for (int col = 0; col < 4; col++)
    {
        matris[row, col] = value;
        value++;
    }
}
İkiölçülü massivə ardıcıl ədədlər yazmaq

Burada xarici dövr sətirləri, daxili dövr isə sütunları keçir.

İllüstrasiya:

İcra olunduqdan sonra:
┌────┬────┬────┬────┐
│ 1  │ 2  │ 3  │ 4  │
├────┼────┼────┼────┤
│ 5  │ 6  │ 7  │ 8  │
├────┼────┼────┼────┤
│ 9  │10  │11  │12  │
└────┴────┴────┴────┘

5. Ölçülər: sətir və sütun sayını öyrənmək

Çox vaxt massiv ölçülərini "dinamik" öyrənmək lazımdır. C#-da bunun üçün rahat GetLength() metodu var.

int[,] matris = new int[3, 4];

int sətirlər = matris.GetLength(0);    // sətir sayı (birinci ölçü) - 3
int sütunlar = matris.GetLength(1); // sütun sayı (ikinci ölçü) - 4

Console.WriteLine($"Sətir: {sətirlər}, Sütun: {sütunlar}");
Diqqət:

Length ilə qarışdırma — ikiölçülü massivdə bu, bütün elementlərin ümumi sayıdır (sətir × sütun).

6. İkiölçülü massiv ekrana çıxarmaq

İkiölçülü cədvəli ekrana çıxarmaq üçün adətən iki dövr istifadə olunur — elə bil konsolda labirint çəkirsən. Nümunə:

for (int row = 0; row < matris.GetLength(0); row++)
{
    for (int col = 0; col < matris.GetLength(1); col++)
    {
        Console.Write(matris[row, col] + "\t"); // "\t" — gözəllik üçün tabulyasiya
    }
    Console.WriteLine(); // yeni sətrə keçmək
}

Çıxış nümunəsi:

1	2	3	4	
5	6	7	8	
9	10	11	12	

Bu arada, sən artıq cəmi bir neçə sətr kodla cədvəl "çəkə" bilirsən!

7. Çoxölçülü massivlər

Massivlər haqqında daha bir maraqlı fakt: ikiölçülü massiv mümkündürsə, bəs üçölçülü də olar?

Bəli, istənilən ölçüdə massiv yaratmaq olar. Belə massivlərə çoxölçülü deyirlər.

Çoxölçülü massivləri necə elan etmək olar

Sadəcə lazım olan ölçülərin sayını vergüllə ayırırsan:

int[,,,] matris = new int[2, 3, 4, 5];
Dördölçülü massiv elan etmək

Burada dördölçülü massivimiz var:

  • Birinci koordinatda 2 element,
  • İkinci — 3,
  • Üçüncü — 4,
  • Dördüncü — 5.

Yaddaşda belə massiv bir böyük “kub” kimi ardıcıl saxlanılır.

Elementlərə necə çıxmaq olar

Elementə çıxış üçün bütün indeksləri göstərirsən:

matris[0, 1, 2, 3] = 42;
int value = matris[1, 2, 0, 4];
  • İndekslər həmişə C#-da sıfırdan başlayır.
  • Belə massivdə cəmi 2 × 3 × 4 × 5 = 120 element olacaq.

Çoxölçülü massivlərin praktiki nümunələri

  • 2D — cədvəllər, şahmat taxtaları, şəkillər.
  • 3D — kompüter qrafikasında “kubiklər”, elmi hesablamalar üçün məlumatlar (məsələn, məkan və zamanda müxtəlif nöqtələrdə temperatur).
  • 4D və yuxarı — nadir hallarda istifadə olunur, amma qabaqcıl riyaziyyatda, simulyasiyalarda, machine learning-də və s. rast gəlinir.
2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
İkiölçülü massivinin təşkili və elementlərinin ekrana çıxarılması
İkiölçülü massivinin təşkili və elementlərinin ekrana çıxarılması
2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
İkiölçülü massivdə sətirlərin elementlərinin cəmini hesablamaq
İkiölçülü massivdə sətirlərin elementlərinin cəmini hesablamaq
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION