Chào mừng đến với Diễn đàn Dân Kế Toán - Kế toán tổng hợp thực tế.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    0

    Kết quả tính toán sai ở chỗ nào? (Vui vui)

    nhờ các bác chỉ dùm lỗi trong Function này(hoặc cách test) hộ em với:

    Function TrungBinhCong(ByVal so1, ByVal so2, ByVal so3)
    TrungBinhCong = (so1 + so2 + so3)/ 3
    End Function


    Để test cái Function trên em dùng:

    Sub TrungBinh()
    Dim so1, so2, so3 As Integer
    Dim Tong As integer
    so1 = InputBox("nhập số thứ nhất: ")
    so2 = InputBox("Nhập số thứ hai: ")
    so3 = InputBox("Nhập số thứ ba: ")
    Tong = so1 + so2 + so3
    MsgBox "Số thứ nhất là:" & so1
    MsgBox "Số thứ hai là:" & so2
    MsgBox "Số thứ ba là:" & so3
    MsgBox "Tổng cộng là: " & Tong
    MsgBox "Trung bình cộng các số: " & TrungBinhCong(so1, so2, so3)
    End Sub


    các bác thử chạy hộ cái Sub trên xem, tại sao lại không ra kết quả mong muốn??. Ví dụ, khi ta nhập so1=20; so2=30; so3=40 thì kết quả được sẽ là:Tổng cộng 2070; Trung bình cộng 690 ?????:k5211829:

  2. #2
    Ngày tham gia
    Dec 2015
    Bài viết
    0
    Trích dẫn Gửi bởi khanhminh06
    nhờ các bác chỉ dùm lỗi trong Function này(hoặc cách test) hộ em với:

    Function TrungBinhCong(ByVal so1, ByVal so2, ByVal so3)
    TrungBinhCong = (so1 + so2 + so3)/ 3
    End Function


    Để test cái Function trên em dùng:

    Sub TrungBinh()
    Dim so1, so2, so3 As Integer
    Dim Tong As integer
    so1 = InputBox("nhập số thứ nhất: ")
    so2 = InputBox("Nhập số thứ hai: ")
    so3 = InputBox("Nhập số thứ ba: ")
    Tong = so1 + so2 + so3
    MsgBox "Số thứ nhất là:" & so1
    MsgBox "Số thứ hai là:" & so2
    MsgBox "Số thứ ba là:" & so3
    MsgBox "Tổng cộng là: " & Tong
    MsgBox "Trung bình cộng các số: " & TrungBinhCong(so1, so2, so3)
    End Sub


    các bác thử chạy hộ cái Sub trên xem, tại sao lại không ra kết quả mong muốn??. Ví dụ, khi ta nhập so1=20; so2=30; so3=40 thì kết quả được sẽ là:Tổng cộng 2070; Trung bình cộng 690 ?????:k5211829:
    so1, so2, so3 mà bạn cho nó nhận InputBox thì chúng sẽ có kết quả là String. Lúc đó dấu cộng có thể "bị" hiểu là dấu nối chuỗi. Nó mới bị tình huống như thế.
    Sửa lại chút:

    Sub TrungBinh()
    Dim so1, so2, so3
    Dim Tong As Long
    so1 = InputBox("nhập số thứ nhất: ")
    so2 = InputBox("Nhập số thứ hai: ")
    so3 = InputBox("Nhập số thứ ba: ")
    Tong = CInt(so1) + CInt(so2) + CInt(so3)
    MsgBox "Số thứ nhất là:" & so1
    MsgBox "Số thứ hai là:" & so2
    MsgBox "Số thứ ba là:" & so3
    MsgBox "Tổng cộng là: " & Tong
    MsgBox "Trung bình cộng các số: " & TrungBinhCong(CInt(so1), CInt(so2), CInt(so3))
    End Sub

    Ghi chú: không cần test, chỉ cần coi lôgic là biết nó bị chỗ nào rồi.

  3. #3
    Ngày tham gia
    Mar 2016
    Bài viết
    15
    Trích dẫn Gửi bởi khanhminh06
    nhờ các bác chỉ dùm lỗi trong Function này(hoặc cách test) hộ em với:

    Function TrungBinhCong(ByVal so1, ByVal so2, ByVal so3)
    TrungBinhCong = (so1 + so2 + so3)/ 3
    End Function


    Để test cái Function trên em dùng:

    Sub TrungBinh()
    Dim so1, so2, so3 As Integer
    Dim Tong As integer
    so1 = InputBox("nhập số thứ nhất: ")
    so2 = InputBox("Nhập số thứ hai: ")
    so3 = InputBox("Nhập số thứ ba: ")
    Tong = so1 + so2 + so3
    MsgBox "Số thứ nhất là:" & so1
    MsgBox "Số thứ hai là:" & so2
    MsgBox "Số thứ ba là:" & so3
    MsgBox "Tổng cộng là: " & Tong
    MsgBox "Trung bình cộng các số: " & TrungBinhCong(so1, so2, so3)
    End Sub


    các bác thử chạy hộ cái Sub trên xem, tại sao lại không ra kết quả mong muốn??. Ví dụ, khi ta nhập so1=20; so2=30; so3=40 thì kết quả được sẽ là:Tổng cộng 2070; Trung bình cộng 690 ?????:k5211829:
    Bổ xung thêm thế này:
    nếu cái Function sửa thành:
    [I]Function TrungBinhCong(Byval so1, ByVal so2, ByVal so3)
    so1=so1+0
    TrungBinhCong:k6233143:
    Ngược lại nếu ta sửa cái "Sub" lại thế này và test thì OK:
    Sub TrungBinh()
    Dim so1, so2, so3 As Integer
    Dim Tong As Double
    so1 = InputBox("Nhập số thứ nhất: ") 'ở đây vẫn nhập giá trị so1=20
    so2 = 30
    so3 = 40
    Tong = so1 + so2 + so3
    MsgBox "Số thứ nhất là:" & so1
    MsgBox "Số thứ hai là:" & so2
    MsgBox "Số thứ ba là:" & so3
    MsgBox "Tổng cộng: " & Tong 'kết quả được Tổng = 90
    MsgBox "Trung bình cộng: " & TrungBinhCong(so1, so2, so3) 'Kết quả Trung bình là 30
    End Sub

    Tại sao nhỉ? khó hiểu quá!!!
    -----------------------------------------------------------------------------------------
    xin bác chỉ dzùm em với?
    -----------------------------------------------------------------------------------------



    Trích dẫn Gửi bởi phatnq2002
    so1, so2, so3 mà bạn cho nó nhận InputBox thì chúng sẽ có kết quả là String. Lúc đó dấu cộng có thể "bị" hiểu là dấu nối chuỗi. Nó mới bị tình huống như thế.
    Sửa lại chút:

    Sub TrungBinh()
    Dim so1, so2, so3
    Dim Tong As Long
    so1 = InputBox("nhập số thứ nhất: ")
    so2 = InputBox("Nhập số thứ hai: ")
    so3 = InputBox("Nhập số thứ ba: ")
    Tong = CInt(so1) + CInt(so2) + CInt(so3)
    MsgBox "Số thứ nhất là:" & so1
    MsgBox "Số thứ hai là:" & so2
    MsgBox "Số thứ ba là:" & so3
    MsgBox "Tổng cộng là: " & Tong
    MsgBox "Trung bình cộng các số: " & TrungBinhCong(CInt(so1), CInt(so2), CInt(so3))
    End Sub

    Ghi chú: không cần test, chỉ cần coi lôgic là biết nó bị chỗ nào rồi.
    Bác nhiệt tình quá! cảm ơn bác nhé, nhưng bác chỉ hộ em chỗ sai với. Chắc bác dang online? có rảnh không em muốn hỏi chút kinh nghiệm, cho em Y!M với, Nick của em là : danong_1279

  4. #4
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Kết quả tính toán sai ở chỗ nào? (Vui vui)

    Nhìn chung, bạn gặp phải trường hợp:
    • Khai báo biến không tường minh: Trong tình huống này biến sẽ có kiểu là Variant. Khi tính toán, kiểu sẽ được thay đổi theo hướng được cho là thích hợp nhất. Đây là thói quen "xấu" của lập trình viên. Bạnne6n khai báo biến theo kiểu tường minh, vừa dễ kiểm soát, vừa biết giá trị trả về là gì.
    • Khai báo không hợp kiểu: Biến kiểu kết quả thường có kiểu "cao" hơn các thành tố. Trong trường hợp bất khả kháng thì phải ép kiểu với: CInt, CLng, CDbl, CStr, ...

  5. #5
    Ngày tham gia
    Nov 2015
    Bài viết
    7
    Ðề: Kết quả tính toán sai ở chỗ nào? (Vui vui)

    Cảm ơn bác em đã hiểu rồi!

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •