Tải bản đầy đủ (.pdf) (38 trang)

MẢNG 2 CHIỀU (2D Array) Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học TP.HCM (HUFLIT)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.21 MB, 38 trang )

Click to edit Master subtitle style

MẢNG 2 CHIỀU
(2D Array)
Khoa Công nghệ thông tin
Trường Đại học Ngoại ngữ - Tin học TP.HCM (HUFLIT)

1


NỘI DUNG
Khái niệm
Khai báo
Truy xuất dữ liệu kiểu mảng 2 chiều
Nhập, xuất mảng 2 chiều
Bài tập thực hành

2


KHÁI NIỆM MẢNG 2 CHIỀU

3


Khái niệm
C# hỗ trợ các kiểu mảng sau:
Mảng 1 chiều (single-dimensional array)
Mảng nhiều chiều (multi-dimensional array)
Mảng răng cưa (jagged array)


4


Khái niệm
Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi
phần tử của nó là một mảng khác.
Mảng có từ 2 chiều trở lên được gọi chung là
mảng nhiều chiều.
Mảng nhiều chiều được dùng để lưu các dữ
liệu dạng bảng, ma trận trong chương trình.

5


Khái niệm
Ma trận
0

1

… m-1

0

0

n-1

0
An






An,m

… n-1

n-1

Ma trận vuông
6


Khái niệm
Ma trận vng
0

… n-1

0

0

… n-1

0





n-1

n-1

n-1

dịng = cột

dịng > cột

dịng < cột

0

0

0

… n-1

0

… n-1

0

n-1
dòng + cột = n-1




n-1

… n-1

0





An

… n-1

0



An

0

n-1
dòng + cột > n-1

dòng + cột < n-1
7



KHAI BÁO MẢNG 2 CHIỀU

8


Khai báo (System.Array)
Kiểu mảng nhiều chiều:

<kiểu cơ sở>[,] <tên mảng>;

int[,] a;

// mảng 2 chiều

Kiểu mảng răng cưa:

<kiểu cơ sở>[][] <tên mảng>;

int[][] a;

// mảng răng cưa 2 chiều

9


Khai báo (System.Array)
Ví dụ: Khai báo mảng 2 chiều a có 3 dịng, 5 cột
<kiểu cơ sở>[,] <tên mảng>;


<kiểu cơ sở>[][] <tên mảng>;

Mỗi dịng có thể có
số lượng phần tử
khác nhau không?
int[][] a;
a = new int[3][];
a[0] = new int[5];
a[1] = new int[5];
a[2] = new int[5];

int[,] b;
b = new int[3,5];

10


Khai báo (System.Array)

int[][] a;
a = new int[5][];
a[0] = new int[6];
a[1] = new int[5];
a[2] = new int[2];
a[3] = new int[3];
a[4] = new int[7];
11



Khai báo (System.Array)
Khởi tạo giá trị:

1

5

9

7

5

2

7

3

8

4

8

4

3

7


5

int[][] a = new int[3][] {
new int[5]{1,5,9,7,5},
new int[5]{2,7,3,8,4},
new int[5]{8,4,3,7,5}};
int[,] b = new int[3,5]{
{1,5,9,2,3},
{2,7,3,6,4},
{8,4,3,7,9}};
12


TRUY XUẤT DỮ LIỆU
KIỂU MẢNG 2 CHIỀU

13


Truy xuất phần tử
Thông qua chỉ số (index) tương tự như mảng 1
chiều:
Kiểu mảng nhiều chiều: a[2,3];
Kiểu mảng răng cưa: a[2][3];

Lưu ý:
Index phải là số nguyên dương.
Index phải nằm trong phạm vi kích thước mảng đã
được khai báo, nếu khơng .NET sẽ báo lỗi

IndexOutOfRangeException

14


NHẬP, XUẤT MẢNG 2 CHIỀU

15


Nhập mảng 2 chiều
Yêu cầu: Nhập vào từ bàn phím một mảng a
gồm n dòng m cột.
Ý tưởng:
Nhập số dòng n và số cột m của mảng.
Khởi tạo mảng có n dòng và m cột.
Nhập từng phần tử của mảng: từ a[0][0] đến a[n1][m-1]

16


Nhập mảng 2 chiều
Kiểu mảng răng cưa

public static void NhapMang(out int[][] a){
int rows, cols;
Console.Write("Nhap so dong n = ");
rows = Convert.ToInt32(Console.ReadLine());
Console.Write("Nhap so cot m = ");
cols = Convert.ToInt32(Console.ReadLine());

a = new int[rows][];
for(int i=0; ia[i] = new int[cols];
for(int j=0; jConsole.Write("a[{0}][{1}] = ", i, j);
a[i][j] =
Convert.ToInt32(Console.ReadLine());
}
}
}
17


Nhập mảng 2 chiều
Kiểu mảng nhiều chiều
public static void NhapMang(out int[,] a){
int rows, cols;
Console.Write("Nhap so dong cua mang = ");
rows = Convert.ToInt32(Console.ReadLine());
Console.Write("Nhap so cot cua mang = ");
cols = Convert.ToInt32(Console.ReadLine());
a = new int[rows,cols];
for (int i = 0; i < a.GetLength(0); i++){
for (int j = 0; j < a.GetLength(1); j++){
Console.Write("a[{0},{1}] = ", i, j);
a[i,j] =
Convert.ToInt32(Console.ReadLine());
}
}
}

18


Xuất mảng 2 chiều
Yêu cầu: In ra màn hình mảng a gồm n dòng m
cột.
Ý tưởng:
Duyệt mảng từ dòng 0 đến dòng n-1;
Tại mỗi dòng, in giá trị của phần tử a[i][j] (j: 0 →
m-1), mỗi phần tử cách nhau bởi dấu khoảng
trắng.
Kết thúc mỗi dòng chèm thêm ký tự xuống dòng
“\n”.

19


Xuất mảng 2 chiều
Kiểu mảng răng cưa
public static void XuatMang(int[][] a){
for (int i = 0; i < a.Length; i++){
for (int j = 0; j < a[i].Length; j++){
Console.Write(a[i][j] + " ");
}
Console.WriteLine();
}
}
static void Main(string[] args){
int[][] a;
NhapMang(out a);

XuatMang(a);
}
20


Xuất mảng 2 chiều
Kiểu mảng nhiều chiều
public static void XuatMang(int[,] a){
for (int i = 0; i < a.GetLength(0); i++){
for (int j = 0; j < a.GetLength(1); j++){
Console.Write(a[i,j] + " ");
}
Console.WriteLine();
}
}
static void Main(string[] args){
int[,] a;
NhapMang(out a);
XuatMang(a);
}
21


BÀI TẬP THỰC HÀNH

22


Bài tập thực hành
Bài 1: Viết hàm đọc mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚] từ

file Input.txt. Lập ma trận B là ma trận chuyển vị
của A (𝐵𝐵[𝑖𝑖, 𝑗𝑗] = 𝐴𝐴[𝑗𝑗, 𝑖𝑖]), ghi ma trận B vào file
Output.txt.
Input:

- Dòng 1 chứa 2 số nguyên dương n,m;

- n dòng tiếp theo, mỗi dòng chứa m số nguyên là giá trị các phần tử
trong ma trận A.

Output:
- Ma trận B là ma trận chuyển vị của ma trận A.


Bài tập thực hành
Bài 2: Viết hàm tìm chỉ số phần tử có giá trị lớn
nhất trong mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚]. Xuất chỉ số và
giá trị của phần tử lớn nhất ra màn hình.


Bài tập thực hành
Bài 3: Viết hàm tìm phần tử lớn (nhỏ) nhất trong
dòng thứ k (0 ≤ 𝑘𝑘 < 𝑛𝑛) của mảng 2 chiều
𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài 4: Viết hàm tìm phần tử lớn (nhỏ) nhất trong
cột thứ k 0 ≤ 𝑘𝑘 < 𝑚𝑚 của mảng 2 chiều
𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].



×