Tải bản đầy đủ (.ppt) (27 trang)

Chương 10: MẢNG – CHUỖI pps

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 (138.52 KB, 27 trang )

10.1 Mảng
10.2 Chuỗi ký tự
Chương 10: MẢNG – CHUỔI
1. Định nghĩa:
10.1 Mảng
Mảng là tập hợp các phần tử cùng kiểu dữ liệu được đánh thứ tự.
Số thứ tự của mỗi phần tử được gọi là chỉ số
VD : điểm toán của n học sinh
hs1 → t1
hs2 → t2

hsn → tn
Các đặc trưng :
-
Nhiều phần tử (hữu hạn)
-
Cùng kiểu dữ liệu
-
Các phần tử phân biệt với nhau bằng chỉ số
2. Khai báo:
Dim/Public/Static <Tên>(<Chỉ số lớn nhất>) As <Kiểu>
Trong bộ nhớ


0
0
0
0
0
0



0
0


A(0)
A(0)
A(1)
A(1)
A(2)
A(2)


A(10)
A(10)
A
VD : Dim A(10) As Integer

Khai báo mảng A gồm 11 phần tử : A(0), A(1), A(2), …, A(10) kiểu nguyên
Chú ý : Chỉ số phải có kiểu dữ liệu rời rạc, đếm được (nguyên, ký tự, …)
Option Base 1
Dim/Public/Static <Tên>(< Chỉ số lớn nhất>) As <Kiểu>
Trong bộ nhớ


0
0
0
0
0

0


0
0


A(1)
A(1)
A(2)
A(2)
A(3)
A(3)


A(10)
A(10)
A
VD : Option Base 1
Dim A(10) As Boolean

Khai báo mảng A gồm 10 phần tử : A(1), A(2), …, A(10) kiểu Boolean
Dim/Public/Static <Tên>(<Chỉ số đầu> TO <Chỉ số cuối>) As <Kiểu>
Trong bộ nhớ


0
0
0
0

0
0


0
0


A(1)
A(1)
A(2)
A(2)
A(3)
A(3)


A(10)
A(10)
A
VD : Dim A(“A” To “Z”) As Integer

Khai báo mảng A gồm 26 phần tử : A(“A”), A(“B”), …, A(“Z”) kiểu nguyên
3. Các thao tác trên mảng (phần tử mảng)

Truy xuất phần tử mảng : tên(<chỉ số>)
VD :
Dim A(1 To 5) As Integer

A(1)=3
A(2)=A(1)+1


X=A(1)+A(2)


Nhập, xuất giá trị mảng
Gán trực tiếp

Dim A(1 To 5) As Integer

A(1)=1
A(2)=2
A(3)=3
A(4)=4
A(5)=5
,Xuất giá trị ra TextBox

For i=1 To 5
Text1.text=Text1.text+" "+str(A(i))
Next I

(*)
Sử dụng hàm InputBox()

n = InputBox("Cho biet so phan tu: ")
For i = 1 To n
a(i)= InputBox("A(" + Str(i) + ") :")
Next I

Dim s as string
For i = 1 To n

do
s = InputBox("A(" + Str(i) + ") :")
loop until val(s)>0
a(i)=val(s)
Next I
(*)
Sử dụng hàm Rnd()

For i = 1 To 5
A(i) = Int(100 * Rnd())
Next I

Lấy giá trị từ các TextBox

Dim A(0 To 5) As Integer

For i=0 to 5
A(i)=Text1(i)
Next I

(*)
Xuất mảng

Label

Msgbox

1 Textbox

Form


For i= 1 to n

S = s+ “ “ + str(a(i))

Next I

Lblkq.caption=s

Msgbox s

Txtkq.text=s

Print s

Sắp thứ tự các phần tử mảng theo giá trị
Tăng

Dim A(1 To n) As Integer

For i=1 To n-1
For j=i+1 to n
If A(i) > A(j) then
Temp=A(i)
A(i)=A(j)
A(j)=Temp
End If
Next j
Next I


A(i)
A(i)
A(j)
A(j)


6
6
2
2
1
1
3
3
7
7
2
2
6
6
1
1
3
3
7
7
1
1
6
6

2
2
3
3
7
7
A(i)
A(i)
A(j)
A(j)


6
6
2
2
3
3
7
7
2
2
6
6
3
3
7
7
A(i)
A(i)

A(j)
A(j)


6
6
3
3
7
7
3
3
6
6
7
7
A(i)
A(i)
A(j)
A(j)
6
6
7
7
Temp=A(i)
A(i)=A(j)
A(j)=Temp


A(i)

A(i)
A(j)
A(j)


Temp
Giảm

Dim A(1 To n) As Integer

For i=1 To n-1
For j=i+1 to n
If A(i) < A(j) then
Temp=A(i)
A(i)=A(j)
A(j)=Temp
End If
Next j
Next I

A(i)
A(i)
A(j)
A(j)


6
6
2
2

1
1
3
3
7
7
6
6
2
2
1
1
3
3
7
7
7
7
2
2
1
1
3
3
6
6
A(i)
A(i)
A(j)
A(j)



2
2
1
1
3
3
6
6
3
3
1
1
2
2
6
6
6
6
1
1
2
2
3
3
A(i)
A(i)
A(j)
A(j)



1
1
2
2
3
3
2
2
1
1
3
3
3
3
1
1
2
2
A(i)
A(i)
A(j)
A(j)
1
1
2
2
2
2

1
1
(*)
4. Ví dụ
1/ Kiểm tra các phần tử của mảng tạo thành cấp số cộng ?
d=A(2)-A(1); A(i)=A(i-1)+d, ∀i=3,n
2/ Kiểm tra các phần tử của mảng tạo thành cấp số nhân ?
s=A(2)/A(1); A(i)=A(i-1)*s, ∀i=3,n
3/ Kiểm tra mảng đối xứng ?
A(i)=A(n-i+1), ∀i=1,n
4/ Liệt kê số lượng và vị trí các phần tử là bội số của 3 trong mảng
A(i) mod 3 = 0, ∀i=1,n\2
5/ In các số nguyên tố (chính phương) có trong mảng.
Kiểm tra nếu A(i) là số NT → in
6/ In các phần tử khác nhau trong mảng.
Sắp thứ tự tăng (giảm)
In phần tử đầu tiên: A(1)
In phầ tử thứ I nếu A(i)>A(i-1)
7/ In các phần tử của mảng thành 2 nhóm chẳn và lẻ. Ở mỗi nhóm tăng theo thứ tự
Duyệt in mảng 2 lần
Lần 1 in các số chẳn : A(i) mod 2 =0
Lần 1 in các số lẻ : A(i) mod 2 <>0
(*)
(*)
8/ Chèn thêm 1 phần tử vào mảng có thứ tự sao cho mảng vẫn còn có thứ tự.
(*)
VD :
Mảng có thứ tự tăng : 2 4 6 7 10 15
Chèn phần tử : 9
2

2
4
4
6
6
7
7
10
10
15
15
1
1
2
2
3
3
4
4
5
5
6
6
7
7
9
2
2
4
4

6
6
7
7
9
9
10
10
15
15
<10
5. Mảng đối tượng điều khiển
Áp dụng cho đối tượng điều khiển cùng loại
Sử dụng mảng để không phải đặt quá nhiều tên và nhiều thủ tục xử lý sự kiện
Định nghĩa mảng đối tượng điều khiển

Tạo 1 đối tượng trong nhóm muốn định nghĩa mảng lên form,

Đặt tên (sẽ dùng làm tên mảng)

Thiết lập giá trị các thuộc tính cần thiết

Tạo các đối tượng tiếp theo bằng Copy - Paste
Viết lệnh cho mảng đối tượng điều khiển

Thủ tục xử lý sự kiện có dạng
Private sub <Tên>_<Sự kiện>(Index As Integer)
End sub

Thủ tục xử lý sự kiện được viết chung cho nhóm đối tượng định nghĩa là mảng,


Tham số Index được dùng để phân biệt phần tử nhận sự kiện đó

Đối với các đối tương có chỉ số liên tục
For i = txtFields.LBound To txtFields.UBound
txtFields(i).Text = ""
Next

Đối với các đối tương có chỉ số liên tục
Dim txt As TextBox

For Each txt In txtFields
txt.Text = ""
Next
Duyệt mảng đối tượng điều khiển
VD : Thiết kế giao diện

Định nghĩa mảng các OptionButton cho nhóm Shape với tên opShape

Định nghĩa mảng các OptionButton cho nhóm FillStyle với tên opFillStyle

Định nghĩa mảng các OptionButton cho nhóm Color với tên opColor.
Private Sub opShape_Click(Index As Integer)
Shape1.Shape = Index
End Sub
Private Sub opFillStyle_Click(Index As Integer)
Shape1.FillStyle = Index
End Sub
Private Sub opColor_Click(Index As Integer)
Select Case Index

Case 0
Shape1.FillColor = vbRed
Case 1
Shape1.FillColor = vbBlue
Case 2
Shape1.FillColor = vbMagenta
Case 3
Shape1.FillColor = vbYellow
End Select
End Sub
(*)
Private Sub Form_click()
Dim x As Integer, y As Integer
x = 12
y = 33
Call p(x, y - x)
MsgBox "x = " & x & vbCrLf & "y = " & y
Call p(y, x)
MsgBox "x = " & x & vbCrLf & "y = " & y
Call p(y + x, x)
MsgBox "x = " & x & vbCrLf & "y = " & y
Call p(y - x, x + y)
MsgBox "x = " & x & vbCrLf & "y = " & y
Call p(y - x, x + x)
MsgBox "x = " & x & vbCrLf & "y = " & y
End Sub
Hãy chạy từng bước 2 chương trình
trên cho kết quả
Sub p(x As Integer, ByVal y As
Integer)

Dim i As Integer
For i = 1 To x
y = y - i
y = y + x
Next i
x = x + y
End Sub
Call p(4,2)->sub p(4,2):
i=1->y=5
i=2->y=7
i=3->y=8
i=4->y=8
x=12, y=8
Sub p(x=12,y=8)->call p(x=12,y=6)
Call p(y=6,x=12) ->sub p(x=6,y=12):
i=1->y=17
i=2->y=21
i=3->y=24
i=4->y=26
i=5->y=27
i=6->y=27
x=33, y=27
Sub p(x=33,y=27)->call p(y=33,x=12)

X=12
Y=6
X=12
Y=33
X=12
Y=33

X=12
Y=33
X=12
Y=33
1. Khai báo:
10.2 Chuỗi ký tự
Dim <Biến> As String

Dim <Biến> As String* Chiều dài
<Biến> : ~đặt tên trong VB
Kiểu :
String: Khai báo chuỗi động có chiều dài tối đa 2 tỷ ký tự.
String* Chiều dài: Khai báo chuỗi có chiều dài cố định, chiều dài tối đa 65535
VD :

Dim ch As String
Dim S1 as string*100
2. Các hàm xử lý chuỗi
Len(s): Lấy chiều dài chuỗi.
Ucase(s): Đổi chuỗi chữ thường thành chuỗi chữ in.
Lcase(s): Đổi chuỗi chữ in thành chuỗi chữ thường.
Ltrim(s): Cắt khoảng trắng bên trái chuỗi.
Rtrim(s): Cắt khoảng trắng bên phải chuỗi.
Trim(s): Cắt khoảng trắng 2 bên chuỗi.
Left(s,n): Trả về n ký tự đầu tiên bên trái chuỗi.
Right(s,n): Trả về n ký tự đầu tiên bên phải chuỗi.
Mid(s,i,[n]): Trả về [n] ký tự trong chuỗi bắt đầu từ vị trí i.
Space(n): Trả về chuỗi có n khoảng trắng.
String(n,c): Trả về chuỗi có n ký tự c.
(*)

Instr([i,]s1,s2[,n]): Cho vị trí xuất hiện đầu tiên của chuỗi s2 trong s1.
Trong đó:
i: Vị trí bắt đầu dò tìm (tuỳ chọn).
s1: Chuỗi cần dò tìm.
s2: Chuỗi tìm.
n: Cách so sánh (Không sử dụng/0- Chính xác , 1-Không phân biệt chữ thường,
chữ hoa)
Ví dụ: St = “Visual Basic”.
Instr(St,”a”)=5.
Instr(6,St,”a”)=9.
Instr(10,St,”a”)=0.
Instr(1,St,"ba",1)=8
(*)
Replace(s,s1,s2[, i[, n]]): Tìm và thay thế s1 trong s bởi s2.
Trong đó:
i: vị trí bắt đầu thay thế; Không sử dụng thay thế từ đầu.
n: số lần thay thế; Không sử dụng thay thế tất cả.
Ví dụ:
St = “tôi đi học với bạn tôi”.
Replace(St,”tôi”,”anh”) = ”anh đi học với bạn anh”.
(*)

×