1. Ngôn ngữ lập trình Pascal là gì?
1.1 Sự ra đời và phát triển của Pascal
- Pascal là ngôn ngữ lập trình được đặt theo tên của nhà toán học và triết gia người Pháp Blaise Pascal. Nó được thiết kế bởi Niklaus Wirth vào đầu những năm 1970 nhằm tạo ra một ngôn ngữ đơn giản, hiệu quả và dễ học, đặc biệt là trong giáo dục lập trình.
- Nguồn gốc và Mục tiêu
+ ALGOL 60: Pascal được xây dựng dựa trên ngôn ngữ ALGOL 60, một ngôn ngữ lập trình cấu trúc phổ biến trong thời kỳ đó. Pascal đã kế thừa nhiều đặc điểm cấu trúc và cú pháp từ ALGOL 60.
+ Giảng dạy Lập trình: Mục đích chính của Wirth khi phát triển Pascal là tạo ra một công cụ hữu ích cho việc giảng dạy các nguyên tắc lập trình cấu trúc. Pascal giúp sinh viên tập trung vào việc thiết kế thuật toán và cấu trúc dữ liệu mà không bị phân tâm bởi các chi tiết phức tạp của ngôn ngữ.
+ Tính Khả Di động: Pascal được thiết kế để đảm bảo tính khả di động cao, cho phép các chương trình viết bằng Pascal có thể biên dịch và chạy trên nhiều hệ thống máy tính khác nhau mà không cần thay đổi nhiều.
1.2 Các đặc điểm nổi bật của Pascal
- Cấu trúc: Pascal là một ngôn ngữ lập trình cấu trúc, khuyến khích việc sử dụng các câu lệnh điều khiển như if-then-else, for, và while để xây dựng các chương trình rõ ràng và dễ đọc.
- Kiểu Dữ liệu: Pascal hỗ trợ nhiều kiểu dữ liệu phong phú, bao gồm số nguyên, số thực, ký tự, chuỗi và các kiểu dữ liệu tùy chỉnh do người dùng định nghĩa.
- Các Cấu trúc Dữ liệu: Pascal cung cấp các cấu trúc dữ liệu mạnh mẽ như mảng, bản ghi và tập hợp, cho phép lập trình viên tạo ra các ứng dụng phức tạp.
- Con Trỏ: Pascal hỗ trợ con trỏ, công cụ hữu ích trong việc quản lý bộ nhớ động và xây dựng các cấu trúc dữ liệu linh hoạt.
- Đệ quy: Pascal hỗ trợ kỹ thuật đệ quy, một phương pháp lập trình hiệu quả để giải quyết các bài toán lặp đi lặp lại.
1.3 Ưu điểm và nhược điểm của Pascal
+ Cấu trúc rõ ràng: Pascal có cú pháp rõ ràng và dễ hiểu, giúp việc viết và duy trì mã nguồn trở nên đơn giản hơn, đặc biệt cho người mới bắt đầu.
+ Kiểm tra lỗi hiệu quả: Pascal sở hữu hệ thống kiểm tra lỗi nghiêm ngặt, hỗ trợ phát hiện và sửa lỗi từ sớm trong quá trình phát triển.
+ Khuyến khích lập trình cấu trúc: Pascal thúc đẩy việc lập trình theo cấu trúc, giúp tổ chức mã nguồn một cách hợp lý và dễ quản lý.
+ Dễ tiếp cận: Với cú pháp đơn giản và cấu trúc rõ ràng, Pascal là sự lựa chọn lý tưởng cho việc học lập trình cơ bản.
+ Cung cấp nhiều kiểu dữ liệu: Pascal hỗ trợ đa dạng kiểu dữ liệu như mảng, bản ghi, file và tập hợp, cho phép lập trình viên xây dựng các cấu trúc dữ liệu phức tạp.
- Những nhược điểm của Pascal
+ Hiệu suất: Pascal thường có hiệu suất thấp hơn so với các ngôn ngữ lập trình cấp thấp như C.
+ Thiếu thư viện phong phú: Pascal không có thư viện đa dạng như các ngôn ngữ hiện đại như Python và Java.
+ Sử dụng ít trong phát triển thương mại: Pascal hiện ít được áp dụng trong các dự án phần mềm thương mại quy mô lớn.
+ Khả năng mở rộng hạn chế: Pascal có khả năng mở rộng kém hơn so với các ngôn ngữ lập trình hướng đối tượng hiện đại.
1.4 Ứng dụng của Pascal trong thực tiễn
- Giáo dục:
+ Dạy lập trình: Như đã đề cập, Pascal là công cụ lý tưởng để dạy lập trình.
+ Phát triển phần mềm hỗ trợ giảng dạy: Bao gồm các phần mềm mô phỏng, bài tập thực hành, và trò chơi giáo dục...
- Khoa học:
+ Mô phỏng hệ thống: Sử dụng để mô phỏng các hệ thống trong vật lý, hóa học, sinh học và nhiều lĩnh vực khác.
+ Xử lý dữ liệu khoa học: Phục vụ việc xử lý dữ liệu trong các nghiên cứu khoa học, thống kê và phân tích số liệu.
- Kỹ thuật:
+ Điều khiển thiết bị: Áp dụng trong việc điều khiển các thiết bị cơ bản như cảm biến và động cơ.
+ Xử lý tín hiệu: Xử lý các tín hiệu âm thanh và hình ảnh.
- Phát triển phần mềm:
+ Phần mềm nhỏ gọn: Phát triển các ứng dụng tính toán và quản lý dữ liệu đơn giản.
+ Thư viện hỗ trợ: Tạo ra các thư viện để hỗ trợ các ngôn ngữ lập trình khác.
2. Lý thuyết về lập trình Pascal
2.1 Cấu trúc cơ bản của một chương trình Pascal

Trong đó:
+ PROGRAM name: khai báo tên chương trình.
+ CONST: khai báo các hằng số.
+ TYPE: khai báo các kiểu dữ liệu.
+ VAR: khai báo các biến.
+ BEGIN ... END: phần nội dung chính của chương trình.
2.2 Các kiểu dữ liệu trong Pascal
- Kiểu logic
Kiểu dữ liệu logic chỉ bao gồm một loại là Boolean, với hai giá trị trả về là True và False. Kiểu này còn hỗ trợ các phép toán như AND, OR, XOR, NOT và các phép so sánh thông thường trong toán học.
- Kiểu số nguyên
Loại dữ liệu số nguyên là một trong những kiểu dữ liệu tiết kiệm bộ nhớ, bao gồm các loại như Integer, Longint, Short Int, Byte, Word, Smallint, Longword, Int64 và Cardinal.
- Kiểu số thực
Kiểu dữ liệu số thực trong Pascal thường có dung lượng lớn, dao động từ 4 byte đến 10 byte.
- Kiểu chữ
Trong lập trình Pascal, bên cạnh các kiểu dữ liệu số, còn có kiểu dữ liệu chữ với dung lượng nhỏ hơn nhiều.
- Kiểu liệt kê
Kiểu dữ liệu liệt kê trong Pascal thường được sử dụng để tạo danh sách trong chương trình, hỗ trợ các toán tử gán và toán tử quan hệ. Khi sử dụng kiểu này, cần khai báo theo định dạng:
Type = (, , , , …)
- Kiểu miền con
Kiểu dữ liệu này thường được dùng để xác định các biến có giá trị nằm trong một khoảng nhất định.
- Kiểu hằng số
Pascal không chỉ hỗ trợ các kiểu dữ liệu có thể thay đổi mà còn cung cấp các hằng số để việc đọc và sửa đổi dễ dàng hơn. Lưu ý rằng các hằng số phải được khai báo trước các biến. Các hằng số có thể là kiểu số, chuỗi, logic hoặc ký tự.
2.3 Các câu lệnh điều khiển trong Pascal
- write() hiển thị thông tin ngay sau ký tự cuối và ghi vào file.
2.4 Các hàm và thủ tục trong Pascal
- Thủ tục là một nhóm lệnh thực thi mà không trả về giá trị qua tên của thủ tục đó.
Cú pháp[ ]
Procedure <tên_thủ_tục>(<danh_sách_tham_số>);
<khai_báo>
Begin
<danh_sách_lệnh>
End;
Trong đó:
- <danh_sách_tham_số> có thể tùy chọn có hoặc không có.
- <phần khai báo> dùng để định nghĩa các hằng, kiểu dữ liệu, biến và cũng có thể khai báo các chương trình con khác được sử dụng trong thủ tục. Lưu ý: các hằng, kiểu dữ liệu, biến này chỉ có thể sử dụng trong thủ tục đó.
- <danh sách lệnh> sẽ được thực thi khi thủ tục được gọi.
- Hàm trong Pascal là tập hợp các lệnh thực thi một nhiệm vụ cụ thể. Hàm luôn trả về một giá trị thuộc kiểu dữ liệu đã định, và giá trị đó được gán cho tên hàm.
Cú pháp[ ]
Function <tên_hàm>(<danh_sách_tham_số>):<kiểu_dữ_liệu>;
<phần_khai_báo>
Begin
<danh_sách_lệnh>
end;
Trong đó:
- <danh_sách_tham_số> có thể là tùy chọn.
- <phần_khai_báo> dùng để định nghĩa các hằng, kiểu dữ liệu, biến và có thể khai báo các chương trình con khác. Lưu ý các hằng, kiểu dữ liệu, biến này chỉ áp dụng trong hàm.
- <kiểu_dữ_liệu> xác định kiểu dữ liệu của giá trị mà hàm trả về.
- <danh_sách_lệnh> chứa các lệnh sẽ được thực thi khi hàm được gọi.
2.5 Mảng và cấu trúc dữ liệu trong Pascal
- Mảng trong Pascal là tập hợp các phần tử đồng kiểu, được dùng để lưu trữ dữ liệu hoặc các biến cùng loại. Nó rất hữu ích khi cần lưu trữ một tập hợp các biến cùng kiểu.
Thay vì khai báo từng biến riêng biệt như number1, number2, ..., number100, bạn có thể dùng một mảng tên là numbers và truy cập các biến bằng chỉ số [1], [2], ..., [100]. Mảng được truy cập thông qua chỉ số.
Mảng trong Pascal chứa các phần tử liên tiếp trong bộ nhớ. Phần tử đầu tiên có địa chỉ thấp nhất, và phần tử cuối có địa chỉ cao nhất.
T = ARRAY[KCD] OF KPT
Khi đó, khai báo một biến A với kiểu T có thể được thực hiện như sau:
VAR
A: T ;
Hoặc bạn có thể khai báo biến A trực tiếp với kiểu mảng trong phần khai báo biến, nếu không cần định nghĩa trong phần TYPE:
VAR
A = ARRAY [Kiểu_chỉ_số] OF kiểu_phần_tử.
3. Bài tập thực hành Pascal
3.1 Bài tập cơ bản
- Mục tiêu: Làm quen với cú pháp, cấu trúc chương trình, các kiểu dữ liệu cơ bản như số nguyên, số thực, ký tự, chuỗi, cùng các câu lệnh điều khiển như if-then-else, for, while, và các phép toán cơ bản.
- Ví dụ bài tập:
+ Tạo chương trình nhập hai số nguyên, tính và hiển thị tổng, hiệu, tích, thương.
+ Xây dựng chương trình kiểm tra một số nguyên có phải là số chẵn không.
+ Viết chương trình in bảng cửu chương từ 1 đến 9.
+ Tạo chương trình tìm giá trị lớn nhất và nhỏ nhất trong một dãy số.
Lưu ý: Bắt đầu với các bài tập cơ bản để làm quen với ngôn ngữ và sau đó từ từ thử các bài tập khó hơn.
3.2 Bài tập nâng cao
- Mục tiêu: Áp dụng kiến thức đã học để giải quyết các bài toán phức tạp hơn, đồng thời rèn luyện khả năng tư duy thuật toán.
Ví dụ bài tập:
+ Tạo chương trình sắp xếp một dãy số theo thứ tự tăng dần hoặc giảm dần bằng cách sử dụng các thuật toán như sắp xếp nổi bọt, sắp xếp chọn, hoặc sắp xếp chèn.
+ Xây dựng chương trình để tìm ước chung lớn nhất và bội chung nhỏ nhất của hai số nguyên.
+ Viết chương trình giải phương trình bậc hai.
+ Tạo chương trình mô phỏng các tình huống thực tế như tính toán lãi suất ngân hàng, tính điểm trung bình, hoặc quản lý danh sách sinh viên.
3.3 Dự án nhỏ với Pascal
- Mục tiêu: Sử dụng toàn bộ kiến thức đã học để phát triển một ứng dụng hoàn chỉnh, giải quyết vấn đề thực tiễn.
- Ý tưởng cho dự án:
+ Hệ thống quản lý thư viện: quản lý thông tin sách, xử lý mượn và trả sách, và tìm kiếm sách.
+ Quản lý điểm của sinh viên: nhập điểm, tính điểm trung bình và phân loại học lực.
+ Game cơ bản: trò chơi đoán số, cờ caro, hoặc cờ vua phiên bản đơn giản.
+ Phát triển chương trình vẽ đồ thị của hàm số.
Lưu ý: Chọn dự án phù hợp với kỹ năng của bạn và có ứng dụng thực tiễn cao.
3.4 Tài liệu tham khảo
- Sách giáo khoa: Tham khảo các sách giáo khoa về lập trình Pascal từ các tác giả trong nước và quốc tế.
- Trang web: Tìm kiếm các bài giảng, bài tập, và ví dụ trên các trang web như:
+ Tìm các kênh học lập trình Pascal trên YouTube.
+ Tham gia các cộng đồng lập trình