Thứ Hai, 16 tháng 3, 2015

Dịch và chạy chương trình Pascal thông qua Notepad++ (không dùng plugin NppExec)

Dịch và chạy chương trình Pascal thông qua Notepad++ (không dùng plugin NppExec)

Chuẩn bị:

 - Một trình dịch Pascal: Turbo Pascal (Borland Pascal) hoặc Free Pascal.

Các bước thực hiện:

  * Cần một chương trình để làm "sứ giả" giữa Notepad++ và trình dịch (TPC.EXE đối với Turbo Pascal hoặc FPC.EXE đối với Free Pascal):

   - Cách 1: Dịch chương trình sau (mã nguồn: TPC_LAUNCHER.PAS hoặc FPC_LAUNCHER.PAS) - Nếu muốn hiểu cách hoạt động: https://drive.google.com/open?id=0Bw61s0EF27zqfmZPWXJLc0NMT0pLMWs4XzJDUXZBQnpJeUdoV09JWXB4QUNYNW5qaE1MNDQ&authuser=0
   - Cách 2: Đây là sản phẩm (TPC_LAUNCHER.EXE hoặc FPC_LAUNCHER.EXE) - Nếu bạn muốn có nó "ngay" và "luôn": https://drive.google.com/open?id=0Bw61s0EF27zqflhyVWhrMFJfNHZyV0ZQdmQ5T0J4aUJRQl9hanVoQlYwRlBaU0Z5b1V6Y1U&authuser=0

 * Sau khi có được "sứ giả", đưa nó vào cùng thư mục với trình dịch ("..\TP\BIN\" hoặc "..\FP\BIN\i386-win32\")

 * Bật Notepad++, thực hiện các bước sau:

   - Nhìn lên thanh bảng chọn, chọn: Run (Chạy) --> Run, một hộp thoại hiện ra như sau:

   - Nhập: "<địa chỉ của TPC_LANCHER.EXE hoặc FPC_LAUNCHER.EXE>" "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)\$(NAME_PART).EXE"
     Ví dụ (Turbo Pascal): "C:\TP\BIN\TPC_LAUNCHER.EXE" "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)\$(NAME_PART).EXE"
   - Sau khi nhập, chọn Save (Lưu), lưu tên Macro và gán phím tắt (Ctrl+F9 chẳng hạn).

 * Dịch và chạy thử chương trình đầu tiên bằng Notepad++:

   - Nhập một chương trình Pascal vào Notepad++
   - Chạy Macro vừa tạo và xem kết quả:
    + Lưu mã nguồn trước khi dịch (8 kí tự ASCII, không chứa dấu cách (quy tắc đặt tên File trong Pascal).
    + Xem cách trình dịch báo lỗi (báo lỗi trên console).
    + Chạy chương trình sau khi dịch xong (Đối với "sứ giả" mình viết ra thì nhấn ENTER).
    + Sau khi kết thúc chương trình vừa dịch, "sứ giả" sẽ hỏi bạn có muốn chạy lại (Nhấn ESC nếu muốn thoát).

Một vài lưu ý

 - Notepad++ có tiếng Việt, chọn Settings --> Preferences --> General --> Localization --> Tiếng Việt
 - TPC_LAUNCHER và FPC_LAUNCHER dùng tiếng Anh, nếu muốn tiếng Việt không dấu, sửa mã nguồn (TPC_LAUNCHER.PAS hoặc FPC_LAUNCHER,PAS)
 - Nếu bạn dịch "sứ giả" TPC_LAUNCHER.PAS bằng Turbo Pascal thì tên của sứ giả nên ngắn hơn (TPC_L.PAS chẳng hạn).
 - Nếu bạn không muốn dịch "sứ giả" (vì Change Dir rất phiền phức) thì nên tải luôn EXE cho nó nhanh.
 - Khi nhập Macro cho Notepad++, lưu ý:
   + Đừng quên dấu nháy kép.
   + Từ được in đậm có vẻ giống nhau: "$(FULL_CURRENT_PATH)"  $(NAME_PART).EXE
 - Sau khi dịch chương trình, sản phẩm (*.exe) nằm trong cùng một thư mục với mã nguồn của bạn
 - Nhớ Lưu bài làm trước khi dịch.
 - Khi dịch chương trình, nếu thất bại (gặp lỗi), bạn vẫn có thể nhấn ENTER để chạy kết quả trước đó (nếu có).
 - Notepad++ hỗ trợ Unicode, do đó có thể viết tiếng Việt có dấu lên Notepad++ nhưng đừng làm vậy khi viết Pascal.
 - Sau khi đọc "**CHÚC CÁC BẠN THÀNH CÔNG**" (ngay dòng dưới), đừng dừng lại, hãy "xuống" tiếp.

**CHÚC CÁC BẠN THÀNH CÔNG**

FAQs

 * "TP", "TPC" hay "FP", "FPC" có nghĩa là gì?

   - "TP" là viết tắt của từ "Turbo Pascal" và là tên thư mục chứa TPC_LAUNCHER
   - "TPC" là viết tắt của từ "Turbo Pascal Compiler" và TPC.EXE (nằm trong thư mục TP) là trình dịch của Turbo Pascal.
   - Tương tự ta có "FP" là "Free Pascal" và "FPC" là "Free Pascal Compiler"
   - TPC_LAUNCHER hay FPC_LAUNCHER đơn giản là một chương trình trung gian giữa Notepad++ và TPC.EXE hay FPC.EXE.

 * Tại sao không chạy trực tiếp TPC.EXE (hay FPC.EXE) mà phải thông qua TPC_LAUNCHER (hay FPC_LAUNCHER)?

   - Hệ điều hành chúng ta đang sử dụng là Windows, TPC.EXE hay FPC.EXE là ứng dụng DOS, khi dịch chương trình mà không gặp lỗi thì "OK", nhưng nếu gặp lỗi, trình dịch sẽ báo lỗi lên màn hình console, sau đó chưa đầy 1s thì màn hình console biến mất, kết quả là không biết được trình dịch báo lỗi gì. TPC_LAUNCHER (FPC_LAUNCHER) sẽ dừng lại để lập trình viên xem kết quả dịch
   - Một tiện ích nữa mà TPC_LAUNCHER (FPC_LAUNCHER) mang lại đó là lập trình viên có thể chạy thử chương trình ngay sau khi nhấn ENTER.

 * Cách thực hiện này có ưu và nhược điểm gì?

   - Về ưu điểm:
    + So với IDE "truyền thống" (TURBO.EXE hay FP.EXE): Notepad++ có giao diện dễ dàng sử dụng, người dùng có thể Save, Copy, Cut, Paste ... dễ dàng như trong Word, và cũng không cần phải "Change Dir" nữa.
    + So với việc sử dụng NppExec: Cách làm này cho kết quả trực quan, như thật. Còn NppExec thì tạo ra một console ảo (không giống với console của DOS) - Đây cũng có thể là ưu điểm của NppExec so với TPC_LAUNCHER (FPC_LAUNCHER). Lập trình viên cũng không cần phải download thêm NppExec nếu Notepad++ không có sẵn.
 - Về hạn chế:
   + So với IDE "truyền thống": Dùng Notepad++ để soạn và dịch thông qua TPC_LAUNCHER (FPC_LAUNCHER) chỉ có thể phát hiện lỗi biên dịch (Compile Error), không thể debug, dùng breakpoint ... để kiểm tra giải thuật (thuật toán) nếu chương trình không cho ra kết quả mong muốn. Cũng không thể kiểm tra nếu quá trình chạy xảy ra lỗi (Runtime Error). Tất nhiên sinh viên năm nhất ít dùng debugger.
   + So với NppExec: Ngoài những hạn chế trên, sử dụng TPC_LAUNCHER (FPC_LAUNCHER) yêu cầu lập trình viên lưu mã nguồn trước khi dịch trong khi với NppExec thì mã nguồn có thể được lưu tự động.

 * Nên dùng trình dịch của Turbo Pascal hay Free Pascal?

   - Free Pascal. Tại sao ư? Free Pascal không có yêu cầu khắt khe về tên file, lập trình viên có thể đặt tên dài tùy ý, chứa cả dấu cách (SPACE - #32), nhưng phải là không dấu.
   - Link download: http://sourceforge.net/projects/freepascal/

 * Vì sao tác giả viết bài này?

   - Để giúp sinh viên biết những điều có thể họ chưa biết! Nghe có hay không?! Thế nhưng "TẤT CẢ CHỈ LÀ NGỤY BIỆN!". Mục đích chính của mình là "câu like" cho nó "oai". Google không có "like", hãy nhấn "+1" để ủng hộ.

Một vài hình ảnh

 - Giao diện Notepad++:



- Khi mở bảng chọn Run:

- Giao diện của FPC_LAUNCHER.EXE khi dịch chương trình:

 - Khi hoàn tất việc chạy chương trình:

- Chương trình báo lỗi:
   Thông tin về lỗi: "P04.pas(19,26) Fatal: Syntax error, "BEGIN expected but "indentifier YYUUII" found"
   Nghĩa là: Gặp một lỗi cú pháp ở dòng 19, ký tự thứ 26

7 nhận xét:

  1. Mình làm Video hướng dẫn đi bạn. Đọc thấy chán quá.

    Trả lờiXóa
    Trả lời
    1. Giờ mình không còn dùng Notepad++ nữa.
      Dù sao thì mình đoán là bạn cũng không còn học Pascal nữa 😃

      Xóa
  2. Trả lời
    1. Giờ mình dùng VS Code hoặc Atom nó tiện hơn

      Xóa
    2. Theo anh thì em nên dùng cái nào ạ (Em mới học lập trình thôi ạ :3)

      Xóa
  3. Nhận xét này đã bị quản trị viên blog xóa.

    Trả lờiXóa
  4. The Casino site | Lucky Club
    The Casino site has been around since it was founded in 1999, and with over 10 years of experience, a world luckyclub of high quality casino games and  Rating: 2 · ‎1 review

    Trả lờiXóa