Sơ lược về ngôn ngữ lập trình Pascal
Page 1 of 1
Sơ lược về ngôn ngữ lập trình Pascal
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ựngModula-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 nhiều hệ điều hành kể cả Windows
Ngôn ngữ
Mọi chương trình Pascal bắt đầu bằng từ khóa Program, cùng với một danh sách tùy chọn các phần mô tả các tập tin ngoài và sau đó là một khối các dòng lệnh nằm giữa các từ khóa Begin và End. Dấu chấm phẩy dùng để tách các dòng lệnh khác nhau, và dấu chấm để báo hiệu kết thúc chương trình (hay đơn vị). Trong mã nguồn Pascal, không phân biệt chữ viết in.
program ChaoThegioi(output);
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 cũng là một ngôn ngữ lập trình có cấu trúc, nghĩa là chuỗi điều khiển được cấu trúc thành các câu lệnh chuẩn, hạn chế tối đa các lệnh go to chuyển hướng lung tung trong cấu trúc chương trình.
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.
Mỗi khối có thể có khai báo các nhãn goto, hằng, kiểu, biến, cùng với các thủ tục và hàm riêng, tất cả phải tuân theo trình tự đó.
Pascal có các kiểu đơn như integer (số nguyên), character (ký tự), boolean (logic), v.v. và enumerations (liệt kê), là kiểu mới được đưa vào Pascal sau này.
program myprog;
var
a: integer;
b: char;
c: boolean;
d: (mot, hai, ba, bon, nam);
Có thể tạo ra bất kỳ "kiểu con" nào từ các kiểu trên.
var
x: 1..10;
y: 'a'..'z';
z: hai..bon;
Các kiểu có thể được tạo ra từ các kiểu khác bằng cách khai báo kiểu.
program myotherprog;
type
x = integer;
y = x;
...
Hơn thế nữa, 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;
Các chuỗi ký tự là các dãy kết hợp bắt đầu bằng một chỉ số nguyên là 1.
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à btrong 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.
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ànhhệ 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ẩmDelphi, 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.
Các trình biên dịch phổ biến
Có vài trình biên dịch Pascal được đưa ra cho sử dụng công khai:
Trình biên dịch P4, cơ sở cho rất nhiều trình biên dịch Pascal-được-viết-bằng-Pascal sau đó, bao gồm cả UCSD p-System.
Free Pascal được viết bằng Pascal (sao cho nó có thể biên dịch được chính nó), được phát triển với mục tiêu là cung cấp một trình biên dịch mạnh mẽ và thuận tiện, có khả năng biên dịch cả các ứng dụng cũ lẫn phát triển ứng dụng mới. Được phân phối miễn phí dưới giấy phép GNU. Có khả năng trộn lẫn cả mã của Turbo Pascal và mã Delphi, hỗ trợ nhiều nền tảng lẫn nhiều hệ điều hành.
Turbo Pascal là trình biên dịch Pascal thống trị cho PC vào thập niên 1980 và đầu thập niên 1990. Nó phổ biến vì các mở rộng mạnh mẽ và đặc biệt là thời gian biên dịch cực kì ngắn. Trong thời điểm hiện tại, các phiên bản cũ của Turbo Pascal (tới 5.5) có thể tải xuống miễn phí tại trang web của Borland (tuy nhiên vẫn cần phải đăng ký).
Chrome là thế hệ Object Pascal tiếp theo cho nền tảng .NET và nền tảng Mono, được RemObjects Software cung cấp.
GNU Pascal Compiler (GPC) là trình biên dịch Pascal của Bộ biên dịch GNU (GCC). Trình biên dịch này được viết bằng C, thư viện chạy hầu hết viết bằng Pascal. Được phân phối miễn phí dưới giấy phép GNU, có thể chạy trên rất nhiều nền tảng và hệ điều hành khác nhau. Nó còn hỗ trợ chuẩn ngôn ngữ ANSI/ISO và tương thích với ngôn ngữ Borland/Turbo Pascal. Việc hỗ trợ cho Borland Delphi và một vài biến thể khác vẫn còn khá hạn chế.
Delphi là sản phẩm RAD (Rapid Application Development-phát triển ứng dụng tức thời) của Borland. Nó sử dụng Delphi, tiền thân từ Pascal, để tạo các chương trình ứng dụng cho nền Windows. Phiên bản mới nhất còn hỗ trợ cả việc biên dịch cho nền Microsoft .NET.
Kylix là một nhánh sản phẩm khác kế thừa từ Pascal của Borland, tiền thân từ Delphi, hỗ trợ hệ điều hành Linux và một thư viện đối tượng đã được bổ sung. Trình biên dịch và môi trường phát triển (IDE) có thể được cung cấp cho việc sử dụng phi lợi nhuận. Trình biên dịch (không bao gồm thư viện hay IDE) được cho là trở thành phần mềm Mã nguồn mở trong thời gian tới.
Dr. Pascal là một trình thông dịch chạy Standard Pascal. Bổ sung đáng kể nhất là chế độ "thực thi nhìn thấy được" cho phép hiển thị chương trình đang chạy cùng với các biến của nó, và cả quá trình kiểm tra lỗi khi thực thi (runtime error checking). Trình thông dịch này không tạo ra được file thực thi nhị phân riêng rẽ, chạy trên nền MS-DOS, hoặc cửa sổ DOS trong nền Windows, và cả trên dòng máy Macintosh cũ.
Virtual Pascal được Vitaly Miryanov sáng tạo như một trình biên dịch dành cho OS/2 tương thích với cú pháp của Borland Pascal. Sau đó nó được fPrint phát triển thành sản phẩm thương mại, hỗ trợ thêm Win32, và đến năm 2000 trở thành phần mềm miễn phí. Ngày nay nó có thể biên dịch cho Win32, OS/2 và cả Linux, và gần như hoàn toàn tương thích với Borland Pascal và Delphi.
IP Pascal ban đầu là ngôn ngữ Pascal dành cho Z80/CP/M, rồi được chuyển sang và viết lại cho Intel 80386/PC. IP Pascal có một thư viện khả chuyển (portability library). Ví dụ, một chương trình hiển thị văn bản viết bằng Pascal chuẩn từ thập niên 1970 có thể được biên dịch lại để làm việc trong một cửa sổ và thậm chí có cả việc tạo dựng đồ họa. IP Pascal hỗ trợ chuẩn ISO 7185 và nâng cấp ngôn ngữ một cách logic. Ví dụ, Pascal chuẩn hỗ trợ các xâu ký tự được "căn lề phải" và sau đó còn hỗ trợ xâu ký tự động. Mảng tĩnh của Pascal chuẩn được nâng thành mảng động nhưng vẫn hoàn toàn tương thích ngược với mảng tĩnh, v.v.
Pocket Studio là một tập nhỏ các trình biên dịch Pascal và RAD hướng tới Palm/MC68xxx với một số mở rộng hỗ trợ giao tiếp với API (Application Programming Interface-giao tiếp lập trình ứng dụng) của hệ điều hành Palm OS.
Lazarus là môi trường phát triển tức thời trực quan đa nền tảng. Lazarus sử dụng trình biên dịch Free Pascal.
Bạn có thể tìm thấy một danh sách lớn nữa tại Pascaland. Trang web này viết bằng tiếng Pháp, nhưng về cơ bản chỉ là một danh sách gồm các địa chỉ mạng (URL) tới các trình biên dịch, do vậy không ảnh hưởng nhiều. Bạn cũng có thể ghé thăm Pascal Central, một trang web chính về thông tin và hỗ trợ cho Pascal dành cho máy Mac, với rất nhiều bộ sưu tập về các bài báo, cộng với liên kết tới rất nhiều trình biên dịch và hướng dẫn khác.
[sửa]
Những phê phán trước đây
Mặc dù rất phổ biến (những năm 1980 và 1990 còn phổ biến hơn cả thời điểm bài viết này được thực hiện), các phiên bản Pascal trước đây đã bị phê phán rộng rãi vì không phù hợp cho việc sử dụng trong thực tế, ngoài việc dạy học. Brian Kernighan, người truyền bá C, đã đưa ra những phê phán lớn nhất về Pascal trong đầu những năm 1980, bằng tác phẩm Why Pascal Is Not My Favorite Programming Language (Tại sao Pascal không phải là ngôn ngữ lập trình tôi ưa thích). Mặt khác, rất nhiều nỗ lực phát triển lớn trong những năm 1980 (như chuyển sang cho Apple Lisa và Macintosh) lại phụ thuộc rất nhiều vào Pascal (tới mức mà giao tiếp C dành cho Mac OS phải giải quyết cả các kiểu dữ liệu của Pascal). Trong những thập niên sau đó, Pascal tiếp tục phát triển, và những vấn đề mà Kernighan đã đưa ra không còn phù hợp cho các phiên bản hiện tại nữa. Thật đáng tiếc là, như những điều mà Kernighan dự đoán trong bài viết, hầu hết các sự mở rộng để giải quyết các vấn đề trên làm các trình biên dịch không tương thích với nhau. Mặc dù vậy, trong thập niên vừa qua các biến thể dường như đã tập trung lại thành hai loại, theo chuẩn ISO hay theo chuẩn Borland, đều đã dần dần đi ra ngoài dự đoán của Kernighan.
Dựa trên kinh nghiệm với Pascal, Niklaus Wirth đã phát triển thêm hai ngôn ngữ lập trình nữa, Modula-2 và Oberon. Hai ngôn ngữ này mặc dù đã có nhiều cải tiến nhưng không thể theo kịp thành công thương mại của Pascal.
Các câu lệnh
SYSTEM
write(): in ra màn hình liền sau kí tự cuối.
writeln(): in xuống một hàng.
read(): đọc biến.
readln(' '): đọc biến và xuống dòng
Unit CRT
clrscr : xoá toàn bộ màn hình.
textcolor() : in chữ màu.
textbackground() : tô màu cho màn hình.
sound() : tạo âm thanh.
delay() : làm trễ.
nosound : tắt âm thanh.
windows(x1,y1,x2,y2) : thay đổi cửa sổ màn hình.
highvideo : tăng độ sáng màn hình.
lowvideo : giảm độ sáng màn hình.
normvideo : màn hình trở lại chế độ sáng bình thường.
gotoxy(x,y) : đưa con trỏ đến vị trí x,y trên màn hình.
deline : xoá một dòng đang chứa con trỏ.
clreol : xoá các ký tự từ vị trí con trỏ đến cuối mà không di chuyển vị trí con trỏ.
insline : chèn thêm một dòng vào vị trí của con trỏ hiện hành.
exit : thoát khỏi chương trình.
textmode(co40) : tạo kiểu chữ lớn.
randomize : khởi tạo chế độ ngẫu nhiên.
move(var 1,var 2,n) : sao chép trong bộ nhớ một khối n byte từ biến Var 1 sang biến Var 2.
halt : Ngưng thực hiện chương trình và trở về hệ điều hành.
Abs(n) : Giá trị tuyệt đối.
Arctan(x) : cho kết quả là hàm Arctan(x).
Cos(x) : cho kết quả là cos(x).
Exp(x) : hàm số mũ cơ số tự nhiên ex.
Frac(x) : cho kết quả là phần thập phân của số x.
int(x) : cho kết quả là phần nguyên của số thập phân x.
ln(x) : Hàm logarit cơ số tự nhiên.
sin(x) : cho kết quả là sin(x), với x tính bằng Radian.
Sqr(x) : bình phương của số x.
Sqrt(x) : cho kết quả là căn bậc hai của x.
pred(x) : cho kết quả là số nguyên đứng trước số nguyên x.
Suuc(x) : cho kết quả là số nguyên đứng sau số nguyên x.
odd(x) : cho kết quả là true nếu x số lẻ, ngược lại là false.
chr(x) : trả về một kí tự có vị trí là x trong bảng mã ASCII.
Ord(x) : trả về một số thứ tự của kí tự x.
round(n) : Làm tròn số thực n.
Random(n) : cho một số ngẫu nhiên trong phạm vi n.
upcase(n) : đổi kí tự chữ thường sang chữ hoa.
assign(f,'<đường dẫn><tên file>.<phần mở rộng>') : tạo file.
rewrite(f) : ghi file lên đĩa.
append(f) : chèn thêm dữ liệu cho file.
close(f) : tắt file.
erase(f) : xóa.
rename() : chết.
length(s) : cho kết quả là chiều dài của xâu.
copy(s,a,b) : copy xâu.
insert(,s,a) : chèn thêm cho xâu.
delete(s:string,a:integer,b:integer) : xóa b ký tự từ vị trí a trong xâu s
Unit GRAPH
initgraph(a,b,) : khởi tạo chế độ đồ hoạ.
closegraph; : tắt chế độ đồ hoạ.
setcolor(x) : chọn màu.
outtext() : in ra màn hình tại góc trên bên trái.
outtextxy(x,y,); : in ra màn hình tại toạ độ màn hình.
rectangle(x1,y1,x2,y2): vẽ hình chữ nhật.
line(x1,y1,x2,y2) : vẽ đoạn thẳng.
moveto(x,y) : lấy điểm xuất phát để vẽ đoạn thẳng.
lineto(x,y) : lấy điểm kết thúc để vẽ doạn thảng.
circle(x,y,n) : vẽ đường tròn.
ellipse(x,y,o1,o2,a,b): vẽ hình elip.
floodfill(a,b,n) : tô màu cho hình.
getfillpattern(x) : tạo biến để tô.
setfillpattern(x,a) : chọn màu để tô.
cleardevice; : xoá toàn bộ màn hình.
settextstyle(n,a,b) : chọn kiểu chữ.
bar(a,b,c,d) : vẽ thanh.
bar3d(a,b,c,d,n,h) : vẽ hộp.
arc(a,b,c,d,e) : vẽ cung tròn.
setbkcolor(n) : tô màu nền.
putpixel(x,y,n) : vẽ điểm.
setfillstyle(a,b) : tạo nền cho màn hình.
setlinestyle(a,b,c) : chọn kiểu đoạn thẳng.
getmem(p,1) : chuyển biến để nhớ dữ liệu.
getimage(x1,y1,x2,y2,p): nhớ các hình vẽ trên vùng cửa sổ xác định.
putimage(x,y,p,n) : in ra màn hình các hình vừa nhớ. ...
Unit DOS
getdate(y,m,d,t): lấy các dữ liệu về ngày trong bộ nhớ.
gettime(h,m,s,hund): lấy các dữ liệu về giờ trong bộ nhớ.
findnext(x): tìm kiếm tiếp.
Findfirst($20,dirinfo): tìm kiếm. ...
:*99: :lol!: :afro: :flower: :study: :geek: :joker:
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ựngModula-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 nhiều hệ điều hành kể cả Windows
Ngôn ngữ
Mọi chương trình Pascal bắt đầu bằng từ khóa Program, cùng với một danh sách tùy chọn các phần mô tả các tập tin ngoài và sau đó là một khối các dòng lệnh nằm giữa các từ khóa Begin và End. Dấu chấm phẩy dùng để tách các dòng lệnh khác nhau, và dấu chấm để báo hiệu kết thúc chương trình (hay đơn vị). Trong mã nguồn Pascal, không phân biệt chữ viết in.
program ChaoThegioi(output);
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 cũng là một ngôn ngữ lập trình có cấu trúc, nghĩa là chuỗi điều khiển được cấu trúc thành các câu lệnh chuẩn, hạn chế tối đa các lệnh go to chuyển hướng lung tung trong cấu trúc chương trình.
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.
Mỗi khối có thể có khai báo các nhãn goto, hằng, kiểu, biến, cùng với các thủ tục và hàm riêng, tất cả phải tuân theo trình tự đó.
Pascal có các kiểu đơn như integer (số nguyên), character (ký tự), boolean (logic), v.v. và enumerations (liệt kê), là kiểu mới được đưa vào Pascal sau này.
program myprog;
var
a: integer;
b: char;
c: boolean;
d: (mot, hai, ba, bon, nam);
Có thể tạo ra bất kỳ "kiểu con" nào từ các kiểu trên.
var
x: 1..10;
y: 'a'..'z';
z: hai..bon;
Các kiểu có thể được tạo ra từ các kiểu khác bằng cách khai báo kiểu.
program myotherprog;
type
x = integer;
y = x;
...
Hơn thế nữa, 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;
Các chuỗi ký tự là các dãy kết hợp bắt đầu bằng một chỉ số nguyên là 1.
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à btrong 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.
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ànhhệ 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ẩmDelphi, 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.
Các trình biên dịch phổ biến
Có vài trình biên dịch Pascal được đưa ra cho sử dụng công khai:
Trình biên dịch P4, cơ sở cho rất nhiều trình biên dịch Pascal-được-viết-bằng-Pascal sau đó, bao gồm cả UCSD p-System.
Free Pascal được viết bằng Pascal (sao cho nó có thể biên dịch được chính nó), được phát triển với mục tiêu là cung cấp một trình biên dịch mạnh mẽ và thuận tiện, có khả năng biên dịch cả các ứng dụng cũ lẫn phát triển ứng dụng mới. Được phân phối miễn phí dưới giấy phép GNU. Có khả năng trộn lẫn cả mã của Turbo Pascal và mã Delphi, hỗ trợ nhiều nền tảng lẫn nhiều hệ điều hành.
Turbo Pascal là trình biên dịch Pascal thống trị cho PC vào thập niên 1980 và đầu thập niên 1990. Nó phổ biến vì các mở rộng mạnh mẽ và đặc biệt là thời gian biên dịch cực kì ngắn. Trong thời điểm hiện tại, các phiên bản cũ của Turbo Pascal (tới 5.5) có thể tải xuống miễn phí tại trang web của Borland (tuy nhiên vẫn cần phải đăng ký).
Chrome là thế hệ Object Pascal tiếp theo cho nền tảng .NET và nền tảng Mono, được RemObjects Software cung cấp.
GNU Pascal Compiler (GPC) là trình biên dịch Pascal của Bộ biên dịch GNU (GCC). Trình biên dịch này được viết bằng C, thư viện chạy hầu hết viết bằng Pascal. Được phân phối miễn phí dưới giấy phép GNU, có thể chạy trên rất nhiều nền tảng và hệ điều hành khác nhau. Nó còn hỗ trợ chuẩn ngôn ngữ ANSI/ISO và tương thích với ngôn ngữ Borland/Turbo Pascal. Việc hỗ trợ cho Borland Delphi và một vài biến thể khác vẫn còn khá hạn chế.
Delphi là sản phẩm RAD (Rapid Application Development-phát triển ứng dụng tức thời) của Borland. Nó sử dụng Delphi, tiền thân từ Pascal, để tạo các chương trình ứng dụng cho nền Windows. Phiên bản mới nhất còn hỗ trợ cả việc biên dịch cho nền Microsoft .NET.
Kylix là một nhánh sản phẩm khác kế thừa từ Pascal của Borland, tiền thân từ Delphi, hỗ trợ hệ điều hành Linux và một thư viện đối tượng đã được bổ sung. Trình biên dịch và môi trường phát triển (IDE) có thể được cung cấp cho việc sử dụng phi lợi nhuận. Trình biên dịch (không bao gồm thư viện hay IDE) được cho là trở thành phần mềm Mã nguồn mở trong thời gian tới.
Dr. Pascal là một trình thông dịch chạy Standard Pascal. Bổ sung đáng kể nhất là chế độ "thực thi nhìn thấy được" cho phép hiển thị chương trình đang chạy cùng với các biến của nó, và cả quá trình kiểm tra lỗi khi thực thi (runtime error checking). Trình thông dịch này không tạo ra được file thực thi nhị phân riêng rẽ, chạy trên nền MS-DOS, hoặc cửa sổ DOS trong nền Windows, và cả trên dòng máy Macintosh cũ.
Virtual Pascal được Vitaly Miryanov sáng tạo như một trình biên dịch dành cho OS/2 tương thích với cú pháp của Borland Pascal. Sau đó nó được fPrint phát triển thành sản phẩm thương mại, hỗ trợ thêm Win32, và đến năm 2000 trở thành phần mềm miễn phí. Ngày nay nó có thể biên dịch cho Win32, OS/2 và cả Linux, và gần như hoàn toàn tương thích với Borland Pascal và Delphi.
IP Pascal ban đầu là ngôn ngữ Pascal dành cho Z80/CP/M, rồi được chuyển sang và viết lại cho Intel 80386/PC. IP Pascal có một thư viện khả chuyển (portability library). Ví dụ, một chương trình hiển thị văn bản viết bằng Pascal chuẩn từ thập niên 1970 có thể được biên dịch lại để làm việc trong một cửa sổ và thậm chí có cả việc tạo dựng đồ họa. IP Pascal hỗ trợ chuẩn ISO 7185 và nâng cấp ngôn ngữ một cách logic. Ví dụ, Pascal chuẩn hỗ trợ các xâu ký tự được "căn lề phải" và sau đó còn hỗ trợ xâu ký tự động. Mảng tĩnh của Pascal chuẩn được nâng thành mảng động nhưng vẫn hoàn toàn tương thích ngược với mảng tĩnh, v.v.
Pocket Studio là một tập nhỏ các trình biên dịch Pascal và RAD hướng tới Palm/MC68xxx với một số mở rộng hỗ trợ giao tiếp với API (Application Programming Interface-giao tiếp lập trình ứng dụng) của hệ điều hành Palm OS.
Lazarus là môi trường phát triển tức thời trực quan đa nền tảng. Lazarus sử dụng trình biên dịch Free Pascal.
Bạn có thể tìm thấy một danh sách lớn nữa tại Pascaland. Trang web này viết bằng tiếng Pháp, nhưng về cơ bản chỉ là một danh sách gồm các địa chỉ mạng (URL) tới các trình biên dịch, do vậy không ảnh hưởng nhiều. Bạn cũng có thể ghé thăm Pascal Central, một trang web chính về thông tin và hỗ trợ cho Pascal dành cho máy Mac, với rất nhiều bộ sưu tập về các bài báo, cộng với liên kết tới rất nhiều trình biên dịch và hướng dẫn khác.
[sửa]
Những phê phán trước đây
Mặc dù rất phổ biến (những năm 1980 và 1990 còn phổ biến hơn cả thời điểm bài viết này được thực hiện), các phiên bản Pascal trước đây đã bị phê phán rộng rãi vì không phù hợp cho việc sử dụng trong thực tế, ngoài việc dạy học. Brian Kernighan, người truyền bá C, đã đưa ra những phê phán lớn nhất về Pascal trong đầu những năm 1980, bằng tác phẩm Why Pascal Is Not My Favorite Programming Language (Tại sao Pascal không phải là ngôn ngữ lập trình tôi ưa thích). Mặt khác, rất nhiều nỗ lực phát triển lớn trong những năm 1980 (như chuyển sang cho Apple Lisa và Macintosh) lại phụ thuộc rất nhiều vào Pascal (tới mức mà giao tiếp C dành cho Mac OS phải giải quyết cả các kiểu dữ liệu của Pascal). Trong những thập niên sau đó, Pascal tiếp tục phát triển, và những vấn đề mà Kernighan đã đưa ra không còn phù hợp cho các phiên bản hiện tại nữa. Thật đáng tiếc là, như những điều mà Kernighan dự đoán trong bài viết, hầu hết các sự mở rộng để giải quyết các vấn đề trên làm các trình biên dịch không tương thích với nhau. Mặc dù vậy, trong thập niên vừa qua các biến thể dường như đã tập trung lại thành hai loại, theo chuẩn ISO hay theo chuẩn Borland, đều đã dần dần đi ra ngoài dự đoán của Kernighan.
Dựa trên kinh nghiệm với Pascal, Niklaus Wirth đã phát triển thêm hai ngôn ngữ lập trình nữa, Modula-2 và Oberon. Hai ngôn ngữ này mặc dù đã có nhiều cải tiến nhưng không thể theo kịp thành công thương mại của Pascal.
Các câu lệnh
SYSTEM
write(): in ra màn hình liền sau kí tự cuối.
writeln(): in xuống một hàng.
read(): đọc biến.
readln(' '): đọc biến và xuống dòng
Unit CRT
clrscr : xoá toàn bộ màn hình.
textcolor() : in chữ màu.
textbackground() : tô màu cho màn hình.
sound() : tạo âm thanh.
delay() : làm trễ.
nosound : tắt âm thanh.
windows(x1,y1,x2,y2) : thay đổi cửa sổ màn hình.
highvideo : tăng độ sáng màn hình.
lowvideo : giảm độ sáng màn hình.
normvideo : màn hình trở lại chế độ sáng bình thường.
gotoxy(x,y) : đưa con trỏ đến vị trí x,y trên màn hình.
deline : xoá một dòng đang chứa con trỏ.
clreol : xoá các ký tự từ vị trí con trỏ đến cuối mà không di chuyển vị trí con trỏ.
insline : chèn thêm một dòng vào vị trí của con trỏ hiện hành.
exit : thoát khỏi chương trình.
textmode(co40) : tạo kiểu chữ lớn.
randomize : khởi tạo chế độ ngẫu nhiên.
move(var 1,var 2,n) : sao chép trong bộ nhớ một khối n byte từ biến Var 1 sang biến Var 2.
halt : Ngưng thực hiện chương trình và trở về hệ điều hành.
Abs(n) : Giá trị tuyệt đối.
Arctan(x) : cho kết quả là hàm Arctan(x).
Cos(x) : cho kết quả là cos(x).
Exp(x) : hàm số mũ cơ số tự nhiên ex.
Frac(x) : cho kết quả là phần thập phân của số x.
int(x) : cho kết quả là phần nguyên của số thập phân x.
ln(x) : Hàm logarit cơ số tự nhiên.
sin(x) : cho kết quả là sin(x), với x tính bằng Radian.
Sqr(x) : bình phương của số x.
Sqrt(x) : cho kết quả là căn bậc hai của x.
pred(x) : cho kết quả là số nguyên đứng trước số nguyên x.
Suuc(x) : cho kết quả là số nguyên đứng sau số nguyên x.
odd(x) : cho kết quả là true nếu x số lẻ, ngược lại là false.
chr(x) : trả về một kí tự có vị trí là x trong bảng mã ASCII.
Ord(x) : trả về một số thứ tự của kí tự x.
round(n) : Làm tròn số thực n.
Random(n) : cho một số ngẫu nhiên trong phạm vi n.
upcase(n) : đổi kí tự chữ thường sang chữ hoa.
assign(f,'<đường dẫn><tên file>.<phần mở rộng>') : tạo file.
rewrite(f) : ghi file lên đĩa.
append(f) : chèn thêm dữ liệu cho file.
close(f) : tắt file.
erase(f) : xóa.
rename() : chết.
length(s) : cho kết quả là chiều dài của xâu.
copy(s,a,b) : copy xâu.
insert(,s,a) : chèn thêm cho xâu.
delete(s:string,a:integer,b:integer) : xóa b ký tự từ vị trí a trong xâu s
Unit GRAPH
initgraph(a,b,) : khởi tạo chế độ đồ hoạ.
closegraph; : tắt chế độ đồ hoạ.
setcolor(x) : chọn màu.
outtext() : in ra màn hình tại góc trên bên trái.
outtextxy(x,y,); : in ra màn hình tại toạ độ màn hình.
rectangle(x1,y1,x2,y2): vẽ hình chữ nhật.
line(x1,y1,x2,y2) : vẽ đoạn thẳng.
moveto(x,y) : lấy điểm xuất phát để vẽ đoạn thẳng.
lineto(x,y) : lấy điểm kết thúc để vẽ doạn thảng.
circle(x,y,n) : vẽ đường tròn.
ellipse(x,y,o1,o2,a,b): vẽ hình elip.
floodfill(a,b,n) : tô màu cho hình.
getfillpattern(x) : tạo biến để tô.
setfillpattern(x,a) : chọn màu để tô.
cleardevice; : xoá toàn bộ màn hình.
settextstyle(n,a,b) : chọn kiểu chữ.
bar(a,b,c,d) : vẽ thanh.
bar3d(a,b,c,d,n,h) : vẽ hộp.
arc(a,b,c,d,e) : vẽ cung tròn.
setbkcolor(n) : tô màu nền.
putpixel(x,y,n) : vẽ điểm.
setfillstyle(a,b) : tạo nền cho màn hình.
setlinestyle(a,b,c) : chọn kiểu đoạn thẳng.
getmem(p,1) : chuyển biến để nhớ dữ liệu.
getimage(x1,y1,x2,y2,p): nhớ các hình vẽ trên vùng cửa sổ xác định.
putimage(x,y,p,n) : in ra màn hình các hình vừa nhớ. ...
Unit DOS
getdate(y,m,d,t): lấy các dữ liệu về ngày trong bộ nhớ.
gettime(h,m,s,hund): lấy các dữ liệu về giờ trong bộ nhớ.
findnext(x): tìm kiếm tiếp.
Findfirst($20,dirinfo): tìm kiếm. ...
:*99: :lol!: :afro: :flower: :study: :geek: :joker:
Similar topics
» Ebook Lập trình PASCAL căn bản (tiếng Việt)
» Các tài liệu học lập trình.
» Ngôn ngữ C# với kiến trúc .Net
» Tải Pascal 7.0
» Giáo trình JavaScript (tiếng Việt)
» Các tài liệu học lập trình.
» Ngôn ngữ C# với kiến trúc .Net
» Tải Pascal 7.0
» Giáo trình JavaScript (tiếng Việt)
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum