trav2t > 02-08-13, 11:34 AM
Public Function Daytrungnhau(st As String) As Boolean
Dim kt As Integer, sophantu As Integer
Dim ktso As String
Dim kts As String
Dim tohop() As Integer 'Tạo mãng động do không biết số phần tự trong dãy số nhập vào là bao nhiêu'
'Đếm số phần tử trong dãy số'
kt = 1
sophantu = 0
kts = st + " "
Do While kt < Len(kts)
ktso = ""
Do While Mid(kts, kt, 1) <> " "
ktso = ktso + Mid(kts, kt, 1)
kt = kt + 1
Loop
sophantu = sophantu + 1
kt = kt + 1
Loop
ReDim tohop(sophantu) As Integer 'Tao lai mang voi so luong la sophantu kieu Integer'
kt = 1
For i = 1 To sophantu 'Lay gia tri cac phan tu gan cho mang'
Do While kt < Len(ktphieu)
ktso = ""
Do While Mid(ktphieu, kt, 1) <> " "
ktso = ktso + Mid(ktphieu, kt, 1)
kt = kt + 1
Loop
tohop(i) = Val(ktso) 'Đổi các ký tự số kiểu text thành số kiểu Number và gán cho mãng vị trí thứ i'
kt = kt + 1
Loop
Next i
'Kiểm tra các phần tử trong mãng có trùng nhau không'
'Nếu trùng nhau thì gắn kết quả False và thoát khỏi hàm'
For i = 1 To sophantu - 1
For j = 2 To sophantu
If tohop(i) = tohop(j) Then
Daytrungnhau = False
Exit Function
End If
Next j
Next i
Daytrungnhau = True 'Nếu đến cuối cùng không tìm được số trùng nhau thì gắn kết quả True'
End Function
Private Sub cmdKiemtra_Click()
If Daytrungnhau(dayso) then
MsgBox "Có số trùng nhau", vbInformation, "Thông báo!"
Else
MsgBox "Không có số trùng nhau", vbInformation, "Thông báo!"
End If
End Sub
cpucloi > 02-08-13, 11:38 AM
tt1212 > 02-08-13, 03:16 PM
trav2t > 02-08-13, 04:16 PM
Nếu có ròi thì không được nhập còn chưa có thì cứ nhập thoải mãi.
Giải pháp mình chọn chuỗi để xử lý
[/quote]
nếu người ta nhập số 1 và số 11 thì sao
[hr]
Xin lỗi thuật toán trên có một chút nhầm lẫn ở 2 vòng lặp For cuối cùng, Chính xác là như sau:
[php]
For i = 1 To sophantu - 1
For j = i +1 To sophantu
If tohop(i) = tohop(j) Then
Daytrungnhau = False
Exit Function
End If
Next j
Next i
bomnhauag > 02-08-13, 05:17 PM
(02-08-13, 11:34 AM)trav2t Đã viết: Mình mới tham gia diễn đàn. Mình không biết cái này có trên diễn đàn chưa. Nếu có rồi thì anh em thông cảm.
Nếu chưa có mình đánh liều xin mạo muội đưa ra một vấn đề như sau.
Kiểm tra một dãy số nhập vào có các số trùng nhau hay không? Các số nhập vào cách nhau khoảng trắng (phím Space). Ví dụ: 1 2 3 4 (kết quả: Không có số trùng nhau); 1 1 2 3 (kết quả: có số trùng nhau).
Giải quyết vấn đề như sau:
Bước 1. Tạo function kiểm tra
Mã PHP:Public Function Daytrungnhau(st As String) As Boolean
Dim kt As Integer, sophantu As Integer
Dim ktso As String
Dim kts As String
Dim tohop() As Integer 'Tạo mãng động do không biết số phần tự trong dãy số nhập vào là bao nhiêu'
'Đếm số phần tử trong dãy số'
kt = 1
sophantu = 0
kts = st + " "
Do While kt < Len(kts)
ktso = ""
Do While Mid(kts, kt, 1) <> " "
ktso = ktso + Mid(kts, kt, 1)
kt = kt + 1
Loop
sophantu = sophantu + 1
kt = kt + 1
Loop
ReDim tohop(sophantu) As Integer 'Tao lai mang voi so luong la sophantu kieu Integer'
kt = 1
For i = 1 To sophantu 'Lay gia tri cac phan tu gan cho mang'
Do While kt < Len(ktphieu)
ktso = ""
Do While Mid(ktphieu, kt, 1) <> " "
ktso = ktso + Mid(ktphieu, kt, 1)
kt = kt + 1
Loop
tohop(i) = Val(ktso) 'Đổi các ký tự số kiểu text thành số kiểu Number và gán cho mãng vị trí thứ i'
kt = kt + 1
Loop
Next i
'Kiểm tra các phần tử trong mãng có trùng nhau không'
'Nếu trùng nhau thì gắn kết quả False và thoát khỏi hàm'
For i = 1 To sophantu - 1
For j = 2 To sophantu
If tohop(i) = tohop(j) Then
Daytrungnhau = False
Exit Function
End If
Next j
Next i
Daytrungnhau = True 'Nếu đến cuối cùng không tìm được số trùng nhau thì gắn kết quả True'
End Function
Bước 2. Giả sử tao có Nút lệnh tên là cmdKiemtra
Mã PHP:Private Sub cmdKiemtra_Click()
If Daytrungnhau(dayso) then
MsgBox "Có số trùng nhau", vbInformation, "Thông báo!"
Else
MsgBox "Không có số trùng nhau", vbInformation, "Thông báo!"
End If
End Sub
dim tohop
dim sophantu as integer
tohop = Split(st, " ") 'hàm split tách chuỗi thành những phần tử con dựa vào " " (khoảng trắng) trong chuỗi st
sophantu = UBound(tohop) 'hàm UBound lấy số lượng phần tử có trong mảng tohop