Visual Basic 6.0

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi Marechal, 24/11/06.

  1. Marechal

    Marechal Youtube Master Race

    Tham gia ngày:
    14/11/06
    Bài viết:
    49
    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 ^^!
     
  2. cristal88

    cristal88 Guest

    Tham gia ngày:
    26/11/04
    Bài viết:
    21
    * 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
     
  3. Marechal

    Marechal Youtube Master Race

    Tham gia ngày:
    14/11/06
    Bài viết:
    49
    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?
     
  4. cristal88

    cristal88 Guest

    Tham gia ngày:
    26/11/04
    Bài viết:
    21
    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ụ ::)
     
  5. Marechal

    Marechal Youtube Master Race

    Tham gia ngày:
    14/11/06
    Bài viết:
    49
    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?
     
  6. yphanh2002

    yphanh2002 I ♥︎ You Hannah Moderator Lão Làng GVN

    Tham gia ngày:
    22/3/03
    Bài viết:
    6,346
    Nơi ở:
    USA
    Đặ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.
     
  7. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
    @yphanh2002 : người ta đang hỏi visual basic >.<
    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
     
  8. Marechal

    Marechal Youtube Master Race

    Tham gia ngày:
    14/11/06
    Bài viết:
    49
    Thanks, nhưng cái link hình như sai rùi, ko dzô đc >_<
     
  9. korangar

    korangar Mega Man

    Tham gia ngày:
    11/6/03
    Bài viết:
    3,122
  10. Marechal

    Marechal Youtube Master Race

    Tham gia ngày:
    14/11/06
    Bài viết:
    49
    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?
     
  11. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    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.
     
  12. Marechal

    Marechal Youtube Master Race

    Tham gia ngày:
    14/11/06
    Bài viết:
    49
    ủa sao lại là n-1? 1 số cũng là ước số của chính nó mà bác? ^^"
     
  13. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    buổi tối buồn ngủ quá, lại đang suy nghĩ bài khác nên đánh nhầm, sorry.
     
  14. Marechal

    Marechal Youtube Master Race

    Tham gia ngày:
    14/11/06
    Bài viết:
    49
    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?
     
  15. korangar

    korangar Mega Man

    Tham gia ngày:
    11/6/03
    Bài viết:
    3,122
    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 .
     
  16. Marechal

    Marechal Youtube Master Race

    Tham gia ngày:
    14/11/06
    Bài viết:
    49
    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
     
  17. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    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)
     
  18. Marechal

    Marechal Youtube Master Race

    Tham gia ngày:
    14/11/06
    Bài viết:
    49
    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
     
  19. Marechal

    Marechal Youtube Master Race

    Tham gia ngày:
    14/11/06
    Bài viết:
    49
    À 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?
     
  20. cristal88

    cristal88 Guest

    Tham gia ngày:
    26/11/04
    Bài viết:
    21
    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à đủ
     

Chia sẻ trang này