Đề tài Chương trình mô phỏng máy tính bỏ túi

Do thông tin trong các hộp văn bản Visual Basic luôn được lưu trữ dưới dạng văn bản, nên trong Visual Basic, các chuỗi tỏ ra quan trọng hơn nhiều so với trong Basic bình thường. Một chuỗi chẳng qua là một nhóm kí tự được bao trong các dấu nháy kép. Khi có người nhập thông tin vào hộp văn bản, Visual Basic luôn lưu trữ chúng dưới dạng một chuỗi. Do đó, cho dù ta có một hộp văn bản chủ ý để lưu giữ một khối lượng, thì nội dung đó vẫn được xem là một chuỗi.

 

doc37 trang | Chia sẻ: maiphuongdc | Lượt xem: 4196 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đề tài Chương trình mô phỏng máy tính bỏ túi, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ù các tham số qui định dạng hiển thị chung. Ta có thể hiển thị các hộp đối thoại có sẵn thông qua : Phát biểu MsgBox hay hàm MsgBos ( ) Hàm InputBox Phát biểu MsgBox hay hàm MsgBox ( ) : Ta sử dụng MsgBox hay hàm MsgBox ( ) để hiển thị thông báo và nhận lại trả lời của người dùng. Phát biểu MsgBox hay hàm MsgBox ( ) có ba đối : Thông báo cần hiển thị : chuỗi kí tự Dạng hộp đối thoại : số nguyên (integer) Tiêu đề hộp đối thoại : chuỗi kí tự MsgBox (Message, Dialog Type, Tittle). Khi sử dụng hàm MsgBox ( ) thì ta phải có giá trị trở về 1.2. Hàm InputBox ( ) : Hàm inputBox ( ) dùng nhận thông tin từ người dùng. Hàm InputBox ( ) gồm một dòng thông báo (Message), hộp soạn thảo và hai nút OK, Cancel. Người dùng đưa thông tin nhập vào hộp soạn thảo và bấm OK. Tham số thứ nhất của InputBox ( ) là dòng thông báo, tham số thứ hai là tiêu đề hộp đối thoại InputBox ( ) trả về chuỗi kí tự nằm trong hộp soạn thảo. Hàm InputBox còn có thêm ba thông số khác. Đối thứ ba xác định chuỗi ban đầu trong hộp soạn thảo ngay khi hộp đối thoại xuất hiện. Hai đối số cuối xác định tọa độ của hộp đối thoại. a. Hộp đối thoại của người dùng : Đây là loại hộp đối thoại do người lập trình định nghĩa để tương thích yêu cầu nhập thông tin của người sử dụng Dùng phương thức Show với đối số 1 (do hộp thoại dạng Modal) để hiển thị hộp thoại người dùng b. Hộp đối thoại dùng chung : Ta có thể thực hiện (run time) bằng cách thay đổi một số thuộc tính của nó IV. CÁC HÀM VỀ CHUỖI Do thông tin trong các hộp văn bản Visual Basic luôn được lưu trữ dưới dạng văn bản, nên trong Visual Basic, các chuỗi tỏ ra quan trọng hơn nhiều so với trong Basic bình thường. Một chuỗi chẳng qua là một nhóm kí tự được bao trong các dấu nháy kép. Khi có người nhập thông tin vào hộp văn bản, Visual Basic luôn lưu trữ chúng dưới dạng một chuỗi. Do đó, cho dù ta có một hộp văn bản chủ ý để lưu giữ một khối lượng, thì nội dung đó vẫn được xem là một chuỗi. Phân tích chuỗi bằng hàm Mid, Left và Right : Để tiến hành phân tích một chuỗi hiện có, ta phải đặt một hàm trong thân vòng lặp cho phép kéo từng mẫu tự riêng lẻ hoặc các chùm lớn hơn ra khỏi một chuỗi. For I = 1 To Len (The String) ‘ mã hàm làm việc với các kí tự riêng lẻ Next I Hàm Mid : Trong các hàm trên, quan trọng nhất, ta có hàm Mid, trả về một chuỗi lưu trữ trong một variant, và hàm Mid$, hàm trả về chuỗi thực tế. Có thể dùng hoán đổi hai phiên bản này. Cú pháp của hàm Mid là : Mid (String, start [,length]) Khoản nhập đầu tiên lưu giữ chuỗi (hoặc biểu thức chuỗi) mà ta muốn cắt bỏ. Tiếp theo là vị trí khởi đầu của các kí tự mà ta muốn ra khỏi chuỗi. Ví trí chót tùy chọn sẽ chỉ định số lượng kí tự mà ta muốn kéo ra. Hai tùy chọn chót này có thể là những số nguyên hoặc các số nguyên dài hoặc một biểu thức mà Visual Basic có thể làm tròn để nằm trong miền này. Mid là một hàm có ba (hoặc thỉnh thoảng là hai) tham số, hay đối số. Cả hai thuật ngữ này đều vay mượn từ toán học. Trong một hàm, từng đối số được tách biệt với nhau bằng dấu phẩy. Hàm Mid thường dùng ba mẩu tin : một chuỗi tại ví trí đầu tiên và các số nguyên hay các số nguyên dài tại hai vị trí còn lại. Mid còn một tính năng hữu ích khác. Ta có thể dùng nó như một điều lệnh để tiến hành các thay đổi bên trong một chuỗi. Hàm Left và Right : Hàm Mid có hai hàm bà con (Left và Right) đôi lúc cũng rất hữu ích ; cũng như mọi hàm chuỗi khác, chúng cũng có hai phiên bản: một bình thường và một có kèm dấu $ Như tên gọi gợi ý, Left (Left$ ) tạo một bản sao các kí tự tính từ đầu một từ và Right (Right$ ) chọn từ cuối trở lên. Right thường được dùng hơn. Nó tránh được phép trừ bên trong hàm Mid và có thể làm việc nhanh hơn. Left cũng làm việc tương tự nhưng chỉ giúp ta đỡ mất công đưa một 1 vào vị trí thứ hai trong hàm Mid. Hàm InStr : Cũng như hàm Mid, hàm InStr cũng làm việc với ba (và đôi lúc là hai) mẩu tin ; nghĩa là, nó là một hàm có ba (thỉnh thoảng là hai ) đối số. Giả sử, ta muốn tìm tất cả mọi chữ số đứng trước dấu chấm thập phân trong một con số. Tất nhiên, có thể dùng hàm Mid để rà qua biên bản chuỗi của con số đó, theo từng kí tự một, cho đến khi tìm thấy dấu chấm thập phân. Tuy nhiên, làm như vậy sẽ nhọc công và chạy chậm hơn nhiều so với hàm InStr. Hàm InStr báo cho biết chuỗi có thuộc thành phần của một chuỗi khác hay không (chuyên ngữ gọi là “ chuỗi con của” ). Nếu có, InStr sẽ báo cho biết vị trí bắt đầu chuỗi con. Hàm InStr cũng cho phép chỉ định bắt đầu tìm kiếm tại một kí tự nhất định. Ví dụ : InStr ([nơi bắt đầu,]) chuỗi tìm kiếm, chuỗi tìm thấy) định nơi bắt đầu tìm kiếm. Nếu để trống mục này, cuộc tìm kiếm sẽ bắt đầu từ vị trí thứ nhất. Do hàm InStr trả về giá trị zêrô (nghĩa là False ) khi Visual Basic không tìm thấy một kí tự, hoặc một giá trị phi zêrô (True) khi tìm thấy, nên thông thường ta phải tự mình viết các vòng lặp If _ Then hoặc Do dùng hàm InStr để tiến hành kiểm tra. Nếu dùng giá trị mà hàm InStr đạt được trước đó, ta có thể tìm kiếm các lần xuất hiện lặp lại của một chuỗi. Hàm Val : Visual Basic có một hàm tên Val. Đây là một dạng hàm chuyển đổi tất thảy, vì thế trong Visual Basic người ta vẫn thường dùng Val để chuyển đổi một chuỗi số thành một con số. Mặt khác, Val lại tỏ ra dễ dãi với các chuỗi nhập liệu hơn. Val đơn giản đọc qua chuỗi cho đến khi gặp một kí tự phi số (hoặc một dấu chấm thứ hai). Con số mà ta có được từ nó sẽ được xác định bởi nơi nó ngưng tìm. Hàm Str (Str$ ) : Visual Basic cho phép chuyển ngược một con số thành một chuỗi. Có nhiều cách để thực hiện, song hàm Str vẫn là cách đơn giản nhất. Hàm Str trả về một variant lưu giữ một chuỗi còn hàm Str$ lại trả về một chuỗi thuần túy. Các hàm Str và Str$ chuyển đổi các con số thành chuỗi, song không xóa sạch chúng hoàn toàn. Hàm Format : Để trau chuốt việc hiển thị, hàm Str được thay bằng hàm Format. Khác với hàm Str, hàm Format không chừa chỗ cho một dấu + mặc định. Hàm Format rất linh hoạt. Trong số nhiều tính năng của nó, hàm này cho phép ta cắt cụt các chữ số dư và hiển thị một con số (lớn) có các dấu phẩy hoặc một dấu đồng đô la $ dẫn đầu. Visual Basic giúp ta dễ dàng đối phó với các tình huống định dạng phổ biến nhất, bằng cách bổ sung cái gọi là các dạng thức hữu danh vào hàm Format. Hàm Trim : Hàm này được sử dụng để loại bỏ các khoảng trắng ở hai đầu một chuỗi. Ngoài ra, còn có hàm Ltrim vàRTrim dùng để cắt bỏ các khoảng trắng ở bên trái, bên phải chuỗi. V. MẢNG VÀ TRUY CẬP TUẦN TỰ 5.1 MẢNG : (ARRAY ) Trước khi dùng mảng, ta cần khai báo mảng. Bao gồm : tên mảng, số phần tử. Tương tự như khai báo biến, nếu mảng được khai báo trong phần khai báo chung của Form, mảng được dùng chung cho mọi thủ tục trong Form. Nếu mảng được khai báo trong tập tin module với các từ khóa Gobal, mảng được dùng chung cho mọi thủ tục có mặt trong Project. Có khi phải lưu giữ một mảng trong một variant. Nếu lưu giữ một mảng trong một variant, ta dùng chỉ mục bình thường để tìm đến nó. Mảng biến [variant array] (gọi tắt là mảng) là cấu trúc căn bản để tổ chức thông tin trong Visual Basic. Có thể dễ dàng lưu trữ và tìm nhiều mục trong một mảng. Để phân biệt giữa các mục lưu trữ trong mảng, ta dùng kiểu tham số đặc biệt có tên chỉ mục [index] Tất nhiên, một khi bắt tay xây dựng các mảng lớn, ta cần có các phương cách nhanh chóng, hiệu quả để tìm và sắp xếp nội dung. Để thực hiện, ta dùng hàm Array với cú pháp là : Array (arglist ) Ở đó, đối số arglist bao gồm một danh sách các mục, được tách biệt bởi các dấu phẩy. Ví dụ : Dim A As Variant A = Array (1, 2, 3, 4, 5 ) Các danh sách mảng một chiều : Chủ trương của mảng một chiều (còn gọi là danh sách [list] ) đó là cung cấp một phương thức có hệ thống để đặt tên các nhóm biến có liên quan, thuộc thành phần của một mảng. Với Visual Basic, mảng một chiều [one _ dimensional array] chẳng qua là một tập hợp [collection] các biến, mà từng biến được định danh bởi hai nội dung: Tên mảng Vị trí của mục trên mảng Mảng Fonts mà Visual Basic dùng để lưu trữ tên các phông chữ và các phông chữ được lưu trữ trong Fonts (0), Fonts (1), vân vân … Lưu ý, dấu đồng đô la “$” cho biết các biến trên mảng một chiều này sẽ lưu giữ các chuỗi. Cách làm việc với mảng một chiều : Các giá trị bên trong mảng một chiều thường được gán bằng một vòng lặp For _ Next hoặc dùng một vòng lặp Do kèm với một đợt kiểm tra, bởi thông thường ta muốn ngưng trước khi nhập toàn bộ dữ liệu. Có thể ta thấy an tâm khi luôn biết chắc số lượng các mục trong một mảng một chiều. Nó giúp cho tiến trình gỡ rối dễ dàng hơn, cũng như hầu hết các lập trình viên, có thể ta thấy các vòng lặp For _ Next dễ dàng hơn vòng lặp Do Các hộp liệt kê cũng là một cách để lưu trữ thông tin (kiểu mảng ). Trong vài tình huống, việc dùng hộp liệt kê có thể là một phương cách lưu trữ dữ liệu tốt hơn so với mảng một chiều. Mảng đa chiều : Có thể dùng các mảng có nhiều chiều ; thường gọi là mảng đa chiều [multidimensional arrays]. Cũng như các danh sách dữ liệu dẫn đến một chỉ số dưới đơn (các mảng một chiều), các bảng dữ liệu dẫn đến các chỉ số dưới kép (mảng hai chiều). Ta có qui ước : tham chiếu khoản nhập đầu tiên để cho số lượng hàng và khoản nhập thứ haiđể cho số lượng cột. Theo qui ước này, ta có thể mô tả đoạn mã của bảng cửu chương dưới dạng điền trọn một hàng, theo từng cột, trước khi dời đến hàng kế tiếp. Mảng sử dụng trong chương trình ARRAYS là mảng một chiều. Visual Basic cho phép khai báo mảng nhiều chiều. Ví dụ sau khai báo mảng hai chiều : Static MyArray (0 To 3, 1 To 4) Các phần tử mảng được liệt kê như sau : MyArray (0,1) MyArray (0,2) MyArray (0,3) MyArray (0,4) MyArray (1,1) MyArray (1,2) MyArray (1,3) MyArray (1,4) MyArray (2,1) MyArray (2,2) MyArray (2,3) MyArray (2,4) MyArray (3,1) MyArray (3,2) MyArray (3,3) MyArray (3,4) Tương tự khai báo mảng ba chiều : Dim MyArray (1 To 3, 1 To 7, 1 To 5) Visual Basic cho phép mảng khai báo mảng tối đa có 60 chiều ! Sau đây là mã lệnh cho phép gán giá trị 3 vào các phần tử mảng hai chiều : Static MyArray (1 To 10, 1 To 10) Dim Counter 1, Counter 2 For Counter 1 = 1 To 10 For Counter 2 = 1 To 10 MyArray (Counter 1, Counter 2) = 3 Next Next Mảng động và mảng cố định : Trong Visual Basic, các mảng không thể kết thúc mở. Mặc dù, các giới hạn khá lớn, tùy thuộc khá nhiều vào lượng bộ nhớ đang có, ta phải báo cho Visual Basic biết phải chừa riêng một lượng bộ nhớ là bao nhiêu cho mảng trước khi dùng nó. Có hai kiểu mảng trong Visual Basic : mảng cố định [fixed arrays], ở đó việc phân bổ bộ nhớ không bao giờ thay đổi trong khi đang chạy chương trình, và mảng động [dynamic arrays], ở đó có thể thay đổi kích cỡ ngay khi đang chạy chương trình. Ưu điểm của mảng cố định là : do bộ nhớ được chừa riêng ngay tại đầu chương trình, ta hiếm khi gặp sự cố cạn kiệt bộ nhớ trong khi chương trình đang chạy. Ưu điểm của mảng động là : khả năng linh hoạt của chúng ; có thể thay đổi kích cỡ để đáp lại những gì mà chương trình gặp. Có thể để cả mảng động và mảng cố định sẵn dùng cho toàn bộ ứng dụng, cho một Form hay một môdun cụ thể, hoặc chỉ trong phạm vi của một thủ tục hay hàm. Khi dùng mảng bao giờ ta cũng cần khai báo sao cho số lượng phần tử vừa đủ nhu cầu của ứng dụng cần xây dựng, không nên lãng phí bộ nhớ. Tuy nhiên có nhiều trường hợp kích thước mảng phụ thuộc lúc chương trình thực hiện (run – time), chúng ta không thể xác định trước được. Visual Basic cung cấp một khả năng đáp ứng trường hợp này : khai báo mảng kích thước thay đổi – mảng động. Ví dụ sau khai báo mảng động : Sub cmdArray1_Click( ) Dim Counter ‘ Khai báo mảng Array1 là một mảng động Static Array1( ) As Integer ‘ Thay đổi kích thước mảng Array1 ReDim Array1 (1 To 15) As Integer For Counter = 1 To 15 Array1(Counter) = Counter Next Thay đổi lại kích thước mảng Array1 ReDim Array1 (1 To 5) As Integer End Sub Đầu tiên khi khai báo Static Array1 ( ) As Integer Kích thước mảng Array1 chưa xác định. Lệnh sau sẽ cố định mảng Array1 có 15 phần tử : ReDim Array1 (1 To 15) As Integer Sau một số xử lý (ví dụ gán giá trị cho 15 phần tử ), mảng Array 1 được cố định lại chỉ còn 5 phần tử : ReDim Array1 (1 To 5) As Integer Một lưu ý khi thay đổi kích thước mảng, các nội dung cũ sẽ bị mất, nếu ta muốn giữ lại giá trị cũ của 5 phần tử còn lại sau khi thay đổi, ta cần viết lại như sau : ReDim Preserve Array1 (1 To 5) As Integer Dùng danh sách và mảng với các thủ tục và hàm : Visual Basic có một đặc phận tuyệt vời để dùng các danh sách và các mảng trong các thủ tục và các hàm. Không như nhiều ngôn ngữ khác, Visual Basic dễ dàng gởi cho thủ tục các danh sách hay mảng có kích cỡ bất kỳ. Các mảng luôn được chuyển theo tham chiếu. Điều này có nghĩa là mọi thay đổi đã tạo cho mảng hay cho các khoản nhập trong mảng vẫn trường tồn cả khi Visual Basic rời hàm hay thủ tục đó. Tất nhiên để mảng chuyển theo tham chiếu có nghĩa là ta chẳng cần dùng các mảng cấp Form trừ phi muốn mảng sẵn dùng khắp nơi. Để gởi một tham số mảng cho một thủ tục hay hàm, ta chỉ việc dùng tên mảng theo sau là các dấu ngoặc đơn mở và đóng ( ), trong danh sách các tham số. 5.2 TẬP TIN TRUY CẬP TUẦN TỰ Khi truy xuất tập tin từ đầu theo từng dòng văn bản, các tập tin như thế được gọi là tập tin truy xuất tuần tự . Ta có thể mở tập tin theo kiểu truy xuất tuần tự bằng ba cách : Cách 1 : Output Cách 2 : Append Cách 3 : Input Mở tập tin theo kiểu truy xuất tuần tự bằng Output : Dùng kiểu Output tạo tập tin truy cập tuần tự. Sau khi tạo tập tin, ta có thể dùng các lệnh xuất để viết tên tập tin này. Ví dụ sau tạo tập tin TRY.TXT : FileNum = FreeFile Open “TRY.TXT” For Output As FileNum Nếu tập tin TRY.TXT đã tồn tại, nội dung cũ bị xóa đi ! Tập tin TRY.TXT không có đường dẫn nên nó được tạo trong thư mục hiện hành. Muốn tạo ở thư mục xác định nào đó ( ví dụ C:\PROG), ta cần chỉ rõ như sau Open “C:\PROG\TRY.TXT” For Output As FileNum Tập tin mở bằng kiểu Output chỉ cho phép ta viết lên mà thôi. Ta có thể viết bằng phát biểu Print#. FileNum = FreeFile Open “TRY.TXT” For Output As FileNum ‘ Viết nội dung thuộc tính Text của txtMyText ra ‘ TRY.TXT Print # FileNum, txtMyText.Text ‘ Đóng tập tin TRY.TXT Close FileNum Phát biểu Print cần hai tham số. Tham số thứ nhất là thẻ file cần ghi ra và tham số thứ hai là chuỗi cần ghi. Mở tập tin theo kiểu truy xuất tuần tự bằng Append : Kiểu Append tương tự như Output nhưng điểm khác chính là khi tập tin được mở đã tồn tại, nội dung cũ không bị xóa. Giả sử tập tin TRY.TXT đang có sẵn hai dòng : THIS IS LINE NUMBER 1 THIS IS LINE NUMBER 2 Mở TRY.TXT theo kiểu Append : FileNum = FreeFile Open “TRY.TXT” For Append As FileNum Print # FileNum, “THIS IS A NEW LINE” Close FileNum Bây giờ TRY.TXT chứa : THIS IS LINE NUMBER 1 THIS IS LINE NUMBER 2 THIS IS A NEW LINE Nếu đoạn lệnh trên thực hiện một lần nữa, TRY.TXT chứa : THIS IS LINE NUMBER 1 THIS IS LINE NUMBER 2 THIS IS A NEW LINE THIS IS A NEW LINE Mở tập tin theo kiểu truy xuất tuần tự bằng Input : Khi cần đọc tập tin truy cập tuần tự, ta cần mở tập tin theo kiểu Input. Sau đo,ù dùng hàm Input$ ( ) để đọc. Ví du,ï sau mở TRY.TXT theo kiểu Input và đọc vào txtMyText : FileNum = FreeFile Open “TRY.TXT” For Input As FileNum ‘ Đọc vào toàn bộ TRY.TXT thuộc tính Text của ‘ txtMyText txtMyText.Text = Input$ (LOF (FileNum), FileNum) ‘ Đóng tập tin TRY.TXT Close FileNum Hàm Input$ ( ) cần hai tham số. Tham số thứ nhất xác định số Byte cần đọc, tham số thứ hai là thẻ file. Hàm LOF ( ) nhận vào thẻ file và trả ra chiều dài theo Byte của tập tin tương ứng với thẻ file đó. Phát biểu Write # và Input # : Cách khác thay cho Print# và Input$ ( ) trong việc ghi / đọc là Write# và Input#. Phát biểu Write# cho phép ghi một loạt các biến (dạng chuỗi hay số). Ví dụ sau viết hai biến MyString và MyNumber ra tập tin TRY.TXT : FileNum = FreeFile Open “TRY.TXT” For Output As FileNum Write# FileNum MyString, MyNumber Close FileNum Phát biểu Input# dùng đọc tập tin nội dung trở vào các biến. Ví dụ đọc lại giá trị ghi trở lại các biến MyString Và MyNumber : FileNum = FreeFile Open “TRY.TXT” For Input As FileNum Input# FileNum MyString, MyNumber Close FileNum VI. HÀM VÀ THỦ TỤC DO NGƯỜI DÙNG ĐỊNH NGHĨA Trong Visual Basic, thực tế có hai kiểu thủ tục chung : các thủ tục Function và thủ tục Sub. Thủ tục Function, còn gọi là hàm do người dùng định nghĩa, là phương cách để xây dựng các hàm riêng ngoài các hàm do Visual Basic định sẵn. Dẫu đó là hàm do ta viết hay của các lập trình viên Visual Basic cung cấp, nói chung ta xem nó như một đoạn mã tự chứa, được thiết kế để xử lí dữ liệu và trả về một giá trị. Trong khi đó, các thủ tục Sub là những “chương trình trợ lực” nho nhỏ, được dùng khi cần. Như vậy các thủ tục Sub là những phần tổng quát hóa của các thủ tục sự kiện mà ta đã quen thuộc. Khác với hàm, thường trả về một giá trị, các thủ tục đơn giản thực hiện các việc. Tóm lại, dẫu chọn thủ tục Function hay thủ tục Sub, điểm chủ yếu vẫn là : các thủ tục Function và Sub thực hiện một hay nhiều nội dung dưới đây : Giúp tách nhỏ các công việc lớn thành các phần việc nho.û Tự động hóa các tác vụ lặp lại. Làm rõ nội dung mà ta đang gắng hoàn tất bằng cách “nêu tên" một đoạn mã Các tính năng này giúp giảm bớt đáng kể thời gian gỡ rối chương trình. 6.1 HÀM (FUNCTION) : Khi phải dùng một biểu thức phức hợp nhiều lần trong một đề án thì cũng là lúc ta nên nghĩ đến phương án định nghĩa các hàm riêng. Ta có thể vận dụng một cách nào đó để tự động hóa tiến trình, nghĩa là để Visual Basic thực hiện một phần công việc. Đây là vai trò của chương trình con, muốn trả về một giá trị, ta phải tạo một thủ tục Function, tức là hàm do người dùng định nghĩa. Như thường lệ, cửa sổ Code vẫn là nơi để tạo mã cho các thủ tục Function. Tên hàm cũng linh hoạt như tên biến, do đó ta nên chọn các tên có ý nghĩa. Nhờ vậy, chương trình sẽ minh bạch hơn và cũng dễ gỡ rối hơn. Lưu ý, trừ phi gán cho nó một dấu định danh kiểu rõ rệt ở cuối tên hoặc thông qua mệnh đề As, kiểu của hàm sẽ ngầm định theo kiểu dữ liệu Variant. Dưới đây là một dạng định nghĩa hàm, tuy đơn giản nhất nhưng khá phổ biến. Pulic Function FunctionName (parameter 1, paratemeter 2, …) Statements FunctionName = expression Statements FunctionName = expression Statements ..... End Function Ở đó, parameter 1, paratemeter 2, vân vân …, đều là biến. Các biến này được xem như những tham số hay đối số của hàm. Kiểu của tham số có thể được chỉ định bởi các thẻ gán khai báo kiểu hoặc bằng các cụm từ As. Khi một điều lệnh Visual Basic sử dụng một hàm, thường có : gọi hàm và chuyển các biểu thức cho các tham số. Hàm được xem là trả về giá trị của nó. Kiểu giá trị mà hàm trả về sẽ được chỉ định bằng một thẻ gán khai báo biến (%, !, &, #, hoặc $ ) được chắp vào tên hàm, hoặc tên dùng trong mệnh đề As ở cuối dòng Function, hoặc một điều lệnh DefType xuất hiện bên trên phần định nghĩa Function. Ngoài ra, với một ngoại lệ ta chỉ có thể gọi một hàm khi dùng cùng với số lượng đối số như các tham số trong phần định nghĩa hàm. Từng biến muốn gởi cho một tham số phải thuộc cùng kiểu (số nguyên, số nguyên dài, vân vân) với tham số tương ứng. Ngoài ra, có thể dùng bất kỳ biến nào nếu như tham số thuộc kiểu variant. Có nghĩa là, chỉ có thể chuyển một đối số biến số nguyên cho một tham số số nguyên. Ta không thể trực tiếp chuyển nó cho một tham số số nguyên dài của một hàm. Như ta đã biết, Visual Basic từ chối chuyển một biến có kiểu số nguyên cho một tham số kiểu long, cho dù trong hầu hết các trường hợp một số nguyên sẽ làm việc tại mọi nơi số nguyên dài làm việc. Cuối cùng, đừng quên rằng trong tất cả các hàm, chúng ta chưa thay đổi các biến bằng cách đưa biến tham số vào bên trái của một điều lệnh gán bên trong thân hàm. Nghĩa là, ta chưa thực hiện phép gán nào cho các tham số trong thân các hàm. Tuy nhiên, trong thực tế, hiếm khi phải thay đổi giá trị của một tham số trong thủ tục Function. Nói chung, một hàm sẽ đơn giản điều tác các giá trị hiện có và trả về một giá trị mới. 6.2 THỦ TỤC (SUB) : Các thủ tục Function được thành lập để thực hiện hầu như mọi thứ, chỉ cần nội dung muốn thực hiện chính là để có một đáp số – một giá trị – rút ra từ các hàm đó. Như đã nêu trên đây, tuy các hàm có thể thay đổi các tính chất của một Form, ảnh hưởng đến giá trị của các biến chuyển dưới dạng tham số, hoặc ảnh hưởng đến các biến cấp Form, song không thể làm thế trừ phi sự thay đổi đó có liên quan đến nội dung thực hiện của hàm được thiết kế. Trong mọi trường hợp, một hàm sẽ nhận dữ liệu thô, điều tác nó, rồi trả về chỉ một giá trị. Để tránh gõ lặp cacù điều lệnh gán vô bổ và làm rối tung vấn đề, ta có một cấu trúc mới : thủ tục Sub. Thủ tục Sub là công cụ chọn lựa trong trường hợp chỉ muốn viết một khối mã thực hiện một nội dung nào đó, cũng tương tự như thủ tục Event. Giống như trong thủ tục Function, ta thường dùng Tools / Add Procedure báo cho Visual Basic biết muốn định nghĩa một thủ tục Sub. Nhưng có trường hợp, ta nhắp nút tùy chọn Sub. Dưới đây là cấu trúc đơn giản nhất của thủ tục Sub – song vẫn đủ mạnh để phiên dịch đề cương : Pulic Sub Chorus ( ) ‘ nhiều điều lệnh in End Sub Cũng như các hàm khác, dòng đầu tiên của thủ tục Sub có tên là phần đầu. Cũng như các hàm do người dùng định nghĩa, phần đầu này có thể co ùcác từ chỉ định truy cập (chẳng hạn là Pulic ). Sau đó là từ khóa Sub rồi đến tên thủ tục. Tên thủ tục Sub cũng phải theo các qui tắc như trong tên biến. Kế tiếp là danh sách tham số, được bao trong các dấu ngoặc đơn, dành cho các thông tin mà hàm sẽ dùng. Chẳng hạn, thủ tục sự kiện Click( ) và thủ tục Chorus Sub không dùng tham số nào cả. Lưu ý, cho dù thủ tục không dùng tham số, song vẫn phải có các dấu ngoặc đơn trống trong Sub. Sau Sub là các dòng chứa các điều lệnh tạo thành thủ tục. Các điều lệnh này còn gọi là thân (của thủ tục). Cuối cùng, ta có các từ khóa End Sub nằm trên các dòng riêng biệt. Cũng như trong các thủ tục sự kiện, các từ kho

Các file đính kèm theo tài liệu này:

  • docVISUAL BASIC-37.DOC