Trường Đại học Sư phạm Kỹ thuật TP.HCM ĐÁP ÁN MÔN: NHẬP MÔN TIN HỌC
Khoa CNTT MÃ MÔN HỌC: 1081020
Bộ môn Tin học cơ sở Đáp án số 01.
----------------------- -----------------------
Câu 1: (3,5đ)
N = A + (4 số cuối của MSSV) – (ngày sinh)
a. TinhS1: tổng các số chẳn trong khoản từ 1 N 1 điểm
Dim S1,A, N As Integer
A= Val(txtA.Text)
N = A + (4 số cuối của MSSV) – (ngày sinh)
For i = 1 To N
If i Mod 2 = 0 Then
S1 = S1 + i
End If
Next
txtKetQua.Text = S1
b. TinhS2: tổng các số chia hết cho 9 trong khoản từ 1 N 1 điểm
Dim S2,A, N As Integer
A= Val(txtA.Text)
N = A + (4 số cuối của MSSV) – (ngày sinh)
For i = 1 To N
If i Mod 9 = 0 Then
S2 = S2 + i
End If
Next
txtKetQua.Text = S2
c. TinhS3: số các số nguyên tố trong khoản từ 1N 1.5 điểm
SV có thể hiện thực nhiều cách ví dụ: sử dụng hàm isSNT (phải hiện thực trong bài làm nếu không chỉ được ½ số điểm câu này)
Function isSNT ( n as Integer) As Boolean
Dim Kq as Boolean
Kq= True
If n <> 2
For i = 3 to n\2
If n mod I = 0 then
Kq = False
Exit For
End if
Next
End if
isSNT =Kq
End Function
Dim S1,A, N As Integer
A= Val(txtA.Text)
N = A + (4 số cuối của MSSV) – (ngày sinh)
For i = 1 To N
If isSNT(i) Then
S3 = S3 + 1 đếm số các số nguyên tố
End If
Next
txtKetQua.Text = S1
Câu 2: (3đ) SV có thể hiện thực nhiều cách
a. Chương trình cho phép người dùng nhập một chuỗi vào InputText sau đó đảo ngược các từ trong chuỗi đó và xuất ra OutputText. Ví dụ:
InputText = ”nhập môn tin học”
OutputText = ”học tin môn nhập”
Private Sub DaoNguoc_Click()
Dim batdautu As Boolean
Dim start, length, i As Integer
Dim inputS, outputS, temp, chudau, c As String
batdautu = False
start = 1
length = 1
inputS = InputText.Text
For i = 1 To Len(inputS)
c = Mid(inputS, i, 1)
If c <> Space(1) Then
If Not batdautu Then ' neu batdautu = false
batdautu = True
start = i
length = 1
Else
length = length + 1
End If
Else ' c = Space(1)
If batdautu Then
temp = Mid(inputS, start, length)
outputS = temp & " " & outputS
batdautu = False
length = 1
End If
End If
Next
If batdautu Then
temp = Mid(inputS, start, length)
outputS = temp & " " & outputS
batdautu = False
End If
OutputText.Text = outputS
End Sub
b. Chương trình cho phép người dùng nhập một chuỗi vào InputText sau đó viết
hoa chữ đầu của các từ trong chuỗi đó và xuất ra OutputText. Ví dụ:
InputText = ”nhập môn tin học”
OutputText = ”Nhập Môn Tin Học”
Private Sub VietHoa_Click()
Dim batdautu As Boolean
Dim start, length, i As Integer
Dim inputS, outputS, temp, chudau, c As String
batdautu = False
start = 1
length = 1
inputS = InputText.Text
For i = 1 To Len(inputS)
c = Mid(inputS, i, 1)
If c <> Space(1) Then
If Not batdautu Then ' neu batdautu = false
batdautu = True
start = i
length = 1
Else
length = length + 1
End If
Else ' c = Space(1)
If batdautu Then
temp = Mid(inputS, start, length)
chudau = Mid(temp, 1, 1)
temp = UCase(chudau) & Mid(temp, 2, Len(temp) - 1)
outputS = outputS & " " & temp
batdautu = False
length = 1
End If
End If
Next
If batdautu Then
temp = Mid(inputS, start, length)
chudau = Mid(temp, 1, 1)
temp = UCase(chudau) & Mid(temp, 2, Len(temp) - 1)
outputS = outputS & " " & temp
batdautu = False
End If
OutputText.Text = outputS
End Sub
Câu 3: (2.5đ)
Giả sử 3 hàm sau đây đã được hiện thực:
Function DoiCoSo10Ra2 (n As Integer) As String
Function DoiCoSo10Ra8 (n As Integer) As String
Function DoiCoSo10Ra16 (n As Integer) As String
a. Hãy sử dụng 3 hàm trên để hiện thực hàm đổi một số ở cơ số 10 ra cơ số K
với K =2,8,16:
Function DoiCoSo10RaK(n As Integer,k As Integer) As String
(Lưu ý : nếu SV hiện thực đúng hàm DoiCoSo10RaK nhưng không sử dụng 3 hàm đã cho ban đầu thì chỉ được ½ số điểm câu này)
Function DoiCoSo10RaK(n As Integer,k As Integer) As String
Dim Ketqua As Integer
If k = 2 Then
Ketqua= DoiCoSo10Ra2(n)
ElseIf k = 8 Then
Ketqua= DoiCoSo10Ra8(n)
ElseIf k = 16 Then
Ketqua= DoiCoSo10Ra16(n)
Else
Ketqua = “Co so K khong hop le”
End If
DoiCoSo10RaK = Ketqua
End Function
b. Hãy hiện thực hàm DoiCoSo10Ra8 (n As Integer) As String 1.5 điểm
SV có thể hiện thực nhiều cách.
Ví dụ:
Viết hàm tổng quát đổi cơ số 10 ra cơ số K rồi sử dụng để đổi cơ số 10 ra 8
Function DoiCoSo10RaK(m, k As Integer) As String
Dim n As Integer
Dim s, l As String
s = ""
l = "0123456789ABCDEF"
If k = 0 Then
MsgBox "He so k phai khac 0"
Exit Function
End If
Do
n = m Mod k
s = Mid(l, n + 1, 1) & s
m = m \ k
Loop Until m = 0
DoiCoSo10RaK = s
End Function
Function DoiCoSo10Ra8 (n As Integer) As String
Dim Ketqua As String
Ketqua = DoiCoSo10RaK(n,8)
DoiCoSo10Ra8=Ketqua
End Function
Hoặc có thể hiện thực trực tiếp hàm đổi từ cơ số 10 ra cơ số 8.
Câu 4: (1đ)
Ta dùng một mảng 2 chiều game (0 to 2,0 to 2) để lưu dữ liệu của game tic-tac-toe như hình minh họa ở trên. Hãy hiện thực hàm XacDinhQuanThang() nhận vào một mảng 2 chiều chứa dữ liệu của một game tic-tac-toe và xác định quân nào thắng game đó.
Function XacDinhQuanThang ( game As Variant) As Integer
Nếu quân 0 thắng hàm trả về 0
Nếu quân X thắng hàm trả về 1
Hàm trả về 2 trong các trường hợp còn lại.
Chương trình phải duyệt theo chiều ngang để xác định có trường hợp thắng trên hàng ngang hay không. (0,75)
Chương trình phải duyệt theo hàng dọc để xác định có trường hợp thắng trên hàng dọc hay không. (0,75)
Chương trình phải duyệt trên 2 đường chéo để xác định có trường hợp thắng trên đường chéo hay không. (0,5)
Sinh viên cũng có thể dùng cách duyệt mảng một chiều áp dụng riêng biệt cho từng hàng, từng cột.
Nếu sinh viên trình bày , phân tích được hướng giải quyết bài toán thì được ½ số điểm câu này.
Function QuanThang(a As Variant) As Integer
Dim count0 As Integer
Dim count1 As Integer
' Duyet duong cheo thuan
count0 = 0
count1 = 0
For i = 0 To 2
If (a(i, i) = 0) Then
count0 = count0 + 1
ElseIf (a(i, i) = 1) Then
count1 = count1 + 1
End If
Next
'Duyet duong cheo nghich
If count0 < 3 And count1 < 3 Then 'chưa xác định được quân thắng
count0 = 0
count1 = 0
For i = 0 To 2
If (a(i, 2 - i) = 0) Then
count0 = count0 + 1
ElseIf (a(i, 2 - i) = 1) Then
count1 = count1 + 1
End If
Next
End If
' Duyet theo hang`
If count0 < 3 And count1 < 3 Then
count0 = 0
count1 = 0
For i = 0 To 2
If count0 < 3 And count1 < 3 Then
count0 = 0
count1 = 0
For j = 0 To 2
If (a(i, j) = 0) Then
count0 = count0 + 1
ElseIf (a(i, j) = 1) Then
count1 = count1 + 1
End If
Next
Else
Exit For ' da xac dinh duoc quan thang
End If
Next
End If
' Duyet theo cot
If count0 < 3 And count1 < 3 Then
count0 = 0
count1 = 0
For i = 0 To 2
If count0 < 3 And count1 < 3 Then
count0 = 0
count1 = 0
For j = 0 To 2
If (a(j, i) = 0) Then
count0 = count0 + 1
ElseIf (a(j, i) = 1) Then
count1 = count1 + 1
End If
Next
Else
Exit For ' da xac dinh duoc quan thang
End If
Next
End If
If count0 = 3 Then
QuanThang = 0
ElseIf count1 = 3 Then
QuanThang = 1
Else
QuanThang = 2
End If
End Function
Kiểm tra hàng dọc của người chơi 0
if game(0,0) = 0 and game(1,0) = 0 and game(2,0) = 0
nguoi0 = thang
else if game(0,1) = 0 and game(1,1) = 0 and game(2,1) = 0
nguoi0 = thang
else if game(0,2) = 0 and game(1,2) = 0 and game(2,2) = 0
nguoi0 = thang
...
Tuong tu cho cac hang ngang, hang cheo 45 độ, hàng chéo -45 độ.
--------HẾT--------
TP. HCM ngày _____________
Trưởng Bộ môn
Link Dowload:
http://www.mediafire.com/?05oup5whw18hczi