Thứ Hai, 10 tháng 3, 2014

Bài tập lập trình visual basic

BI TP LP TRèNH HNG S KIN
Biờn son: B mụn CNPMHSPKT HY 2005


Trang 5
tỏch l C. Variant
Dim I As integer
S = ha,noi,viet,nam
R = Split(S,,)
For i=0 to Ubound(R)
Msgbox R(i)
Next
Replace
(S, S1, S2)
Thay th cỏc xõu con S1 trong S bng xõu S2
Dim S As string
S = Replace(A!!,!!,!)
FileLen(F) Cho bit kớch thc ca file F tớnh theo bytes MsgBox FileLen("C:\io.sys")
CurDir Tr v ng dn ca th mc hin hnh Msgbox CurDir
Year(D) Tr v nm ca bin kiu Date D
Dim D As Date
D = Now
Msgbox Year(D)
Month(D) Tr v thỏng ca bin kiu Date D MsgBox Month(Now)
Day(D) Tr v ngy ca biu thc kiu Date D Day(#21/2/2004#) 21
Hour(T) Tr v gi ca biu thc kiu Time T Hour(Time)
Now Hm tr v ngy thỏng hin hnh Msgbox now
Time Tr v gi phỳt giõy hin hnh Msgbox Time
Rnd
Hm tr v mt s ngu nhiờn trong khong [0, 1)
Lu ý
: trc ú phi gi th tc Randomize.
Msgbox Rnd
B. HNG DN - GII MU
Bi tp 1
a. Hng dn:
Cn tớnh giỏ tr ca , Sau ú s dng cu trỳc lnh If Then Else
(Hoc cu trỳc Select Case) kim tra v tớnh nghim.
b. Chng trỡnh mu:

Cỏch 1: S dng cu trỳc If Then Else
Cỏch 2: S dng cu 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

a = InputBox("Nhp h s a (a <> 0) :")
b = InputBox("Nhp h s b : ")
c = InputBox("Nhp h s c : ")
Delta = b ^ 2 - 4 * a * c

If Delta < 0 Then
MsgBox "Vụ nghim ", vbInformation
Else
If Delta = 0 Then
x1 = -b / (2 * a)
MsgBox "Cú nghim kộp:" & x1
Else
x1 = (-b + Sqr(Delta)) / (2 * a)
x2 = (-b - Sqr(Delta)) / (2 * a)
MsgBox "x1=" &x1 & " x2=" &x2
End If '//// Ca If Delta = 0
End If '//// Ca 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("Nhp h s a (a<>0):")
b = InputBox("Nhp h s b : ")
c = InputBox("Nhp h s c : ")
Delta = b ^ 2 - 4 * a * c

Select Case Delta
Case Is < 0
MsgBox "Vụ nghim "
Case 0
x1 = -b / (2 * a)
MsgBox "Nghim kộp:" & x1
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ỳ: Cu trỳc Select Case ca VB rt mnh, nú khụng nhng kim tra biu
thc dng s nguyờn m cũn cú th kim tra c dng s thc, xõu ký t, ng thi
vi mi loi giỏ tr cú th kim tra mt khong giỏ tr (s dng t khoỏ Case is )
BI TP LP TRèNH HNG S KIN
Biờn son: B mụn CNPMHSPKT HY 2005


Trang 6
Bi tp 2
a. Hng dn:
Lng thc lnh (LTL) = HSL * LCB + Ph cp chc v. tớnh Ph
cp chc v, cn s dng cõu lnh If Then kim tra xem chc v nhp vo cú
l "giam doc", "truong phong" hay "to truong" hay khụng cng thờm.

b. Chng trỡnh mu:

Chng trỡnh nhp v tớnh lng
Private Sub Form_Load()
Dim HSL As Long, LCB As Long, PCCV As Long, LTL As Long
Dim CV As String

LCB = InputBox("nhp vo lng c bn : ", "Tớnh lng", 290000)
HSL = InputBox("nhp vo h s lng", "Tớnh lng", 1.92)
CV = InputBox("Chc 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 cu trỳc If Then trờn bng cu trỳc If Then ElseIf
hoc bng cu trỳc a r nhỏnh Select Case (õy l cu trỳc phự hp nht)
Bi tp 3
a. Hng dn:
Cu trỳc Case trong VB cho phộp kim tra c biu thc dng Xõu, S
nờn cú th ỏp dng vo gii quyt bi toỏn ny.
b. Chng trỡnh mu:

Tớnh lng n gin minh ho cu 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("nhp vo lng c bn : ", "Tớnh lng", 290000)
HSL = InputBox("nhp vo h s lng", "Tớnh lng", 1.92)
CV = InputBox("Chc v ")

Select Case CV
Case "giam doc"
LTL = HSL * LCB + 500000
Case "truong phong"
LTL = HSL * LCB + 300000
Case "to truong"
LTL = HSL * LCB + 20000
Case Else
LTL = HSL * LCB
End Select

MsgBox "Lng ca bn l : " & LTL
End Sub
C. Ghi chỳ: chng trỡnh vn tớnh ỳng cho dự ngi dựng cú th nhp chc v
dng ch thng hay ch HOA thỡ nờn UCase cỏc xõu trc tiờn. (Xem ph lc 1)
BI TP LP TRèNH HNG S KIN
Biờn son: B mụn CNPMHSPKT HY 2005


Trang 7
Bi tp 4
a. Hng dn:
hin th hp thoi Msgbox vi cỏc nỳt v biu tng khỏc nhau, ta
ch cn thờm cỏc hng vo tham s th 2 ca hm MsgBox, vớ d : vbQuestion,
vbYesNo, vbOKCancel, vbInformation, vbAbortRetryIgnore
Ngoi ra, bit ngi dựng mun hin th loi hp thoi no (nhp vo s my) cn
s dng cu trỳc Select Case kim tra v ra quyt nh.
b. Chng trỡnh mu:

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"
End Select
End Sub
c. Ghi chỳ:
Cú th kt hp hin th cỏc nỳt, cỏc biu tng bng cỏch t hp OR gia
cỏc hng s: Vớ d vbOKCancel Or vbExclamation hin th 2 nỳt
OK/Cancel kốm thờm biu tng khuyn cỏo .
Hm MsgBox luụn tr v mt s cho bit l ngi dựng va click chn nỳt
no ca hp thụng bỏo MsgBox. Vớ d: giỏ tr tr v l vbOK, vbCancel.
Bi tp 5
a. Hng dn:

Vic cng, tr, nhõn hay chia a vi b v.v cũn ph thuc vo phộp toỏn (toỏn t) m
ngi dựng nhp vo l gỡ. Do vy, ra quyt nh l thc hin phộp toỏn no lờn 2
toỏn hng a v b ú, cn s dng cu trỳc Select Case kim tra toỏn t nhp
vo.
b. Chng trỡnh mu:

Private Sub Form_Load()
Dim a As Single, b As Single, KetQua As Single
Dim PhepToan As String

a = InputBox("Nhập số hạng thứ nhất: ")
PhepToan = InputBox("Nhập vào phép toán (+,-,*,/,mod,div,^)")
b = InputBox("Nhập số hạng thứ hai: ")

Select Case PhepToan
Case "+": KetQua = a + b
Case "-"
KetQua = a - b
Case "*": KetQua = a * b
Case "/": KetQua = a / b
Case "div": KetQua = a \ b
Case "mod": KetQua = a Mod b
Case "^": KetQua = a ^ b
BI TP LP TRèNH HNG S KIN
Biờn son: B mụn CNPMHSPKT HY 2005


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
Thc hin cỏc phộp toỏn c bn dựng cu 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 ly phn nguyờn: Vớ d 10 \ 3 = 3. Phộp chia / l
phộp chia thụng thng (ly c phn nguyờn v phn d), vớ d: 5 / 2 = 2.5.

Phộp mod l chia ly phn d, vớ d 10 mod 3 = 1, 6 mod 4 = 2 v.v

Bi tp 6
a. Hng dn:
S l tng cỏc s hng th i, vi i chy t 1 n N, S hng tng quỏt
l i. Do vy tớnh tng ca dóy s S, cú th s dng mt trong 3 loi vũng lp ó
bit.
b. Chng trỡnh mu (Gừ on mó trong th tc
Form_Load)
Cỏch 1: S dng vũng lp For

Dim i As Integer
Dim N As Integer
Dim S As Long
N=Inputbox("Nhp s N (N>0) : ")
S = 0
For i=1 To N
S = S + i ///S = S + <S hng tng quỏt>
Next
Msgbox "Tng = " & S

Cỏch 2: S dng vũng lp Do Loop Until

Dim i As Integer
Dim N As Integer
Dim S As Long
N=Inputbox("Nhp s N (N>0) : ")
S = 0
i = 1
Do
S = S + i
i = i + 1
Loop UNTIL i > N
Msgbox "Tng = " & S

Cỏch 3 : Dựng vũng lp Do While Loop

Dim i As Integer
Dim N As Integer
Dim S As Long
N=Inputbox("Nhp s N (N>0) : ")
S = 0
i = 1
Do While i <= N
BI TP LP TRèNH HNG S KIN
Biờn son: B mụn CNPMHSPKT HY 2005


Trang 9
S = S + i
i = i + 1
Loop
Msgbox "Tng = " & S
Bi tp 7
a. Hng dn:
Cú nhiu cỏch tớnh nhng trong trng hp ny cú th s dng vũng
lp For kt hp vi iu khon Step:
b. Chng trỡnh mu:

Private Sub Form_Load()
Dim i As Integer, S As Long
S = 0
For i = 2 To 100 Step 2
S = S + i
Next

MsgBox "Tổng các số chẵn từ 1->100 là : " & S
End Sub
c. Ghi chỳ:
Nu khụng cú iu khon Step thỡ sau mi ln lp bin chy i t ng c
tng lờn 1 n v. Cũn nu cú iu khon Step 2 thỡ sau mi ln lp, bin chy
i c tng lờn 2 n v. Tng quỏt, nu Step N (N nguyờn õm hoc dng)
thỡ sau mi ln lp, bin chy c tng (nu N > 0) hay gim i (Nu N<0) n
n v.
Nu cho i chy t 1 (For i = 1 TO 100) thỡ kt qu cho ta l tng cỏc s l .

Bi tp 8
a. Hng dn:
Thụng thng trong VB, vi vũng lp For thỡ c sau mi ln lp bin
chy t ng c tng lờn 1 n v. Tuy nhiờn, trong mt s trng hp ta mun
bin chy thay i theo chiu gim dn (Tng t nh For Downto ca
Pascal), tc l sau mi ln lp thỡ bin chy li b gim i mt n v thỡ cn phi s
dng n iu khon Step N vi N l mt s õm. Nu mun sau mi vũng lp bin
chy i gim i mt n v thỡ ta cn vit : For i = N to 1 Step -1
b. Chng trỡnh mu:

Private Sub Form_Load()
Dim i As Integer
For i = 100 To 1 Step -1
Debug.Print i
Next
End Sub

Bi tp 9
a. Hng dn: Vỡ khụng bit ngi dựng nhp bao nhiờu s do vy ta cú th dựng
vũng lp khụng xỏc nh tin hnh cụng vic nhp. Ngoi ra, cng cn cú 2 bin
lu tng cỏc s õm v dng. iu kin kt thỳc vũng lp s l n=0.
BI TP LP TRèNH HNG S KIN
Biờn son: B mụn CNPMHSPKT HY 2005


Trang 1
0
b.Gii mu:
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

Do
n = InputBox("Nhập vào một số nguyên : ")
If n > 0 Then
TongDuong = TongDuong + n
Else
TongAm = TongAm + n
End If
Loop Until n = 0 '/// Lp cho n khi no nhp n = 0 thỡ dng.

MsgBox "Tổng các số âm = " & TongAm & ". Tong các số dơng = " & TongDuong
End Sub
c. Ghi chỳ:
Vũng lp Do . Loop Until <K> s kt thỳc khi iu kin <K> bng true
Vũng lp DoLoop Until khỏc vi vũng lp dng Do.Loop While <K>
ch vũng lp DoLoop While <K> kt thỳc khi <K> vn l False.
Thc cht, cu trỳc lp DoLoop Until v Do Loop While l tng
ng nhau, do vy trỏnh nhm ln chỳng ta ch nờn nh mt loi khi thc
hnh.
Cú th thoỏt khi vũng lp dng Do Loop bng cõu lnh Exit Do
Bi tp 10
a. Hng dn:
Vỡ khụng th bit c l sau bao nhiờu nm thỡ tng s tin s l
2.000.000, m ch bit rng mi nm s tng thờm mt lng no ú. Do vy, õy
ta s s dng vũng lp khụng xỏc nh v mi ln lp ta s kim tra xem ó c s
tin cn thit hay cha? Nu ri thỡ thoỏt v s ln th chớnh l s nm cn tỡm.
Nhng õy ti sao ta li s dng vũng lp Do WhileLoop m khụng l Do
Loop ?. S d s dng vũng lp Do While Loop l vỡ rng s tin gi vo ban
u ó rt cú th ln hn s tin k vng !
b. Chng trỡnh mu:

Private Sub Form_Load()
Dim SoNam As Integer, TongTien As Long
SoNam = 0
TongTien = 1000000
Do While TongTien < 2000000
SoNam = SoNam + 1
TongTien = (1 + 0.05) ^ SoNam * TongTien /// Công thức cần nhớ
Loop
MsgBox "Cần phải gửi trong " & SoNam & " năm !"
End Sub
c. Ghi chỳ: õy l bi toỏn tớnh tin gi tit kim, GDP cú th ỏp dng trong cuc sng
BI TP LP TRèNH HNG S KIN
Biờn son: B mụn CNPMHSPKT HY 2005


Trang 11
Bi tp 11
a. Hng dn:
Mt s N c gi l s nguyờn t nu nh nú ch chia ht cho 1 v
chớnh nú. Hay núi cỏch khỏc l s N khụng l nguyờn t nu nh nú chia ht cho ớt
nht mt s nm trong khong [2N-1]. Nh vy, kim tra ta ch cn duyt tt c
cỏc s i trong phm vi t [2N-1] xem N mod i = 0 ?, nu xy ra thỡ kt lun ngay
rng N khụng l nguyờn t, trỏi li nu sau khi ó duyt ht m khụng thy trng
hp ú xy ra thỡ kt lun N l nguyờn t.
Ngi ta ó chng minh c rng khụng cn phi duyt t [2N-1] m ch cn
duyt trong phm vi hp hn l t
] 2[ N .
b. Chng trỡnh mu:

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 ")
KetQua = True
For i = 2 To Sqr(n)
If n Mod i = 0 Then
KetQua = False
Exit For /// Thoát ngay khỏi vòng lặp For
End If
Next
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ụ iu kin khi vũng lp Do While, DoLoop While hay
Do Loop Until thỡ cn gi lnh Exit Do
Hm Sqr(n) trong VB dựng tớnh n (khụng phi l tớnh bỡnh phng nh
trong mt s ngụn ng lp trỡnh khỏc nh Pascal).
Nu cụng vic gỡ ch lm mt ln (vớ d thụng bỏo kt qu nh trờn) thỡ
KHễNG BAO GI c t trong vũng lp m phi t ngoi vũng lp. Vỡ
c im ca vũng lp l lp i lp li nhiu ln mt cụng vic !

Bi tp 12
a. Hng dn:
Giai tha ca s N c tớnh theo cụng thc N!=1.2.3N-1.N.
tớnh toỏn ta thc hin nhõn dn cỏc s i ( i = 1 ữ N) vo kt qu.
b. Chng trỡnh mu:

Private Sub Form_Load()
Dim n As Integer, i As Integer, KetQua As Long
BI TP LP TRèNH HNG S KIN
Biờn son: B mụn CNPMHSPKT HY 2005


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)


'/// Sử dụng vòng lặp For
KetQua = 1
For i = 1 To n
KetQua = KetQua * i
Next
Debug.Print "Kết quả của " & n & "! = " & KetQua


'/// Sử dụng vòng lặp Do While
KetQua = 1
i = 1
Do While i <= n
KetQua = KetQua * i
i = i + 1
Loop
Debug.Print "Kết quả của " & n & "! = " & KetQua


'/// Sử dụng vòng lặp Do Until
KetQua = 1
i = 1
Do Until i > n
KetQua = KetQua * i
i = i + 1
Loop
Debug.Print "Kết quả của " & n & "! = " & KetQua


'/// Sử dụng vòng lặp Do Loop While
i = 1
KetQua = 1
Do
KetQua = KetQua * i
i = i + 1
Loop While i <= n
Debug.Print "Kết quả của " & n & "! = " & KetQua


'/// Sử dụng vòng lặp Do Loop Until
i = 1
KetQua = 1
Do
KetQua = KetQua * i
i = i + 1
Loop Until i > n
Debug.Print "Kết quả của " & n & "! = " & KetQua
End Sub
c. Ghi chỳ:
Cú th tớnh N! bng phng phỏp qui : GiaiThua = GiaiThua (n-1) * N.
Ngi ta ó chng minh c rng tt cỏc cu trỳc lp u cú th vit tng
ng theo cỏc cu trỳc khỏc.
Trong VB cú rt nhiu cu trỳc lp, tuy nhiờn ch cn thuc 3 cu trỳc sau l :
o For
BI TP LP TRèNH HNG S KIN
Biờn son: B mụn CNPMHSPKT HY 2005


Trang 13
o Do

Loop Until <K>
o Do While <K>

Loop
Cu trỳc Do While <K> Loop v Do Until <K>. Loop cựng cú im
ging nhau l kim tra iu kin trc khi lp (ging nh cu trỳc While do
trong Pascal hay While trong C/C++) nhng cu trỳc Do While <K>
Loop ch lp khi iu kin <K> vn ỳng, cũn cu trỳc Do Until <K>.
Loop ch lp khi iu kin <K> vn sai (Hay thoỏt nu <K> l ỳng).
Cu trỳc Do Loop While <K> v cu trỳc Do Loop Until <K> cựng
ging nhau l thc hin lp sau ú mi kim tra iu kin (Ging cu trỳc
Repeat Until trong pascal hay do While trong C/C++), nhng cu trỳc
Do Loop While <K> ch lp nu iu kin vn cũn ỳng, trong khi ú cu
trỳc Do Loop Until <K> ch lp nu biu thc iu kin vn cũn sai (Hay
núi cỏch khỏc l kt thỳc lp nu iu kin lp l ỳng)
Khi thc hnh, khụng nht thit phi nh c 4 kiu lp ó nờu trờn m bn
nờn vn dng thnh tho 3 cu trỳc lp c khuyn cỏo dựng l For, Do
While v Do Loop Until, vỡ 3 cu trỳc ny tng t nh cỏc cu trỳc lp
trong mt s ngụn ng lp trỡnh ph bin khỏc (For,Whiledo,Repeat
Until).
Bi tp 13
a. Hng dn:
Ta cú thng S = S1 + S2 + S3, vi S1, S2, S3 tng ng vi 3 tng
trờn. S dng vũng lp tớnh tng ca mi S
i
, sau ú cng li c kt qu.
b. Chng trỡnh mu:

Private Sub form_load()
Dim i As Integer
Dim Tong As Long
Dim S1 As Long, S2 As Long, S3 As Long

Tong = 0 ' Đầu tiên do cha tính nên Tong bằng 0
S1 = 0
S2 = 0
S3 = 0
'/// Tính tổng S1
For i = 1 To 8
S1 = S1 + i ^ 2
Next
'/// Tính tổng S2
For i = 100 To 200
S2 = S2 + i ^ 2
Next
'/// Tính tổng S3

For i = 300 To 310
S3 = S3 + i ^ 2
Next
S = S1 + S2 + S3
MsgBox "Tổng là : " & Tong, vbInformation, "Thông báo "
End Sub
BI TP LP TRèNH HNG S KIN
Biờn son: B mụn CNPMHSPKT HY 2005


Trang 14
Bi tp 14:
a. Hng dn:
Cụng thc tớnh giai tha ca s N l: N! = 1.2.3N-1.N, nh vy
õy ta cn nhõn liờn tip cỏc s i (i chy t 1 n n) vo kt qu. Trong ú, giỏ tr
khi to cho kt qu l 1. Bi ny cú th gii theo cỏch qui hoc khụng qui.
b. Chng trỡnh mu

Cỏch 1: Dựng vũng lp (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)
KetQua = 1
For i = 1 To n
KetQua = KetQua * i
Next
MsgBox n & " ! bng " & KetQua
End Sub
Cỏch 2: Dựng qui
'/// Hm đệ qui tính N !
Function GiaiThua(ByVal N As Integer) As Long
If N = 1 Then
GiaiThua = 1
Else
GiaiThua = GiaiThua(N - 1) * N
End If
End Function

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 & " ! bng " & GiaiThua(N)
End Sub

Không có nhận xét nào:

Đăng nhận xét