Tải bản đầy đủ (.pptx) (55 trang)

Bài giảng môn học Kỹ thuật lập trình C: Chương 2 - Đại học Kinh tế Luật

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 (502.4 KB, 55 trang )

Đạ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; iif (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


×