—♦ Forum K10 SP Tin ♦—

Học không chơi phí thời thanh niên,chơi mà không học bán rẻ tương lai !


    Cc loi trong TP

    Share
    avatar
    Admin
    Moderators
    Moderators

    Tổng số bài gửi : 152
    Join date : 12/09/2011
    Age : 26
    Đến từ : hà giang

    Cc loi trong TP

    Bài gửi by Admin on 11/10/2011, 08:46

    LỖI TRONG TURBO PASCAL (Phần 1) 1. Lỗi cú pháp là những lỗi phát sinh do lập trình viên viết sai những quy định về văn phạm của hệ thống hoặc ngôn ngữ. Thí dụ các lỗi sau đây là những lỗi cú pháp: (a + b * 2: thiếu dấu đóng ngoặc BEGIM: định viết BEGIN, sai N
    2. Xử lý lỗi. Lỗi cú pháp được phát hiện trong quá trình dịch. Turbo Pascal 5.0 báo lỗi cú pháp theo nguyên tắc "Mỗi lần chỉ báo một lỗi". Nếu gặp lỗi ta cần trở về chế độ soạn thảo, tìm vị trí xuất hiện lỗi, sửa lại lỗi đó rồi dịch lại chương trình. Sau khi báo lỗi, Turbo Pascal sẽ chờ ta bấm phím ESC để trở về chế độ soạn thảo. Con trỏ của màn hình soạn thảo sẽ đặt ở cạnh vị trí xuất hiện lỗi, thông thường quá đi 1 ký tự.

    3. Các thông báo lỗi thường gặp và gợi ý khắc phục.

    Lỗi 1. Out of memory: vượt ra ngoài miền nhớ. Chương trình dịch thiếu miền nhớ. Vài gợi ý khắc phục:
    a. Nếu mục COMPILE/DESTINATION (nơi đặt chương trình đích tức là chương trình đã được dịch ghi trong tệp cùng tên với chương trình nguồn nhưng có phần mở rộng là .EXE) đang đặt là MEMORY hãy đổi thành DISK bằng cách bấm phím ENTER (còn gọi là phím RETURN).
    b. Nếu mục OPTIONS/COMPILER/LINK đang đặt là MEMORY hãy đổi thành DISK bằng cách bấm phím ENTER.
    c. Bỏ các chương trình thường trú, chẳng hạn SIDKICK, NC v.v.
    d. Thử ra khỏi TURBO.EXE, dịch lại chương trình của bạn với lệnh TCP như sau: TCP Chương trình dịch TCP này chiếm ít miền nhớ hơn. Nếu cả 4 biện pháp nói trên đều không mang lại kết quả tức là chương trình của bạn qúa lớn. Hãy chia nó thành các đơn thể nhỏ hơn.

    Lỗi 2. Identifier expected: mong gặp định danh.

    Lỗi 3. Unknown identifier: định danh chưa được khai báo. Hãy khai báo định danh này ở đầu thủ tục hoặc chương trình.

    Lỗi 4. Duplicate identifier: định danh được khai báo 2 lần trở lên.

    Lỗi 5. Syntax error: Lỗi cú pháp. Gặp một ký tự sai hoặc viết sai một hằng.

    Lỗi 6. Error in real constant: Viết sai hằng thực.

    Lỗi 7. Error in integer constant: Viết sai hằng nguyên. Chú ý rằng khai báo CONST c = 1234 sẽ cho ta một hằng c kiểu nguyên. Muốn có một hằng kiểu thực, ta viết CONST c = 1234.0. Những hằng có giá trị nằm ngoài khoảng -2147483648..2147483647 cần được khai báo theo kiểu thực, thí dụ: CONST c = 12345678912.0;

    Lỗi 8. String constant exceeds line: giá trị của xâu ký tự quả dài, xem lại có thiếu dấu đóng/mở (dấu nháy đơn) hằng văn bản không?

    Lỗi 9. Too many nested files: quá nhiều tệp lồng nhau.Chương trình dịch cho phép lồng nhau không quá 5 tệp. Lỗi 10. Unexpected end of file: Cần gặp dấu kết tệp.

    Lỗi 10. có thể xuất hiện trong các trường hợp sau: - Trong trương trình các cặp BIGIN và END không cân đối. - Tệp khác được gọi lồng tại một vị trí không hợp lệ. - Chú thích chưa được đóng bằng dấu } hoặc * ).

    Lỗi 11. Line too long: Dòng dài quá Bộ soạn thảo cho phép phát sinh các dòng dài tối đa 249 ký tự trong khi khi chương trình dịch chỉ làm việc với các dòng dài tối đa 126 ký tự. Lời khuyên: Không nên viết các dòng dài quá 60 ký tự.

    Lỗi 12. Type identifier expected: Cần có định danh kiểu

    Lỗi 13. Too many open files Có thể mở tối đa 20 tệp. Muốn vậy trong tệp CONFIG. SYS cần có dòng khai báo FILES = 20 Lời khuyên: Nên mở chừng 15 tệp là vừa nếu có nhu cầu. Hãy đưa dòng sau đây: FILES = 15 vào tệp CONFIG.SYS. Khởi động lại máy rồi gọi lại TP.

    Lỗi 14. Invalid file name: Sai tên tệp. Tên tệp được đặt theo quy định của DOS.

    Lỗi 15. File not found: Không tìm thấy tên trong thư mục. Trong một số trường hợp TP cần có các tệp phụ trợ, thí dụ EGAVGA. BGI cho màn hình trong chế độ đồ thị. Bạn cần đặt những tệp này vào thư mục hiện hành hoặc chỉ rõ đường dẫn để truy nhập tới chúng.

    Lỗi 16. Disk full: đĩa đầy hết chỗ ghi. Hãy xoá đi một số tệp không cần dùng nữa hoặc dùng đĩa mềm mới (cho ổ A, B).

    Lỗi 17 Invalid compiler directive: Đặt sai chế độ dịch Lời khuyên: Không nên lạm dụng chế độ dịch. Các chế độ ngầm định là đủ cho bạn. Hãn hữu hãy đặt tạm thời một chế độ dịch, sau đó hãy trả lại trạng thái cũ cho nó. Thí dụ, mẫu sau đây thường dùng để kiểm tra sự tồn tại của một assign (f, fname); { $ I - } reset (f); { $ I + ) IF IORESULT = 0 THEN { tệp tồn tại )... ELSE {tệp không tồn tại}... Trong đó f là biến tệp, fname là xâu chứa tên tệp.

    Lỗi 18. Too many files: Quá nhiều tệp. Chương trình đòi hỏi quá nhiều tệp. Sự đòi hỏi thái quá này có thể phát sinh ra các nguyên nhân sau: - Đặt nhiều chế độ khiến chương trình dịch phải mở nhiều tệp. - Các module gọi móc nối, liên hoàn, mỗi module lại đòi hỏi một số tệp. Lời khuyên: Ngay từ đầu hãy chọn cấu trình tối thiểu cho chương trình . Cần có một danh sách các kiểu, biến và các tệp tổng thể mà chương trình gọi tới.

    Lỗi 19. Undefined type in pointer definition: Kiểu chưa định nghĩa khi định nghĩa con trỏ. Thí dụ, khai báo var P: ^ptype; Nếu trước đó ta chưa định nghĩa kiểu ptype thì sẽ sinh lỗi 19.

    Lỗi 20. Variable identifier expected: Cần một định danh cho biến Thí dụ FOR = 4 TO 20 DO sẽ sinh lỗi 20.

    Lỗi 21. Error in type: Lỗi về kiểu. Thí dụ, TYPE * = 3 .. 7

    Lỗi 22. Structure too large: Kiểu cấu trúc có kích thước quá lớn. Cỡ tối đa của cấu trúc trong TP là 65520 byts

    Lỗi 23. Set base type of range: Kiểu tập cơ sở vượt quá giới hạn. Giới hạn của kiểu đoạn dùng làm tập cơ sở là 0 ... 255, giới hạn của kiểu liệt kê dùng làm tập cơ sở là 256 phần tử. Thí dụ khai báo sau đây sẽ sinh lỗi 23: Var S: set of -8 .. 300;

    Lỗi 24. File components may not be files: Thành phần của tệp khôngthể là tệp. Thí dụ, khai báo TYPE FTEXT = FILE OF TEXT; Lỗi 24 vì TEXT là kiểu tệp văn bản cho nên FTEXT sẽ là kiểu tệp của tệp.

    Lỗi 25. Invalid string length: Chiều dài xâu không hợp lệ. Chiều dài hợp lệ nằm trong khoảng 0 .. 255. Lời khuyên: Trong TP mỗi xâu x dùng phần tử x [0] chứa chiều dài của x. Không nên thay đổi tuỳ tiện giá trị của x[0]. Đoạn trình sau đây dù có lợi cho bạn cũng không bao giờ nên lạm dụng. ( *Lấy 3 ký tự đầu của xâu x *) VAR x: string; BEGIN X: = 'abcdef'; x[0]:= chr(3); writeln (x); readel; END.

    Lỗi 26. TYPE mismatch: Kiểu không tương thích. các nguyên nhân sinh lỗi có thể là: - Biểu thức được gán cho biến không đúng kiểu. Thí dụ VAR x: char; BEGIN x: = 127 * 8 END. - Truyền tham trị cụ thể không đúng kiểu khi gọi thủ tục và hàm. Thí dụ FUNCTION F ( x: integer ): string; BEGIN Writeln (F ('ERROR')) ( * sinh lỗi 26 *) END. - Sử dụng chỉ cần mạng sai kiểu4 - Dùng toán hạng không đúng kiểu trong biểu thức. Thí dụ: x: = 5 + chr ©;

    Lỗi 27 .Invalid subrange base type: Kiểu cơ sở cho kiểu đoạn không hợp lệ. Chỉ được dùng các biểu thức bậc hàm kiểu cơ sở.

    Lỗi 28. Lower boundgreater than upper bound: Giới hạn dưới lớn hơn giới hạn trên. Thí dụ a; ARRAY [5.. -5] of ...

    Lỗi 29. Ordinal type expected: Cần một kiểu thứ bậc. Trong trường hợp này không được dùng các kiểu Real, string, Record, PROCEDURE hoặc pointer.

    Lỗi 30. Integer constant expected: Cần một hằng nguyên

    Lỗi 31. Constant expected: Cần một hằng

    Lỗi 32. Integer or rcal constant expected: Cần một hằng nguyên hoặc thực

    Lỗi 33. Type identifier expected: Cần một định danh kiểu

    Lỗi 34. Invalid function resunt type: Kiểu kết quả của hàm không hợp lệ. Hàm chỉ cho kết quả về thuộc kiểu đơn, string và pointer. Trường hợp sau đây sẽ là lỗi: TYPE Phân số = RECORD Tử: integer; Mẫu: Integr END; FUNCTION Rút gọn ( x: phân số): phân số;

    Lỗi 35. Label identifier expected: Cần chọn nhãn Lời khuyên: Tốt nhất là nên tránh dùng toán tử GOTO và do đó bạn không phải dùng đến nhãn.

    Lỗi 36. BEGIN expected: Thiếu BEGIN

    Lỗi 37. END expected: Thiếu END

    Lỗi 38. Integer expression expexted: Cần biểu thức nguyên

    Lỗi 39. Ordinal expression expected: Cần biểu thức thứ bậc

    Lỗi 40. Boolean expression expected: Cần biểu thức kiểu BOOLEAN

    Lỗi 41. Operand types do not match operator: Kiểu toán hạng không phù hợp với toán tử

    Lỗi 42. Error in expression: Biểu thức sai. Thường gặp trường hợp sử dụng ký tự lạ hoặc quên viết dấu phép toán trong biểu thức.

    Lỗi 43. Illegal assigment: Gans Gán không hợp lệ. Không được gán trị cho biến tệp hoặc biến không định kiểu. Không được gán trị cho định danh hàm ở ngoài thân của hàm đó.

    Lỗi 44. Field identifier expected: Cần một định danh thường. Lỗi phát sinh khi sử dụng bản ghi (RECORD) không có trường hợp đi kèm.

    Lỗi 45. Object file too large: Tệp đích quá lớn. TP không thể ghép các tệp kiểu OBJ lớn hơn 64 KB (1kilo byte = 1024 bytes)

    Lỗi 46. Undsfined external: Chưa khai báo các hàm hoặc thủ tục ngoài. Các hàm hoặc thủ tục ngoài cần được khai báo ở mục PUBLIC trong các tệp OBJ hoặc trong các tệp hợp ngữ ASM. Trong chế độ { $ L ... } cần liệt kê đầy đủ tên các tệp OBJ.

    Lỗi 47. Invalid object file record: Tệp OBJ không có cấu trúc chuẩn mực theo quy định của TP.

    Lỗi 48. Code segment too large: Đoạn mã quá lớn. Các chương trình hợp thành phải có kích thước không quá 65520 bytes.

    Lỗi 49. Data segment too large: Đoạn dữ liệu quá lớn.

    Lỗi 50. Do expected: Thiếu Do trong các cấu trúc FOR hoặc WHILE hoặc WITH

    Lỗi 51. Invalid PUBLIC definition: Khai báo sai trong mục PUBLIC

    Lỗi 52. Invalid EXTRN definition: Quá nhiều khai báo EXTRN. TP không sử lý quá 256 khai báo EXTRN trong mỗi tệp OBJ.

    Lỗi 54. OF expected:Thiếu OF trong TYPE, CASE, FILE, SET, ARRAY

    Lỗi 55. INTERFACE expected: Thiếu mục INTERFACE

    Lỗi 56. Invalid relocatable reference: Tham chiếu không hợp lệ

    Lỗi 57. THEN expected:Thiếu THEN trong IF

    Lỗi 58. TO or DOWN TO expected: Thiếu To hoặc DOWN TO trong FOR

    Lỗi 59. Undefined forward: chưa khai báo trước.

    Lỗi 60. Too many procedures: Quá nhiều thủ tục (hoặc hàm). TP cho phép tối đa 512 thủ tục (PROCEDURE) và hàm (FUNCTION) trong một module. Nếu có quá nhiều bạn cần tách chương trình thành hai hoặc nhiều module.

    Lỗi 61. Invalid typecast: chuyển đổi kiểu không đúng

    Lỗi 62. Division by zero: chưa có 0

    Lỗi 63. Invalid file type: Kiểu tệp không đúng. Mỗi kiểu tệp làm việc với một số thủ tục dành riêng cho kiểu đó. Thí dụ tệp TEXT làm việc voéi thủ tục readln, tệp định kiểu làm việc với thủ tục seek. Nếu gọi thủ tục readln cho tệp định kiểu hoặc gọi thủ tục seek cho tệp text sẽ sinh lỗi 63.

    Lỗi 64. Can not Read or write vaziables of this type: Không thể đọc hoặc ghi biến thuộc kiểu này. Lưu ý rằng - Read và Readln có thể đọc từ tệp vào các biến kiểu char, integer, real, Boolean hoặc string.

    Lỗi 65. Pointer variable expected: Cần một biến con trỏ.

    Lỗi 66. String variable expected: Cần một biến string.

    Lỗi 67. String expression expected; Cần một biểu thức string.

    Lỗi 68. Unit not found: Không tìm thấy đơn thể (Unit). Cần khai báo chúng trong mục USES và đặt đường dẫn trong mục OPTIONS của môi trường TP.

    Lỗi 69. Unit name mismatch: Tên đơn thể không đúng.

    Lỗi 70. Unit version mismatch: version đơn thể không phù hợp.

    Lỗi 71. Duplicate Unit name: Tên đơn thể trùgn lặp.

    Lỗi 72 Unit file format error: Tệp đơn thể (có đuôi TPU) không có dạng quy định.

    Lỗi 73. Implementation expected: Thiếu phần IMPLEMENTATION trong đơn thể.

    Lỗi 74. Constant and case types do not match: Kiểu hằng và kiểu biểu thức trong CASE không phù hợp với nhau.

    Lỗi 75. Record variable expected: Cần một biến kiểu RECORD.

    Lỗi 76. Constant out of range: Hằng vượt quá miền. Lỗi có thể gặp trong các tình huống sau: - Chỉ dẫn mảng vượt ra ngoài giới hạn của mảng - Gọi thủ tục và hàm với các tham trị cụ thể vượt ra ngoài giới hạn đã khai báo.

    Lỗi 77. File variable expected: Cần biến tệp.

    Lỗi 78. Pointer expression expected: Cần một biểu thức kiểu con trỏ.

    Lỗi 79. Integer or Real expssion expected: Cần một biểu thức kiểu INTEGER hoặc REAL.

    Lỗi 80. Labelnot within current block: Nhãn không có trong khối đang xét.

    Lỗi 81. Label alrealy difined: Đã có nhãn.

    Lỗi 82. Undefined label in processing statement part: Không thấy nhãn hiệu trong đoạn đã xử lý. Nhãn đã được khai báo, đã thấy toán tử GOTO có tham đối là nhãn đó nhưng không thấy nhãn trong đoạn văn bản. Mỗi nhãn cần xuất hiện ít nhất là 3 lần theo sơ đồ sau: LABEL L; (* 1 *) ... (* 2 *) L: FOR i:= TO ... ... GOTO L; (* 3 *) Nếu nhãn L không có mặt ở (* 2 *) sẽ sinh lỗi 82.

    Lỗi 83. Invalid @ argument: Dùng các toán tử @ với toán hạng không hợp lệ. Toán hạng hợp lệ cho @ là các định danh của biến, thủ tục và hàm.

    Lỗi 84. Unit expected: Cần có từ khoá UNIT.

    Lỗi 85. ";" expected: Cần có dấu chấm phảy.

    Lỗi 86. ": " expected: Cần có dấu hai chấm.

    Lỗi 87. " , " expected: Cần có dấu phảy

    Lỗi 88. " ( " expected: Cần có dấu mở ngoặc đơn Lỗi 89 " ) " expected: Cần có dấu đóng ngoặc đơn

    Lỗi 89. " = " expected: Cần có dấu bằng.

    Lỗi 91. ":= "expected: Cần dấu gán

    Lỗi 92 " [ " or " (. " expected: Cần mở dấu ngoặc vuông khi khai báo hoặc chỉ định phần tử của mảng, tập.

    Lỗi 93. " ] " or " .) " expected: Cần dấu đóng ngoặc vuông khi khai báo hoặc chỉ định phần tử của mảng hoặc tập.

    Lỗi 94. " ." expected: Cần dấu chấm khi chỉ định một trường trong bản ghi

    Lỗi 95 " .." expected: Cần dấu nhiều chấm khi liệt kê giới hạn mảng, tập.

    Lỗi 96. Too many variables: Quá nhiều biến. Nguyên nhân xuất hiện lỗi có thể là: - Tổng kích trước của các biến toàn cục vượt quá 64 KB - Tổng kích thước của các biến cục bộ mô tả trong thủ tục hoặc hàm vựot quá 64 KB.

    Lỗi 97. Invalid FOR control variable: Biến điều khiển trong toán tử FOR không đúng. Phải dùng biến kiểu liệt kê.

    Lỗi 98. Integer variable expected: Cần biến nguyên.

    Lỗi 99. Files are not allowed here: Không được dùng tệp ở đây. Hằng định kiểu không thể là tập.

    Lỗi 100. String. length, mismatch: Chiều dài xâu không phù hợp với số lượng các phần tử của mảng ký tự.


    _____________________________________________



      Hôm nay: 18/11/2018, 23:21