Tham Số Và Việc Truyền Tham Số Cho Chương Trình Con

2.13. Lệnh For…Next

Cấu trúc lặp này thường được dùng đối với vòng lặp biết trước số lần lặp thông qua một biến đếm. Biến đếm sẽ chạy từ một giá trị khởi đầu, khi nó đạt đến giá trị cuối thì vòng lặp kết thúc và cứ mỗi khi thực hiện xong đoạn lệnh của thân vòng lặp thì biến đếm lại được tăng (hoặc giảm xuống) một lượng bằng giá trị của bước nhảy: Cú pháp:

For <biến đếm> = <giá trị đầu> To <giá trị cuối> [Step <bước nhảy>]

<khối lệnh> Next

Hoạt động:

Bước 1: Biến đếm nhận giá trị bằng giá trị đầu

Bước 2: Nếu bước nhảy là số âm, máy kiểm tra điều kiện (biến đếm >= giá trị cuối)? Nếu bước nhảy là số dương, máy sẽ kiểm tra điều kiện (biến đếm <= giá trị cuối)?

Bước 3: Nếu điều kiện trên là đúng thì khối lệnh được thực hiện và biến đếm được tăng thêm một giá trị bằng bước nhảy và quay lại bước 2, ngược lại máy sẽ kết thúc vòng lặp For và làm các lệnh sau vòng lặp For

Ví dụ: Đoạn lệnh sau:

For i = 1 to 10 Print i

Có thể bạn quan tâm!

Xem toàn bộ 248 trang tài liệu này.

Next

sẽ in lên màn hình các số từ 1 đến 10


2.14. Lệnh Do While...Loop

Cấu trúc lặp này được sử dụng đối với vòng lặp có số lần lặp không xác định, thông qua một biểu thức điều kiện, nghĩa là chúng ta muốn thực hiện một khối lệnh nào đó lặp lại một số lần, nhưng không xác định được số lần lặp lại là bao nhiêu mà chỉ biết rằng việc lặp lại thực hiện khối lệnh đó sẽ kết thúc khi một điều kiện mà chúng ta đưa ra là sai.

Cú pháp:

Do While <điều kiện>

<Khối lệnh> Loop

Hoạt động:

Đầu tiên chương trình sẽ kiểm tra <điều kiện>, nếu điều kiện đúng (True) thì

<Khối lệnh> được thực hiện và sau đó chương trình lại quay lại kiểm tra <điều kiện> (lúc này giá trị của điều kiện có thể đã thay đổi), nếu <điều kiện> vẫn đúng thì

<Khối lệnh> lại được thực hiện. Quá trình này cứ tiếp diễn cho đến khi <điều kiện> nhận giá trị sai (False).

Ví dụ: Đoạn lệnh sau:

i = 1

Do While i <= 10 Print i

i = i + 1 Loop

sẽ in lên màn hình các số từ 1 đến 10


2.15. Lệnh Do…Loop While

Cú pháp:

Do

<Khối lệnh>

Loop While <điều kiện>

Hoạt động:

Tương tự như vòng lặp Do While…Loop, nhưng ở đây <Khối lệnh> được máy thực hiện trước, rồi máy kiểm tra <điều kiện>. Như vậy, trong trường hợp này,

<khối lệnh> được thực hiện ít nhất một lần mà không phụ thuộc vào <điều kiện>.

Ví dụ: Đoạn lệnh sau:

i = 1 Do

Print i

i = i + 1

Loop While i <= 10

sẽ in lên màn hình các số từ 1 đến 10


2.16. Lệnh Do Until…Loop

Cú pháp:

Do Until <điều kiện>

<Khối lệnh> Loop

Hoạt động:

Trong trường hợp này, <Khối lệnh> sẽ được thực hiện cho đến khi <điều kiện> nhận giá trị đúng (TRUE) và <điều kiện> được kiểm tra trước khi thực hiện lệnh.

Ví dụ:

i = 1

Do Until i > 10 Print i

i = i + 1 Loop

2.17. Lệnh Do…Loop Until

Cú pháp:

Do

<Khối lệnh>

Loop Until <điều kiện>

Hoạt động:

Giống như lệnh Do Until…Loop, nhưng ở đây <Khối lệnh> được thực hiện rồi mới kiểm tra <điều kiện>.

Ví dụ:

i = 1 Do

Print i

i = i + 1 Loop Until i > 10

Chú ý:

Lệnh Exit For cho phép thoát khỏi lệnh vòng lặp For, Exit Do cho phép thoát khỏi lệnh lặp Do… Loop.

2.18. Lệnh While..Wend

Cú pháp:

While <điều kiện>

<Khối lệnh> Wend

Hoạt động:

Tương tự lệnh lặp Do While…Loop, nhưng ta không thể thoát khỏi lệnh lặp bằng lệnh Exit Do. Vì vậy, lệnh lặp này chỉ thoát khi <điều kiện> sai.

2.19. Lệnh Goto

Người lập trình khó kiểm soát hết các tình huống có thể gây ra lỗi. Vì vậy, các thao tác bẫy các lỗi thực thi của chương trình là cần thiết. Visual Basic cũng cung cấp cho ta một số cấu trúc để bẫy các lỗi đang thực thi.

Dạng 1. Cú pháp:

On Error GoTo <Tên nhãn>

<Các câu lệnh có thể gây ra lỗi>

<Tên nhãn>:

<Các câu lệnh xử lý lỗi>

Giải thích: Nếu một lệnh trong <Các câu lệnh có thể gây ra lỗi> thì khi chương trình thực thi đến câu lệnh đó, chương trình sẽ tự động nhảy đến đoạn chương trình định nghĩa bên dưới <Tên nhãn> để thực thi.

Dạng 2. Cú pháp:

On Error Resume Next

<Các câu lệnh có thể gây ra lỗi>

Giải thích: Nếu một lệnh trong <Các câu lệnh có thể gây ra lỗi> thì khi chương trình thực thi đến câu lệnh đó, chương trình sẽ tự động bỏ qua câu lệnh bị lỗi và thực thi câu lệnh kế tiếp.

2.20. Hàm và thủ tục

Hàm và thủ tục là những khái niệm cơ bản của lập trình có cấu trúc. Chúng thực chất là một đoạn lệnh thực hiện một công việc nào đó, và được đại diện bởi tên hàm hay thủ tục. Khi giải quyết một bài toán chúng ta thường chia bài toán đó ra thành nhiều phần nhỏ, mỗi phần nhỏ đó được thực hiện bởi một hàm hay thủ tục. Hàm hay thủ tục có thể được sử dụng lại trong một ứng dụng khác. Mỗi hàm hay thủ tục phải có tên riêng biệt, phạm vi, danh sách các tham số, riêng đối với hàm còn có thêm giá trị trả về.

2.20.1. Khai báo thủ tục và hàm

a) Khai báo thủ tục Cú pháp :

[Private|Public|Friend] Sub <Tên thủ tục> (Tham số hình thức)

„Các dòng lệnh End Sub

Ví dụ:

Private Sub Swap(so1 As Integer, so2 As Integer)

Dim Temp

temp = so1: so1 = so2: so2 = temp End Sub

b) Khai báo hàm Cú pháp :

[Private|Public] Function <Tên hàm> (Tham số hình thức) As <Kiểu dữ liệu>

„Các dòng lệnh End Function

Ví dụ:

Public Function Giaithua(n As Integer) As Long Dim i As Integer

Giaithua = 1 For i = 1 To n

Giaithua = Giaithua * i

Next

End Function


2.20.2. Lời gọi thủ tục, hàm

a) Gọi thủ tục

Call <Tên thủ tục >(<Tham số thực>) hoặc:

<Tên thủ tục> <Tham số thực>

Ví dụ:

Call Swap(a,b) hoặc

Swap a, b

b) Gọi hàm

Khác với thủ tục, chúng ta phải có một biến có kiểu dữ liệu thích hợp (trùng với kiểu dữ liệu trong phần khai báo kiểu giá trị trả về của hàm) để lưu giá trị trả về khi hàm được thực hiện với các tham số thực truyền vào.

<Biến> = <Tên hàm>(danh sách tham số thực)

Ví dụ:

Ketqua = giaithua(txtso.text)


2.20.3. Thoát khỏi thủ tục / hàm

Exit Sub dùng để thoát khỏi thủ tục, Exit Function dùng để thoát khỏi hàm


2.20.4. Tham số và việc truyền tham số cho chương trình con

1) Tham số hình thức/Tham số thực

Tham số hình thức là các tham số được đưa ra trong phần khai báo chương trình con, nó chỉ ra kiểu dữ liệu của các tham số của chương trình con. Trong chương trình con các tham số kiểu này chỉ có tên, chứ chưa có giá trị, chỉ khi nào xuất hiện

lời gọi chương trình con, các tham số mới được truyền giá trị từ bên ngoài và chương trình con sẽ được hoạt động với bộ giá trị ấy. Chính vì vậy chúng được gọi là tham số hình thức. Các biến bên ngoài truyền vào chương trình con được gọi là các tham số thực, vì chúng thực sự tham gia vào chương trình con với tư cách là một giá trị. Khi gọi đến chương trình con thì phải có sự tương ứng 1-1 giữa tham số thực và tham số hình thức cả về thứ tự và kiểu dữ liệu. Trong các ví dụ trên, các tham số so1, so2 ở thủ tục Swap và n ở hàm Giaithua là các tham số hình thức và các tham số a, b ở thủ tục Swap và txtso.text ở hàm Giaithua là các tham số thực.

2) Truyền tham số theo tham biến/tham trị

Khi khai báo thủ tục/hàm, sử dụng từ khóa ByVal trước tham số để quy định tham số đó sẽ được truyền theo tham trị; sử dụng từ khóa ByRef trước tham số để quy định tham số đó được truyền theo tham biến (mặc định của Visual Basic 6.0 là truyền theo tham biến, nên từ khóa ByRef có thể bỏ qua).

Truyền tham số theo trị (tham trị) tức là cái mà chúng ta sử dụng trong chương trình con là bản sao của tham số thực được truyền vào chương trình con, vì vậy việc truyền theo trị có những đặc điểm sau:

Nếu trong chương trình con có những lệnh làm thay đổi giá trị của tham số hình thức thì những thay đổi này không có ảnh hưởng gì đến giá trị của tham số thực được truyền ở đầu vào khi chúng ta gọi chương trình con, vì những thay đổi này chỉ thực hiện trên bản sao tương ứng.

Tốn một ít bộ nhớ và thời gian cho việc sao chép (tùy theo kích thước của tham số tương ứng)

Truyền tham số theo tham biến được thực hiện vào chính địa chỉ của biến được truyền, nghĩa là mọi lệnh của chương trình con đối với tham số hình thức cũng chính là các lệnh đối với biến này. Vì vậy, việc truyền theo tham biến có những đặc điểm sau:

Nếu trong chương trình con có những lệnh làm thay đổi giá trị của tham số hình thức thì những thay đổi này cũng chính là những thay đổi trên biến được truyền. Hay nói cách khác những sự thay đổi đó vẫn có tác dụng đối với các tham số thực truyền vào khi kết thúc chương trình con.

Không tốn thêm bộ nhớ và thời gian do không phải sao chép

Ví dụ:

Chúng ta có hai hàm Swap1 và Swap2 như sau:

Private Sub Swap1(ByRef so1 As Integer,ByRef so2 As Integer)

Dim temp

temp = so1: so1 = so2: so2 = temp End Sub

Private Sub Swap2(ByVal so1 As Integer, ByVal so2 As Integer)

Dim temp

temp = so1: so1 = so2: so2 = temp End Sub


3 Tham số tùy chọn Khi chúng ta muốn quy định một tham số của hàm hay thủ 1

3) Tham số tùy chọn

Khi chúng ta muốn quy định một tham số của hàm hay thủ tục là tham số tùy chọn (tức là có thể có hoặc bỏ qua trong lời gọi) thì chúng ta dùng từ khóa Optional trước khai báo tham số của hàm/thủ tục. Tham số tùy chọn luôn được khai báo cuối cùng trong danh sách tham số và ta nên khởi gán giá trị cho tham số tuỳ chọn ngay từ khi khai báo.

Ví dụ:

Function Trongluong(m As Double, Optional g As Double = 9.8) As Double Trongluong = m*g

End Function

Khi gọi hàm chúng ta có thể có hoặc bỏ qua tham số tùy chọn.

Ví dụ:

P = Trongluong(m) hoặc

P = Trongluong(m,g)

4) Biến địa phương/biến toàn cục

Khái niệm địa phương và toàn cục của phạm vi của biến là đề cập đến phạm vị sử dụng và có tác động của biến đó. Nếu nó chỉ có phạm vi là trong thủ tục/hàm thì nó được gọi là biến địa phương, còn nếu nó có phạm vi sử dụng trong toàn Project thì nó được gọi là biến toàn cục. Tuy nhiên trong phạm vi một form module, thì những biến khai báo trong phần General lại vừa là biến địa phương vừa là biến toàn cục, vì vậy khái niệm địa phương hay toàn cục chỉ có tính tương đối. Sau đây là một số chú ý về biến địa phương/toàn cục trong Visual Basic:

Những biến được khai báo trong một Sub/Function trong phạm vi Form hay của Bas Module (mô-đun chuẩn) thì được gọi là biến địa phương và chỉ có phạm vi sử dụng trong Sub/Fuction đó.

Những biến được khai báo với từ khóa Private/Dim trong phần General của Form thì chỉ có phạm vi sử dụng trong Form, và toàn bộ các Sub/Function trong phạm vi Form đó, nhưng không thể sử dụng bên ngoài Form. Vì vậy, nó là địa phương trong toàn Project, nhưng là toàn cục trong phạm vi Form

Những biến được khai báo với từ khóa Public trong phần General của Form thì có phạm vi sử dụng trong toàn bộ Project, vì vậy nó có phạm vi toàn cục. Tuy nhiên ở bên ngoài Form mà muốn sử dụng biến đó thì phải sử dụng theo cú pháp sau: <Tên Form>.<Tên biến>

Những biến được khai báo với từ khóa Public trong phần General của Bas Module thì có phạm vi sử dụng trong toàn bộ Project và khi sử dụng nó ở bên ngoài Bas Module thì chỉ cần gọi tên biến đó. Những biến này cũng có phạm vi toàn cục.

2.20.5. Phạm vi hoạt động của các thủ tục và hàm

Phạm vi của hàm hay thủ tục có thể được quy định bởi từ khoá Public hoặc Private. Nếu hàm hay thủ tục được khai báo với từ khóa Private, nó chỉ có thể được gọi trong phạm vi của Module mà nó được định nghĩa. Nếu hàm hay thủ tục được khai báo với từ khóa Public, nó có thể được gọi ở bên ngoài phạm vi của Module mà nó được định nghĩa.

2.21 Module

Một ứng dụng đơn giản có thể chỉ có một biểu mẫu, lúc đó tất cả mã lệnh của ứng dụng đó được đặt trong cửa sổ mã lệnh của biểu mẫu đó (gọi là Form Module). Khi ứng dụng được phát triển lớn lên, chúng ta có thể có thêm một số biểu mẫu nữa và lúc này khả năng lặp đi lặp lại nhiều lần của một đoạn mã lệnh trong nhiều biểu mẫu khác nhau là rất lớn.

- Để tránh việc lặp đi lặp lại trên, ta tạo ra một Module riêng rẽ chứa các chương trình con được dùng chung. Visual Basic cho phép 3 loại Module:

Module biểu mẫu (Form module): đi kèm với mỗi một biểu mẫu là một module của biểu mẫu đó để chứa mã lệnh của biểu mẫu này. Với mỗi điều khiển trên biểu mẫu, module biểu mẫu chứa các chương trình con và chúng sẵn sàng được thực thi để đáp ứng lại các sự kiện mà người sử dụng ứng dụng tác động trên điều khiển. Module biểu mẫu được lưu trong máy tính dưới dạng các tập tin có đuôi là *.frm.

Module chuẩn (Standard module): Mã lệnh không thuộc về bất cứ một biểu mẫu hay một điều khiển nào sẽ được đặt trong một module đặc biệt gọi là module chuẩn

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 16/07/2022