Visual Basic 6.0

Marechal

Youtube Master Race
Tham gia ngày
14/11/06
Bài viết
49
Reaction score
0
Mấy bạn xem giùm mình cái thuật toán để đổi từ thập phân sang nhị phân:
_ Nhập n
_ Lấy phần dư của n/2, lặp cho đến khi fần nguyên của fép chia bằng 0.
_ Đảo kết quả
Còn đổi từ nhị phân sang thập fân thì pó tay, ai biết chỉ giùm ^^!
 
* Duyệt qua hết chiều dài của chuỗi nhị phân
- Kiểm tra số có là 0 hay 1
- Nếu là 0 thì để yên không làm gì
- Nếu là 1 thì tăng thêm 2 (Nhị phân)
- Sau đó lũy thừa với số ký tự còn lại trong chuỗi
- Lặp đi lặp lại cho đến ký tự cuối cùng
- Trả về kết quả là một chuỗi hay chuyển sang số.

Hàm chuyển Số nhị phân sang thập phân :

Public Function np2tp(sonp As String) As String
Dim i As Integer
Dim sotp As Long
On Error GoTo ErrorHandler

' Duyet qua chieu dai chuoi nhi phan
For i = Len(sonp) To 1 Step -1
' Kiem tra ky tu. khong phu` ho.p (ngoa`i 0 va` 1)
If Asc(Mid(sonp, i, 1)) < 48 Or _
Asc(Mid(sonp, i, 1)) > 49 Then
sotp = ""
Err.Raise 1002, "NP2TP", "So khong phu hop"
End If
' Neu la` 1 thi` tang them 2 luy~ thua` so la`n la.p va` them no vao`
' sotp (so la`n la.p la` so' ky' tu. co`n la.i trong chuoi~ nhi. phan)
If Mid(sonp, i, 1) And 1 Then
sotp = sotp + 2 ^ (Len(sonp) - i)
End If
Next i
' Tra ve` gia' tri. sotp nhu la` 1 chuoi~
np2tp = sotp
ErrorHandler:
End Function
 
Mấy bạn có ai giải thích rõ ràng giùm mình về hàm Do...Loop ko? Mỗi loại của hàm thì dùng trong trường hợp nào?
 
Do...Loop là cú pháp vòng lặp chứ hông phải là hàm. Vòng lặp có một số kiểu khác nhau.

* Vòng lặp For...Next

- Trước tiên gặp For nó sẽ kiểm tra điều kiện được đặt ra
+ Nếu điều kiện đúng sẽ thực hiện các bước tiếp theo bên trong, cuối cùng gặp Next sẽ quay lên đầu thay đổi giá trị rồi tiếp tục kiểm tra điều kiện cứ thế lặp cho đến khi điều kiện sai. Điều kiện sai sẽ thoát khỏi vòng lặp và thực hiện tiếp các câu lệnh kế tiếp.

* Vòng lặp Do...While
- Trước tiên gặp Do nó sẽ thực hiện các bước tiếp theo bên trong cuối cùng gặp While sẽ kiểm tra điều kiện được đặt ra nếu đúng là quay lên trên thực hiện tiếp còn sai thì thoát khỏi vòng lặp

Các vòng lặp tùy theo yêu cầu cần kiểm tra điều kiện trước hay sau để dùng thôi. Không hiểu nữa thì tui cho ví dụ ::)
 
Trong vòng lặp Do...While: Cái Đk là mình đặt sau While hay là sau Do? Cho mình 1 vdụ đơn giản đi
Còn Loop? Until?
 
Đặt dk sau while
ví dụ:
int n;
do
printf("Hay nhập số dương n: ");
scanf("%d",&n);
while(n<=0)


Máy sẽ thực hiện câu lệnh này n lần cho tới khi nào bạn nhập đúng số n là số dương thì thôi.
 
@yphanh2002 : người ta đang hỏi visual basic >.<
Trong vòng lặp Do...While: Cái Đk là mình đặt sau While hay là sau Do? Cho mình 1 vdụ đơn giản đi
Còn Loop? Until?
Do...While là tên gọi chung, trong VB6 thì nó là Do While...Loop
Do While...Loop khác Do Until loop ở chỗ Do WHile...Loop sẽ ngưng khi điều kiện sai còn Do Until ngưng khi điều kiện đúng (ko kể mấy trường hợp dùng lệnh exit).
VD:
private sub form_load()
Do Until (Biet)
'Hoi toi khi nao no biet thi thoai, cung co the ghi Biet = true
'nhưng như thế là thừa
if msgbox("1 + 1 = may?") = 2 then ' Neu no tra loi dung 1 + 1 = 2
Biet = true 'Thi tha cho no ^^
end if
loop
end sub

đó là ví dụ về Do Until, nếu dùng Do While thì viết điều kiện là [Do While not Biet]

Cuối cùng, mấy cái này bạn lên google gõ Do WHile in VB6 rồi tìm kiếm đằng nào chả ra 1 lèo ví dụ, hỏi làm gì cho mệt ^^

1 tài liệu tốt : http://www.vovisoft.com/VisualBasic/


Binary to Dec: ví dụ dùng Do Until
-Cách làm : ví dụ ở số thập phân, ta có 4125 = (4*10^3) + (1*10^2) + (2*10^1) + (5*10^0) = 4000 + 100 + 20 + 5
Ở số nhị phân cũng tương tự : 101101 = (1*2^5) + (0*2^4) + (1*2^3) + (1*2^2) + (0*2^1) + (1*10^0) = 32 + 0 + 8 + 4 + 0 + 1 = 45 (dec)

Mã:
private function BinToDec(bin as string) [COLOR="SeaGreen"]'Ví dụ bin = "1011"[/COLOR]
        dim soA as integer
        dim i as integer
        dim soB as integer
[COLOR="green"]        i = 0 '3 cái phép gán này là thừa ^^[/COLOR]
        soA = 0
        soB = 0
          do until i = len(bin) - 1 [COLOR="green"]'ví dụ i = 0[/COLOR]
                if mid(bin,i,1) = "1" then [COLOR="green"]' mid(bin,i,1) = kí tự thứ đầu bên trái của bin, tức = "1"[/COLOR]
                      soA = val(mid(bin,i,1) ) * 2 ^ (len(bin)-i-1)  [COLOR="green"]'ta lấy chữ số đầu tiên bên trái, nhân với (độ dài của dãy trừ 1)[/COLOR]
                     [COLOR="Green"]'soA = 1 * 2^3   (vì len(bin) ở đây = 4, i = 0 => len(bin)-i-1 = 3[/COLOR]                      
                     soB = soB + soA [COLOR="green"]'RỒi cộng dồn[/COLOR]
                elseif mid(bin,i,1) <> "0"
                      bintodec = 0
                      Exitfunction [COLOR="green"]'Hay là [COLOR="Blue"]Exit Function [/COLOR]gì đó ^^[/COLOR]
                end if         
                i = i + 1    [COLOR="green"]'tăng i lên 1 để đọc số kế[/COLOR]
          loop
          bintodec = soB [COLOR="green"]'Kết quả[/COLOR]
end function
 
Thanks, nhưng cái link hình như sai rùi, ko dzô đc >_<
 
Ai ghi giùm mình cái thuật toán tìm ước số của 1 số, đa tạ
Bạn Ice giải thích giùm mình chỗ Do Until i = len(bin)-1 đc ko? Nếu theo cái vụ bin = 1011 của bạn thì i = 3?
 
Thuật toán tìm ước số của 1 số n:
Cho i chạy từ 1 -> n nếu n chia hết cho i thì i là ước số của n.
 
ủa sao lại là n-1? 1 số cũng là ước số của chính nó mà bác? ^^"
 
buổi tối buồn ngủ quá, lại đang suy nghĩ bài khác nên đánh nhầm, sorry.
 
xí, cho hỏi lại, trong cú fáp lặp Do...Loop, làm sao biết khi nào dùng While, khi nào dùng until? Còn cái Next Loop là chi rứa?
 
Dùng for khi biết số lần lặp cố định .
Dùng repeat và while khi chưa biết sẽ lặp bao nhiu lần .
 
Bác ơi, tui hỏi khi nào xài Do While...Loop, và khi nào xài Do Until...Loop muh. Câu tương tự cho Do...Loop While và Do...Loop until
 
Những cái này tui nghĩ mở sách ra là có liền thôi, nếu đã muốn học thì nên đọc sách chứ lên đây hỏi thì biết đến bao giờ mới học xong.
Ví dụ tính tổng từ 1 đến n
Tong =0
i=1
+ Nếu dùng Do While....Loop
Do While (i<=n)
Tong=Tong+i
i=i+1
Loop
+ Nếu dủng Do Until....Loop
Do Until (i>n)
Tong=Tong+i
i=i+1
Loop
+ Nếu dùng Do ...Loop While
Do
Tong=Tong+i
i=i+1
Loop While (i<=n)
+ Nếu dủng Do Until....Loop
Do
Tong=Tong+i
i=i+1
Loop Until (i>n)
 
cái code tính tổng của mình nó thế này
Mã:
Function Tong(n As Integer, i As Integer) As Integer
n = Val(txtN)
Tong = 0
For i = 1 To n
Tong = Tong + (-1) ^ (i + 1) * i
Next i
End Function

Và phần xuất ra nó thế này
Mã:
Private Sub MnuTong_Click()
Dim n As Integer
n = Val(txtN)
txtKQ.Text = Tong(n)
End Sub

Và khi chạy nó báo Argument not Optional
Ai giải thích giùm, plz
 
À thui, tìm ra rùi, hehe! Nhưng mà có ai giải thix giùm khi nào xài sub, khi nào xài function hg?
 
Function và Sub cơ bả là giống nhau về cách vận hành, khác nhau ở chỗ Function có trã về giá trị còn Sub thì không, ngay từ khai báo đầu tiên đã thấy được rồi.

VD : FUNCTION Syntax

Private hay Public [Tên Fuction] ( [Tên biến] As [Kiểu dữ liệu]) As [Kiểu giá trị trả về] là xong

còn SUB Syntax

Private hay Public [Tên Sub] () là đủ
 
Back
Top