Bài Thực Hành 3 Lập trình Visual Basic (VBPR131085) 1 BÀI THỰC HÀNH 3 Hàm và Thủ Tục, Biến Toàn Cục và Cục Bộ, Tham Trị và Tham Chiếu, Chuỗi, Mảng 1 Hãy ĐỌC CẨN THẬN TẤT CẢ NỘI DUNG trong bài thực hàn[.]
Bài Thực Hành - Lập trình Visual Basic (VBPR131085) BÀI THỰC HÀNH Hàm Thủ Tục, Biến Toàn Cục Cục Bộ, Tham Trị Tham Chiếu, Chuỗi, Mảng Hãy ĐỌC CẨN THẬN TẤT CẢ NỘI DUNG thực hành trước làm Sinh viên TỰ GÕ CODE, KHƠNG COPY từ có sẵn, để nắm việc lập trình Chuẩn đầu Sau này, người học có thể: Phân biệt phạm vi biến: toàn cục, cục (Public, Private) Phân biệt sử dụng Hàm (Function) Thủ tục (Sub) Chỉ kết khác truyền tham số Giá trị Địa (ByVal ByRef) Sử dụng cú pháp bẫy lỗi On Error Sử dụng kiểu liệu có cấu trúc: Chuỗi, Mảng Chuẩn bị Đọc lại Hàm Thủ tục, Phạm vi biến, Cách truyền tham số, Các kiểu liệu có cấu trúc (Chuỗi, Mảng) Tài liệu tham khảo gợi ý: Chương 3, Chương 4, Chương 5, Giáo trình Visual Basic 6.0, Nguyễn Đăng Quang, Đại học Sư Phạm Kỹ Thuật TP Hồ Chí Minh Phương tiện Máy tính có cài đặt Visual Studio 6.0 Kiến thức bổ trợ Các hàm sử dụng: Left(s,n): trả n ký tự bên trái chuỗi s Ví dụ: Left(“Visual Basic”,6)”Visual” Right(s,n): trả n ký tự bên phải chuỗi s Ví dụ: Right(“Visual Basic”,5)”Basic” Giải thuật xếp Chọn (Selection sort): Cho mảng phần tử: Chọn phần tử So sánh với phần tử sau mảng, khơng thỏa điều kiện xếp đổi chỗ Ví dụ: phần tử đầu tiên: 4, phần tử sau nó: 3, yêu cầu tăng dần phải đổi chỗ Chọn phần tử kế tiếp, lặp lại bước 2, hết mảng Bài Thực Hành - Lập trình Visual Basic (VBPR131085) Tham trị tham chiếu: Có kiểu truyền tham số cho hàm/thủ tục: tham trị tham chiếu: Tham trị (ByVal): Giá trị truyền vào copy thành biến khác để đưa vào hàm/thủ tục Giá trị biến dùng làm tham số cho hàm/thủ tục không bị thay đổi Tham chiếu (ByRef): Giá trị truyền vào không copy thành biến khác Hàm/Thủ tục làm việc trực tiếp biến làm tham số Giá trị biến làm tham số bị thay đổi hàm/thủ tục Đây kiểu truyền tham số mặc định VB Các hệ đếm: Hệ thập phân: hay hệ đếm số 10 (decimal), dùng 10 chữ số (0, 1, 2, 3, 4, 5, 6, 7, 9) để biểu đạt giá trị Ví dụ: 34; 5.11 Hệ nhị phân: hay hệ đếm số (binary), dùng chữ số (0 1) để biểu đạt giá trị Ví dụ: 101011; 10.011 Hệ thập lục phân: hay hệ đếm số 16 (hexadecimal), dùng 16 chữ số (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F) để biểu đạt giá trị Ví dụ: A25; E34F; 4AC0.A3 Cách chuyển đổi hệ đếm: có nguyên tắc: Nguyên tắc 1: Để đổi từ hệ khác sang thập phân: ta nhân trọng số với lũy thừa bậc n số, với n số vị trí (vị trí hàng đơn vị 0) Ví dụ: o Đổi số nhị phân (cơ số = 2) 1101.0112 sang hệ thập phân: Trọng số 1 1 Chỉ số vị trí -1 -2 -3 1101.0112 = 1*23 + 1*22 + 0*21 + 1*20 + 0*2-1 + 1*2-2 + 1*2-3 = 13.37510 o Đổi số thập lục phân (cơ số = 16) 4AB.316 sang hệ thập phân: Trọng số A B Chỉ số vị trí -1 4AB.316 = 4*162 + 10*161 + 11*160 + 3*16-1 = 1195.187510 Nguyên tắc 2: Để đổi từ thập phân sang hệ khác: ta chia số cần đổi cho số hệ đích (2; 16), ghi lại số dư, sau lấy phần nguyên thương chia tiếp cho số hệ đích Lặp lại đến phần nguyên thương = Kết số dư ghi ngược từ lên Nguyên tắc dùng cho số nguyên Đối với số có phần thập phân, ta đổi phần nguyên Còn phần thập nhân ta nhân với số hệ đích, ghi lại phần ngun tích, sau lấy phần thập nhân tích tiếp tục nhân với số đích phần thập phân = Kết phần nguyên ghi từ xuống Bài Thực Hành - Lập trình Visual Basic (VBPR131085) Ví dụ: Đổi số thập phân 13.37510 sang hệ nhị phân (cơ số đích = 2): o Đổi phần nguyên 1310: chia lấy dư 13 1 1310 = 11012 o Đổi phần thập phân 0.37510: nhân lấy phần nguyên 0.375 * = 75 0.75 * = 1.5 0.5 * = 1.0 0.37510 = 0.0112 Vậy 13.37510 = 1101.0112 Nguyên tắc 3: Chuyển đổi nhị phân thập lục phân: chữ số thập lục phân chữ số nhị phân Bảng sau liệt kê giá trị tương ứng hệ thập lục phân nhị phân: Thập lục phân Nhị phân A B C D E F 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Ví dụ: o Đổi số nhị phân 1100111.0112 sang thập lục phân: 1100111.0112 = 0110 0111 01102 = 67.616 o Đổi số thập lục phân 2C5.7E16 sang nhị phân: 2C5.7E16 = 0010 1100 0101 0111 11102 = 1011000101.01111112 Bài Thực Hành - Lập trình Visual Basic (VBPR131085) Thời lượng: tiết Nội dung thực hành Bài thực hành có hướng dẫn chi tiết: 6.1 Chuyển đổi thập phân thập lục phân 6.2 Tính tổ hợp 6.3 Tham trị tham chiếu 11 6.4 Sắp xếp mảng tăng dần 13 6.5 Bẫy lỗi On Error 15 6.6 Xóa khoảng trắng thừa chuỗi 18 Bài thực hành tự thực hiện: 7.1 Viết chương trình chuyển đổi số hệ đếm: nhị phân thập phân, nhị phân thập lục phân 19 7.2 Viết chương trình đếm số từ chuỗi 19 7.3 Viết chương trình xếp mảng tăng dần, với mảng chuỗi số ngăn cách khoảng trắng* 19 6.1 CHUYỂN ĐỔI GIỮA THẬP PHÂN VÀ THẬP LỤC PHÂN 6.1.1 Mô tả Dữ liệu vào: số thập phân thập lục phân (nguyên dương) Dữ liệu ra: chuyển đổi thành số thập lục phân thập phân Điều khiển: nút “Chuyen sang THAP LUC PHAN” “Chuyen sang THAP PHAN”: đổi số sang hệ tương ứng 6.1.2 Thực Mở Visual Basic, chọn New Project/Standard EXE, save vào thư mục Bai12_ChuyenDoiThapPhan_ThapLucPhan (tự tạo trước) Tạo form hình: CommandButton: cmdThapPhanSangThapLucPhan cmdThapLucPhanSangThapPhan TextBox: txtThapPhan txtThapLucPhan Bài Thực Hành - Lập trình Visual Basic (VBPR131085) Tạo Standard Module (file dùng để chứa code dùng chung cho form ứng dụng): Nhấp phải vào Project chọn Add/Module: Trong file module vừa tạo, nhập code sau vào: Lưu ý: Sinh viên phải suy nghĩ để hiểu chức (mục đích) hàm/thủ tục bên Chú ý thích (1), (2) (3) khai báo toàn cục cục (Public Private) để nắm phạm vi biến Option Explicit '(1) Public: TỒN CỤC: Biến sử dụng nơi chương trình Public ThapPhan As Long Public ThapLucPhan As String '(2) Private: CỤC BỘ (trong module): Biến dùng module (file) mà khai báo Private CoSo As Integer Private Function ChuSoThapLuc(ChuSoThapPhan As Integer) As String '(3) Dim = Private: CỤC BỘ (trong hàm): Biến dùng hàm mà khai báo Dim ChuSoThapLucPhan As String Select Case ChuSoThapPhan Case Is a(j) Then HoanDoiViTri a(i), a(j) End If Next Next lblKQ.Caption = a(0) & " " & a(1) & " " & a(2) & " " & a(3) & " " & a(4) End Sub Private Sub HoanDoiViTri(a As Integer, b As Integer) Dim temp As Integer temp = a a = b b = temp End Sub Lưu nhấn nút Start hay F5 để chạy xem kết quả: Sửa dòng khai báo thủ tục HoanDoiViTri(): Private Sub HoanDoiViTri(ByVal a As Integer, ByVal b As Integer) Dim temp As Integer temp = a a = b b = temp End Sub Lưu nhấn nút Start hay F5 để chạy xem kết Câu hỏi: Mảng có xếp khơng? Tại sao? 14 Bài Thực Hành - Lập trình Visual Basic (VBPR131085) 6.5 BẪY LỖI BẰNG ON ERROR 6.5.1 Mô tả Dữ liệu vào: số nguyên không âm N Dữ liệu ra: giai thừa N Điều khiển: nút cmdTinhGiaiThua: thực tính giai thừa 6.5.2 Thực Mở Visual Basic, chọn New Project/Standard EXE, save vào thư mục Bai16_BayLoiBangOnError (tự tạo trước) Tạo form hình: Nhấp đúp vào nút cmdTinhGiaiThua nhập code: Private Dim Dim Dim Sub cmdTinhGiaiThua_Click() KQ As Long i As Integer n As Integer n = Val(txtN.Text) KQ = For i = To n Step KQ = KQ * i Next lblKQ.Caption = KQ End Sub 15 Bài Thực Hành - Lập trình Visual Basic (VBPR131085) Lưu nhấn nút Start hay F5 để chạy xem kết quả: Khi nhập N nhỏ 12: Khi nhập N lớn 12, thông báo lỗi xuất chương trình bị thốt: Để giải vấn đề này, ta dùng cú pháp bẫy lỗi On Error: 16 Bài Thực Hành - Lập trình Visual Basic (VBPR131085) Nhấp đúp vào nút cmdTinhGiaiThua sửa code: Private Dim Dim Dim Sub cmdTinhGiaiThua_Click() KQ As Long i As Integer n As Integer n = Val(txtN.Text) On Error GoTo XuLyLoi 'Lệnh bẫy lỗi phải đặt câu lệnh gây lỗi KQ = For i = To n Step KQ = KQ * i Next lblKQ.Caption = KQ Exit Sub 'Lệnh thoát khỏi thủ tục, để tránh chạy code xử lý lỗi chương trình khơng có lỗi (Chú ý: Exit Sub ≠ End Sub) XuLyLoi: 'Phần code xử lý lỗi, thường đặt cuối hàm/thủ tục, thường dùng Select Case Select Case Err.Number ' Err.Number: mã số lỗi Case ' Lỗi 6: tràn nhớ lblKQ.Caption = "Xin nhap N nho hon." Case Else ' Xử lý lỗi khác lblKQ.Caption = "Mot loi chua xac dinh da xay ra!" End Select End Sub Lưu nhấn nút Start hay F5 để chạy xem kết quả: Khi nhập N lớn 12, chương trình khơng bị thốt: 17 Bài Thực Hành - Lập trình Visual Basic (VBPR131085) 6.6 XĨA KHOẢNG TRẮNG THỪA TRONG CHUỖI 6.6.1 Mơ tả Dữ liệu vào: chuỗi có khoảng trắng thừa, ví dụ: “ Su Pham Ky Thuat TP.HCM ” Dữ liệu ra: chuỗi xóa khoảng trắng thừa: “Su Pham Ky Thuat TP.HCM” Điều khiển: nút cmdXoaKhoangTrangThua: thực xóa khoảng trắng thừa chuỗi Yêu cầu: Chỉ phép sử dụng hàm Len() Mid() Không sử dụng hàm thủ tục xử lý chuỗi có sẵn khác VB 6.6.2 Thực Mở Visual Basic, chọn New Project/Standard EXE, save vào thư mục Bai17_XoaKhoangTrangThuaTrongChuoi (tự tạo trước) Tạo form hình: Nhấp đúp vào nút cmdXoaKhoangTrangThua nhập code: Private Sub cmdXoaKhoangTrangThua_Click() Dim KQ As String Dim i As Integer KQ = txtChuoi.Text 'Xóa khoảng trắng đầu chuỗi Do While Mid(KQ, 1, 1) = " " KQ = Mid(KQ, 2) Loop If Len(KQ) > Then 'Xóa khoảng trắng cuối chuỗi Do While Mid(KQ, Len(KQ), 1) = " " KQ = Mid(KQ, 1, Len(KQ) - 1) Loop 'Xóa khoảng trắng thừa bên chuỗi, cách duyệt từ đầu đến hết chuỗi, gặp khoảng trắng liên tiếp xóa bớt khoảng trắng For i = To Len(KQ) Step 18 Bài Thực Hành - Lập trình Visual Basic (VBPR131085) If (Mid(KQ, i, 1) = " ") And (Mid(KQ, i + 1, 1) = " ") Then KQ = Mid(KQ, 1, i) & Mid(KQ, i + 2) i = i - End If Next End If lblKQ.Caption = "" End Sub Lưu nhấn nút Start hay F5 để chạy xem kết quả: Bài tập đề nghị 7.1 Viết chương trình chuyển đổi số hệ đếm: nhị phân thập phân, nhị phân thập lục phân 7.2 Viết chương trình đếm số từ chuỗi Mô tả: Đếm số từ chuỗi, ví dụ: chuỗi “ Su Pham Ky Thuat TP.HCM” có từ Gợi ý: Dùng thủ tục xóa khoảng trắng thừa chuỗi (bài 6.6 Xóa khoảng trắng thừa chuỗi) Sau đếm số khoảng trắng chuỗi Số từ = Số khoảng trắng + 7.3 Viết chương trình xếp mảng tăng dần, với mảng chuỗi số ngăn cách khoảng trắng* Mô tả: Người dùng nhập mảng chuỗi, ví dụ, “ -3 12 77” Sau chương trình tách chuỗi thành số đưa vào mảng thực xếp Gợi ý: Dùng mảng động Số phần tử mảng số từ chuỗi (bài 7.2) Cắt chuỗi thành số dựa vào khoảng trắng ngăn cách đưa vào mảng để xếp HẾT 19