Follow us on...
Follow us on Twitter Follow us on Facebook Watch us on YouTube

Tuyển chuyên viên tin tức VN-Zoom 2014

Tìm HD - Phần mềm tìm và xem phim HD miễn phí

Hoãn tổ chức offline VN-Zoom 8 năm tại TP HCM

Chiêm ngưỡng BaoMoi đẹp "tuyệt diệu" trên Windows Phone

Tài trợ VNZ Siêu phẩm Tân Kiếm Thế chibi 3D mới

Tuyển BQT VN-Zoom
Trang 1/4 1 2 3 ... cuốicuối
kết quả từ 1 tới 15 trên 54
  1. #1
    don't let go's Avatar
    don't let go vẫn chưa có mặt trong diễn đàn Thành viên đang bị kỷ luật
    Tham gia
    Sep 2009
    Bài
    204
    Cảm ơn
    42
    Điểm
    129/61 bài viết
    VR power
    0

    Default [Thủ thuật] kiểm tra tính chính xác của chương trình pascal

    Khi bạn viết một chương trình pascal về một bài toán nào đấy, mà chương trình bạn chưa đúng một vài chỗ mà code thì dài bạn không biết nên kiểm tra từ đâu vậy đây là một thủ thuật rất cần thiết để kiểm tra thuật toán đó..nó sẽ giúp ích cho bạn khi mà chương trình của mình chưa đúng nhất là trong các cuộc thi.do mình không biết chụp màn hình khi mở pascal nên không có ảnh minh hoạ mong các bạn thông cảm !!!
    vd một chương trình mà mình viết sẵn :

    Mã PHP:

    PHP Code:
    program pascal_com;
    var 
    n:integer;
    procedure nhap;
    begin
    write
    ('nhap n=');
    readln(n);
    end;
    procedure xuli;
    var 
    a,b,i,j:integer;
    begin
    j
    :=3;
    a:=0;
    b:=0;
    for 
    i:=1 to n do
    if 
    i<=j then a:=i
    else b:=i;
    end;
    begin
    nhap
    ;
    xuli;
    end
    bước 1: bạn mở chương trình ra
    bước 2: bạn nhấn tổ hợp phím ctrl +f7
    nó sẽ hiện ra 1 bảng. bạn muốn kiểm tra giá trị nào thì đánh giá trị đó
    vd : mình muốn kiểm tra các giá trị i,j,a,b thì mình đánh
    ctrl+f7 và đánh i tương tự cho j,a,b
    bước 3: xong bước 2 nó sẽ hiện ra một bảng phía dưới của chương trình
    làm cho mình không nhìn dc code giờ mình sẽ chỉnh kích cỡ bằng cách
    *nhấn tổ hợp phím ctrl+f5
    *sau đó giữ shift và dùng mũi tên <= để chỉnh kích thước
    *sau đó bạn thả nút shift rùi dùng các mũi tên để điều chỉnh vị trị cho thích hợp không che mất chương trình của bạn
    bước 4: bạn nhấn ENTER

    giờ là bước kiểm tra chương trình của bạn
    có 2 cách:
    cách 1ùng f7 để kiểm tra từng lệnh trong chương trình
    cách 2ùng f8 để kiểm tra từng chương trình con trong trường hợp bạn không muốn kiểm tra những chương trình con mà không cần thiết
    các bạn theo dõi các giá trị cần biết trên bảng rùi xem sai ở lệnh nào trong bài code
    xong rồi !!! CHÚC CÁC BẠN HỌC TỐT
    Thay đổi nội dung bởi 19-6; 06-01-2012 lúc 12:01.

  2. Có 26 thành viên cảm ơn don't let go cho bài viết này:
    Akarin (10-03-2012), alochat123 (28-09-2013), auauau97 (18-12-2011), btn1995 (27-01-2012), djnguyen92 (05-08-2012), dragon9y (13-12-2012), engine1 (18-12-2011), ghostmath (17-03-2013), hehe_conan (11-10-2013), htn9937 (26-01-2012), khoaifan (11-03-2012), maiha's lover (02-02-2013), minhtamvn (18-10-2012), nambatre (18-12-2011), Necrovision (05-01-2013), Nonamehero (20-11-2012), presariohg (10-06-2012), procutre (29-04-2013), qqwwee123 (22-04-2012), thanh123 (14-03-2014), thienthuatthuat (17-05-2012), tholxag123vn2010 (30-05-2013), trinhthuy212 (12-10-2012), vanchien127 (28-01-2012), win7wfs8 (11-10-2012), đạo_tặc_bóng_đêm (25-02-2012)

  3. #2
    don't let go's Avatar
    don't let go vẫn chưa có mặt trong diễn đàn Thành viên đang bị kỷ luật
    Tham gia
    Sep 2009
    Bài
    204
    Cảm ơn
    42
    Điểm
    129/61 bài viết
    VR power
    0

    Default [Thủ thuật] kiểm tra lỗi của chương trình

    Với nhiều chương trình bạn viết trong pascal mà khi bạn chạy bằng những bộ test nhỏ thì nó vẫn hiện ra kết quả đúng khi đó bạn tưởng rằng chương trình đúng rồi mà thực ra trong chương trình bạn vẫn có thể có một số chỗ sai mà bạn chưa biết. Vậy với thủ thuật này nó có thể cho bạn biết chương trình có lỗi bằng cách

    vd: đây là chương trình để test

    PHP Code:
    program pascal_com;
    var 
    n:integer;m:shortint;
    procedure nhap;
    begin
    write
    ('nhap n=');
    readln(n);
    end;
    procedure xuli;
    var 
    a,b,i,j:integer;
    begin
    m
    :=n;
    j:=3;
    a:=0;
    b:=0;
    for 
    i:=1 to n do
    if 
    i<=j then a:=i
    else b:=i;
    end;
    begin
    nhap
    ;
    xuli;
    end
    bạn chạy chương trình với n=30000 nó vẫn chạy với a,b đúng
    nhưng bạn nhìn kĩ xem biến m khai báo là shortint , biến n khai báo là integer thì không thể gán m cho n khi n=30000 nó sẽ vượt qua shortint
    phát hiện bằng cách rất đơn giản
    bạn nhấn tổ hợp phím ctrl+o+o {'o' là chữ cái nhé } nó sẽ hiện ra
    PHP Code:
    {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}
    {
    $M 16384,0,655360
    và sửa R- thành R+
    sau khi bạn chạy với n=30000 nó sẽ báo lỗi "RANGE CHECK ERROR"

    LƯU Ý: CHƯƠNG TRÌNH NÀO BẠN CŨNG NÊN ĐỂ THẾ VÌ NÓ SẼ KHÔNG ẢNH HƯỞNG GÌ ĐẾN CODE CUẢ BẠN

    chương trình sau khi thực hiện
    PHP Code:
    {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R+,S+,T-,V+,X+,Y+}
    {
    $M 16384,0,655360}
    program pascal_com;
    var 
    n:integer;m:shortint;
    procedure nhap;
    begin
    write
    ('nhap n=');
    readln(n);
    end;
    procedure xuli;
    var 
    a,b,i,j:integer;
    begin
    m
    :=n;
    j:=3;
    a:=0;
    b:=0;
    for 
    i:=1 to n do
    if 
    i<=j then a:=i
    else b:=i;
    end;
    begin
    nhap
    ;
    xuli;
    end
    xong !!! CHÚC CÁC BẠN HỌC TỐT
    Thay đổi nội dung bởi 19-6; 06-01-2012 lúc 11:59.

  4. Có 18 thành viên cảm ơn don't let go cho bài viết này:
    alochat123 (28-09-2013), auauau97 (18-12-2011), binh.it (22-11-2012), btn1995 (27-01-2012), djnguyen92 (05-08-2012), engine1 (18-12-2011), fanchelseavip (11-07-2012), ghostmath (17-03-2013), hehe_conan (11-10-2013), htn9937 (26-01-2012), kechocgianvn (06-04-2012), khavu9 (09-07-2012), Necrovision (05-01-2013), presariohg (10-06-2012), procutre (29-04-2013), trinhthuy212 (12-10-2012), Tung_Huynh (18-12-2011), win7wfs8 (11-10-2012)

  5. #3
    vuquangict's Avatar
    vuquangict vẫn chưa có mặt trong diễn đàn Rìu Vàng
    Tham gia
    Oct 2009
    Đến từ
    Thái Nguyên, Vietnam
    Bài
    750
    Cảm ơn
    497
    Điểm
    135/99 bài viết
    VR power
    0

    Default

    Sao bạn biết cái này vậy, thầy bảo ak ?

  6. #4
    don't let go's Avatar
    don't let go vẫn chưa có mặt trong diễn đàn Thành viên đang bị kỷ luật
    Tham gia
    Sep 2009
    Bài
    204
    Cảm ơn
    42
    Điểm
    129/61 bài viết
    VR power
    0

    Default

    thì học lỏm thôi bạn à

  7. #5
    auauau97's Avatar
    auauau97 vẫn chưa có mặt trong diễn đàn Rìu Chiến Vàng
    Tham gia
    Jun 2010
    Đến từ
    Hà Nội
    Bài
    6.666
    Cảm ơn
    11.927
    Điểm
    5.255/3.016 bài viết
    VR power
    0

    Default

    cái này giống cái thử các giá trị của biến = tay nhỉ ?
    gọi là debug đúng không ?
    ngày trước dùng turbo pascal làm được trò này, lúc mình chuyển sang free pascal thì toàn báo lỗi, ấn chạy từng dòng code nó báo có muốn chạy không ?, ấn có thể báo lỗi code, dùng trong tp thấy bt
    thanks bạn đã chia sẻ
    Nothing is true, everything is permitted

  8. #6
    cho88's Avatar
    cho88 vẫn chưa có mặt trong diễn đàn Rìu Sắt Đôi
    Tham gia
    Apr 2011
    Bài
    298
    Cảm ơn
    0
    Điểm
    45/40 bài viết
    VR power
    0

    Default

    thủ thuật này có khi nào bị sai không hả bạn

  9. #7
    don't let go's Avatar
    don't let go vẫn chưa có mặt trong diễn đàn Thành viên đang bị kỷ luật
    Tham gia
    Sep 2009
    Bài
    204
    Cảm ơn
    42
    Điểm
    129/61 bài viết
    VR power
    0

    Default

    Trích cho88 View Post
    thủ thuật này có khi nào bị sai không hả bạn
    đây chỉ là kiểm tra chuơng trình của bạn thui chứ có làm ảnh hưởng gì đến chuơng trình đâu. bạn yên tâm sẽ không bao giờ sai
    Thay đổi nội dung bởi don't let go; 18-12-2011 lúc 12:23.

  10. #8
    engine1's Avatar
    engine1 vẫn chưa có mặt trong diễn đàn Búa Đá
    Tham gia
    Jan 2009
    Bài
    53
    Cảm ơn
    12
    Điểm
    65/32 bài viết
    VR power
    0

    Default

    - post 1 -
    nói cho chuẩn thì nó là sử dụng watch của turbo debugger tích hợp sẵn trong IDE TP để kiểm tra giá trị của dữ liệu tại breakpoint

    - post 2 -
    cái này là range check, nó ko làm sai chương trình nhưng sẽ khiến chương trình chạy chậm vì phải kiểm tra range của dữ liệu và kích thước chương trình cũng lớn hơn (khuyến khích sau khi kiểm tra = nó rồi thì bỏ nó đi)

    1 cách khác, bạn vào Options > Compiler... > check vào ô Range checking, sau đó Options > Save, từ nay trở đi chương trình bạn viết đều sẽ dc kiểm tra range của dữ liệu, ko cần phải add thêm {$R+} vào đầu ct nữa

    PS: post đúng lúc mod sát nhập bài viết
    Thay đổi nội dung bởi engine1; 18-12-2011 lúc 12:40.

  11. Có 4 thành viên cảm ơn engine1 cho bài viết này:
    auauau97 (18-12-2011), ghostmath (17-03-2013), mikelhpdatke (06-06-2012), Necrovision (20-05-2013)

  12. #9
    don't let go's Avatar
    don't let go vẫn chưa có mặt trong diễn đàn Thành viên đang bị kỷ luật
    Tham gia
    Sep 2009
    Bài
    204
    Cảm ơn
    42
    Điểm
    129/61 bài viết
    VR power
    0

    Default

    thực ra mình học mấy thủ thuật này từ thầy dạy đội tuyển , mình thấy hay thì share cho các bạn yêu pascal thui ..mấy thủ thuật này mình đi thi lúc nào cũng dùng mà không có nó cũng đến khổ

  13. #10
    hungtranle92's Avatar
    hungtranle92 vẫn chưa có mặt trong diễn đàn Gà Con
    Tham gia
    Aug 2011
    Bài
    4
    Cảm ơn
    0
    Điểm
    0/0 bài viết
    VR power
    0

    Default

    bên C thì sao bạn????

  14. #11
    19-6's Avatar
    19-6 vẫn chưa có mặt trong diễn đàn Moderator
    Tham gia
    Sep 2008
    Đến từ
    Abyss
    Bài
    1.904
    Cảm ơn
    858
    Điểm
    3.407/1.516 bài viết
    VR power
    0

    Default

    Trích hungtranle92 View Post
    bên C thì sao bạn????
    Bạn tham khảo cái này nhé, dùng cho Dev-C++


  15. Có 1 thành viên cảm ơn 19-6 cho bài viết này:
    vanchien127 (28-01-2012)

  16. #12
    kien_coi_1997's Avatar
    kien_coi_1997 vẫn chưa có mặt trong diễn đàn Rìu Vàng Đôi
    Tham gia
    Apr 2009
    Đến từ
    Hà nội
    Bài
    1.117
    Cảm ơn
    693
    Điểm
    1.251/559 bài viết
    VR power
    0

    Default

    Trích don't let go View Post
    thực ra mình học mấy thủ thuật này từ thầy dạy đội tuyển , mình thấy hay thì share cho các bạn yêu pascal thui ..mấy thủ thuật này mình đi thi lúc nào cũng dùng mà không có nó cũng đến khổ
    Khi sử dụng watches, một điều cần lưu ý với các bạn là không được bật Register Variable, vì nó sẽ làm sai lệch kết quả, chẳng hạn đáng lẽ ra nó là 10 thì Watches lại hiện ra là -1 hay là số gì đó..

    Trong FP,
    Code:
    ╔═[■]═══════════════════════ Compiler Switches ════════════════════════════╗
    ║ ┌────────┌────────────────┐───────────┐─────────┐─────────┐───────────┐  ║
    ║ │ Syntax │ Generated code │ Processor │ Verbose │ Browser │ Assembler │  ║
    ║ ┌────────┘                └────────────────────────────────────────────┐ ║
    ║ │  Code generation                     Optimizations                   │ ║
    ║ │  [X] Range checking                  [ ] Generate smaller code       │ ║
    ║ │  [X] Stack checking                  [ ] Use register-variables      │ ║ untick bỏ nó nếu có
    ║ │  [X] I/O checking                    [ ] Uncertain optimizations     │ ║
    ║ │  [X] Integer overflow checking       [X] Level 1 optimizations       │ ║
    ║ │  [X] Object method call checking     [ ] Level 2 optimizations       │ ║
    ║ │  [X] Position independent code       [ ] Level 3 optimizations       │ ║
    ║ │  [X] Create smartlinkable units                                      │ ║
    ║ │                                                                      │ ║
    ║ │                                                                      │ ║
    ║ │                                                                      │ ║
    ║ └──────────────────────────────────────────────────────────────────────┘ ║
    ║  Conditional defines                                                     ║
    ║                                                                      ▐v▌ ║
    ║  Additional compiler args                                                ║
    ║                                                                      ▐v▌ ║
    ║                                                                          ║
    ║                    OK   ▄                         Cancel ▄               ║
    ║                 ▀▀▀▀▀▀▀▀▀                        ▀▀▀▀▀▀▀▀▀               ║
    ╚══════════════════════════════════════════════════════════════════════════╝
    Ở bên cột trái thì các bạn cứ tick tất cả vào, vì chúng là phần kiểm tra, giúp ích cho chúng ta.
    Blog về Pascal_chương trình pascal_ game pascal...
    Pascal-Chương trình hay, Unit hay, Game Pascal, các phần hỗ trợ trong Pascal.
    My blog: http://vn.360plus.yahoo.com/kien_coi_1997

  17. Có 1 thành viên cảm ơn kien_coi_1997 cho bài viết này:
    ghostmath (17-03-2013)

  18. #13
    Tham gia
    Nov 2011
    Đến từ
    FaceBook
    Bài
    338
    Cảm ơn
    90
    Điểm
    133/115 bài viết
    VR power
    0

    Default

    Trích don't let go View Post
    Khi bạn viết một chương trình pascal về một bài toán nào đấy, mà chương trình bạn chưa đúng một vài chỗ mà code thì dài bạn không biết nên kiểm tra từ đâu vậy đây là một thủ thuật rất cần thiết để kiểm tra thuật toán đó..nó sẽ giúp ích cho bạn khi mà chương trình của mình chưa đúng nhất là trong các cuộc thi.do mình không biết chụp màn hình khi mở pascal nên không có ảnh minh hoạ mong các bạn thông cảm !!!
    vd một chương trình mà mình viết sẵn :

    Mã PHP:

    PHP Code:
    program pascal_com;
    var 
    n:integer;
    procedure nhap;
    begin
    write
    ('nhap n=');
    readln(n);
    end;
    procedure xuli;
    var 
    a,b,i,j:integer;
    begin
    j
    :=3;
    a:=0;
    b:=0;
    for 
    i:=1 to n do
    if 
    i<=j then a:=i
    else b:=i;
    end;
    begin
    nhap
    ;
    xuli;
    end
    bước 1: bạn mở chương trình ra
    bước 2: bạn nhấn tổ hợp phím ctrl +f7
    nó sẽ hiện ra 1 bảng. bạn muốn kiểm tra giá trị nào thì đánh giá trị đó
    vd : mình muốn kiểm tra các giá trị i,j,a,b thì mình đánh
    ctrl+f7 và đánh i tương tự cho j,a,b
    bước 3: xong bước 2 nó sẽ hiện ra một bảng phía dưới của chương trình
    làm cho mình không nhìn dc code giờ mình sẽ chỉnh kích cỡ bằng cách
    *nhấn tổ hợp phím ctrl+f5
    *sau đó giữ shift và dùng mũi tên <= để chỉnh kích thước
    *sau đó bạn thả nút shift rùi dùng các mũi tên để điều chỉnh vị trị cho thích hợp không che mất chương trình của bạn
    bước 4: bạn nhấn ENTER

    giờ là bước kiểm tra chương trình của bạn
    có 2 cách:
    cách 1ùng f7 để kiểm tra từng lệnh trong chương trình
    cách 2ùng f8 để kiểm tra từng chương trình con trong trường hợp bạn không muốn kiểm tra những chương trình con mà không cần thiết
    các bạn theo dõi các giá trị cần biết trên bảng rùi xem sai ở lệnh nào trong bài code
    xong rồi !!! CHÚC CÁC BẠN HỌC TỐT
    lam thế lâu mà mệt lắm bạn ạ
    cocachs nào nhanh hơn ko ??

  19. Có 2 thành viên cảm ơn đạo_tặc_bóng_đêm cho bài viết này:
    trinhthuy212 (12-10-2012), wasd1289 (02-12-2012)

  20. #14
    auauau97's Avatar
    auauau97 vẫn chưa có mặt trong diễn đàn Rìu Chiến Vàng
    Tham gia
    Jun 2010
    Đến từ
    Hà Nội
    Bài
    6.666
    Cảm ơn
    11.927
    Điểm
    5.255/3.016 bài viết
    VR power
    0

    Default

    Mình thấy topic này cũng có thể cho thêm 1 số kinh nghiệm làm pascal
    nên mình đọc được bài này trên mạng cũng khá hay, up cho các bạn xem:

    Kinh nghiệm làm bài thi HSG tin học

    I. Những lưu ý chung về cách làm bài

    Một trong những khó khăn khi giải các bài toán trong các kì thi HSG Tin học là phải cài đặt được chương trình giải các bài toán trong khoảng thời gian cho phép. Vì vậy làm bài cũng cần có những kinh nghiệm nhất định. Những điều lưu ý dưới đây có thể là bổ ích:

    1. Nên soạn thảo khung chương trình sau, đặc biệt lưu ý đến chỉ thị chương trình dịch (sẽ nói sau).
    Mã:
    {$A+,B-,D+,E+,F+,G-,I+,L+,N+,O-,P-,Q+,R+,S+,T+,V+,X+,Y+}
    {$M 65520,0,655360}

    const
    finp = '...';
    fout = '...';
    procedure Docdl;
    begin
    assign(input, finp);
    reset(input);
    end;

    procedure Inkq;
    begin
    assign(output, fout);
    rewrite(output);

    close(output);
    end;

    procedure Khoitao;
    begin
    fillchar(i, ?, 0);

    end;

    procedure Solve;
    begin

    end;

    BEGIN
    Docdl;
    Khoitao;
    Solve;
    Inkq;
    END.
    Nên đặt chế độ tự động cất giữ chương trình trước khi thực hiện, bởi vì do mải làm bài quên không save, nhỡ khi chạy treo máy thì thật thảm họa. Để thực hiện điều đó chọn
    OPTION\enviroment\preferences
    Auto save [X]Editor Files

    2. Tiếp theo cần hết sức lưu ý đọc kĩ đầu bài để hiểu rõ yêu cầu. Đặc biệt quan tâm đến mô tả dữ liệu vào ra, nhiều khi, chính trong mô tả này mà bạn tìm được gợi ý về cách biểu diễn lời giải cần tìm và phương hướng xây dựng thuật toán (chẳng hạn nếu kích thước bài toán là "nhỏ", rất có thể thuật toán vét cạn là thích hợp). Có thể nói rằng 1 trong những chìa khóa để giải được các đề thi là "Đọc kĩ đầu bài".

    3. Nếu bạn bắt tay vào cài đặt chương trình, thì điều đầu tiên hãy cài đặt và thử nghiệm thủ tục Docdl xem đã nhập đúng dữ liệu theo như mô tả của đầu bài hay chưa. Nếu đọc dữ liệu số từ file nên dùng read thay cho readln. Nếu như số lượng số trong file dữ liệu là không cho trước nên sử dụng seekof thay cho eof để kiểm tra kết thúc file.

    4. Để phát triển thuật toán giải bài toán đặt ra cần lưu ý 1 số gợi ý sau:

    a. Xác định xem bài toán này có giống với bài nào trước đó đã giải hay phải tìm thuật toán từ con số 0? Hãy thử các kĩ thuật cơ bản (Tham lam, QHĐ, Đồ thị, Chia để trị, Vét cạn, ...) đối với bài toán đã cho.

    b. Hãy giải thử các ví dụ kích thước "nhỏ" biết đâu bạn sẽ phát hiện ra quy luật và sẽ tìm được thuật toán. Hãy chú ý đến các trường hợp đặc biệt nữa. Nó sẽ giúp bạn tạo các test chạy chương trình.

    c. Hãy thử tìm điều kiện tồn tại lời giải, có thể chỉ là điều kiện cần, có thể chỉ là điều kiện đủ.

    d. Hãy chuẩn bị hệ thống Test cho chương trình của mình bao gồm các Test nhỏ nhưng cho phép kiểm tra các tình huống của Thuật toán, các Test có kích thước lớn nhất theo mô tả của đề bài có thể tạo tầm thường (để có ngay lời giải) để phát hiện những sai sót có thể có của chương trình khi chạy Test lớn.

    5. Nên viết chương trình dưới dạng các lệnh gọi hàm và thủ tục, để thấy được cấu trúc logic của chương trình.

    6. Tiếp theo hãy cài đặt và thử nghiệm các hàm thủ tục cần XD để đảm bảo chúng thực hiện đúng đắn thao tác đòi hỏi. Đặc biệt lưu ý đến các tình huống cực đoan. Chẳng hạn nếu có phép chia cần xem xét có chia cho 0 không, nếu có hãy xét riêng. Khi tổ chức vòng lặp phải hết sức lưu ý đảm bảo tính kết thúc của chúng , ...

    7. Nếu không tìm được thuật toán hiệu quả thì hãy tìm cách đơn giản như Vét cạn hay Tham lam. Nếu điều đó vẫn còn là khó khăn, hăy xét các tình huống đặc biệt khi lời giải có thể tìm dễ dàng. Cần lưu ý là lúc này bạn cần xây dựng lời giải sao cho đúng trong nhiều tình huống nhất, nói cách khác là càng "bắt được" nhiều Test của Ban giám khảo càng tốt. Điều này cũng nên thực hiện khi bạn không còn đủ thời gian để suy nghĩ thuật toán chính xác nữa.

    8. Khi đã cài đặt và thử nghiệm chương trình xong, trước khi chuyển sang giải bài toán khác, nên đọc lại đầu bài 1 lần nữa. Rất có thể bạn sẽ phát hiện được sai sót của mình. Thông thường đó là những lầm lẫn do thói quen tai hại, chẳng hạn đáng ra cần tìm min bạn lại tìm max.

    II. Một số lưu ý về kĩ thuật

    1. Về đặt chỉ thị chương trình dịch

    Khi cài đặt chương trình trên Pascal không nhất thiết phải đặt chỉ thị cho chương trình dịch trong văn bản chương trình. Nếu không có dòng chỉ thị này, khi dịch chương trình các giá trị ngầm định hoặc các giá trị được thiết lập trong môi trường nhờ sử dụng thực đơn của TP sẽ được sử dụng. Việc đặt chỉ thị chương trình giúp người dùng xác lập được môi trường đáp ứng được các yêu cầu của ứng dụng. Hãy sử dụng <Ctrl + O + O> để đặt dòng chỉ thị vào chương trình của mình và có thể điều chỉnh các thông số 1 cách dễ dàng khi cần thiết.

    Ta nói qua về ý nghĩa của 1 số chỉ thị:
    + Để thuận tiện cho việc gỡ rối chương trình thông qua hai thông số D+ và L+ có ý nghĩa quan trọng. Nhờ chúng việc thực hiện chương trình trong môi trường TP có thể tiến hành từng bước và cho phép xem giá trị của các biến thay đổi trong quá trình thực hiện chương trình.
    + Cặp chỉ thị E+ và N+ cần thiết nếu Ch.Tr sử dụng kiểu dữ liệu số thực như comp, single, double, extended và các phép toán số học, logic được thực hiện với chúng với sự trợ giúp của coprocessor. Không thiết lập chúng Ch.Tr có sử dụng các kiểu dữ liệu nêu trên sẽ không dịch được. Nói chính xác là E+ cần thiết đối với những máy không có coprocessor, khi đó các phép toán với các số thực được thực hiện qua bộ mô phỏng (emulator) - Ch.Tr thực hiện các phép toán này qua các lệnh của bộ xử lí. Tuy nhiên hầu hết các bộ xử lí trong các máy tính hiện nay đều có coprocessor và được Ch.Tr trên TP sử dụng nhờ chỉ thị N+. Đặt trạng thái bật cho cả 2 chỉ thị này giúp ta không lo lắng gì về bộ xử lí của máy tính có hay không có coprocessor.
    + Thiết lập I+ đòi hỏi TP khi thực hiện chương trình sẽ kiểm soát chặt chẽ sự tương ứng giữa hằng đầu vào với kiểu của biến tiếp nhận giá trị của nó. Trong trường hợp không tương thích, VD hằng số thực ở đầu vào lại được gán cho biến integer, chương trình sẽ chấm dứt và thông báo lỗi.
    + Hai chỉ thị quan trọng rất cần thiết khi hiệu chỉnh chương trình là R+ và Q+ (chỉ có ở Ver 7.0). Chúng kiểm soát lỗi vượt mảng và vượt giá trị của kiểu dữ liệu. Chương trình sẽ chấm dứt thực hiện khi xuất hiện việc truy cập đến các phần tử không có trong mảng khai báo (chỉ số không nằm trong phạm vi khai báo) hoặc khi thực hiện các phép tính số học với số nguyên kết quả không trong phạm vi của kiểu dữ liệu.
    Xét ví dụ minh họa dưới đây:
    Mã:
    var a: integer;
    begin
    a := 1 * 2 * 3 * 4 * 5 * 6 * 7;
    writeln('7! = ', a);
    a := a * 8;
    writeln('8! = ', a);
    readln;
    end.
    Kết quả ra màn hình sẽ là 7! = 40320 và 8! = -25216
    Việc đặt chỉ thị S+ sẽ đòi hỏi TP kiểm tra stack khi thực hiện. Kích thước tối đa của stack được thiết lập nhờ $M. Chú ý rằng việc dừng chương trình với thông báo lỗi Stack overflow (tràn stack) hay xảy trong các chuonxg trình có chứa các chương trình con đệ quy.

    Khi chạy thử nghiệm chương trình bạn nên để như đã nêu ở trên, đặc biệt quan tâm đến Q+ (kiểm tra lỗi tràn kích thước trong tính toán số học), và R+ (kiểm tra vượt mô tả mảng). Khi bạn nộp bài nên xóa dòng chỉ thị này đi. Lưu ý rằng việc đặt lại Q-, R- giúp chương trình bạn chạy nhanh lên gấp 2 đến 3 lần.

    Cuối cùng ta nói về chỉ thị dịch $M. Trong chế độ làm việc thông thường cấu hình bộ nhớ dành cho việc thực hiện chương trình được đặc trưng bởi 3 số. Số thứ nhất là kích thước tối đa (đơn vị tính là byte) dành cho stack dùng trong chương trình. Giá trị lớn nhất của thông số này là 65520, ngầm định là 16384, còn nhỏ nhất là 1024. Nếu chương trình sử dụng các chương trình con đệ quy, hoặc các chương trình con đòi hỏi quá nhiều bộ nhớ cho biến địa phương thì bạn cần 1 stack kích thước lớn để thực hiện. Lúc đó cần thiết lập kích thước lớn nhất cho stack nhờ sử dụng $M như đã nêu trên. 2 thông số còn lại cho phép dành quyền sử dụng toàn bộ bộ nhớ còn lại cho chương trình. Kích thước của phần bộ nhớ này trong môi trường DOS bị chặn bởi 640KB trừ bớt đi phần bị các chương trình ứng dụng chiếm giữ. Thông thường phần bộ nhớ dành cho chương trình sử dụng là vào khoảng 350-400KB.

    2. Mô tả biến mảng động

    Pascal chỉ cho phép dùng 64KB cho tất cả các biến toàn cục của chương trình. Muốn sử dụng nhiều bộ nhớ cho biến hơn cần dùng cách khai báo biến động. Ví dụ




    Mã:
    const n = 150;
    type aa = array [1..n, 1..n] of integer;
    var
    a: aa; { a - mảng 2 chiều }
    b: ^aa; { b - con trỏ đến mảng }
    i, j: integer;
    begin
    fillchar(a, sizeof(a), 0);
    new(b); { cấp phát bộ nhớ cho mảng động }
    b^ := a; { sao chép dữ liệu từ mảng a vào mảng động b }
    for i := 1 to n do
    for j := 1 to n do
    b^[i, j] := i + j; { truy nhập đến phần tử của mảng động }
    end.
    Nếu kích thước mảng 2 chiều vượt quá 64KB có thể làm như sau:
    Mã:
    const n = 500; m = 100;
    type aa = array [1..n] of integer;
    var
    b: array [1..m] of ^aa;
    { b - mảng con trỏ đến các mảng 1 chiều }
    i, j: integer;
    begin
    for i := 1 to m do new(b[i]); { cấp phát bộ nhớ cho mảng động }
    for i := 1 to m do
    for j := 1 to n do
    b[i]^[j] := i + j; { truy nhập đến phần tử của mảng động }
    end.
    3. Tính thời gian thực hiện của chương trình

    Một trong những yêu cầu của đề bài trong các kì thi là tính hiệu quả của cài đặt. Do đó thường có hạn chế về thời gian thực hiện cho mỗi test. Nếu với 1 test nào đó, chương trình của bạn chạy quá thời gian, bạn sẽ nhận 0 điểm. Thế nên cần chấm dứt chương trình của mình đúng thời gian quy định, khi thuật toán của bạn chưa chấm dứt, mới hy vọng có điểm. ==> Tóm lại: GIẢM ĐỘ PHỨC TẠP
    * Giới thiệu một số độ phức tạp thường gặp (thời gian 1 giây/test)
    - O(n): n ~ 25 triệu.
    - O(nlogn): n ~ 1 triệu
    - O(n^2): n ~ 5000
    - O(n^3): n ~ 300

    (thpt-nguyentatthanh-kontum.edu.vn)

  21. Có 8 thành viên cảm ơn auauau97 cho bài viết này:
    djnguyen92 (05-08-2012), ghostmath (17-03-2013), HGMinh95 (12-05-2012), manhdanghaicute (16-04-2013), mikelhpdatke (13-04-2012), No_name1o2 (29-06-2012), tholxag123vn2010 (03-06-2013), trinhthuy212 (12-10-2012)

  22. #15
    don't let go's Avatar
    don't let go vẫn chưa có mặt trong diễn đàn Thành viên đang bị kỷ luật
    Tham gia
    Sep 2009
    Bài
    204
    Cảm ơn
    42
    Điểm
    129/61 bài viết
    VR power
    0

    Default reply

    Trích đạo_tặc_bóng_đêm View Post
    lam thế lâu mà mệt lắm bạn ạ
    cocachs nào nhanh hơn ko ??
    thế chương trình bạn chạy chưa đúng,bạn muốn xem ở đâu thì bạn nhìn vào code để xem lỗi hay chạy bằng tay thế này cái nào hơn . nhiều code nó phức tạp lắm nếu bạn học chuyên sâu về nó

 

 
Trang 1/4 1 2 3 ... cuốicuối

Quyền sử dụng

  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi file đính kèm
  • Bạn không thể tự sửa bài viết của mình
  •