# Giới thiệu Ngôn ngữ lập trình Pascal


Pascal là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh, được Niklaus Wirth phát triển vào năm 1970 là ngôn ngữ đặc biệt thích hợp cho kiểu lập trình có cấu trúc.

Pascal dựa trên ngôn ngữ lập trình Algol và được đặt tên theo nhà toán học và triết học Blaise Pascal. Wirth đồng thời cũng xây dựng Modula-2 và Oberon, là những ngôn ngữ tương đồng với Pascal. Oberon cũng hỗ trợ kiểu lập trình hướng đối tượng.

Ban đầu, Pascal là một ngôn ngữ được hướng để dùng trong giảng dạy về lập trình có cấu trúc, và nhiều thế hệ sinh viên đã vào nghề thông qua việc học Pascal như ngôn ngữ vỡ lòng trong các chương trình học đại cương. Nhiều biến thể của Pascal ngày nay vẫn còn được sử dụng khá phổ biến, cả trong giảng dạy lẫn trong công nghiệp phát triển phần mềm.

Phần lớn hệ điều hành Macintosh được viết bằng Pascal. Hệ sắp chữ TeX phổ biến được viết bằng một ngôn ngữ tên là World Wide Web, là ngôn ngữ mà Donald Knuth đã vay mượn khá nhiều yếu tố từ Pascal.

Các phiên bản của Turbo Pascal

Phiên bản 2.0: So với Pascal chuẩn, Turbo Pascal Version 2.0 có những mở rộng về các biến động, các biến địa chỉ tuyệt đối, Các phép toán trên bit và byte, các phép toán logic trên số nguyên, Kết nối các chương trình với các biến chung,...

Phiên bản 3.0: là một hệ thống phát triển gồm những đặc điểm của version 2.0 và có nhiều mở rộng quan trọng như: Bổ sung nhiề thủ tục và hàm chuẩn. Bổ sung một vài dạng đặc biệt mới cho phép tính toán các số thực với độ chính xác lớn,... So với version 2.0 thì version 3.0 có tốc độ dịch gấp đôi.

Phiên bản 4.0: có đặc điểm là có thêm một số dữ liệu mới, thực hiện các biểu thức logic nhanh hơn, có nhiều thủ tục và hàm chuẩn về xử lí đồ họa đồ thị màu sắc hình khối cửa sổ,...

Phiên bản 5.0 và 5.5: Năm 1989, hãng Borland đưa ra thị trường phiên bản Turbo 

Pascal Version 5.0 để giới thiệu các thủ tục và hàm tiện nghi. Tiếp đó chưa đầy nửa năm họ đưa ra version 5.5 có thêm cấu trúc hoàn toàn mới, đó là lập trình đối tượng.

Phiên bản 6.0: Đặc điểm nổi bậc của version này là giới thiệu thành phần của Turbo vision, một thư viện chương trình cụ thể, định hình có các cửa sổ tiện ích để đối chiếu với nhau.

Phiên bản 7.0: Cuối năm 1992, hãng Borland lại đưa ra version 7.0 để chạy trong tất cả hệ điều hành kể cả Windows

Các môi trường IDE của Pascal

Các IDE dưới đây đều là trình biên dịch:

Borland Pascal được sáng tác bởi hãng Borland, mở rộng không đáng kể ngôn ngữ Pascal, phiên bản mới nhất là BP 7.0, hỗ trợ WinForm, trình biên dịch rộng rãi.

Free Pascal là một IDE rất linh hoạt, kết hợp nhiều chế độ làm việc (các tinh hoa) của các IDE khác nhau. Ví dụ, TP, Delphi, Objective-Pascal,.. Phiên bản mới nhất cho đến hiện tại là 2.6.0.
Lazarus Pascal sử dụng trình biên dịch của FP. Hỗ trợ rất mạnh đồ hoạ, winform. Có các thao tác kéo thả giống như Visual Basic.

Đặc điểm

Dễ học, dễ đọc

Pascal có khá nhiều từ khoá, so với C, Pascal sử dụng các từ nhiều hơn là kí hiệu. Pascal đã trở thành một trong những ngôn ngữ được nhiều quốc gia chọn để dạy học trong chương trình học phổ thông. Nhiều chương trình Pascal có thể đọc dưới dạng văn xuôi rất dễ dàng.
Pascal không phân biệt chữ HOA với chữ thường.
 --------------------------
 Từ khoá trong Turbo Pascal
 --------------------------
absolute, and, array, asm,  begin,  case,  const,  constructor,  destructor,  div,  do,  downto,  
 else,  end,  file,  for,  function,  goto,  if,  implementation,  in,  inherited,  inline,  interface,  
 label,  mod,  nil,  not,  object,  of,  on,  operator,  or,  packed,  procedure,  program,  record,  
 reintroduce,  repeat,  self,  set,  shl,  shr,  string,  then,  to,  type,  unit,  until,  uses,  var,  
 while,  with,  xor. 

 --------------------------
 Từ khoá trong Object Pascal và Free Pascal
 --------------------------
 as,  class,  dispinterface,  except,  exports,  finalization,  finally,  initialization,  inline,  
 is,  library,  on,  out,  packed,  property,  raise,  resourcestring,  threadvar,  try, 
 dispose,  exit,  false,  new,  true.   
 --------------------------
 Các từ khoá là dẫn hướng
 --------------------------
 absolute,  abstract,  alias,  assembler,  cdecl,  cppdecl,  default,  export,  external,  far , 
 far16,  forward , index,  local,  name , near,  nostackframe , oldfpccall,  override , pascal  
 private,  protected,  public,  published,  read,  register,  reintroduce,  safecall,  softfloat , 
 stdcall,  virtual,  write .

Trình bày

Phần chính của mọi chương trình Pascal là khối lệnh (main). Một khối lệnh bắt đầu bằng từ khoá Begin và kết thúc bàng End. Trước chương trình chính sẽ là các khai báo thư viện, biến, thủ tục, hàm, ... Các câu lệnh trong Pascal được ngăn cách bằng dấu chấm phảy (";"). Câu lệnh cuối cùng của một khối lệnh có thể giản lược đi một dấu chấm phảy. Cuối chương trình luôn có một dấu chấm sau end (end.).

begin
    writeln('Chao The gioi!');
end.

Pascal, nguyên thể đơn thuần là ngôn ngữ lập trình thủ tục với một loạt các từ khóa chuẩn if, while, for, và các thành phần khác. Pascal là một ngôn ngữ hỗ trợ cả lập trình có cấu trúc lẫn lập trình hướng đối tượng. Hướng đối tượng bắt đầu được đưa vào Turbo Pascal ở phiên bản 5.5. Free Pascal cũng đưa hướng đối tượng vào từ rất sớm.

while a <> b do WriteLn('Xin cho*`');
 
if a > b then
    writeln('Tho?a man~ ddie^`u kie^.n')
else
    writeln('Kho^ng tho?a man~ ddie^`u kie^.n');
 
for i := 1 to 10 do writeln('La(.p: ', i:1);
 
repeat a := a + 1 until a = 10;
Pascal cấu trúc các chương trình thành các thủ tục và hàm.
program mine(output);
 
    procedure print(var i: integer);
 
        function next(i: integer): integer;
        begin
            next := i + 1
        end;
 
    begin
        writeln('To^?ng la`: ', i);
        i := next(i)
    end;
 
begin
    i := 1;
    while i <= 10 do print(i)
end.

Các thủ tục và hàm có thể lồng vào nhau theo nhiều cấp, và từ program là khối cấu trúc ngoài cùng nhất. Trước mỗi khối là phần khai báo. Ta có thể khai báo các hằng, các biến, các kiểu, hoặc các nhãn. Các từ khoá var (biến), type (kiểu), const (hằng), label (nhãn) được đặt trước các khai báo có cùng thể loại. Chú thích của Pascal được đặt trong ngoặc nhọn, ví dụ { comment }, hoặc là ngoặc đơn với sao, ví dụ (* comment *), trong Free Pascal, kí hiệu // chỉ ra rằng các kí tự sau đó (ở cùng dòng với nó) là chú thích, ví dụ // comment. Chú thích không ảnh hưởng đến các lệnh của chương trình. Mọi chú thích sẽ tự động bỏ qua trong tiến trình dịch.

 { đây là chú thích }
 begin
   writeln('Viet Nam');
 end.

Kiểu dữ liệu

Pascal gồm các kiểu đơn lẻ như integer, char, boolean, kiểu đoạn con,... Ngoài ra còn kiểu cấu trúc như array, string, record, object, class,... Cuối cùng là kiểu số thực : real.
 Kiểu số nguyên trong Free Pascal
 Type            |Range                                       | Size in bytes
 =========+=====================+===============
 Byte             | 0 .. 255                                    |  1
 Shortint       | -128 .. 127                               |  1
 Smallint      | -32768 .. 32767                      |  2
 Word           | 0 .. 65535                                |  2
 Integer        | either smallint or longint          |  size 2 or 4
 Cardinal     | longword                                   |  4
 Longint       | -2147483648 .. 2147483647 |   4
 Longword  | 0 .. 4294967295                       | 4
 Int64           | -9223372036854775808 .. 9223372036854775807 | 8
 QWord       | 0 .. 18446744073709551615 | 8


Đây là một số khai báo kiểu của Pascal:

 type (* Khai báo kiểu*)
 KieuSoNguyen = integer;
 KieuSoNguyenDuong = QWord;
 MangSoNguyen = array[1..239] of KieuSoNguyen;
 DiaChi = record
   xa, huyen, tinh : string;
   SoNha : integer;
 end;
 { hướng đối tượng }
 ConVat = object
   Ten : string;
   Lop : string;
 end;
 
 ConGa = object(ConVat)
   TiengGay : string;
 end;
 { Kiểu đoạn con, kiểu tự định nghĩa }
 SoDem = (mot, hai, ba, bon, nam);
 SoNho = 0..10;
 SoDemNho = mot .. ba;

Từ đó, ta có thể khai báo các biến và sử dụng chúng:
 var
   x : integer; y : KieuSonguyenduong;
   A : mangsonguyen;
   GaTrong : ConGa;
   z : SoDemNho;
 Begin {thân chương trình }
   x := 5;
   y := x+10;
   y := y-1;
   GaTrong.TiengGay := 'O O O...';
   writeln(GaTrong.TiengGay);
 End.

Các kiểu phức có thể được xây dựng từ các kiểu đơn:
 type
     a = array [1..10] of integer;
     b = record
             a: integer;
             b: char
         end;
     c = file of a;
Kiểu chuỗi kí tự (string) là kiểu dữ liệu rất mạnh.
Pascal cũng hỗ trợ dùng con trỏ:
 type
      a = ^b;
      b = record
             a: integer;
             b: char;
             c: a
          end;
 var
      pb : a

Ở đây biến pb là một con trỏ đến kiểu dữ liệu b, là một record. Để tạo record mới và gán các giá trị 10 và A vào các trường a và b trong record, có thể dùng các câu lệnh sau:

   new(pb);
   pb^.a := 10;
   pb^.b := 'A';
   pb^.c := nil;
 ...
Danh sách liên kết cũng có thể được tạo ra bằng cách cho một trường kiểu con trỏ (c) vào trong record.
[sửa]Chương trình "Chào thế giới"

 program ChaoThegioi;
 begin
    writeln('Chao the gioi nao!');
 readln;
 end.
[sửa]Thực tế sử dụng

Trình biên dịch Pascal đầu tiên được thiết kế tại Zurich cho dòng máy tính CDC 6000, được viết và xây dựng tại Đại học Illinois dưới sự chỉ đạo của Donald B. Gillies cho loại máy tính PDP-11 và ngay từ lúc này đã có thể sinh ra mã máy trực tiếp.

Để nhanh chóng phổ biến rộng rãi ngôn ngữ này, một bộ công cụ chuyển mã được viết tại Zurich bao gồm một trình biên dịch sang "mã máy ảo" (hay dễ hiểu hơn, mã trung gian giữa mã máy và mã nguồn), và bộ giả lập cho loại mã này. Bộ công cụ này sau đó trở thành hệ thống giả (P-system). Mặc dù hệ thống này được phát triển nhằm tạo ra các trình biên dịch sinh mã máy trên ít nhất một hệ thống, nhưng kết quả đáng kể nhất chỉ là trình thông dịch cho hệ thống giả UCSD. Các trình thông dịch này được ký hiệu P1-P4, với P1 là phiên bản đầu tiên còn P4 là phiên bản cuối cùng.

IP Pascal là trình biên dịch của ngôn ngữ lập trình Pascal cho hệ điều hành Micropolis DOS nhưng ngay sau đó đã chuyển sang CP/M để chạy trên dòng máy Z80.

Đầu thập niên 1980, UCSD Pascal đã có phiên bản dành cho các máy Apple II và Apple III để có các phiên bản tương ứng thay thế trình thông dịch BASIC đi kèm với các loại máy này trong thời gian trước đó.

Trong những năm 1980, Anders Hejlsberg đã viết trình biên dịch Blue Label Pascal dành cho dòng máy tính Nascom-2. Sau đó ông chuyển sang làm việc cho hãng Borland và viết lại hoàn toàn trình biên dịch này để rồi trở thành Turbo Pascal cho máy tính IBM-PC. Trình biên dịch mới này bán với giá chỉ có $49.95, rẻ hơn nhiều so với giá Hejlsberg trước đây rao bán sản phẩm Blue Label Pascal.
Trình biên dịch giá rẻ của Borland đã gây ra ảnh hưởng lớn đến cộng đồng lập trình viên Pascal, họ hầu như tập trung hết vào lập trình cho máy IBM-PC trong những năm cuối thập niên 1980. Rất nhiều người cũng đã sử dụng sản phẩm này thay cho BASIC.
Super Pascal là một biến thể của Pascal, bổ sung nhãn không có số, trả lại biểu thức hay mệnh đề là tên của kiểu dữ liệu.

Trong phiên bản 5.5, Borland đã bổ sung phần lập trình hướng đối tượng vào Turbo Pascal.
Tuy nhiên sau đó Borland đã quyết định cần phải có nhiều tính năng hướng đối tượng tinh vi và phức tạp hơn, và đã bắt đầu sản phẩm Delphi, sử dụng sơ đồ thiết kế của Object Pascal do Apple đưa ra làm cơ sở. (Sơ đồ của Apple vẫn chưa phải là chuẩn.) Borland cũng gọi đây là Object Pascal trong phiên bản Delphi đầu tiên nhưng đổi tên thành Delphi trong các phiên bản sau đó. Các bổ sung chính so với các phần mở rộng lập trình hướng đối tượng trước là mô hình đối tượng, các hàm dựng và hàm hủy ảo, các thuộc tính đều mang tính tham chiếu. Có một vài trình biên dịch khác cũng hỗ trợ các tính năng này. Xem thêm: Delphi (ngôn ngữ lập trình).
Turbo Pascal và các sản phẩm tương tự, bằng các khái niệm đơn vị (unit) hay mô-đun (module) hình thành nên các ngôn ngữ lập trình cấu trúc. Turbo Pascal lấy các khái niệm này từ chuẩn của Extended Pascal hay từ người kế vị Modula-2. Mặc dù vậy nó vẫn không cung cấp khái niệm các mô-đun lồng nhau hay các kí hiệu rõ ràng về hàm nhập và hàm xuất.

Chuẩn hóa

Ngôn ngữ này được chuẩn hóa vào năm 1983 trong chuẩn ISO/IEC 7185, một vài chuẩn quốc gia cụ thể cũng được đưa ra bao gồm cả chuẩn ANSI/IEEE770X3.97-1983 của Mỹ. Năm 1990 chuẩn Pascal mở rộng được đưa ra với tên gọi ISO/IEC 10206.

Chuẩn ISO 7185 được phát triển với mục đích là sự chọn lọc của ngôn ngữ 1974 của Writh, được đề cập chi tiết trong cuốn "Hướng dẫn sử dụng và Báo cáo của Jensen và Wirth", bổ sung đáng kể nhất là "Các tham số mảng phù hợp" được coi là mức 1 của tiêu chuẩn, mức 0 là Pascal không có mảng phù hợp.

Trên các máy tính lớn mà Pascal xuất phát (mainframe và minicomputer), các tiêu chuẩn này thường được tuân theo. Tuy vậy trên IBM-PC thì ngược lại. Trên các máy tính IBM-PC, chuẩn của Turbo Pascal và Delphi của của Borland có lượng người dùng nhiều nhất. Do vậy, biết liệu một phiên bản riêng biệt tương ứng với ngôn ngữ Pascal ban đầu, hay ngôn ngữ riêng của Borland là khá quan trọng.

(theo Wiki)

Tìm kiếm nội dung khác: