Lớp 45TH - ĐH Nha Trang

45TH Đại học Nha Trang - TRAO ĐỔI TIN TỨC, HỌC TẬP


    BT Vận tải (trả lời Hải 45TH1)

    Share
    avatar
    lehoangthanh
    Admin
    Admin

    Tổng số bài gửi : 595
    Age : 37
    Registration date : 22/05/2007

    BT Vận tải (trả lời Hải 45TH1)

    Bài gửi  lehoangthanh on Sun Jul 01, 2007 12:19 am

    Hải có nhờ mình lập trình giải hệ pt đặc biệt "n ẩn n phương trình" trong BT vận tải. Vậy mình trả lời như sau (đề xuất này không hay đâu, do anh chỉ vừa nghĩ nghĩ vừa Post luôn):

    Nhận xét: do ban đầu ta có thể cho bất kỳ biến nào = 0 cũng được, do đó để tiện theo dõi, ta qui ước với nhau là khởi đầu X0 = 0.
    Cấu trúc dữ liệu:
    1/ Khai báo 1 mảng 2 chiều A [n hàng, n+1 cột] để lưu trữ hệ phương trình. Ví dụ:
    2*X0 + 4*X2 = 2
    -1*X1 + 7*X2 = 1
    1*X0 + 1*X1 = 5
    -------> ma trận A:
    2 0 4 2
    0 -1 7 1
    1 1 0 5

    Chú ý: do nhận xét ở trên nên thực sự khi lưu thì toàn bộ cột thứ 0 của ma trận A phải bằng 0 (chứ không phải là 2 0 1 nữa).
    2/ Khai báo 1 mảng 1 chiều X [n phtử] chứa nghiệm của hệ phtrình.

    Cài đặt: (theo ngôn ngữ C/C#)
    (Việc tổ chức các cấu trúc dữ liệu Hải tự làm nhé !)

    For (int i =0; i<n; i++)
    if (A[0,i] !=0) { X[i] = A[0,n]/A[0,i]; break } // Tìm được nghiệm nhờ vào phương trình đầu tiên

    do{
    For (int i =0; i<n; i++) // Duyệt lần lượt các phương trình
    For (int j =1; j<n; j++)
    if ((A[i,j] !=0)&&(X[j] !=0)) // Tại mỗi phương trình xem thử có vị trí nào đã biết không (vị trí đã biết nếu có X khác 0)
    {
    vitridabiet = j;
    For (int m =1; m<n; m++) // Từ giá trị đã biết ở trên suy ra vị trí còn lại
    if ((A[i,j] !=0)&&(X[j] ==0))
    { X[m] = (A[i,m] - A[i,vitridabiet]*X[vitridabiet])/A[i,m]; dem+=1; break; }
    }
    }while(dem<n); //biến "dem" dùng để đếm số nghiệm hiện đã giải được, do đó ta sẽ còn lặp nếu dem còn < n.


    Kếy luận:
    Hải tự kiểm nghiệm lại nhé, cơ bản là như vậy.
    Chúc Hải thành công

      Hôm nay: Tue Dec 19, 2017 5:26 am