Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thông Tin
Chương 2
Xử lý mảng và chuỗi
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Nội dung
Mảng
Các thao tác trên mảng
Chuỗi
Các thao tác trên chuỗi
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Mảng
Là tập hợp nhiều phần tử có cùng kiểu dữ
liệu
Số phần tử trong mảng được xác định
trước
Mỗi phần tử được đánh số chỉ mục, bắt
đầu từ 0
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Mảng
Một phòng chứa các tủ
Số lượng tủ chứa ?
Tủ Chứa gì?
Số thứ tự tủ, chỉ mục tủ
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Mảng
Ví dụ về mảng:
Mảng các từ:
Khoa
Hệ
Thống
Thơng
Tin
0
1
2
3
4
Mảng các số nguyên:
4
0
6
1
1
2
8
9
0
1
2
3
4
5
6
7
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khai báo Mảng
KiểuDữLiệu[] tênMảng;
Ví dụ
int[] bangDiem;
string[] loiNoi;
DateTime[] ngaySinh;
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Khởi tạo Mảng
tenMang = new KieuDuLieu[soPhanTu]
Ví dụ
diem = new int[10];
loiNoi = new string[20];
ngaySinh = new DateTime[7];
float diemTB = new float[5];
0
0
0
0
0
0
1
2
3
4
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thông Tin
Khởi tạo và gán giá trị Mảng
tenMang = new KieuDuLieu[spt]{gtri1,
gtri2, gtri3,…};
diem = new int[5]{ 5, 6, 7, 6, 9 }
Giá trị không nhất thiết phải là hằng số
Ví dụ
Random r = new Random();
int[] pins = new int[4]{
r.Next() % 10, r.Next() % 10,
r.Next() % 10, r.Next() % 10 };
Số giá trị trong dấu ngoặc phải bằng số
phần tử mảng được khai báo
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thông Tin
Truy suất từng phần tử Mảng
Xác định số phần tử của mảng
tenMang.Length
Truy xuất phần tử: tenMang[soThuTu]
0 <= soThuTu <= (tenMang.Length – 1)
Ví dụ
Lấy điểm thứ 3 (soThuTu = 2) của mảng diem
int diem3 = diem[2];
diem3 = 7
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thông Tin
Gán giá trị cho từng phần tử Mảng
Gán điểm thứ 3 của mảng diem là 10
diem[2] = 10
5
6
10
6
9
0
1
2
3
4
Gán điểm thứ 4 của mảng diem bằng điểm
thứ nhất cộng 4
diem[3] = diem[0] + 4
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Duyệt Mảng
Dùng vịng lặp for
Ví dụ duyệt mảng diem
for (int i = 0; i < diem.Length; i++)
{
Console.WriteLine(diem[i].ToString());
}
Duyệt và gán phần tử
for (int i = 0; i < diem.Length; i++)
{
diem[i] += 1;
Console.WriteLine(diem[i].ToString());
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Duyệt Mảng bằng foreach
Ví dụ
foreach (int i in diem)
{
Console.WriteLine(i.ToString());
}
Không nên dùng foreach khi
Cần duyệt một phần trong mảng (ví dụ duyệt
từ phần tử thứ 2 tới thứ 10)
Cần duyệt từ cuối về đầu mảng
Cần biết chỉ số mảng trong vòng lặp
Cần thay đổi giá trị của phần tử mảng
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thông Tin
Sao chép Mảng
Mảng là kiểu tham chiếu gán mảng là gán
tham chiếu
Ví dụ
int[] mangA = diem;
mangA và diem cùng tham chiếu đến vùng
nhớ chứa các phần tử của mảng
Thay đổi giá trị trong mangA sẽ ảnh hưởng đến
diem
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thông Tin
Sao chép Mảng
diem
5
6
7
6
9
6
9
mangA
diem
5
6
8
mangA
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thông Tin
Sao chép Mảng
Tạo mảng mới và gán giá trị từ mảng cũ
Dùng CopyTo
int[] mangA = new int[diem.Length];
diem.CopyTo(mangA, 0);
Dùng Array.Copy
Array.Copy(diem, mangA, diem.Length);
Dùng Clone
mangA = (int[]) diem.Clone();
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thông Tin
Đảo Mảng
Phương thức Reverse của lớp Array thực hiện việc
đảo thứ tự các phần tử trong mảng. Cu pháp thực
hiện:
int[] mang = { 15, 26, 7, 28, 19, 6 };
Array.Reverse(mang);
Kết quả:
mang = { 6,19,28,7,26,15};
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thông Tin
Sắp xếp Mảng
Phương thức Sort() của lớp Array thực hiện việc
sắp xếp các phần tử trong mảng. Cu pháp thực hiện:
Array.Sort(ten_mang);
Ví dụ:
int[] mang = { 9, 5, 7, 4, 6 };
Array.Sort(mang);
Kết quả:
mang = { 4, 5, 6, 7,9 };
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Tìm kiếm trên Mảng
Tìm kiếm trên mảng đã được sắp xếp
0
2
5
6
7
8
9
9
8
7
6
5
2
0
Tìm kiếm trên mảng chưa được sắp xếp
5
2
9
7
6
0
8
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Tìm kiếm trên Mảng
Tìm kiếm trên mảng đã được sắp xếp
Phương thức BinarySearch của lớp Array
thực hiện việc tìm kiếm một giá trị trong một
mảng đã được sắp xếp trước, trả về kết quả
là số nguyên cho biết chỉ số index của phần
tử tìm được, nếu khơng tìm được thì trả về
-1. Cu pháp thực hiện:
int vitri = Array.BinarySearch(tenMang, giaTriCanTim);
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Tìm kiếm trên Mảng đã sắp xếp
Ví dụ:
mang
0
2
5
6
7
8
int vitri = Array.BinarySearch(mang, 7);
Kết quả vitri=4 (Tìm thấy số 7 ở vị trí thứ 4)
int vitri = Array.BinarySearch(mang, 113);
Kết quả vitri=-1 (-1 tức là khơng tìm thấy số
113)
9
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Tìm kiếm trên Mảng chưa sắp xếp
Ví dụ:
mang
5
2
9
7
6
0
8
Giải pháp 1: Sắp xếp mảng trước, sau đó
gọi hàm tìm kiếm nhị phân(đơn giản, tuy
nhiên nếu trường hợp không được thay đổi
giá trị gốc thì khơng được dùng giải pháp
này)
Giải pháp 2: Khơng sắp xếp, tiến hành dùng
giải thuật tìm kiếm tuyến tính.
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Tìm kiếm trên Mảng chưa sắp xếp
Giải thuật tìm kiếm tuyến tính
Xét phần tử từ đầu cho đến cuối một cách tuần tự
Tại vị trí thứ i nếu giá trị trong dữ liệu đung với
khố cần tìm kiếm -> tìm thấy. Nếu khơng đung
tìm đến phần tử kế tiếp i+1
Nếu sau khi xét hết N phần tử mà khơng có giá trị
khố cần tìm khơng tìm thấy
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Tìm kiếm trên Mảng chưa sắp xếp
Giải thuật tìm kiếm tuyến tính
• Bước 1: i = 0; // bắt đầu từ phần tử đầu tiên của
dãy
• Bước 2: So sánh a[i] với x, có 2 khả năng :
• + a[i] = x : Tìm thấy. Dừng
• + a[i] ≠ x : Sang Bước 3.
• Bước 3 : i = i+1; // xét tiếp phần tử kế trong mảng
• Nếu i = N: Hết mảng,khơng tìm thấy.Dừng
• Ngược lại: Lặp lại Bước 2.
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Tìm kiếm trên Mảng chưa sắp xếp
Giải thuật tìm kiếm tuyến tính
int TimKiem( int x){
for (int i=0; i
if (a[i]==x) return i ; // a[i] là phần tử có khố x
};
return -1;// tìm hết mảng nhưng khơng có x
}
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khoa Hệ Thống Thơng Tin
Tìm kiếm trên Mảng chưa sắp xếp
•
•
•
•
Ví dụ: Cho dãy số a
{12, 2, 8, 5, 1, 6, 4, 15}
Giá trị cần tìm: 8
i=0
X=8
12
2
8
5
1
6
4
15
0
1
2
3
4
5
6
7