Announcement

Collapse
No announcement yet.

Thắc mắc hệ thống TEST Code trong các cuộc thi lập trình thuật toán!

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Thắc mắc hệ thống TEST Code trong các cuộc thi lập trình thuật toán!

    Chào thầy, cô!

    Em mới thi lập trình ở cuộc thi ACM UIT. Nay em muốn hiểu rõ chi tiết về cách thức test code của hệ thống trong các cuộc thi lập trình thuật toán.
    Em chỉ hiểu nếu như tạo một tập tin nhập và xuất tập tin thì em hiểu cách test của hệ thống! Đằng này thì chỉ có nhập dữ liệu vào bằng tay và chỉ có lệnh xuất màn hình thì hệ thống dựa vào đâu để test code ạ? Mong các thầy cô nói cho em rõ để em rút kinh nghiệm trong kì thi lần sau ạ! Xin cám ơn!

  • #2
    Chào em!
    Em thử lên mạng down 1 hệ thống như vậy về cài rồi chạy thử đi http://www.ecs.csus.edu/pc2/.

    Cơ chế hoạt động của nó là:
    - Nó lấy file c/cpp mình up lên rồi dịch qua exe
    - Sau đó hệ thống tự gọi tập tin exe và lấy dữ liệu từ buffer nhập chuẩn (hệ thống sẽ đẩy file input của bộ test vào buffer nhập chuẩn) và chương trình sẽ xuất dữ liệu ra buffer xuất chuẩn. Hệ thống sẽ so sánh dữ liệu trong file output của bộ test và dữ liệu trong buffer xuất chuẩn để đánh giá tính đúng sai của chương trình.
    Đơn giản là vậy

    Chỉ cần em chú ý một lệnh như fprintf là em sẽ hiểu: nếu fprintf(f,"ABC") thì hệ thống sẽ xuất ra file f, còn thay lệnh trên bằng lệnh fprintf(STDIN,"ABC") thì hệ thống sẽ xuất ra màn hình.

    Comment


    • #3
      Originally posted by 14520012 View Post
      Chào thầy, cô!

      Em mới thi lập trình ở cuộc thi ACM UIT. Nay em muốn hiểu rõ chi tiết về cách thức test code của hệ thống trong các cuộc thi lập trình thuật toán.
      Em chỉ hiểu nếu như tạo một tập tin nhập và xuất tập tin thì em hiểu cách test của hệ thống! Đằng này thì chỉ có nhập dữ liệu vào bằng tay và chỉ có lệnh xuất màn hình thì hệ thống dựa vào đâu để test code ạ? Mong các thầy cô nói cho em rõ để em rút kinh nghiệm trong kì thi lần sau ạ! Xin cám ơn!
      Thực chất chương trình của em KHÔNG HỀ CÓ KHẢ NĂNG xuất màn hình và thao tác với bàn phím em nhé, chỉ có hệ điều hành mới được làm việc với phần cứng thôi.

      Như thầy Toàn đã nói chương trình của em nhập xuất từ các dòng (stream/buffer) nhập/xuất chuẩn được cung cấp bởi thư viện chuẩn stdio (hoặc iostream trên C++). Mặc định khi không có yêu cầu gì đặc biệt thì các dòng nhập/xuất này sẽ đến từ bàn phím và đi ra màn hình.
      Tuy nhiên có một cơ chế cho phép chuyển hướng các dòng nhập xuất này nó có thể đến một file hoặc một chương trình khác và chương trình của em hoàn toàn không biết (mà cũng không cần phải biết) điều này. Cơ chế này có trên hầu như mọi hệ điều hành và ra đời gần 40 năm rồi, em có thể tham khảo bài wiki này: http://en.wikipedia.org/wiki/Pipeline_%28Unix%29

      Comment


      • #4
        Originally posted by toannv View Post
        Chào em!
        Em thử lên mạng down 1 hệ thống như vậy về cài rồi chạy thử đi http://www.ecs.csus.edu/pc2/.

        Cơ chế hoạt động của nó là:
        - Nó lấy file c/cpp mình up lên rồi dịch qua exe
        - Sau đó hệ thống tự gọi tập tin exe và lấy dữ liệu từ buffer nhập chuẩn (hệ thống sẽ đẩy file input của bộ test vào buffer nhập chuẩn) và chương trình sẽ xuất dữ liệu ra buffer xuất chuẩn. Hệ thống sẽ so sánh dữ liệu trong file output của bộ test và dữ liệu trong buffer xuất chuẩn để đánh giá tính đúng sai của chương trình.
        Đơn giản là vậy

        Chỉ cần em chú ý một lệnh như fprintf là em sẽ hiểu: nếu fprintf(f,"ABC") thì hệ thống sẽ xuất ra file f, còn thay lệnh trên bằng lệnh fprintf(STDIN,"ABC") thì hệ thống sẽ xuất ra màn hình.
        Thưa thầy! Em đã xem thử trang web đó nhưng em không biết cách tải phần mềm đó về! Thầy có thể cho em link để download không ạ? Cám ơn thầy!

        Comment


        • #5
          Originally posted by truonganpn View Post
          Thực chất chương trình của em KHÔNG HỀ CÓ KHẢ NĂNG xuất màn hình và thao tác với bàn phím em nhé, chỉ có hệ điều hành mới được làm việc với phần cứng thôi.

          Như thầy Toàn đã nói chương trình của em nhập xuất từ các dòng (stream/buffer) nhập/xuất chuẩn được cung cấp bởi thư viện chuẩn stdio (hoặc iostream trên C++). Mặc định khi không có yêu cầu gì đặc biệt thì các dòng nhập/xuất này sẽ đến từ bàn phím và đi ra màn hình.
          Tuy nhiên có một cơ chế cho phép chuyển hướng các dòng nhập xuất này nó có thể đến một file hoặc một chương trình khác và chương trình của em hoàn toàn không biết (mà cũng không cần phải biết) điều này. Cơ chế này có trên hầu như mọi hệ điều hành và ra đời gần 40 năm rồi, em có thể tham khảo bài wiki này: http://en.wikipedia.org/wiki/Pipeline_%28Unix%29
          _ Thưa thầy! Em chưa đọc bài viết thầy share, nhưng nếu thầy nói vậy thì chương trình mình làm ra là mất đi độ bảo mật của nó rồi ạ?

          Comment


          • #6
            Originally posted by 14520012 View Post
            _ Thưa thầy! Em chưa đọc bài viết thầy share, nhưng nếu thầy nói vậy thì chương trình mình làm ra là mất đi độ bảo mật của nó rồi ạ?
            Có gì mà lại không bảo mật em?

            Comment


            • #7
              :beatbrick:
              :brick: Nguyễn Phương Anh :brick:
              Nghiên cứu viên - Khoa CNPM
              Email: anhnp@uit.edu.vn
              Mobile1: 0935132022

              Comment


              • #8
                khi mình thao tác với tập tin thì chương trình test có xác định được địa chỉ tập tin mà mình đã thao tác không ạ? vì mình chỉ nộp cái file cpp thôi?
                :sunglasses:Practice Makes Perfect:sunglasses:

                Comment


                • #9
                  Originally posted by 14520979 View Post
                  khi mình thao tác với tập tin thì chương trình test có xác định được địa chỉ tập tin mà mình đã thao tác không ạ? vì mình chỉ nộp cái file cpp thôi?
                  Dĩ nhiên là không rồi em. Vì thế em phải thao tác đúng tập tin đã được quy ước trước. Tuy nhiên trong nhiều hệ thống test ngày nay để hạn chế việc nghẽn I/O và cũng để ngăn chương trình mở "tập tin chứa kết qủa" ra edit thì người ta chuyển sang cách dùng input buffer rồi.

                  Comment

                  LHQC

                  Collapse
                  Working...
                  X