• Thứ Tư, 18/04/2007 08:58 (GMT+7)

    Bài toán tinh tổng số bàn thằng 5 trận gần nhất của một giải bóng đá

    Câu hỏi :
    Ví dụ có 18 đội tham gia thi đấu vòng tròn 2 lượt, mỗi đội sẽ phải thi đấu 34 trận, như vậy tại thời điểm nào đó trong giải, mỗi đội đã thi đấu được i trận (i34). Xin chỉ cách tính tổng số bàn thắng của 5 trận gần nhất cho từng đội.

    Trả lời :

    Tùy thuộc vào dữ liệu các trận đấu được quản lý như thế nào mà đoạn code tính tổng số bàn thắng của 5 trận gần nhất cho từng đội sẽ cụ thể ra sao. Cách tổ chức dữ liệu thích hợp nhất là nhờ hệ quản trị database, thí dụ bạn có thể tạo 1 table (trong Access, SQL Server, MySQL...) tên là Trandau, mỗi record của table chứa các thông tin về trận đấu như ID nhận dạng trận đấu, tên đội 1, tên đội 2, số bàn thắng của đội 1, số bàn thắng của đội 2, ngày diễn ra trận đấu... Sau khi đã có dữ liệu các trận đấu trong database, bạn có thể dùng các lệnh truy vấn SQL để truy xuất database theo yêu cầu để tính tổng số bàn thắng của 5 trận đấu gần nhất của từng đội. Thí dụ sau là đoạn code VB .Net tính tổng số bàn thắng của 5 trận gần nhất của đội GDTLA:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     Try
     'Connection string dùng DSN và ODBC Provider
     Dim MyConString As String = "DSN=MyDatabase"
     'hoặc Connection string dùng trực tiếp Provider Microsoft.Jet.OLEDB
     'Dim MyConString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\data\MyDataBase.mdb"
     'tạo 1 connection đến database
     Dim MyConnection As New OdbcConnection(MyConString)
     MyConnection.Open()
     
     'Khai báo các biến cần dùng
     Dim str As String
     Dim i As Integer
     Dim tongbt As Integer
     Dim MyCommand As New OdbcCommand
     MyCommand.Connection = MyConnection
     'Tìm các trận đấu của GDTLA và sắp theo thứ tự
     MyCommand.CommandText = "SELECT * FROM Trandau where doi1='GDTLA' or doi2='GDTLA' order by ngay DESC"
     Dim MyDataReader As System.Data.Odbc.OdbcDataReader
     MyDataReader = MyCommand.ExecuteReader
     'Xóa nội dung hiện hành của Listbox chứa kết quả
     ListBox1.Items.Clear()
     'Tính tổng số bàn thắng của 5 trận cuối cùng
     tongbt = 0
     For i = 1 To 5
     MyDataReader.Read()
     If MyDataReader("doi1") = "GDTLA" Then tongbt = tongbt + MyDataReader("sobt1")
     If MyDataReader("doi2") = "GDTLA" Then tongbt = tongbt + MyDataReader("sobt2")
     Next
     str = "Tổng số bàn thắng của GDTLA trong 5 trận cuối là " & tongbt
     ListBox1.Items.Add(str)
     'Đóng các đối tượng đã dùng
     MyConnection.Close()
     MyDataReader.Close()
     'Catch ODBC Exception
     Catch MyOdbcException As OdbcException
     Dim i As Integer
     ListBox1.Items.Add(MyOdbcException.ToString)
     
     'Catch program exception
     Catch MyException As Exception
     ListBox1.Items.Add(MyException.ToString)
     End Try
     End Sub
     

    Chuyên mục: Ứng dụng văn phòng