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

M

mikelhpdatke

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

[*] [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ã:
 [COLOR=#000000] [COLOR=#0000BB]program pascal_com[/COLOR][COLOR=#007700]; 
var [/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700]:[/COLOR][COLOR=#0000BB]integer[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]procedure nhap[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]begin 
write[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'nhap n='[/COLOR][COLOR=#007700]); 
[/COLOR][COLOR=#0000BB]readln[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700]); 
[/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]procedure xuli[/COLOR][COLOR=#007700]; 
var [/COLOR][COLOR=#0000BB]a[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]b[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]:[/COLOR][COLOR=#0000BB]integer[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]begin 
j[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]a[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]b[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]; 
for [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]1 to n [/COLOR][COLOR=#007700]do 
if [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]<=[/COLOR][COLOR=#0000BB]j then a[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]i 
[/COLOR][COLOR=#007700]else [/COLOR][COLOR=#0000BB]b[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]begin 
nhap[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]xuli[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700].  
[/COLOR][COLOR=#0000BB][/COLOR] [/COLOR]






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 1Dùng f7 để kiểm tra từng lệnh trong chương trình
cách 2Dù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

----------------------------------
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

Mã:
 [COLOR=#000000] [COLOR=#0000BB]program pascal_com[/COLOR][COLOR=#007700]; 
var [/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700]:[/COLOR][COLOR=#0000BB]integer[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]m[/COLOR][COLOR=#007700]:[/COLOR][COLOR=#0000BB]shortint[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]procedure nhap[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]begin 
write[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'nhap n='[/COLOR][COLOR=#007700]); 
[/COLOR][COLOR=#0000BB]readln[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700]); 
[/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]procedure xuli[/COLOR][COLOR=#007700]; 
var [/COLOR][COLOR=#0000BB]a[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]b[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]:[/COLOR][COLOR=#0000BB]integer[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]begin 
m[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]n[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]a[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]b[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]; 
for [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]1 to n [/COLOR][COLOR=#007700]do 
if [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]<=[/COLOR][COLOR=#0000BB]j then a[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]i 
[/COLOR][COLOR=#007700]else [/COLOR][COLOR=#0000BB]b[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]begin 
nhap[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]xuli[/COLOR][COLOR=#007700]; 
[/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700].  
[/COLOR][/COLOR]

[/INDENT]



[*][COLOR=#000000][COLOR=#007700]
[/COLOR][/COLOR]

  1. 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
    4.gif

    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
    Mã:
     [COLOR=#000000] [COLOR=#0000BB][/COLOR][COLOR=#007700]{[/COLOR][COLOR=#0000BB]$A[/COLOR][COLOR=#007700]+,[/COLOR][COLOR=#0000BB]B[/COLOR][COLOR=#007700]-,[/COLOR][COLOR=#0000BB]D[/COLOR][COLOR=#007700]+,[/COLOR][COLOR=#0000BB]E[/COLOR][COLOR=#007700]+,[/COLOR][COLOR=#0000BB]F[/COLOR][COLOR=#007700]-,[/COLOR][COLOR=#0000BB]G[/COLOR][COLOR=#007700]-,[/COLOR][COLOR=#0000BB]I[/COLOR][COLOR=#007700]+,[/COLOR][COLOR=#0000BB]L[/COLOR][COLOR=#007700]+,[/COLOR][COLOR=#0000BB]N[/COLOR][COLOR=#007700]-,[/COLOR][COLOR=#0000BB]O[/COLOR][COLOR=#007700]-,[/COLOR][COLOR=#0000BB]P[/COLOR][COLOR=#007700]-,[/COLOR][COLOR=#0000BB]Q[/COLOR][COLOR=#007700]-,[/COLOR][COLOR=#0000BB]R[/COLOR][COLOR=#007700]-,[/COLOR][COLOR=#0000BB]S[/COLOR][COLOR=#007700]+,[/COLOR][COLOR=#0000BB]T[/COLOR][COLOR=#007700]-,[/COLOR][COLOR=#0000BB]V[/COLOR][COLOR=#007700]+,[/COLOR][COLOR=#0000BB]X[/COLOR][COLOR=#007700]+,[/COLOR][COLOR=#0000BB]Y[/COLOR][COLOR=#007700]+} 
    {[/COLOR][COLOR=#0000BB]$M 16384[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]655360[/COLOR][COLOR=#007700]} [/COLOR][/COLOR]



    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​



  2. Mã:
      {$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.

 
Last edited by a moderator:
1

11thanhkhoeo

Chắc em dùng turbo pascal hả

Dùng free pascal thì sẽ báo lỗi ngay

Exit code 201
 
Top Bottom