chuong 5 - mang - chuoi

30
CHƯƠNG 5: MẢNG – CHUỖI Lê Thị Minh Châu [email protected]

Upload: ngo-khoa-nguyen

Post on 17-Jan-2016

17 views

Category:

Documents


0 download

DESCRIPTION

vb

TRANSCRIPT

CHƯƠNG 5: MẢNG – CHUỖILê Thị Minh Châu

[email protected]

2

Mảng – Array • Mảng là tập hợp các phần tử:

• Cùng kiểu dữ liệu kích thước các phần tử bằng nhau.• Sắp xếp liên tục trong bộ nhớ truy xuất trực tiếp thông qua chỉ

số.

• Mảng tĩnh: chiều dài cố định• Mảng động: chiều dài có thể thay đổi tùy ý trong lúc thực

thi.

3

Mảng – Array

10 -9 5 17

-5

A

(0) (1) (2) (3) (4)

Tên mảng

Phần tử của mảng

Chỉ số thứ tự Phần tử của mảng

4

Mảng tĩnh - 1 chiều• Khai báo mảng thông thường(chỉ số phần tử đầu tiên là 0)

Public/Private/Static/Dim <tên mảng>(<chỉ số lớn nhất>) As <Kiểu dữ liệu>

VD:

Dim A(10) As Integer

Dim B(50) As Double

5

Mảng tĩnh - 1 chiều• Khai báo mảng có chỉ số cụ thể

Public/Private/Static/Dim <tên mảng>(<chỉ số đầu> to <chỉ số cuối>) As <kiểu dữ liệu>

VD:

Dim A(2 to 5) As Integer

• Đặt lại chỉ số phần tử đầu tiên của mảng: khai báo trong phần General câu lệnh:

Option Base 1

6

Mảng động• Khai báo:

Public/Private/Static/Dim <tên mảng>() As <Kiểu dữ liệu>

VD:

Dim dynamicArray() as Double

• Sử dụng: cấp phát vùng nhớ cụ thểReDim <tên mảng>(chỉ số lớn nhất)

VD:

ReDim dynamicArray(9)

7

Mảng động• ReDim chỉ có thể xuất hiện trong thủ tục.• Mỗi lần gọi ReDim, tất cả giá trị chứa trong mảng hiện

hành bị mất. VB khởi tạo lại giá trị dữ liệu cho mảng:• Variant – Empty• Số - 0• Chuỗi – “”• Mảng các đối tượng – nothing

8

Mảng động• ReDim Preserve thay đổi kích thước mảng mà không làm

mất dữ liệu.VD:

ReDim Preserve dynamicArray(50) As Double

9

Các thao tác cơ bản trên mảng• Truy xuất mảng

<tên mảng>(<chỉ số>[, <chỉ số>])

VD:

A(2) = 9

MatrixA(2,3)=1

• LBound, UBound: hàm xác nhận chỉ số thấp nhất và cao nhất của một mảng. VD:

LBound(mArray): lấy chỉ số thấp nhất của mảng.

10

Một số vấn đề khác• Nhập giá trị cho mảng 1 chiều từ bàn phím

• Thông qua mảng đối tượng TextBox trên Form• Thông qua hàm InputBox

• In giá trị của mảng 1 chiều ra màn hình• Xuất giá trị của mảng 1 chiều vào trong một mảng đối tượng

TextBox.• Gán các giá trị của các phần tử của mảng 1 chiều vào một biến

chuỗi, hiển thị nội dung biến chuỗi trong TextBox, Label hoặc Msgbox.

11

Một số vấn đề khác

• Khai báo chương trình con có thông số truyền vào kiểu mảngVD:

Private Sub ModifyArray(a() As Integer)

Call ModifyArray(mArray())• Muốn viết hàm trả về là Array phải khai báo một biến kiểu Variant, gán biến đó bằng Array rồi trả về.

12

Mảng đối tượng điều khiển• Với nhiều đối tượng điều khiển cùng loại, có thể định

nghĩa mảng để không phải đặt quá nhiều tên và định nghĩa nhiều thủ tục xử lý sự kiện.

OpNam OpNu

Private sub OpNam_Click() …End sub

Private sub OpNu_Click() …End sub

OpPhai(0) OpPhai(1)

Private sub OpPhai_Click(Index as Integer) …End sub

NuNamNuNam

13

Mảng đối tượng điều khiển• Tạo mảng:

1. Đặt đối tượng muốn tạo mảng lên Forma. Đặt tên ( dùng làm tên mảng)

b. Thiết lập giá trị các thuộc tính

2. Right – click trên đối tượng, chọn lệnh Copy

3. Right – click trên form, chọn lệnh Paste, VB sẽ yêu cầu xác nhận tạo mảng.

14

Mảng đối tượng điều khiển

4. Chọn Yes để định nghĩa mảng và lặp lại các thao tác Paste cho phần tử kế tiếp. Thuộc tính Index của các phần tử mảng có thứ tự tăng dần theo đúng thứ tự được Copy trên Form.

15

Mảng đối tượng điều khiển• Định nghĩa phương thức xử lý sự kiện: nhấp đúp lên một

trong các đối tượng tạo mảng. Thủ tục xử lý sự kiện có dạng

Private Sub <Tên>_<Sự kiện>(Index As Integer)

End Sub

16

Mảng đối tượng điều khiển• Duyệt mảng - TH1: chưa xác định chỉ số index của đối

tượng đầu, đối tượng cuối và chỉ số index của các đối tượng liên tục nhau.

For i = txtA.Lbound to txtA.Ubound

‘Lệnh xử lý txtA(i)

Next

17

Mảng đối tượng điều khiển• Duyệt mảng – TH 2: chưa xác định chỉ số index của đối

tượng đầu, đối tượng cuối và chỉ số index của các đối tượng không cần liên tục nhau.

Dim txt As TextBox

For Each txt In TxtA

‘Lệnh xử lý txt

Next

18

Mảng đối tượng điều khiển• Duyệt mảng – TH 3: đã xác định chỉ số index của đối

tượng đầu, đối tượng cuối và chỉ số index của các đối tượng liên tục nhau.

For i=0 to 5

‘Lệnh xử lý TxtA(i)

Next

19

Chuỗi ký tự - String

• String là một tập hợp các ký tự bất kỳ (tối đa là 2 tỷ ký tự) được đặt trong cặp dấu nháy đôi.

• Chỉ số ký tự đầu tiên trong chuỗi là 1

20

Chuỗi ký tự - String• Khai báo chuỗi có chiều dài thay đổi (tối đa 2 tỷ ký tự)

Dim <Biến> As String

VD:

Dim s As String• Khai báo chuỗi có chiều dài cố định (tối đa 65535 ký tự)

Dim <biến> As String * Chiều dài

VD:

Dim ht As String * 25

21

So sánh chuỗi• Toán tử like: trả về True/False

* : đại diện cho nhiều ký tự

? : đại diện cho một ký tự

#: đại diện cho một chữ số

[c1-c2]: ký tự thuộc đoạn từ c1 – c2

VD:

“abc” like “a*c” True

“abc” like “a?c” True

“abc” like “a#c” False

“abc” like “a[a-f]c” True

“abc” like “a[!a-f]c” False

22

So sánh chuỗi• Khai báo trong phần General câu lệnh

Option Compare type• type:

• Binary (mặc định): A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø • Text: (A=a) < ( À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø) • Database

23

Các hàm xử lý chuỗi• Format(s,format): định dạng chuỗi s theo chuỗi định dạng

format.• Ký tự sử dụng trong chuỗi định dạng:

• @: thay thế một ký tự hoặc khoảng trắng.• &: thay thế một ký tự hoặc không có ký tự nào.

VD:

Format(“1234.567”, “Currency”) $1,234.57

Format(“abcde”, “@@@@@@”) “ abcde”

24

Các hàm xử lý chuỗi• Len(s): lấy chiều dài chuỗiVD: len(“abcd”) = 4

• Ucase(s): đổi chuỗi thường thành chuỗi in hoaVD: Ucase(“abcd”) “ABCD”

• Lcase(s): đổi chuỗi in hoa thành chuỗi thườngVD: Lcase(“ABCD”) “abcd”

25

Các hàm xử lý chuỗi• Ltrim(s): cắt khoảng trắng bên trái chuỗi

VD: Ltrim(“ Anh”) Anh

• Rtrim(s): cắt khoảng trắng bên phải chuỗiVD: Rtrim(“Anh “) Anh

• Trim(s): cắt khoảng trắng hai bên chuỗiVd: Trim(“ Anh “) “Anh”

26

Các hàm xử lý chuỗi• Left(s,n): trả về n ký tự đầu tiên bên trái chuỗiVD: Left(“Visual Basic”,6) “Visual”

• Right(s,n): trả về n ký tự đầu tiên bên phải chuỗiVD: Right(“Visual Basic”,5) “Basic”

• Mid(s,i,n): trả về n ký tự trong chuỗi bắt đầu từ vị trí iVD: Mid(“Visual Basic”,8,3) “Bas”

27

Các hàm xử lý chuỗi• Space(n): trả về chuỗi có n khoảng trắngVD: Space(5) “ “

• String(n,c): trả về chuỗi có n ký tự cVD: String(4,”x”) “xxxx”

28

Các hàm xử lý chuỗi• Instr([i,]s1,s2[,n]): tìm vị trí xuất hiện đầu tiên của chuỗi s2

trong chuỗi s1. Nếu không có trả về 0.• i: vị trí bắt đầu xét (tùy chọn)• s1: chuỗi cần dò tìm• s2: chuỗi cần tìm• n: cách so sánh (0 – từng ký tự, 1 – không phân biệt chữ thường,

chữ hoa)

Vd: s = “Visual Basic”

Instr(s,”a”) = 5

Instr(6,s,”a”)=9

29

Các hàm xử lý chuỗi• Replace(s,s1,s2[,i[,n]]): tìm và thay thế s1 trong s bởi s2.

• i: vị trí bắt đầu tìm(mặc định là 1 - tìm từ đầu)• n: số lần thay thế (mặc định là 1 – thay thế tất cả)

VD:

s = “tôi đi học với bạn tôi”

Replace(s,”tôi”,”anh”) “anh đi học với bạn anh”

30