Đạ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
vMảng
vCác thao tác trên mảng
vChuỗi
vCá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
vLà tập hợp nhiều phần tử có cùng kiểu dữ
liệu
vSố phần tử trong mảng được xác định trước
vMỗ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ủ
v
Số lượng tủ chứa ?
v
Tủ Chứa gì?
v
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
0
1
2
3
4
5
8
6
9
7
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khai báo Mảng
vKiểuDữLiệu[] tênMảng;
vVí 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
vtenMang = new KieuDuLieu[soPhanTu]
vVí 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
vtenMang = new KieuDuLieu[spt]{gtri1, gtri2,
gtri3,…};
§ diem = new int[5]{ 5, 6, 7, 6, 9 }
vGiá 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 };
vSố 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
vXác định số phần tử của mảng
§ tenMang.Length
vTruy xuất phần tử: tenMang[soThuTu]
§ 0 <= soThuTu <= (tenMang.Length – 1)
vVí 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
vGá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
vGá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
vDùng vòng lặp for
vVí dụ duyệt mảng diem
for (int i = 0; i < diem.Length; i++)
{
Console.WriteLine(diem[i].ToString());
}
vDuyệ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
vVí dụ
foreach (int i in diem)
{
Console.WriteLine(i.ToString());
}
vKhô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
vMảng là kiểu tham chiếu gán mảng là gán
tham chiếu
vVí 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
vTạo mảng mới và gán giá trị từ mảng cũ
vDùng CopyTo
§ int[] mangA = new int[diem.Length];
§ diem.CopyTo(mangA, 0);
vDùng Array.Copy
§ Array.Copy(diem, mangA, diem.Length);
vDù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 cua
̉ lớp Array thực hiên
̣ viêc
̣
đao th
̉
ứ tự các phần tử trong mang. 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() cua l
̉ ớp Array thực hiên viêc să
̣
̣
́p
xếp các phần tử trong mang. 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
vTì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
5
2
9
7
6
0
8
vTìm kiếm trên mảng chưa được sắp xếp
Đạ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
vTìm kiếm trên mảng đã được sắp xếp
Phương thức BinarySearch cua l
̉ ớp Array thực
hiên viêc ti
̣
̣ ̀m kiếm môt gia
̣
́ tri trong môt mang
̣
̣
̉
đã được sắp xếp trước, tra ̉ về kết qua ̉ là
số nguyên cho biết chi sô
̉ ́ index cua phâ
̉
̀n tử
tìm được, nếu không tìm được thì tra vê
̉ ̀ 1.
Cú 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
vVí 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
vVí dụ:
mang
5
2
9
7
6
0
8
vGiả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)
vGiả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
vGiả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 đúng với
khoá cần tìm kiếm > tìm thấy. Nếu không đúng 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ị
khoá 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
vGiả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
vGiả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ó khoá 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
0
2
8
5
1
6
4
1
2
3
4
5
6
15
7