1. Trang chủ
  2. » Công Nghệ Thông Tin

BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN - CHƯƠNG 1

37 1,7K 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 37
Dung lượng 529,86 KB

Nội dung

NGÔN NGỮ LẬP TRÌNH VISUAL BASIC MỤC TIÊU: SAU KHI HOÀN THÀNH CÁC BÀI TẬP, NGƯỜI HỌC CÓ THỂ Khai báo các biến thuộc các kiểu dữ liệu cơ bản (byte, integer, long, string, boolean, single) và kiểu mảng, kiểu bản ghi trong Visual Basic. Sử dụng các hàm nhập xuất dữ liệu (MsgBox và InputBox) của VB. Sử dụng và vận dụng được các cấu trúc rẽ nhánh (If...Then và If...Then...Else), cấu trúc đa rẽ nhánh (Select Case) và các loại vòng lặp : For; Do While...Loop; Do...Loop để viết chương trình. Sử dụng được một số hàm xử lý xâu thường dùng.

Trang 1

Bµi tËp ch−¬ng 1 NG¤N NG÷ LËP TR×NH VISUAL BASIC

MỤC TIÊU: SAU KHI HOÀN THÀNH CÁC BÀI TẬP, NGƯỜI HỌC CÓ THỂ

Khai báo các biến thuộc các kiểu dữ liệu cơ bản (byte, integer, long, string, boolean, single) và kiểu mảng, kiểu bản ghi trong Visual Basic

Sử dụng các hàm nhập xuất dữ liệu (MsgBox và InputBox) của VB

Sử dụng và vận dụng được các cấu trúc rẽ nhánh (If Then và

If Then Else), cấu trúc đa rẽ nhánh (Select Case) và các loại vòng lặp : For; Do While Loop; Do Loop để viết chương trình

Sử dụng được một số hàm xử lý xâu thường dùng

A - ĐỀ BÀI TẬP

Bài tập 1: Sử dụng hàm MsgBox và InputBox Viết chương trình giải phương trình

bậc 2 Hệ số a, b, c nhập từ bàn phím bằng hàm InputBox (Giải sử a ≠ 0)

Bài tập 2: Minh hoạ cấu trúc If … Then Viết chương trình tính lương như sau: Cho

người dùng nhập vào lương cơ bản LCB, Hệ số lương HSL và chức vụ CV Nếu chức vụ là "giam doc" thì cộng thêm 500000 vào lương thực lĩnh (LTL), nếu là

"truong phong" thì cộng thêm 300000, nếu là "to truong" thì cộng thêm 200000, nếu

là "nhan vien" thì không cộng Sau đó hiển thị tổng số lương thực lĩnh

Bài tập 3-Select Case:Yêu cầu như bài 2, nhưng sử dụng cấu trúc Select Case

Bài tập 4: Hiển thị các loại thông báo sử dụng hàm MsgBox Viết chương trình

hiển thị 4 loại hộp thoại MsgBox như mô tả dưới đây khi người dùng nhập vào các

số tương ứng 1,2,3,4 bằng hàm InputBox:

Bài tập 5: Sử dụng cấu trúc Select Case Viết chương trình cho phép người dùng

nhập vào 2 số thực a và b và một trong các phép toán gồm +, -, *, /, \ (Chia lấy phần

nguyên), mod (chia lấy phần dư) hoặc ^ (Luỹ thừa) Sau đó hiển thị kết quả tương

ứng Ví dụ nếu nhập 2 số 10, 20 và phép toán là + thì thông báo "Kết quả là 30" v.v

Trang 2

Bài tập 6: Sử dụng vòng lặp FOR Viết chương trình tính tổng của dãy số sau và

hiển thị kết quả ra màn hình: S = 1 + 2 + 3 + + N , Với N nhập từ bàn phím

Bài tập 7: Sử dụng vòng lặp For với điều khoản Step Hãy viết chương trình tính

tổng các số chẵn từ 1 đến 100

Bài tập 8: Sử dụng vòng lặp For đếm ngược “FOR … DOWNTO…”

Hãy sử dụng vòng lặp For in ra các số từ 100 đến 1 bằng lệnh Debug.Print

Bài tập 9: Sử dụng vòng lặp Do…Loop Until

Cho người dùng nhập vào một dãy các số nguyên (âm và dương) và tính tổng các

số âm, tổng các số dương Việc nhập kết thúc nếu số nhập vào là 0

Bài tập 10: Sử dụng cấu trúc Do While … Loop Hãy cho biết cần gửi số tiền tiết

kiệm 1 triệu đồng vào ngân hàng trong thời gian mấy năm để có 2 triệu đồng Biết rằng lãi suất hàng năm là 8%

Bài tập 11: Thoát khỏi vòng lặp với Exit For, Exit Do Viết chương trình nhập số

nguyên n và kiểm tra xem có phải là số nguyên tố hay không ?

Bài tập 12: Sự tương đương giữa các cấu trúc lặp Tính n! sử dụng các cấu trúc

100 2 8

1

2

n n

n

n n

n

Bài tập 14 – Tính N !: Viết chương trình nhập số nguyên N (0<N<20) và tính N! Bài tập 15- Tính tổng 1 dãy số: Tính tổng của dãy sau, với n nhập từ bàn phím:

)1(

)1(

4.33.22

S

Bài tập 16- Tính dãy Fibonasi: Tính tổng của day số Fibonasi theo 2 cách: bằng đệ

qui và không đệ qui, với N nhập từ bàn phím Biết rằng dãy số Fibonasi được định nghĩa như sau:

F (n) = 1 nếu n = 0, n = 1

F (n) = Fn-2 + Fn-1 nếu n ≥ 2

Bài tập 17- Tìm Ứơc số chung lớn nhất : Tìm ước số chung lớn nhất của 2 số a và

b (a,b nhập từ bàn phím)

Bài tập 18-Tối giản phân số : Kiểm tra xem phân số a/b (a, b nhập từ bàn phím) đã

tối giản hay chưa? Nếu chưa tối giản thì hãy thực hiện rút gọn phân số đó và in ra màn hình

Trang 3

Bài tập 19- Tìm số nguyên tố: Nhập vào một dãy số nguyên dương bằng hàm

InputBox Sau đó in ra các giá trị là số nguyên tố

Bài tập 20-Đếm ký tự: Lập trình cho người dùng nhập vào một xâu ký tự S Sau đó

đếm xem trong xâu nhập vào có bao nhiêu ký tự là a và A

Biết rằng :

- Hàm Mid(S, i, 1) cho ta ký tự thứ i trong xâu S

- Hàm Len(S) cho ta độ dài của xâu S

Bài tập 21-Tính tổng dãy số: Viết chương trình nhập x và n rồi tính tổng

S =

1

4321

3 2

++++++

n

x x

3 2 1 0

++++++

n

x x

x x

)

Bài tập 22 : Bài toán tìm phần tử lớn nhất (nhỏ nhất) trong một danh sách

Viết chương trình nhập n số nguyên vào một mảng nguyên A, sau đó tìm số lớn nhất trong mảng nguyên đó

Bài tập 23: Liệt kê các phần tử lớn nhất (nhỏ nhất) trong danh sách

Nhập danh sách gồm n số nguyên, sau đó hiển thị các phần tử có giá trị lớn nhất

Bài tập 24: Sắp xếp một dãy số nguyên Viết chương trình cho phép nhập vào N

số nguyên Sau đó sắp xếp dãy số này theo chiều tăng dần và hiển thị dãy đã sắp xếp ra màn hình bằng lệnh Debug.Print

Bài tập 25 – Quick Sort: Nhập vào một dãy N số nguyên dương, sau đó sắp xếp

dãy này tăng dần theo giải thuật Quick-Sort Kết quả in ra bằng hàm Debug.Print

Bài tập 26- Heap Sort: Nhập vào một dãy N số nguyên dương, sau đó sắp xếp dãy

này tăng dần theo giải thuật Heap-Sort Kết quả in ra bằng hàm Debug.Print

Bài tập 27: Sắp xếp một dãy các phần tử, trong đó mỗi phần tử là một xâu ký

tự theo vần Alphabet (Theo thứ tự từ điển) bằng thuật toán sắp xếp đơn giản

Viết chương trình nhập vào danh sách tên của một lớp, sau đó sắp xếp theo vần Alphabet và hiển thị kết quả sắp xếp ra màn hình bằng hàm Debug.Print

Bài tập 28-Chuẩn hoá xâu: Nhập vào một xâu ký tự bất kỳ sau đó chuẩn hoá và in

ra màn hình Xâu chuẩn hoá ở đây là xâu không có 2 dấu trắng liền nhau, không có dấu trắng ở hai đầu và sau dấu chấm hoặc dấu phảy phải có một dấu trắng

Bài tập 29-Chuẩn hoá xâu: Yêu cầu như bài 28 và mỗi ký tự đầu câu là chữ HOA Bài tập 30-Tách số khỏi xâu: Nhập vào một xâu ký tự có chứa cả chữ số và chữ

cái ví dụ: “Ngày mồng 2 tháng 9 năm 1945 Bác Hồ đã đọc tuyên ngôn độc lập tại

Quảng trường Ba Đình lịch sử !” Giả sử các số là nguyên dương Hãy tách các số

đó ra khỏi xâu và in ra màn hình (Ở đây sẽ tách được 3 số là 2, 9 và 1945)

Trang 4

Bài tập 31-Tách Câu: Nhập vào một xâu ký tự bất kỳ, kết thúc mỗi câu là một dấu

chấm Hãy in mỗi câu trong xâu đó trên một dòng bằng hàm Debug.print

Bài tập 32-Chuyển đổi Font chữ: Giả sử một tệp văn bản có nội dung được định

dạng với font chữ vntime, Hãy chuyển nội dung của tệp này sang font chữ VIQR và

lưu vào một tệp khác Tên tệp nguồn và tệp đích tương ứng là : c:\FontVNTime.txt và

Bài tập 36-Ma trận số: Viết chương trình nhập vào một ma trận gồm m hàng và n

cột Sau đó tính tổng các phần tử dương, tổng các phần tử trên 2 đường chéo chính

Bài tập 37- Kiểm tra "đường thẳng" trong ma trận: Nhập một ma trận vuông kích

thước N x N Ma trận này chỉ chứa các số 0 và 1 Hãy lập trình để cho biết ma trận

đó có ít nhất 5 phần tử thẳng hàng (ngang, dọc, chéo xuôi, chéo ngược) có cùng giá

trị là 1 hay không ?

Bài tập 38- Mảng bản ghi: Viết chương trình nhập vào một danh sách cán bộ, sau

đó sắp xếp danh sách cán bộ theo tuổi và lưu vào một tệp tên là Canbo.txt Thông tin

về cán bộ gồm: Họ và tên, Năm sinh, Quê quán, Hệ số lương

PHỤ LỤC 1

Dưới đây là mô tả một số hàm rất hay dùng trong VB để bạn tham khảo trong khi lập

trình và cho các bài tập sau này

Abs (x) Hàm tính giá trị tuyệt đối của một số Abs(-5) 5

Sqr(x) Tính căn bậc hai của một số x (x>=0) Sqr(4) 2

Asc(Ch) Trả về mã của ký tự Ch Asc("A") 65

Chr(n) Trả về ký tự có mã Ascii là n Chr(65) "A"

UCase(S) Trả về xâu chữ hoa (Nhưng không làm thay đổi đến xâu S) UCase("aBc") "ABC"

LCase(S) Trả về xâu chữ thường (Nhưng không làm thay đổi đến xâu S) UCase("aBc") "abc"

Len(S) Trả về độ dài của xâu S Len("abc123") 6

Mid(S,i,n) Lấy một xâu con trong S từ vị trí thứ i, n ký tự Nếu bỏ qua tham số n thì mặc định là lấy từ vị trí i

đến hết xâu Mid("ABCDE", 2,3) "BCD"

Left(S, n) Lấy ra n ký tự trong xâu S tính từ bên trái Left(S,"ABCD",3) "ABC"

Right(S,n) Lấy ra n ký tự trong xâu S tính từ bên phải Right(S,"ABCD",3) "BCD"

Trim(S) Trả về một xâu S nhưng bỏ các dấu trắng hai đầu (Xâu S không bị thay đổi) Trim(" ABC ") "ABC"

LTrim(S) Giống như Trim(S) nhưng chỉ cắt phía trái LTrim(" ABC ") "ABC "

RTrim(S) Giống như Trim(S) nhưng chỉ cắt phía phải RTrim(" ABC ") " ABC"

StrReverse(S) Đảo ngược xâu S (S không bị thay đổi) StrReverse("AB") "BA"

Str(x) Chuyển số x sang dạng xâu Str(10) "10"

Val(S) Chuyển một xâu sang dạng số Val("10") 10

Instr(n,S1,S2) Kiểm tra xâu S2 có năm trong xâu S1 hay không Hàm trả về giá trị > 0 nếu có Instr(1,"ABC", "BC") 2

Split(S, C) Tách xâu S thành các phần tử, với ký hiệu phân Dim S As string, R As

Trang 5

Year(D) Trả về năm của biến kiểu Date D

Dim D As Date

D = Now Msgbox Year(D) Month(D) Trả về tháng của biến kiểu Date D MsgBox Month(Now)

Day(D) Trả về ngày của biểu thức kiểu Date D Day(#21/2/2004#) 21 Hour(T) Trả về giờ của biểu thức kiểu Time T Hour(Time)

Now Hàm trả về ngày tháng hiện hành Msgbox now

Time Trả về giờ phút giây hiện hành Msgbox Time

Rnd Hàm trả về một số ngẫu nhiên trong khoảng [0, 1) Lưu ý: trước đó phải gọi thủ tục Randomize Msgbox Rnd

B HƯỚNG DẪN - GIẢI MẪU

Bài tập 1

a Hướng dẫn: Cần tính giá trị của ∆, Sau đó sử dụng cấu trúc lệnh If Then Else

(Hoặc cấu trúc Select Case) để kiểm tra ∆ và tính nghiệm

b Chương trình mẫu:

Cách 1: Sử dụng cấu trúc If Then … Else Cách 2: Sử dụng cấu trúc Select Case

Private Sub Form_Load()

Dim a As Single, b As Single

Dim c As Single

Dim Delta As Single

Dim x1 As Single, x2 As Single

MsgBox "x1=" &x1 & " x2=" &x2

End If '//// Của If Delta = 0

End If '//// Của If Delta < 0

End Sub

Private Sub Form_Load()

Dim a As Single, b As Single Dim c As Single

Dim Delta As Single Dim x1 As Single, x2 As Single

a = InputBox("Nhập hệ số a (a<>0):")

b = InputBox("Nhập hệ số b : ")

c = InputBox("Nhập hệ số c : ") Delta = b ^ 2 - 4 * a * c

Case Is > 0

x1 = (-b + Sqr(Delta)) / (2 * a) x2 = (-b - Sqr(Delta)) / (2 * a) MsgBox "x1=" &x1 &" x2=" &x2

End Select

End Sub

c Ghi chú: Cấu trúc Select Case của VB rất mạnh, nó không những kiểm tra biểu

thức ở dạng số nguyên mà còn có thể kiểm tra cả dạng số thực, xâu ký tự, đồng thời

với mối loại giá trị có thể kiểm tra một khoảng giá trị (sử dụng từ khoá Case is …)

Trang 6

Bài tập 2

a Hướng dẫn: Lương thực lĩnh (LTL) = HSL * LCB + Phụ cấp chức vụ Để tính Phụ

cấp chức vụ, cần sử dụng câu lệnh If Then để kiểm tra xem chức vụ nhập vào có

là "giam doc", "truong phong" hay "to truong" hay không để cộng thêm

b Chương trình mẫu:

Chương trình nhập và tính lương

Private Sub Form_Load()

Dim HSL As Long, LCB As Long, PCCV As Long, LTL As Long

Dim CV As String

LCB = InputBox("nhập vào lương cơ bản : ", "Tính lương", 290000)

HSL = InputBox("nhập vào hệ số lương", "Tính lương", 1.92)

CV = InputBox("Chức vụ ")

If CV = "giam doc" Then LTL = HSL * LCB + 500000

If CV = "truong phong" Then LTL = HSL * LCB + 300000

If CV = "to truong" Then LTL = HSL * LCB + 20000

If CV = "nhan vien" Then LTL = HSL * LCB

End Sub

c Ghi chú: Có thể thay thế cấu trúc If Then ở trên bằng cấu trúc If Then ElseIf

hoặc bằng cấu trúc đa rẽ nhánh Select Case (Đây là cấu trúc phù hợp nhất)

Bài tập 3

a Hướng dẫn: Cấu trúc Case trong VB cho phép kiểm tra cả biểu thức dạng Xâu, Số

nên có thể áp dụng vào giải quyết bài toán này

b Chương trình mẫu:

Tính lương đơn giản minh hoạ cấu trúc Select Case

Private Sub Form_Load()

Dim HSL As Long, LCB As Long, PCCV As Long, LTL As Long

Dim CV As String

LCB = InputBox("nhập vào lương cơ bản : ", "Tính lương", 290000)

HSL = InputBox("nhập vào hệ số lương", "Tính lương", 1.92)

C Ghi chú: Để chương trình vẫn tính đúng cho dù người dùng có thể nhập chức vụ

ở dạng chữ thường hay chữ HOA thì nên UCase các xâu trước tiên (Xem phụ lục 1)

Trang 7

Bài tập 4

a Hướng dẫn: Để hiển thị hộp thoại Msgbox với cỏc nỳt và biểu tượng khỏc nhau, ta

chỉ cần thờm cỏc hằng vào tham số thứ 2 của hàm MsgBox, vớ dụ : vbQuestion, vbYesNo, vbOKCancel, vbInformation, vbAbortRetryIgnore

Ngoài ra, để biết người dựng muốn hiển thị loại hộp thoại nào (nhập vào số mấy) cần

sử dụng cấu trỳc Select Case để kiểm tra và ra quyết định

b Chương trỡnh mẫu:

Private Sub Form_Load()

Dim Kieu As Byte

Kieu = InputBox("Bạn hãy nhập vào một số (1-4) để chọn kiểu MsgBox : ")

Select Case Kieu

Case 1: MsgBox "Kiểu đơn giản chỉ có nút OK" '///Viết nhiều lệnh cần cách nhau dấu ":"

Case 2: MsgBox "Có 2 nút Yes và No", vbYesNo

Case 3: MsgBox "Có nút OK, Cancel và dấu hỏi chấm", vbOKCancel Or vbQuestion

Case 4: MsgBox "Có 3 nút và dấu cảnh báo màu đỏ", vbAbortRetryIgnore Or vbCritical Case Else: MsgBox "Bạn phải nhập 1,2,3 hoặc 4", vbExclamation, "nhập sai"

• Hàm MsgBox luụn trả về một số để cho biết là người dựng vừa click chọn nỳt nào của hộp thụng bỏo MsgBox Vớ dụ: giỏ trị trả về là vbOK, vbCancel…

Bài tập 5

a Hướng dẫn:

Việc cộng, trừ, nhõn hay chia a với b v.v cũn phụ thuộc vào phộp toỏn (toỏn tử) mà

người dựng nhập vào là gỡ Do vậy, để ra quyết định là thực hiện phộp toỏn nào lờn 2 toỏn hạng a và b đú, cần sử dụng cấu trỳc Select Case để kiểm tra toỏn tử nhập

vào

b Chương trỡnh mẫu:

Private Sub Form_Load()

Dim a As Single, b As Single, KetQua As Single

Dim PhepToan As String

Case "div": KetQua = a \ b

Case "mod": KetQua = a Mod b

Case "^": KetQua = a ^ b

Trang 8

Case Else: MsgBox "T«i kh«ng hiÓu phÐp to¸n nµy !", vbExclamation, "NhËp sai"

End Select

MsgBox "KÕt qu¶ cña " & a & PhepToan & b & " lµ : " & KetQua

End Sub

Thực hiện các phép toán cơ bản dùng cấu trúc Select Case

C Ghi chú : các phép chia nguyên và chia dư trong VB:

Phép chia \ là phép chia lấy phần nguyên: Ví dụ 10 \ 3 = 3 Phép chia / là

phép chia thông thường (lấy cả phần nguyên và phần dư), ví dụ: 5 / 2 = 2.5

Phép mod là chia lấy phần dư, ví dụ 10 mod 3 = 1, 6 mod 4 = 2 v.v…

Bài tập 6

a Hướng dẫn: S là tổng các số hạng thứ i, với i chạy từ 1 đến N, Số hạng tổng quát

là i Do vậy để tính tổng của dãy số S, có thể sử dụng một trong 3 loại vòng lặp đã

biết

b Chương trình mẫu (Gõ đoạn mã trong thủ tục Form_Load)

Cách 1: Sử dụng vòng lặp For

Dim i As Integer Dim N As Integer Dim S As Long

N=Inputbox("Nhập số N (N>0) : ")

S = 0

i = 1

Do While i <= N

Trang 9

a Hướng dẫn: Có nhiều cách tính nhưng trong trường hợp này có thể sử dụng vòng

lặp For kết hợp với điều khoản Step:

b Chương trình mẫu:

Private Sub Form_Load()

Dim i As Integer, S As Long

• Nếu cho i chạy từ 1 (For i = 1 TO 100…) thì kết quả cho ta là tổng các số lẻ

Bài tập 8

a Hướng dẫn: Thông thường trong VB, với vòng lặp For thì cứ sau mỗi lần lặp biến

chạy tự động được tăng lên 1 đơn vị Tuy nhiên, trong một số trường hợp ta muốn

biến chạy thay đổi theo chiều giảm dần (Tương tự như For… Downto … của

Pascal), tức là sau mỗi lần lặp thì biến chạy lại bị giảm đi một đơn vị thì cần phải sử

dụng đến điều khoản Step N với N là một số âm Nếu muốn sau mỗi vòng lặp biến chạy i giảm đi một đơn vị thì ta cần viết : For i = N to 1 Step -1

a Hướng dẫn: Vì không biết người dùng nhập bao nhiêu số do vậy ta có thể dùng

vòng lặp không xác định để tiến hành công việc nhập Ngoài ra, cũng cần có 2 biến

để lưu tổng các số âm và dương Điều kiện kết thúc vòng lặp sẽ là n=0

Trang 10

b.Giải mẫu:

Private Sub Form_load()

Dim n As Long, i As Long

Dim TongAm As Long

Dim TongDuong As Long

TongAm = 0 '/// Khëi t¹o tr−íc khi tÝnh tæng

TongDuong = 0 '/// Khëi t¹o tr−íc khi tÝnh tæng

• Vòng lặp Do … Loop Until <ĐK> sẽ kết thúc khi điều kiện <ĐK> bằng true

• Vòng lặp Do…Loop Until khác với vòng lặp dạng Do….Loop While <ĐK> ở chỗ vòng lặp Do…Loop While <ĐK> kết thúc khi <ĐK> vẫn là False

• Thực chất, cấu trúc lặp Do…Loop Until và Do … Loop While là tương

đương nhau, do vậy để tránh nhầm lẫn chúng ta chỉ nên nhớ một loại khi thực hành

• Có thể thoát khỏi vòng lặp dạng Do… Loop bằng câu lệnh Exit Do

Bài tập 10

a Hướng dẫn: Vì không thể biết được là sau bao nhiêu năm thì tổng số tiền sẽ là

2.000.000, mà chỉ biết rằng mỗi năm sẽ tăng thêm một lượng nào đó Do vậy, ở đây

ta sẽ sử dụng vòng lặp không xác định và mỗi lần lặp ta sẽ kiểm tra xem đã được số tiền cần thiết hay chưa? Nếu đủ rồi thì thoát và số lần thử chính là số năm cần tìm

Nhưng ở đây tại sao ta lại sử dụng vòng lặp Do While…Loop mà không là Do

…Loop ? Sở dĩ sử dụng vòng lặp Do While … Loop là vì rằng số tiền gửi vào ban

đầu đã rất có thể lớn hơn số tiền kỳ vọng !

b Chương trình mẫu:

Private Sub Form_Load()

Dim SoNam As Integer, TongTien As Long

Trang 11

Bài tập 11

a Hướng dẫn: Một số N được gọi là số nguyên tố nếu như nó chỉ chia hết cho 1 và

chính nó Hay nói cách khác là số N không là nguyên tố nếu như nó chia hết cho ít nhất một số nằm trong khoảng [2…N-1] Như vậy, để kiểm tra ta chỉ cần duyệt tất cả các số i trong phạm vi từ [2…N-1] xem N mod i = 0 ?, nếu xảy ra thì kết luận ngay rằng N không là nguyên tố, trái lại nếu sau khi đã duyệt hết mà không thấy trường hợp đó xảy ra thì kết luận N là nguyên tố

Người ta đã chứng minh được rằng không cần phải duyệt từ [2…N-1] mà chỉ cần duyệt trong phạm vi hẹp hơn là từ [ N ]

b Chương trình mẫu:

Private Sub Form_Load()

Dim n As Integer, i As Integer, KetQua As Boolean

n = InputBox("NhËp vµo mét sè nguyªn ")

If KetQua = True Then MsgBox n & “ lµ sè nguyªn tè !”

If KetQua = False Then MsgBox n & “ kh«ng ph¶i lµ sè nguyªn tè !”

End Sub

c Ghi chú:

• Để thoát vô điều kiện khỏi vòng lặp Do While…, Do…Loop While hay

Do … Loop Until thì cần gọi lệnh Exit Do

• Hàm Sqr(n) trong VB dùng để tính n (không phải là tính bình phương như

trong một số ngôn ngữ lập trình khác – như Pascal)

• Nếu công việc gì chỉ làm một lần (ví dụ thông báo kết quả như trên) thì

“KHÔNG BAO GIỜ” được đặt trong vòng lặp mà phải đặt ở ngoài vòng lặp Vì đặc điểm của vòng lặp là “lặp đi lặp lại” nhiều lần một công việc !

Bài tập 12

a Hướng dẫn: Giai thừa của số N được tính theo công thức N!=1.2.3…N-1.N Để

tính toán ta thực hiện nhân dồn các số i ( i = 1 ÷ N) vào kết quả

b Chương trình mẫu:

Private Sub Form_Load()

Dim n As Integer, i As Integer, KetQua As Long

Trang 12

'/// Nhập số n, đảm bảo 0<n<10

Do

n = InputBox("Cần tính giai thừa của mấy : ")

Loop Until (0 < n And n < 10)

• Cú thể tớnh N! bằng phương phỏp đệ qui : GiaiThua = GiaiThua (n-1) * N

• Người ta đó chứng minh được rằng tất cỏc cấu trỳc lặp đều cú thể viết tương đương theo cỏc cấu trỳc khỏc

• Trong VB cú rất nhiều cấu trỳc lặp, tuy nhiờn chỉ cần thuộc 3 cấu trỳc sau là đủ:

o For …

Trang 13

Loop chỉ lặp khi điều kiện <ĐK> vẫn đúng, còn cấu trúc Do Until <ĐK>… Loop chỉ lặp khi điều kiện <ĐK> vẫn sai (Hay thoát nếu <ĐK> là đúng)

• Cấu trúc Do … Loop While <ĐK> và cấu trúc Do … Loop Until <ĐK> cùng

giống nhau là thực hiện lặp sau đó mới kiểm tra điều kiện (Giống cấu trúc

Repeat … Until trong pascal hay do … While trong C/C++), nhưng cấu trúc

Do … Loop While <ĐK> chỉ lặp nếu điều kiện vẫn còn đúng, trong khi đó cấu

trúc Do … Loop Until <ĐK> chỉ lặp nếu biểu thức điều kiện vẫn còn sai (Hay

nói cách khác là kết thúc lặp nếu điều kiện lặp là đúng)

• Khi thực hành, không nhất thiết phải nhớ cả 4 kiểu lặp đã nêu ở trên mà bạn

nên vận dụng thành thạo 3 cấu trúc lặp được khuyến cáo dùng là For, Do

While và Do … Loop Until, vì 3 cấu trúc này tương tự như các cấu trúc lặp

trong một số ngôn ngữ lập trình phổ biến khác (For,While…do,Repeat Until)

Bài tập 13

a Hướng dẫn: Ta có thổng S = S1 + S2 + S3, với S1, S2, S3 tương ứng với 3 tổng

trên Sử dụng vòng lặp để tính tổng của mỗi Si, sau đó cộng lại để được kết quả

b Chương trình mẫu:

Private Sub form_load()

Dim i As Integer

Dim Tong As Long

Dim S1 As Long, S2 As Long, S3 As Long

Trang 14

Bài tập 14:

a Hướng dẫn: Công thức tính giai thừa của số N là: N! = 1.2.3…N-1.N, như vậy ở

đây ta cần nhân liên tiếp các số i (i chạy từ 1 đến n) vào kết quả Trong đó, giá trị khởi tạo cho kết quả là 1 Bài này có thể giải theo cách đệ qui hoặc không đệ qui

b Chương trình mẫu

Cách 1: Dùng vòng lặp (Không dùng đệ qui)

Private Sub Form_Load()

Dim i As Integer, n As Integer

Dim KetQua As Long

'/// NhËp sè n (0<n<20)

Do

n = InputBox("NhËp sè N : ", "TÝnh giai thõa")

Loop Until (0 < n And n < 20)

Private Sub Form_Load()

Dim i As Integer, N As Integer

Dim KetQua As Long

'/// NhËp sè n (0<n<20)

Do

N = InputBox("NhËp sè N : ", "TÝnh giai thõa")

Loop Until (0 < N And N < 20)

MsgBox N & " ! bằng " & GiaiThua(N)

End Sub

Trang 15

Bài tập 15:

a Hướng dẫn: Với bài toán dạng tính tổng của một chuỗi số khi biết số hạng tổng

quát Si, nói chung là đơn giản Có thể thực hiện theo giải thuậ như sau:

S = 0

For i = i0 TO in

S = S + Si

Next

Với mỗi dãy khác nhau thì giá trị i0, N, Si có thể khác nhau và cần phải xác định

- Giá trị i0 và N thường xác định bởi giải phương trình Si = S0 và Si = Sn

- Số hạng tổng quát Si thường có thể nhìn thấy ngay trong đề bài

Trong bài này:

- S i =i* n+(i+1)

- Xác định i0: Cho S0 = Si ⇔ 1* n+2 = i* n + i( +1)⇒ i0=1

- Xác định in: Cho Sn = Si ⇔ n* n + n( +1) = i* n + i( +1)⇒ in=n

b Chương trình mẫu:

Private Sub Form_Load()

Dim S As Single, i As Integer, N As Integer

End Sub

Bài tập 16

a Hướng dẫn: Với các bài toán được định nghĩa theo kiểu đệ qui thì cách giải phù

hợp và dễ nhất là theo giải thuật qui Tuy nhiên, tốc độ bị chậm đáng kể khi số N lớn, ngoài ra còn có thể bị tràn Stack

b Chương trình mẫu:

'/// TÝnh d·y Fibonasi dïng §Ö qui

Function Fib_Dequi(ByVal N As Integer) As Long

If N = 0 Or N = 1 Then Fib_Dequi = 1

If N > 1 Then Fib_Dequi = Fib_Dequi(N - 2) + Fib_Dequi(N - 1)

End Function

'/// TÝnh d·y Fibonasi KH¤NG dïng §Ö qui

Function Fib_KhongDequi(ByVal N As Integer) As Long

Trang 16

Private Sub Form_Load()

MsgBox "Fib (30) = " & Fib_Deq ui(30)

MsgBox "Fib (30) = " & Fib_KhongDequi(30)

End Sub

Chú ý: Riêng với bài toán này, người ta còn có thể giải bằng phương pháp qui hoạch

động (Dynamic Programming) rất đơn giản như sau:

Function Fib_DynamicPrgramming(ByVal N As Integer) As Long

a Hướng dẫn: Để tìm ước số chung lớn nhất của 2 số nguyên a và b, người ta có

thể dựa vào công thức Ơ-Le và cài đặt bằng vòng lặp hoặc đệ qui Việc tìm ước số chung được ứng dụng vào tối giản phân số

Trang 17

Private Sub Form_Load()

MsgBox "−íc sè chung lín nhÊt cña 20 vµ 30 lµ : " & USCLN(20, 30)

MsgBox "−íc sè chung lín nhÊt cña 20 vµ 30 lµ : " & USCLN_Dequi(20, 30)

End Sub

Bài tập 18:

a Hướng dẫn: Phân số dạng a/b được gọi là tối giản nếu Ước số chung lớn nhất của

a và b là 1 Ví dụ: phân số 5/7 và 9/7 là tối giản; 4/6 và 6/4 là chưa tối giản

b Chương trình mẫu:

'/// T×m −íc sè chung lín nhÊt cña 2 sè a vµ b

Function USCLN(a As Integer, b As Integer) As Integer

Private Sub Form_Load()

Dim a As Integer, b As Integer, TuMoi As Integer, MauMoi As Integer

TuMoi = a / USCLN(a, b) ‘/// TÝnh l¹i tö sè míi

MauMoi = b / USCLN(a, b) ‘/// TÝnh l¹i mÉu sè míi

a Hướng dẫn: Trước hết cần xây dựng hàm kiểm tra xem số N có phải là nguyên tố

hay không ? Sau đó sử dụng kết quả này vào giải quyết yêu cầu bài toán

b Chương trình mẫu:

Trang 18

'/// Hµm kiÓm tra xem sè N cã ph¶i lµ sè nguyªn tè hay kh«ng ?

Function LaSoNguyenTo(ByVal n As Integer) As Boolean

Private Sub Form_Load()

Dim i As Integer, n As Integer, DaySo(100) As Integer

ta ký tự tại vị trí thứ i trong xâu S

b Chương trình mẫu (Sử dụng vòng lặp Do While):

Ngày đăng: 20/08/2013, 15:35

HÌNH ẢNH LIÊN QUAN

         Dim  F(1000)  As  Long   '/// Bảng chứa giá trị đã tính toán đ − ợc ở b − ớc trung gian  - BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN - CHƯƠNG 1
im F(1000) As Long '/// Bảng chứa giá trị đã tính toán đ − ợc ở b − ớc trung gian (Trang 16)
                         If  So &lt;&gt; &#34;&#34;  Then                                 '/// Đã đọc hết số  đú  rồi-&gt; in ra màn hình  - BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN - CHƯƠNG 1
f So &lt;&gt; &#34;&#34; Then '/// Đã đọc hết số đú rồi-&gt; in ra màn hình (Trang 27)
         '/// In nốt câu S1 ra màn hình (Trong tr − ờng hợp xâu S1 không có dấu chấm câu)  - BÀI TẬP LẬP TRÌNH HƯỚNG SỰ KIỆN - CHƯƠNG 1
n nốt câu S1 ra màn hình (Trong tr − ờng hợp xâu S1 không có dấu chấm câu) (Trang 28)

TỪ KHÓA LIÊN QUAN

w