bài tập ctdl và gt 3

29
L THUYT L THUYT NHÓM MỘT: 1. khái niệm dữ liệu Dữ liệu là đầu vào cho một quá trình xử lý, biến đổi nào đó để cho ra kết quả là thông tin cần thiết phục vụ cho những mục đích cụ thể nào đó , tùy thuộc vấn để giải quyết. Dữ liệu thể hiện sự trừu tượng của một hiện tượng thực tế và được biểu diễn như những cấu trúc trừu tượng, không nhất thiết phải có trong các cấu trúc lập trình. 2. khái niệm về cấu trúc dữ liệu Cấu trúc dữ liệu là nhóm các dữ liệu có liên quan thành một tổ chức. 3. khái niệm giải thuật Giải thuật là một tập hợp hữu hạn các chỉ dẫn để thực hiện một nhiệm vụ nà đó và cho ra một kết quả 4. phân biệt giữa dữ liệu và cấu trúc dữ liệu Dữ liệu là đầu vào cho một quá trình xử lý, biến đổi nào đó để cho ra kết quả là thông tin cần thiết phục vụ cho những mục đích cụ thể nào đó tùy thuộc vấn để giải quyết . Dữ liệu thể hiện sự trừu tượng của một hiện tượng thực tế và được biểu diễn như những cấu trúc trừu tượng không nhât thiết phải có trong cấu trúc lâp trình Cấu trúc dữ liệu là các mục dữ liệu có quan hệ với nhau được tổ chức lại để tạo thành một mục dữ liệu thống nhất. 5. Các tiêu chí đánh giá một giải thuật +Tính đúng đắn:chứng minh chặt chẽ, dùng dữ liệu thử +Tính đơn giản: dễ hiểu, dễ cài đặt, dễ chỉnh sửa +Sử dụng bộ nhớ: càng ít càng tốt +Tốc độ thực hiện: càng nhanh càng tốt 6. Các tình huống xác định thời gian thực hiện một giải thuật +Tốc độ dung lượng bộ nhớ của máy tính +Kích thước của dữ liệu cần xử lý +Tổng số phép toán tích cực cẫn thực hiện

Upload: ho-loi

Post on 07-Aug-2015

133 views

Category:

Software


6 download

TRANSCRIPT

Page 1: Bài tập CTDL và GT 3

LY THUYÊT

LY THUYÊT NHÓM MỘT:

1. khái niệm dữ liệuDữ liệu là đầu vào cho một quá trình xử lý, biến đổi nào đó để cho ra kết quả là thông tin cần thiết phục vụ cho những mục đích cụ thể nào đó , tùy thuộc vấn để giải quyết.Dữ liệu thể hiện sự trừu tượng của một hiện tượng thực tế và được biểu diễn như những cấu trúc trừu tượng, không nhất thiết phải có trong các cấu trúc lập trình.

2. khái niệm về cấu trúc dữ liệu Cấu trúc dữ liệu là nhóm các dữ liệu có liên quan thành một tổ chức.

3. khái niệm giải thuậtGiải thuật là một tập hợp hữu hạn các chỉ dẫn để thực hiện một nhiệm vụ nà đó và cho ra một kết quả

4. phân biệt giữa dữ liệu và cấu trúc dữ liệuDữ liệu là đầu vào cho một quá trình xử lý, biến đổi nào đó để cho ra kết quả là thông tin cần thiết phục vụ cho những mục đích cụ thể nào đó tùy thuộc vấn để giải quyết .Dữ liệu thể hiện sự trừu tượng của một hiện tượng thực tế và được biểu diễn như những cấu trúc trừu tượng không nhât thiết phải có trong cấu trúc lâp trình

Cấu trúc dữ liệu là các mục dữ liệu có quan hệ với nhau được tổ chức lại để tạo thành một mục dữ liệu thống nhất.

5. Các tiêu chí đánh giá một giải thuật+Tính đúng đắn:chứng minh chặt chẽ, dùng dữ liệu thử+Tính đơn giản: dễ hiểu, dễ cài đặt, dễ chỉnh sửa+Sử dụng bộ nhớ: càng ít càng tốt+Tốc độ thực hiện: càng nhanh càng tốt

6. Các tình huống xác định thời gian thực hiện một giải thuật +Tốc độ dung lượng bộ nhớ của máy tính +Kích thước của dữ liệu cần xử lý +Tổng số phép toán tích cực cẫn thực hiện

7. Quan hệ giữa giải thuật và cấu trúc dữ liệuMỗi cấu trúc dữ liệu có các giải thuật tương ứng, khi cấu trúc dữ liệu thay đổi thì giải thuật cũng phải thay đổi theoCấu trúc dữ liệu cùng với các giải thuật trên cấu trúc đó được dùng để mô tả đối tượng nảy sinh trong lĩnh vực được nghiên cứu

8. Những ưu điểm và hạn chế của phương pháp lập trình cấu trúca. ưu điểm: Rõ ràng, dễ hiểu, dễ thực hiện vì có tính cấu trúc caob. Nhược điểm: Khó quản lý được các chương trình lớn, chỉ có thể xây dựng được các

chương trình có <=50000 dòng lệnh. Ngoài ra tính sử dụng lại mã kém

9. Những ưu điểm của phương pháp lập trình hướng đối tượng:

Page 2: Bài tập CTDL và GT 3

Ta có thể xây dựng các chương trình ứng dụng cực lớn, với số dòng lệnh rất lớnNgười dùng có thể tạo ra các đối tượng ngay từ ban đầuCó tính thừa kế và sử dụng lại cao

10.Những ưu điểm của phương pháp Lập trình dựa đối tượngCó sẵn nhiều đối tượng mà người dùng có thể sử dụng ngay

LY THUYÊT NHÓM HAI

1.Khái niệm hàng đợi Hàng đợi là một tổ chức lưu trữ dữ liệu theo nguyên tắc vào trước ra trước(FIFO)

2.Các thao tác chính với hàng đợi+InitQueue(): Khởi tạo hàng đợi rỗng+EnterQueue(): Đặt một phần tử vào cuối của hàng đợi+LeaveQueue():Lấy ra một phần tử ra khỏi đầu của hàng đợi+IsEmtyQueue(): Kiểm tra xem hàng đợi có rỗng hay không?+IsFullQueue(): kiểm tra xem hàng đợi đã đầy chưa?

3.Cài đặt hàng đợi bằng mảng:Tức là ta xây dựng một mảng mà phần tử số 1 ở đầu của hàng đợi, phần tử số n ở cuối của hàng đợi

4.Cài đặt hàng đợi bằng giả con trỏ(Pointer Facking) Ta có đoạn mã khai báo và cài đặt hàng đợi bằng phương pháp giả con trỏ như sau(ví dụ):

TYPE PF DATA AS VARIANT; giá trị của phần tử LEFT AS LONG ; trỏ đến vị trí phần tử sau RIGHT AS LONG ; trỏ đến vị trí phần tử trước END TYPE DIM A( ) AS VARIANT ; mảng DIM mPF AS PF ; con trỏ giả Ví dụ: A( )= 1 2 3 4 5 6 7 8

Ta có mPF =

Bảng trên được gọi là pointer facking

6. Hàng đợi quay vòng: Khi thiết lập hàng đợi quay vòng thì: Qfront >= Qback Qfront = Qfront mod Qsize

15 27 14 9 23 5 18 8

15 27 14 9 23 5 18 83 5 4 6 7 Nill Nill Nill2 nill nill nill nill 8 nill nill

Page 3: Bài tập CTDL và GT 3

Qback= Qback mod Qsize

7.Hàng đợi có ưu tiênTrong một hàng đợi, ta gán chỉ số cho các phần tử của hàng đợi, khi xử lý ta không sắp xếp lại các phần tử mà giải quyết bằng cách lấy ra các chỉ số theo mức ưu tiên từ thấp đến cao. Các chỉ số sẽ được tính lại khi cần thiết.

8. Tổ chức nhiều hàng đợi

9.Hàng đợi nhiều đầu

10.Các ứng dụng của hàng đợi + Hàng đợi thiết bị: máy in, ổ đĩa, CPU +Vùng đệm vào\ ra:bàn phím, tệp tin +Lập lịch thực hiện công việc +Xử lý lỗi hệ thống +Mô phỏng hoạt động của một hệ thống +Sắp xếp dữ liệu(heapsort) LY THUYÊT NHÓM BA

1. Khái niệm về danh sách liên kết:Một cấu trúc lưu trữ các phần tử của danh sách trong đó thứ tự của chúng được biểu diễn dưới dạng hiển được gọi là danh sách liên kếtNó gồm một tập hợp các phần tử gọi là nút, mỗi nút chứa hai mục tin: phần tử của danh sách , con trỏ chỉ vị trí của nút chứa phần tử tiếp theo trong danh sách

2. Các thao tác chính với danh sách liên kết+ Tạo danh sách rỗng+Kiểm tra danh sách có rỗng hay không?+Đi qua danh sách+Chèn vào danh sách+Xóa từ một danh sách

3.Các dạng danh sách liên kết+Danh sách liên kết đơn+Danh sách nối vòng+Danh sách liên kết kép+Danh sách liên kết bội+Danh sách tổng quát+Ma trận rời rạc

4.Lưu trữ kế tiếp và lưu trữ móc nối+Lưu trữ kế tiếp : ta dùng mảng để lưu trữ các phần tử của danh sách(giống như cài đặt hàng đợi bằng mảng)+Lưu trữ móc nối: ta dùng con trỏ để xây dựng danh sách liên kết( giống như cài đặt hàng đợi bằng giả con trỏ)

Page 4: Bài tập CTDL và GT 3

5.Các phương pháp cài đặt danh sách liên kết+Cài đặt danh sách bằng cấu trúc mảng+Cài đặt danh sách bằng giả con trỏ+Cài đặt danh sách bằng cấu trúc collection+Cài đặt danh sách bằng cấu trúc class

6.Cài đặt danh sách liên kết bằng cấu trúc mảng:

7Cài đặt danh sách liên kết bằng giả con trỏ

8.Cài đặt danh sách liên kết bằng cấu trúc collectionKhai báo: DIM Cvar AS collectionMột số thao tác: Cvar.Add giá trị, khóa ; thêm vào danh sách Cvar.Remove khóa ; xóa một phần tử khỏi danh sách Cvar. Khóa ; tìm giá trị của phần tử biết khóa của nó9.Cài đặt danh sách liên kết bằng cấu trúc class

10.Các ứng dụng của danh sách liên kết

LY THUYÊT NHÓM BỐN

1. Các khái niệm cây: cây là một tập hợp hữu hạn nút trong đó có một nút đặc biệt gọi là gốc. giữa các nút có mối quan hệ phân cấp gọi là quan hệ cha con.Bậc của nút là số cây con của nút đóBậc của cõy là bậc lớn nhất của cỏc nỳt trờn cõy,nếu cõy cú bậc là n thỡ ta gọi là cõy n phõnNút kết thúc là nút có bậc bằng khôngNút trung gian là nút có bậc khác không và không phải nút gốcMức của nút gốc bằng 1Mức của nút khác gốc bằng nút của gốc của cây con nhỏ nhất chứa nó cộng với 1Chiều cao của cây là mức lớn nhất của các nút lá

2.Các khái niệm về cây nhị phânCây nhị phân là cây mà tại mỗi nút có không quá hai nút con.Cây nhị phân đầy đủ là cây nhị phân mà các nút tối đa ở mọi mức

3.Các khái niệm về cây nhị phân tương đương

4.Các khái niệm về cây nhị phân nối vòng

5.Phép duyệt cây theo thứ tự trước -Thăm gốc - Duyệt cây con trái theo thứ tự trước -Duyệt cây con phải theo thứ tự trước

6.Phép duyệt cây theo thứ tự giữa

Page 5: Bài tập CTDL và GT 3

- Duyệt cây con bên trái theo thứ tự giữa -Thăm gốc -Duyệt cây con bên phải theo thứ tự giữa

7.Phép duyệt cây theo thứ tự sau - Duyệt cây con bên trái theo thứ tự sau -Duyệt cây con bên phải theo thứ tự sau -Thăm gốc

8.Cài đặt cây bằng mảngTương tự như cài đặt hàng đợi bằng mảng

9.Cài đặt cây bằng giả class(giả con trỏ)Tương tự cài đặt hàng đợi bằng giả con trỏ

10.Các ứng dụng của cấu trúc cây- tổ chức của một công ty- cấu trúc cây thư mục trong DOS/WIN- cấu trúc thư viện

BAI TÂP TINH TOAN

I. Thuật toán săp xếp1. Các thuật toán sắp xếp:

Thủ tục đổi chỗ b(i) <--> b(j) :Private Sub BExchange(b() As Integer, ByVal i As Integer, ByVal j As Integer)

Dim tmp As Integer tmp = b(i) b(i) = b(j) b(j) = tmp

End Subi. Sắp xếp chọn :

For i=1 to nFor j=i+1 to n

If b(i) > b(j) then BExchange(b,i,j)

End ifNext j

Next iii. Sắp xếp chèn :

b(1)=a(1)for i=2 to n

j=i-1 ‘so phan tu cua mang bdo while a(i) < b(j)

b(j+1) = b(j)j = j – 1

loop

Page 6: Bài tập CTDL và GT 3

b(j+1) = a(i)Next i

iii. Sắp xếp nổi bọt :For i=1 to n-1

For j=n to i+1 step -1if b(j)<= b(j-1) then

BExchange(b,i,j)End if

Next jNext i

iv. Sắp xếp nhanh với khóa là phần tử đầu khối :Sub mQuickSort ( LB, UB)

Dim MIndex , LIndex, UIndex as IntegerIf (LB<UB) then

Part LB, UB, MIndexUIndex=MIndex + 1mQuickSort LB , UIndexLIndex = MIndex -1mQuickSort LIndex , UB

End ifEnd sub‘------------------------------------------------------------------------Private Sub Part(ByVal LIndex As Integer, ByVal UIndex As Integer, MIndex As Integer)

Dim i As Integer Dim j As Integer Dim Pivot As Integer

Pivot = b(LIndex) i = LIndex + 1 j = UIndex

Do While (i < j) Do While (b(j) > Pivot) j = j - 1 Loop Do While (i < j) And (b(i) < Pivot) i = i + 1 Loop

If (i < j) ThenBExchange(b,i,j)

End ifLoopMIndex = j

End subv. Sắp xếp nhanh với khóa là phần tử cuối khối :

II. Nhóm 21. Các cách biểu diên biểu thức* Dạng trung tố

Page 7: Bài tập CTDL và GT 3

VD: A+BBiểu thức trung tố: dấu phép tính đứng giữa 2 toán tử* Dạng hậu tốVD: AB+Biểu thức hậu tố: Dấu phép tính đứng ngay sau các toán tử

Cách viết ra biểu thức dạng hậu tố: -nếu gặp toán hạng thì đưa ra ngoài -nếu gặp toán tử thì đưa vào stackNếu gặp dấu ) thì đưa tất cả các toán tử trong stack ra ngoài cho đến khi gặp dấu ( thì dừng lạiPhải chú ý mức ưu tiên của các toán tử: */,+-, các dấu () có mức ưu tiên thấp nhấtKhi tắt cả các toán tử được đưa ra khỏi stack thì ta được biểu thức dạng hầu tố của biểu thức

2.Cách biểu diên biểu thức dạng hậu tố sang biểu thức dạng trung tố:

-khởi động ngăn xếp stack-duyệt biểu thức dạng hậu tố từ trái sang phải: +gặp toán hạng đưa vào stack +khi gặp toán tử thì đưa toán hạng và phép toán ra ngoài :(toán hạng 1-toán tử-toán hạng 2)Khi đưa tất cả các toán hạng và toán tử của biểu thức hậu tố vào stack thì ta được biểu thức trung tố3. cho trước biểu thức dạng hậu tố tính giá trị biểu thức Ta đưa biểu thức dạng hậu tố về dạng trung tố, sau đó tính giá trị biểu thức4. đổi một số hệ 10 sang hệ đếm cơ số 2,8,16+phần nguyên:Chia liên tiếp phần nguyên cho cơ số cần chuyển cho đến khi kết quả của phép chia bằng 0. sau đó chuyển đổi các số dư ở các phép chia thành một chữ số tương ứng của hệ đếm cần chuyển . các số dư ở các phép chia xếp theo thứ tự ngược chính là kết quả cần tìm.+Phần thập phân: nhân liên tiếp phần thập phân cho cơ số cần chuyển cho đến khi phân thập phân trong kết quả bằng 0 hay đạt độ chính xác cho phépSau đó chuyển phần nguyên trong các kết quả phép nhân thành một chữ số tương ứng của hệ đếm cần chuyển .các phần nguyên trong kết quả được xếp theo thứ tự thuận là kết quả cần tìm5. Chuyển một số tư hệ cơ số 2,8,16 sang hệ 10: Viết dạng triển khai của số đó sau đó thay thế các chữ số bằng các số tương ứng của cơ số 10Thực hiện các phép nhân và cộng trên cơ số 10 ta được kết quả cần tìm6. Chuyển một số tư hệ cơ số 2 sang 8,16Ta nhóm thành từng nhóm có 3 chữ số (nếu chuyển sang hệ 8) hay 4 chữ số (nếu chuyển sang co số 16)Tính từ dấu phảy ngăn cách phần thập phân và phần nguyên các nhóm bên phải cùng hay trái cùng , nếu không đủ số thì ta thêm 0 mà không ảnh hưởng đến giá trị số đó .Chuyển từng nhóm thành một chữ số thành một chữ số của hệ đếm cần chuyển VD: 100110010,01 (B) B2,4(H)7. chuyển một só tư hệ cơ số 8,10 sang hệ 2:Ta chuyển từng chữ số thành một nhóm có 3 chữ số (nếu ở cơ số 8)và 4 chữ số (nếu ở cơ số 16)Bỏ các số 0 không có nghĩa (phải cùng và trái cùng) so với dấu phảy ta được kết quả cần tìmVD: 1AF,8(H) 00011010111,1(B)III.Nhóm 3

Page 8: Bài tập CTDL và GT 3

Cách làm: Trước hết ta phải xác định được kích thước của bảng băm = m (tức là trùng với số các số khóa của dãy)Sử dụng công thức có sẵn để tính giá trị cụ thể cho từng vị trí của số đó trên bảng bămGiải quyết va chạm bằng phương pháp dò tuyến tính: +Nếu hai khóa có cùng một vị trí trên bảng băm thì ta sẽ lấy khóa sau để dò:-duyệt từ vị trí đó cho tới cuối bảng băm xem có vị trí nào trống không ,nếu có thì xếp số đó vào vị trí đầu tiên rỗng,nếu tời cuối bảng vẫn không có ta lộn lại tìm kiếm từ đầu đến cuối vÝ dô mÉu : b(k) = k mod m (bµi tËp 1 ®Ò thi mÉu)

khãa : 26 , 42 , 5 , 44 , 92 , 59 , 40 , 36 , 12 , 60 , 80 kÝch thíc b¶ng b¨m : m=11

K B(k) ChØ sè Gi¸ trÞ

26 4 0 44

42 9 1 12

5 5 2 80

44 0 3 36 80

92 4 4 26 92 59

59 4 5 5 60

40 7 6 92

36 3 7 59 40

12 1 8 40

60 5 9 42

80 3 10 60

IV.nhóm 4

Cây nhị phân hoàn chỉnh là cây mà từ cây đó ta có thể lấy ra được dãy số xuất phát của của nó.Các phương pháp duyệt cây:

Duyệt cây theo thứ tự trước : Gốc-cây con bên trái-cây con bên phải

Duyệt cây theo thứ tự sau: Cây con bên trái-gốc-cây con bên phảiDuyệt cây theo thứ tự sau: Cây con bên trái-cây con bên phải-gốc

BAI TÂP TƯ TIM HIÊU

NHÓM 1:

7.các hàm với kiểu date :

Page 9: Bài tập CTDL và GT 3

+date: trả về ngày hiện tại của hệ thống Lệnh: date=date : đặt lại ngày hiện tại cùa hiện tại + dateadd: thêm thời gian Lệnh: dateadd(đơn vị thởi gian,thời gian thêm vào,thời gian cần thêm vào)+ datediff: tính khoảng thời gian giữa date1 và date2 Lệnh: datediff(đơn vị thời gian, date1,date2)+datepart(đơn vị thời gian, thời gian): rút bất kì thông tin ngày tháng và thời gian từ giá trị thời gian+dateserial: chuyển thông số rời rạc của ngày tháng thành một chuỗi ngày thángLệnh: dateserial(year, moth,day)+datevalue: chuyển ngày tháng thành chuỗi sang giá trị Lệnh: datevalue(date)8. các hàm kiểm tra kiểu : +Isemty(bthuc):kiểm tra xem biểu thức có phải rỗng hay không? +Isfull(): kiểm tra xem biểu thức đã đây chưa+isdate(): kiểm tra xem biểu thức có phải là biểu thức hay không+isnumeric():kiểm tra xem biểu thức có phải là số không+isarray(biến): kiểm tra xem biến có phải là mảng hay không+ismissing(): kiểm tra xem tham số có tồn tại hay không+isnull(): kiểm tra xem biểu thức có null hay không9. các hàm chuyển đổi: +cbool(): chuyển đổi sang kiểu boolean+cbyte(): chuyển đổi sang kiểu byte+ccur(): chuyển đổi biểu thức sang kiểu currency+cdate(): chuyển đổi sang kiểu date+cdbl():chuyển đổi biểu thức sang dạng double+cdec():chuyển đổi biểu thức sang kiểu decimal+cint(): chuyển đổi biểu thức sang kiểu integer+clng(): chuyển đổi biểu thức sang kiểu long+csng(): chuyển sang kiểu single+cstr(): chuyển sang kiểu string+cvar(): chuyển sang kiểu variant10. ý nghĩa của các khóa dim,private,public,static +Dim: biến có phạm vi cục bộ Một biến có thể được khai báo bên trong một thủ tục or hàm(niến này gọi là biến cấp độ procedure )hay khai báo ở phần đầu của mỗi module, trong phần khai báo general(biến này gọi là biến cấp độ module)Nếu biến được khai báo trong thủ tục /hàm thì nó chỉ có thể sử dụng trong thủ tục hoặc hàm đó,. Lệnh: dim <biến> [as <kiểu dữ liệu>]+Public: dùng để khai báo một biến ở cấp độ moduleCác biến được khai báo với từ khóa trên sẽ được gọi và sử dụng bất cứ đâu trong chương trình

Một biến public thì có thể được dùng trong mọi hàm thủ tục trong project. Nếu một biến public được khai báo trong một standard module hay class module thì nó sẽ có tác dụng trong mọi project mà có tham kháo đến project mà biến được khai báo+Private :biến có phạm vi cục bộ

Ta dùng từ khóa private để khai báo một biến cấp độ module Biến private có thể được dùng chỉ bởi các thủ tục or hàm trong cùng một module.

Page 10: Bài tập CTDL và GT 3

Trong cấp độ module từ khóa dim tương đương với từ khóa private +Static: dùng để khai báo tất cả biến cục bộ trong một thủ tục. Từ khóa static có thể được đặt ở đầu thủ tục Sub hoặc Function kể cả thủ tục xử lý sự kiện hoặc những hàm private.Khi ta dùng từ khóa private để thay thế cho từ khóa dim thì sau mỗi lần sử dụng biến, giá trị của biến sẽ được nhớ lại.

II.NHÓM II 1.các cấu trúc dữ liệu cơ sơ: +cấu trúc mảng: là một loạt các phần tử cùng kiểu có bộ nhớ liền kề nhau+cấu trúc xâu kí tựSTRING: là một dãy hoặc một mảng mà mỗi phần tử là một ký tự+ cấu trúc bản ghi TYPE:đây là kiểu người dùng tự định nghĩa.+ cấu trúc lớp CLASS:

2. Phân biệt giữa xâu ký tự độ dài cố định và độ dài tùy ýĐối với xâu ký tự độ dài cố định trong khi khai báo thì độ dài của xâu đã được chỉ định còn xâu ký tự có độ dài tùy ý trong khi khai báo ta chưa khai báo độ dài là bao nhiu

9. So sánh giữa xâu ký tự của VB6 và TP7Đối với VB va TP7, ta có 2 loại xâu ký tự: tĩnh và động. Khi khai báo xâu ký tự tĩnh đều đã xác định sẵn chiều dài của xâu .Đối với VB, khi khai báo xâu động, chưa biết kích thước của xâu và độ dài tối đa cho mỗi xâu có khoảng 2 tỉ ký tự (Kinh hoàng), còn đối với TP7 thì độ dài tối đa cho mỗi xâu là 255 ký tự(lạc hậu)

7. Cơ chế tạo cấu trúc TYPE trong VB6:Đây là cấu trúc giống như kiểu dữ liệu struct của ngôn ngữ C hay record của Pascal. Nó cho phép chúng ta có thể khai báo nhiều loại thông tin với các kiểu dữ liệu khác nhau trong 1 biến.

Cú pháp chung:TYPE‘ Khai báo các mục dữ liệuEND TYPE

Ta có thể truy cập các thành phần trong cấu trúc TYPE theo cú pháp sau:<Tên biến>.<Tên thành phần>HayWith <tên biến>.<tên thành phần>End With

3. Cấu trúc mảngĐây là kiểu dữ liệu quen thuộc trong các ngôn ngữ lập trình nó dùng để lưu trữ một dãy các biến có cùng kiểu dữ liệu. CHúng được xác định bởi các chỉ số của mảng.Khai báo:Dim <Tên mảng>(chỉ số[, chỉ số 2,…]) as <Kiểu dữ liệu>Chỉ số có thể là một số nguyên N. Khi đó mảng sẽ có chỉ số từ 0 đến N. Chú ý rằng chỉ số bắt đầu từ 0 hay từ 1 cũng có thể được chúng ta thiết lập thông qua lệnhOption Base 0

Page 11: Bài tập CTDL và GT 3

HayOption Base 1Tuy nhiên chúng ta có thể giới hạn lại phạm vi của chỉ số bằng cách dùng từ khóa TO

Nếu chỉ số không được chỉ rõ thì một mảng động sẽ được tạo ra . Khi đó, trong chương trình chúng ta có thể thiết lập kích thước mảng b ằng cách dùng thủ tụcReDim [Preserve] <Tên mảng> (<Kích thước>)Chúng ta có thể ReDim một magr nhiều lần. Nếu có từ khóa Preserve thì mảng cấp phát sẽ lại không xóa dữ liệu đã có trước đó trên mảng.

4. Mảng động và mảng tĩnh- Mảng tĩnh là mảng có chiều dài cố định, nó có thể được khai báo Public trong ứng dụng, Private trong modun hoặc trong thủ tụcBiên trên và biên dưới của mảng cố định: Biên trên được xác định ngay lúc khai báo, biên dưới được mặc định là 0 hoặc có thể được khai báo tường minh bằng cách sử dụng từ khóa TOTrong mảng tĩnh có mảng nhiều chiều và mảng trong mảng.- Mảng động: Mảng này có thể thay đổi kích cỡ. Là một trong những ưu điểm của VB, nó giúp quản lý bộ nhớ một cách hiệu quá. Ta có thể dùng một mảng lớn trong thời gian ngắn sau đó xóa bỏ để trả vùng nhớ cho hệ thống.Khai báo: Khai báo Public hoặc Dim trong modun, hoặc khai báo stactic hay Dim trong thủ tục. Khai báo một mảng động bằng cách cho nó một danh sách không theo chiều nào cả.Dim <Tên mảng>Cấp phát số phần tử thật sự bằng dòng lệnh Redim.Redim DynArray(X+1)

Nhóm 4:1. Các hàm chuyển đổi xâu ký tựTên hàm:CBool

Mô tả:Cbool (expression)Chuyển đổi biểu thức expression sang kiểu Boolean

Tên hàm:CByte

Mô tả:Cbyte (expression)Chuyển đổi biểu thức expression sang kiểu Byte

Tên hàm:CCur

Mô tả:Ccur (expression)Chuyển đổi biểu thức expression sang kiểu Currency

Tên hàm:CDate

Page 12: Bài tập CTDL và GT 3

Mô tả:Cdate (expression)Chuyển đổi biểu thức expression sang kiểu Date

Tên hàm:CDbl

Mô tả:CDbl (expression)Chuyển đổi biểu thức expression sang kiểu Double

Tên hàm:CDec

Mô tả:Cdec (expression)Chuyển đổi biểu thức expression sang kiểu Decimal

Tên hàm:CInt

Mô tả:Cint (expression)Chuyển đổi biểu thức expression sang kiểu Integer

Tên hàm:CLng

Mô tả:CLng (expression)Chuyển đổi biểu thức expression sang kiểu Long

Tên hàm:CSng

Mô tả:CSng (expression)Chuyển đổi biểu thức expression sang kiểu Single

Tên hàm:CStr

Mô tả:CStr (expression)Chuyển đổi biểu thức expression sang kiểu String

Tên hàm:CVar

Mô tả:Cvar (expression)Chuyển đổi biểu thức expression sang kiểu Variant

2. Các hàm định dạng xâu ký tự

Page 13: Bài tập CTDL và GT 3

Tên hàm:Format

Mô tả:Format (expression [, format [, firstdayofweek [, firstweekofyear]]])Chuyển biểu thức expression theo định dạng mong muốn

Tham số:expressionBiểu thức cần định dạngformatKiểu định dạngfirstdayofweekNgày đầu tiên trong tuầnfirstweekofyearTuần đầu tiên trong năm

Tên hàm:FormatCurrency

Mô tả:FormatCurrency (Expression [,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])Chuyển biểu thức expression theo định dạng Currency

Tham số:ExpressionBiểu thức cần định dạngNumDigitsAfterDecimalSố số lẻ sau dấu phẩyIncludeLeadingDigitTham số phụ không cần thiếtUseParensForNegativeNumbersTham số phụ không cần thiếtGroupDigitsTham số phụ không cần thiết

Tên hàm:FormatDateTime

Mô tả:FormatDateTime(Date[,NamedFormat])

Tham số:DateNgày giờ cần định dạngNamedFormatKiểu định dạng

Ghi chú:Dùng cho tham số NamedFormatvbGeneralDate = 0GeneralDatevbLongDate = 1LongDate

Page 14: Bài tập CTDL và GT 3

vbShortDate = 2ShortDatevbLongTime = 3LongTimevbShortTime = 4ShortTime

Tên hàm:FormatNumber

Mô tả:FormatNumber (Expression [,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])Chuyển biểu thức expression theo định dạng Number

Tham số:ExpressionBiểu thức cần định dạngNumDigitsAfterDecimalSố số lẻ sau dấu phẩyIncludeLeadingDigitTham số phụ không cần thiếtUseParensForNegativeNumbersTham số phụ không cần thiếtGroupDigitsTham số phụ không cần thiết

Tên hàm:FormatPercent

Mô tả:FormatPercent(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])Chuyển biểu thức expression theo định dạng Percent

Tham số:ExpressionBiểu thức cần định dạngNumDigitsAfterDecimalSố số lẻ sau dấu phẩyIncludeLeadingDigitTham số phụ không cần thiếtUseParensForNegativeNumbersTham số phụ không cần thiếtGroupDigitsTham số phụ không cần thiết

Tên hàm:Str

Mô tả:Str(number)

Page 15: Bài tập CTDL và GT 3

Chuyển đổi số Number sang chuỗi

Tham số:NumberSố muốn chuyển

Tên hàm:Val

Mô tả:Val(string)Chuyển chuỗi string thành số

Tham số:StringChuỗi cần chuyển 3. Các hàm loại bỏ dấu cách ơ đầu và cuối xâu ký tựTên hàm:LTrim

Mô tả:LTrim(string)Cắt bỏ tất cả các kí tự trắng bên trái chuỗi string

Tham số:StringChuỗi cần cắt

Tên hàm:RTrim

Mô tả:RTrim(string)Cắt bỏ tất cả các kí tự trắng bên phải chuỗi string

Tham số:StringChuỗi cần cắt

Tên hàm:Trim

Mô tả:Trim(string)Cắt bỏ tất cả các kí tự trắng dư bên trái, bên phải và ở giữa chuỗi string

Tham số:StringChuỗi cần cắt

5. Các hàm trích ra một xâu con tư 1 xâu ký tựTên hàm:Left

Page 16: Bài tập CTDL và GT 3

Mô tả:Left(string, length)Cắt chuỗi string từ trái sang length ký tự

Tham số:stringChuỗi cần cắtlengthChiều dài chuỗi muốn cắt

Tên hàm:Right

Mô tả:Right(string, length)Cắt chuỗi string từ phải sang length ký tự

Tham số:stringChuỗi cần cắtlengthChiều dài chuỗi muốn cắt

Tên hàm:Mid

Mô tả:Mid(string, start[, length])Cắt chuỗi string từ vị trí start và cắt length ký tự

Tham số:stringChuỗi cần cắtstartVị trí bắt đầu cắtlengthChiều dài chuỗi muốn cắt

Tên hàm:Split

Mô tả:Split(expression[, delimiter[, limit[, compare]]])Tách chuỗi expression thành các chuỗi con với dấu phân cách delimiter

Tham số:expressionChuỗi cần táchdelimiterDấu phân cách giữa các từ trong chuỗi cần táchlimitSố từ cần tách, tính từ trái sangcompare

Page 17: Bài tập CTDL và GT 3

Chỉ rõ kiểu dữ liệu để so sánh trong quá trình tìm kiếm

Ghi chú:Dùng cho tham số comparevbUseCompareOption = –1Chế độ tùy chọn, VB sẽ tự động lựa lọai dữ liệu thích hợpvbBinaryCompare = 0So sánh nhị phânvbTextCompare = 1So sánh chuỗivbDatabaseCompare = 2So sánh dữ liệu

6. Các hàm so sánh xâu ký tự

Tên hàm:Like

Mô tả:"String1" Like "String2"So sánh 2 chuỗi cho phép sử dụng biệt ngữ (như dùng ký tự đại diện trong Dos) trị trả về = True nếu tương hợp.

Tham số:String1, String2: là hai chuỗi ký tự cần so sánh.

Tên hàm:StrComp

Mô tả:StrComp(string1, string2[, compare])So sánh hai chuỗi string1 và string2

Tham số:string1Chuỗi so sánh 1string2Chuỗi so sánh 2compareChỉ rõ kiểu dữ liệu để so sánh trong quá trình tìm kiếm

Ghi chú:Dùng cho tham số comparevbUseCompareOption = –1Chế độ tùy chọn, VB sẽ tự động lựa lọai dữ liệu thích hợpvbBinaryCompare = 0So sánh nhị phânvbTextCompare = 1So sánh chuỗivbDatabaseCompare = 2So sánh dữ liệu********Giá trị trả về*********

Page 18: Bài tập CTDL và GT 3

string1 nhỏ hơn string2  = -1string1 bằng string2 = 0string1 lớn hơn string2 = 1string1 hoặc string2 Null = Null

7. Hàm Split và joinTên hàm:Split

Mô tả:Split(expression[, delimiter[, limit[, compare]]])Tách chuỗi expression thành các chuỗi con với dấu phân cách delimiter

Tham số:expressionChuỗi cần táchdelimiterDấu phân cách giữa các từ trong chuỗi cần táchlimitSố từ cần tách, tính từ trái sangcompareChỉ rõ kiểu dữ liệu để so sánh trong quá trình tìm kiếm

Ghi chú:Dùng cho tham số comparevbUseCompareOption = –1Chế độ tùy chọn, VB sẽ tự động lựa lọai dữ liệu thích hợpvbBinaryCompare = 0So sánh nhị phânvbTextCompare = 1So sánh chuỗivbDatabaseCompare = 2So sánh dữ liệu

Ví dụ:Option ExplicitPrivate Sub Form_Load()Dim aSplit() As StringDim Names(1 To 5) As StringDim MyStr As String    Names(1) = "A"    Names(2) = "B"    Names(3) = "C"    Names(4) = "D"    Names(5) = "E"    MyStr = Join(Names(), "/")'Returns "A/B/C/D/E"    aSplit = Split(MyStr, "/", 5)'Returns aSplit(0)="A",...,aSplit(4)="E"End Sub

Tên hàm:Join

Mô tả:Join(sourcearray[, delimiter])

Page 19: Bài tập CTDL và GT 3

Nối tất cả các chuỗi trong mảng sourcearray với dấu phân cách delimiter

Tham số:sourcearrayMảng cần nối thành chuỗidelimiterDấu phân cách giữa các phần tử mảng

Ví dụ:Option ExplicitPrivate Sub Form_Load()Dim aSplit() As StringDim Names(1 To 5) As StringDim MyStr As String    Names(1) = "A"    Names(2) = "B"    Names(3) = "C"    Names(4) = "D"    Names(5) = "E"    MyStr = Join(Names(), "/")'Returns "A/B/C/D/E"    aSplit = Split(MyStr, "/", 5)'Returns aSplit(0)="A",...,aSplit(4)="E"End Sub

8. Các thao tác ghép nối xâu ký tựTa sử dụng dấu “&” và dấu “+” Ví dụ: “123” & ”456” = “123465”“123” + “456” = “123456”“123” & 456 = “123456”“123” + 456 = 579

9. Cách khai báo xâu ký tự.Ta có thể khai báo 1 biến kiểu chuỗi có chiều dài thay đổi hoặc cố định. Cú pháp:Dim <biến> As String[*Độ dài]

10. Cách gán giá trịKhi ta khai báo chuỗi có chiều dài cố định, nếu chuỗi được gán giá trị có chiều dài nhỏ hơn thì VB sẽ tự động thêm vào phần đuôi các ký tự trắng cho đủ số ký tự. Nếu có chiều dài lớn hơn thì sẽ tự động cắt đi

BAI TÂP LÂP TRINHNhóm 11. Function F(n As Integer) As Long If n = 1 Then F = 1 ElseIf n = 2 Then F = 2 Else F = 2 * F(n - 1) + 3 * F(n - 2)

Page 20: Bài tập CTDL và GT 3

End IfEnd Function

5.Function F(m As Integer, n As Integer) As Long If n = 0 Then F = m + 1 ElseIf m = 0 Then F = F(m, n - 1) Else F = F(F(m, n - 1), m - 1) End IfEnd Function

Nhóm 24. Tìm kiếm theo giải thuật nhị phân dùng phần tử giữa khối làm chốtConst N = 6Private Sub Form_Load() Dim x As Integer Dim low As Integer, hi As Integer, mid As Integer Dim a(1 To N) As Integer a(1) = 10 a(2) = 13 a(3) = 19 a(4) = 99 a(5) = 155 a(6) = 1232 x = InputBox("x=") x = Int(Val(x)) low = 1 hi = N Do While hi >= low mid = (hi + low) \ 2 If a(mid) < x Then low = mid + 1 Else If x < a(mid) Then hi = mid - 1 Else hi = -1 End If End If Loop

Page 21: Bài tập CTDL và GT 3

If hi = -1 Then MsgBox "Tim thay o vtri: " & mid Else MsgBox "ko tim thay" End If End Sub

BAI TÂP VÂN DỤNGNhóm 15. Tìm số tự nhiên nhỏ nhất thỏa mãn điều kiện tổng của nó với tổng của tất cả các chữ số của nó bằng số tự nhiên N cho trước

Function sochuso(n As Long) As Integer For i = 1 To n If (n \ (10 ^ i)) = 0 Then sochuso = i Exit Function End If NextEnd FunctionFunction cso(x As Long, vt As Long) If x < 10 Then cso = 1 Else cso = (x \ (10 ^ (vt - 1))) Mod 10 End IfEnd FunctionPrivate Sub Command1_Click() Dim i As Long, n As Long Dim j As Long n = InputBox("n=") For i = 1 To n tong = i For j = 1 To sochuso(i) tong = tong + cso(i, j) Next If tong = n Then MsgBox i End If NextEnd Sub

Private Sub Form_Load()

Page 22: Bài tập CTDL và GT 3

End Sub

Nhóm 41. Dãy các số tự nhiên từ 1 đến N được viết liên tiếp thành một hàng nganh. Hãy viết 1 hàm trả về số chữ số D trong hàng đó:Private Sub Form_Load()Dim mg(20)Dim i, s, a As Integers = 0For i = 1 To 20mg(i) = iNextFor i = 1 To 20a = InStr(1, CStr(mg(i)), "2")If a <> 0 Thens = s + 1End IfNextMsgBox sEnd Sub

2. Dãy các số tự nhiên từ 1 đến N được viết liên tiếp thành một hàng ngang. Hãy viết một hàm trả về chữ số ở vị trí K trong hàng đóPrivate Sub Form_Load()Dim mg(20)Dim i, s, a As Integers = 0For i = 1 To 20mg(i) = iNextFor i = 1 To 20a = InStr(1, CStr(mg(i)), "2")If a <> 0 ThenMsgBox iEnd IfNextEnd Sub

3. Cho dãy các số tự nhiên 1,2...N. Hãy viết 1 hàm cho kết quả là số các số trong dãy đó thỏa mãn điều kiện trong biểu diễn hệ 10 của chúng có chữ số D

Private Sub Form_Load()Dim i, s, a As Integer

Page 23: Bài tập CTDL và GT 3

s = 0For i = 1 To 20a = InStr(1, CStr(i), "2")If a <> 0 Thens = s + 1End IfNextMsgBox sEnd Sub

4. Cho dãy các số tự nhiên 1,2...N. Hãy viết 1 hàm cho kết quả là số các số trong dãy đó thỏa mãn điều kiện trong biểu diễn hệ 10 của chúng có chữ số D nhiều nhất

Function countD(socankiemtra As String, socantim As String) As IntegerDim sFor i = 1 To Len(socankiemtra)s = Mid(socankiemtra, i, 1)If s = socantim ThencountD = countD + 1End IfNextEnd FunctionPrivate Sub Form_Load()Dim a, D, c, maxValueDim j As Booleana = 0D = 2c = 0j = FalsemaxValue = 0For i = 224 To 1 Step -1c = countD(CStr(i), CStr(D))'MsgBox c'MsgBox iIf (c > maxValue) Thenj = TruemaxValue = ca = 0a = a + 1ElseIf c = maxValue Thena = a + 1End If'MsgBox iEnd IfNextMsgBox "ket qua co:" & a & " so"End Sub