24/05/2018, 16:49

Mảng đa chiều không cùng kích thước

Như chúng ta đã biết hình dạng của mảng đa chiều cùng kích thước có dạng hình chữ nhật thì hình dạng của mảng đa chiều có khích thước khác nhau không phải hình chữ nhật vì các chiều của chúng không điều nhau. Khi chúng ta tạo một mảng đa chiều kích ...

Như chúng ta đã biết hình dạng của mảng đa chiều cùng kích thước có dạng hình chữ nhật thì hình dạng của mảng đa chiều có khích thước khác nhau không phải hình chữ nhật vì các chiều của chúng không điều nhau.

Khi chúng ta tạo một mảng đa chiều kích thước khác nhau thì chúng ta khai báo số dòng trong mảng trước. Sau đó với mỗi dòng sẽ giữ một mảng, có kích thước bất kỳ. Những mảng này được khai báo riêng. Sau đó chúng ta khởi tạo giá trị các thành phần trong những mảng bên trong.

  • Cách khai báo

<kiểu dữ liệu> [][] tên mảng=new <kiểu dữ liệu>[kích thước hàng][] ;

hoặc

<kiểu dữ liệu> [][] tên mảng;

.................

tên mảng=new <kiểu dữ liệu>[kích thước hàng][] ;

Sau đó ta tiến hành cấp phát bộ nhớ cho các phần tử của mỗi hàng

tênmảng[chỉ số]=new <kiểu dữ liệu>[số phần tử của mỗi hàng]

Ví dụ:

int a[][]a;

a=new int[3][];

Tiếp đó ta đi cấp phát bộ nhớ cho các phần tử của mỗi hàng

a[0]=new int[6]; // Hàng thứ nhất có 6 phần tử

a[1]=new int[2]; // Hàng thứ nhất có 2 phần tử

a[2]=new int[5]; // Hàng thứ nhất có 5 phần tử

  • Truy nhập vào các phần tử của mảng

Để truy nhập vào các phần tử của mảng đa chiều có kích không bằng nhau ta có thể thực hiện theo nguyên tắc sau:

Tênmảng[chí số 1][chỉ số 2]

chí số 1 ∈ [0...Tênmảng.Length-1]

chí số 2 ∈ [0...Tênmảng[chí số 1].Length-1]

Ví dụ: Nhập vào n dãy số nguyên sau đó tìm giá trị lớn nhất của mỗi dãy lưu vào một mảng một chiều và sẵp xếp chúng theo thứ tự tăng dần.

--------------------------------------------------------------------------------------------

using System;

class VisDu

{

static int[][] a;

static void Nhap()

{

int i,j,n,m;

Console.Write("Ban muon nhap vao bao nhieu day so nguyen n=");

n = int.Parse(Console.ReadLine());

a = new int[n][];

Console.WriteLine("Ban hay nhap thong tin cho moi day so nguyen");

for (i = 0; i < a.Length; ++i)

{

Console.Write("Ban hay nhap so phan tu cho day thu {0} m=", i);

m = int.Parse(Console.ReadLine());

a[i] = new int[m];

Console.WriteLine("Nhap gia tri cho moi phan tu o day thu {0}", i);

for (j = 0; j < a[i].Length; j++)

{

Console.Write("a[{0}][{1}]=", i, j);

a[i][j] = int.Parse(Console.ReadLine());

}

}

}

static void Tim(out int[] kq)

{

int i, j, d=0,max;

kq = null;

for (i = 0; i < a.Length; ++i)

{

max = a[i][0];

for (j = 1; j < a[i].Length; ++j)

if (max < a[i][j]) max = a[i][j];

Array.Resize(ref kq, ++d);

kq[d - 1] = max;

}

}

static void Hien(int []x)

{

int i;

for (i = 0; i < x.Length; ++i)

Console.Write("{0} ", x[i]);

Console.WriteLine();

}

static void Main()

{

int[] kq;

Nhap();

Tim(out kq);

Array.Sort(kq);

Console.WriteLine("Cac phan tu lon nhat cua moi day da duoc sap xep la");

Hien(kq);

Console.ReadKey();

}

}

--------------------------------------------------------------------------------------------

0