Giới thiệu cách tính một số bài toán đơn giản

Liên hệ QC

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,121
Được thích
24,279
Tôi xin giới thiệu cách tính một số bài toán nhìn thì có vẻ phức tạp, nhưng tính toán thì khá đơn giản.
Có 4 bài toán, xem ảnh kèm theo:

Hamso.jpg


Mã:
'Ham tinh dien tich tam giac, trong do a; b; c la cac canh
Public Function S_tamgiac(a, b, c As Single)
    Dim Nuachuvi As Single
    Nuachuvi = (a + b + c) / 2
    ' Kiểm tra đầu vào cho đúng, nếu không sẽ báo sai
    If (a + b) > c And (b + c) > a And Abs(a - b) < c And Abs(a - c) < b And Abs(c - b) < a And (a > 0) And (b > 0) And (c > 0) Then
        S_tamgiac = Round(Sqr(Nuachuvi * (Nuachuvi - a) * (Nuachuvi - b) * (Nuachuvi - c)), 2)
    Else
        S_tamgiac = "So lieu vao khong dung!!!"
    End If
End Function

Mã:
' Ham tinh tong day so binh phuong dang 1
Public Function Tong1(n As Integer)
        Dim S As Long
    For i = 1 To n
      S = S + i * i
    Next
        Tong1 = S
End Function

Mã:
' Ham tinh tong day so lap phuong dang 2
Public Function Tong2(n As Integer)
        Dim S As Long
    For i = 1 To n
      S = S + i * i * i
    Next
        Tong2 = S
End Function

Mã:
' Ham tinh tong day so dang 3
Public Function Tong3(n As Integer)
        Dim T As Double
    For i = 1 To n
      T = T + Round(1 / (i * i), 3)
    Next i
      Tong3 = T
End Function

Mã:
' Ham tinh giai thua
Public Function Giaithua(n As Integer)
        Dim T As Long
    If n = 0 Then
        T = 1
    Else
        T = 1
        For i = 1 To n
                T = T * i
        Next i
        Giaithua = T
    End If
End Function
 
Lần chỉnh sửa cuối:
PhanTuHuong đã viết:
Mã:
' Ham tinh giai thua
Public Function Giaithua(n As Integer)
        Dim T As Long
    If n = 0 Then
        T = 1
    Else
        T = 1
        For i = 1 To n
                T = T * i
        Next i
        Giaithua = T
    End If
End Function

Để tính giai thừa trong Excel có hàm FACT anh tham khảo xem thế nào
=FACT(5) kết quả =1*2*3*4*5 =120
=FACT(0) kết quả = 1
=FACT(1) kết quả = 1
 
Đúng như Tuân nói, nhưng mình muốn kiểu khác.

Có bao giờ bạn nghĩ đến thuật toán sắp xếp bảng danh sách theo thứ tự tăng hoặc giảm dần chưa? Tất nhiên là trong Excel đã có sẵn, nhưng nếu bạn thực hiện được thì sẽ hiểu thêm về thuật toán so sánh, thay thế,...
Ví dụ (ST):
Mã:
Sub getSort()
    Dim arr(5) As Integer
    Dim str As String
    
    arr(1) = 8
    arr(2) = 4
    arr(3) = 3
    arr(4) = 7
    arr(5) = 2
    str = ""
    
    For i = 1 To 5
        str = str & arr(i) & vbCrLf
    Next i
    
    MsgBox "Before Sorting:" & vbCrLf & str
        
    Call Sort(arr) [COLOR="darkgreen"]'''Thủ tục gọi chương trình khác[/COLOR]
    
    str = ""
    For i = 1 To 5
        str = str & arr(i) & vbCrLf
    Next i
    MsgBox "After Sorting:" & vbCrLf & str

 End Sub


Sub Sort(arr() As Integer)

    Dim Temp As Double
    Dim i As Long
    Dim j As Long
    
    For j = 2 To UBound(arr)
        Temp = arr(j)
        For i = j - 1 To -10 Step -1
            MsgBox j & " - " & i [COLOR="DarkGreen"]'''Để theo dõi quá trình tính toán[/COLOR]            
        If (arr(i) <= Temp) Then GoTo 10
            arr(i + 1) = arr(i)
        Next i
        i = 0
10      arr(i + 1) = Temp
    Next j
    
End Sub
 
Web KT
Back
Top Bottom