Trang

Thursday, March 3, 2016

[Algorithm] Sample Project

Bài này trong loạt bài giới thiệu về các thuật toán và ứng dụng của chúng. Bài viết này mình sẽ mô phỏng theo cấu trúc của 1 bài viết dùng một thuật toán nào đó giải quyết các vấn đề trong thực tế. Khung sườn của 1 bài viết sẽ được trình bày dưới đây.

Các công cụ được sử dụng như đã được giới thiệu là phần mềm VisualStudio bản từ 2012 trở lên. Vì với những bản từ 2012 mới hỗ trợ tối đa cho việc debug và test. Chương trình cũng chỉ bao gồm 2 file là Source chứa code solution, và 1 file input.txt chứa dữ liệu đầu vào.
Đôi khi sẽ có một phần giới thiệu sơ lược về thuật toán sẽ áp dụng, mô tả cách hoạt động và hiệu quả của thuật toán.

1.Problem

Ở đây mình chỉ đưa ra một vấn đề đơn giản là tìm số lớn nhất trong 1 chuỗi số cho trước.

2.Input & Output

Nhiệm vụ của bước này là tạo đầu vào cho máy tính hiểu, theo một cấu trúc định sẵn. Thông thường mình sẽ tạo một file input.txt làm đầu vào mẫu cho các bạn chạy chương trình và kiểm tra kết quả xem đã đúng chưa.
File có cấu trúc như sau:

2 // Số lượng testcase NT
4 // Dòng 2->3 là testcase đầu tiên, dòng 2 chỉ N : Số phần tử trong 1 chuỗi
1 5 8 4 // Dòng 3 liệt kê N phần tử của chuỗi, cách nhau bởi dấu cách
8 // Tương tự, testcase 2 có N = 8
2 5 9 0 1 5 7 9 // 8 phần tử của chuỗi
Ví dụ ở bài này chúng ta có file đầu vào input.txt. Các bạn download file này về vào copy  vào Project của mình tại đây.

Tương tự như input, chúng ta cũng phải thống nhất chung 1 cách hiện thị cho kết quả sau khi tính toán. Ví dụ cấu trúc kết quả cho 1 testcase :

Testcase #1 8 // Gồm số thứ tự testcase và số lớn nhất trong chuỗi
Testcase #2 9
Kết quả có thể hiện thị trên giao diện Console, tùy các bạn.

3.Answer

Phần này chứa kết quả của chương trình với testcase là file input.txt

Answer:

Testcase #1 8 // Gồm số thứ tự testcase và số lớn nhất trong chuỗi
Testcase #2 9

4.Solution

Chương trình các bạn chỉ cần tạo 1 Project Visual C++ Empty là được. Có một chú ý để có thể đọc được file input.txt mà khi tạo bất cứ project nào cũng phải làm. Các bạn làm theo các bước sau :
==> Kích chuột phải vào Project trong Soution vừa tạo
==> Chọn Properties
==> Trong mục C/C++, chọn Preprocessor
==> Tại Preprocessor Definitions, kích chuột trái vào bên phải, chọn Edit như hình bên dưới, Cửa sổ hiện ra các bạn điền dòng _CRT_SECURE_NO_WARNINGS  vào và bấm OK


Như vậy là chúng ta đã thực hiện xong các bước chuẩn bị để viết chương trình. Với bài toán ở trên, mình ví dụ đoạn chương trình giải như sau:

Code mẫu:

#include <stdio.h>
int N,Answer;
int input[100];
void main(){
    freopen("input.txt","r",stdin);
    int testcase, NT;
    scanf("%d",&NT);
    for(testcase = 1;testcase<=NT;testcase++){
        scanf("%d",&N);
        int i;
        for(i=0;i<N;i++){
            scanf("%d",&input[i]);
        }
        ////////////////////////////////////
        // SOLUTION
        int j;
        Answer=input[0];
        for(j=0;j<N;j++){
            if(Answer<input[j])Answer=input[j];
        }
        ////////////////////////////////////
        // Output
        printf("Testcase #%d %d\n",testcase,Answer);
    }
}
Để đọc được file input.txt, các bạn cần phải khai báo hàm đọc file : freopen("input.txt","r",stdin);
Khi đó,dữ liệu trong file input.txt sẽ được nhập vào như khi chúng ta nhập từ bàn phím, chúng ta sử dụng hàm scanf để lấy dần dữ liệu ra. Sau đó, các bạn có thể triển khai thuật toán của mình, và in kết quả theo đúng cấu trúc được quy định ở trên.

Trong một bài, mình sẽ post 1 chương trình mẫu để các bạn tham khảo.

No comments:

Post a Comment