0.5đ Nhập N là số phần tử của một mảng số nguyên.. 0.5đ Khi nhấp nút TIM, tìm vị trí của số lẻ đầu tiên trong mảng vừa nhập.. Xuất kết quả bằng MsgBox .Nếu mảng không có số lẻ thì xuất “
Trang 1ĐẠI HỌC SƯ PHẠM KỸ THUẬT TPHCM ĐỀ THI CUỐI KỲ NĂM HỌC 2013-2014 KHOA CÔNG NGHỆ THÔNG TIN MÔN: LẬP TRÌNH VISUAL BASIC
BỘ MÔN: HỆ THỐNG THÔNG TIN MÃ MÔN HỌC: VBPR131085
- Thời gian: 75 phút
Không được sử dụng tài liệu
Đề thi có: 02 trang
-Câu 1: (1.5 điểm) Cho hàm tính tổng TinhS như sau:
Function TinhS ( ByVal n As Integer ) As Long
Dim i As Integer
Dim kq, giaithua as Long
kq = 0
giaithua = 1
For i = 1 To n
giaithua = giaithua * i
kq = kq + giaithua
Next i
TinhS = kq
End Function
Hãy viết lại hàm TinhS sử dụng vòng lặp Do while…Loop
Câu 2: (2 điểm) Một chương trình có hai thủ tục sau, khi thủ tục CmdVidu_Click được gọi,
hãy trình bày chạy từng bước chương trình trên giấy
Private Sub P ( ByVal x As Integer, ByRef y As Integer )
y = y + x
x = x – 2 MsgBox "x = " & x & Space(5) & "y = " & y
Trang 2End Sub
Private Sub CmdVidu_Click ( )
Dim a As Integer Dim b As Integer
a = 10
b = 5 MsgBox "a = " & a & Space(5) & "b = " & b
P b, a ‘ Lời gọi thủ tục P MsgBox "a = " & a & Space(5) & "b = " & b End Sub
Câu 3: (2.5 điểm) Viết chương trình:
a (0.5đ) Nhập N là số phần tử của một mảng số nguyên Nhấp nút NHAP MANG
thì các InputBox hiện ra để nhập mảng Xuất mảng vừa nhập ra nhãn (label) có tên là lblNhap
b (0.5đ) Khi nhấp nút TIM, tìm vị trí của số lẻ đầu tiên trong mảng vừa nhập Xuất
kết quả bằng MsgBox Nếu mảng không có số lẻ thì xuất “Khong co”
txtN cmdNhap lblNhap cmdSapXep lblKQ cmdTim
Trang 3c (1đ) Khi nhấp nút SAP XEP, đổi chổ các số lẻ trong mảng với nhau sao cho các
số lẻ này có giá trị tăng dần từ trái sang phải, đổi chổ các số chẵn trong mảng với nhau sao cho các số chẵn này có giá trị giảm dần từ trái sang phải
d (0.5đ) Xuất mảng vừa được sắp xếp ra nhãn (lablel) có tên là lblKQ.
Câu 4: (2.5 điểm) Viết chương trình nhập 2 số nguyên dương N và M (giả sử M nhỏ hơn
hoặc bằng số ký số (chữ số) của N) Tính và in ra tổng M ký số (chữ số) cuối cùng của số
N theo mẫu giao diện sau:
(Trong ví dụ: kết quả 21 vì 7+6+8=21)
Chú ý: Sinh viên có thể sử dụng kiểu chuỗi cho N.
Câu 5: (1.5 điểm) Có ba loại giấy bạc: 1.000, 2.000 và 5.000 Viết chương trình xuất ra số
phương án kết hợp từ ba loại giấy bạc trên để có được 100.000 Xuất kết quả bằng MsgBox
Ví dụ: 5 tờ 1.000 + 40 tờ 2.000 + 3 tờ 5.000 = 100.000 là một phương án.
1 tờ 1.000 + 2 tờ 2.000 + 19 tờ 5.000 = 100.000 là một phương án.
Giả sử có tất cả là 2 phương án Dùng MsgBox xuất ra số 2.
Ghi chú: Cán bộ coi thi không được giải thích đề thi Ngày 28 tháng 5 năm 2014
Trưởng BM ĐÁP ÁN GỢI Ý
Trang 4Chú ý: với các câu viết chương trình, sinh viên có thể làm theo cách khác miễn đúng là được.
Câu 1
Function TinhS ( ByVal n As Integer ) As Long
Dim i As Integer
Dim kq, giaithua As Long
kq = 0
giaithua = 1
i = 1
Do While i <= n
giaithua = giaithua * i
kq = kq + giaithua
i = i + 1
Loop
TinhS = kq
End Function
Câu 2
Một số sv không kẽ bảng mà debug theo cách riêng, nếu đúng, vẫn khuyến khích được một
số điểm tượng trưng từ 0.5-1.5đ tùy theo mức độ
chúng
điểm
Dim a As Integer
Dim b As Integer
0,5 đ
a = 10
b = 5
MsgBox "a=" & a &
Space(5) & "b =" & b
a=10 b=5
Call p(b,a)
p(ByVal x As Integer, ByRef
y As Integer)
0,5 đ
y = y + x
x = x - 2
x
5
ab
10 5
3
15
Trang 50,5 đ MsgBox "x =" & x &
Space(5) & "y =" & y
x=3 y=15
Kết thúc chương trình con Biến x và y bị xóa khỏi bộ
nhớ MsgBox "a =" & a &
Space(5) & "b =" & b
a=15 b=5
0,5 đ
Câu 3:
a Nhập xuất mảng: 0.5đ Sinh viên có thể nhập mảng có chỉ số bắt đầu từ 0 đến n-1 (vẫn tròn điểm)
Nếu sinh viên nhập đúng, không xuất đúng: 0.5đ; nếu sinh viên nhập không đúng, xuất
đúng: 0.25đ Sinh viên có thể dùng mảng Textbox (giả sử tên đặt là txtA) để nhập dữ liệu:
0.5đ
Dim a() As Integer, n As Integer
Private Sub cmdNhap_Click() (T Danh)
‘Nếu sv đặt tên hàm không đúng lắm có thể châm chước bỏ qua, ví dụ Private Sub lblNhap
_Click( )
Dim s As String
n = Val(txtN.Text)
ReDim a(1 To n)
For i = 1 To n
a(i) = InputBox("Nhap pt thu " & i)
s = s & a(i) & Space(2)
Trang 6Next
lblNhap = s ‘sv có thể xuất theo cách lblNhap.Caption đúng
End Sub
b Tìm vị trí số lẻ đầu tiên trong mảng: 0.5đ Nếu sinh viên nhập mảng có chỉ số bắt đầu từ
0 thì chỉ số xuất ra kém hơn 1 đơn vị: vẫn đúng 0.5đ
Private Sub cmdTim_Click() (c Uyển)
For i = 1 To n
If a(i) Mod 2 <> 0 Then ‘chỗ này nếu làm Mod 2 = 1 thật ra không chính xác lắm, vì trong VB -1 Mod 2 không phải bằng 1, nhưng vẫn chấm khuyến khích tròn điểm
MsgBox i
Exit Sub
End If
Next
MsgBox "Khong co"
End Sub
c và d Sắp xếp(1đ) và xuất mảng(0.5đ): đổi chổ các số lẻ sao cho tăng dần, đổi chổ các số chẵn sao cho giảm dần Trong phần Sắp xếp: mỗi điều kiện If được 0.5đ, hai điều kiện If được 1đ Nếu sinh viên làm sai điều kiện If mà chỉ ghi được 2 vòng for: được 0.5đ
Private Sub cmdSapXep_Click() (c Uyển)
Dim temp As Integer
Dim s As String
For i = 1 To n – 1 ‘nếu sv chạy từ 0 To n-2 vẫn đúng
For j = i + 1 To n ‘nếu sv chạy từ i+1 To n-1 vẫn đúng
If a(i) Mod 2 <> 0 And a(j) Mod 2 <> 0 And a(i) > a(j) Then
temp = a(i)
a(i) = a(j)
a(j) = temp
Trang 7End If
If a(i) Mod 2 = 0 And a(j) Mod 2 = 0 And a(i) < a(j) Then ‘ nếu sv chỉ ghi chỗ này là Else mà không có điều kiện -> sai
temp = a(i)
a(i) = a(j)
a(j) = temp
End If
Next
Next
For i = 1 To n ‘xuất mảng
s = s & a(i) & Space(2)
Next
lblKQ = s ‘sv có thể xuất theo cách lblNhap.Caption đúng
End Sub
*Sinh viên có thể sắp xếp mảng theo cách hiểu khác: các phần tử lẻ di chuyển về đầu mảng
và tăng dần, các phần tử chẵn di chuyển về cuối mảng và giảm dần: khuyến khích cho các
em tròn điểm nếu làm đúng
Private Sub cmdSapXep_Click() (c Châu)
For i = 1 To n - 1
For j = i + 1 To n
If A(i) Mod 2 <> 0 Then
If A(j) Mod 2 <> 0 Then
If A(i) > A(j) Then
tmp = A(i)
A(i) = A(j)
A(j) = tmp
End If
Trang 8End If
Else
If A(j) Mod 2 <> 0 Then
tmp = A(i)
A(i) = A(j)
A(j) = tmp
ElseIf A(i) < A(j) Then
tmp = A(i)
A(i) = A(j)
A(j) = tmp
End If
End If
Next j
Next i
For i = 1 To n
s = s & A(i) & Space(2)
Next
lblKQ = s
End Sub
Câu 4: (Thang điểm: nhập (0,5 điểm), xử lý (1.5 điểm), xuất dữ liệu (0,5 điểm).
Private Sub cmdTim_Click()
Dim M, N As Integer
Dim Tong As Integer
N = Val(txtN.Text)
M = Val(txtM.Text)
Tong = 0
For i = 1 To M
Trang 9Tong = Tong + N Mod 10
N = N \ 10
Next i
LblKQ = "Tong " + Str(M) + " ky so cuoi cua " _ + txtN.Text + " la " + Str(Tong) ‘sv có thể xuất cách khác LblKQ.Caption = …vẫn đúng ; nếu sv chỉ xuất ra duy nhất giá trị của Tong mà không xuất ra được câu như trên thì được 0.25đ
End Sub
*Cách dùng Do while … Loop
Private Sub cmdTim_Click()
Dim N, M, i, s As Integer
i = 1
N = Val(txtN.Text)
M = Val(txtM.Text)
Do While i <= M And N > 0
s = s + N Mod 10
i = i + 1
N = N \ 10
Loop
LblKQ = "Tong " + Str(M) + " ky so cuoi cua " _ + txtN.Text + " la " + Str(s) ‘sv có thể xuất cách khác LblKQ.Caption = …vẫn đúng ; nếu sv chỉ xuất ra duy nhất giá trị của Tong mà không xuất ra được câu như trên thì được 0.25đ
End Sub
* Sinh viên có thể xử lý theo chuỗi ( N kiểu String) :
Private Sub cmdTim_Click()
Dim Tong, M As Integer
Dim N As String
Trang 10N = txtN.Text
M = Val(txtM.Text)
Tong = 0
For i = 1 To M
Tong = Tong + Val(Right(N, 1))
N = Left(N, Len(N) - 1)
Next i
If Len(N) = 0 Then M = Len(txtN.Text)
LblKQ = "Tong " + Str(M) + " ky so cuoi cua " _ + txtN.Text + " la " + Str(Tong) ‘sv có thể xuất cách khác LblKQ.Caption = …vẫn đúng ; nếu sv chỉ xuất ra duy nhất giá trị của Tong mà không xuất ra được câu như trên thì được 0.25đ
End Sub
Câu 5
Dim dem As Integer
For i = 1 To 93 ‘nếu sv chạy tới hơn 93 vẫn
đúng, vd: For i=1 To 100
Viết được ba vòng for: 1đ
For j = 1 To 47 ‘nếu sv chạy tới hơn 47 vẫn
đúng, vd: For i=1 To 100
For k = 1 To 19 ‘nếu sv chạy tới hơn 19 vẫn
đúng, vd: For i=1 To 100
If i * 1000 + j * 2000 + k * 5000 = 100000
Then
Viết được điều kiện này: 0.5đ
dem = dem + 1
End If
Next
Next
Trang 11MsgBox dem
*Nếu sv làm theo cách không cần phải kết hợp đủ 3 loại giấy bạc, nghĩa là có thể 1 đến 2 loại giấy bạc không có mặt: vẫn được tròn điểm:
Dim dem As Integer
For i = 0 To 100 ‘nếu sv chạy tới hơn 100 vẫn
đúng, vd: For i=0 To 150
Viết được ba vòng for: 1đ
For j = 0 To 50 ‘nếu sv chạy tới hơn 50 vẫn
đúng, vd: For i=0 To 100
For k = 0 To 20 ‘nếu sv chạy tới hơn 20 vẫn
đúng, vd: For i=0 To 100
If i * 1000 + j * 2000 + k * 5000 = 100000
Then
Viết được điều kiện này: 0.5đ
dem = dem + 1
End If
Next
Next
Next
MsgBox dem