Tải bản đầy đủ (.pdf) (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 (1.13 MB, 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

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


×