Giáo Trình Bài Tập Pascal (Đại Học Khoa Học Huế)
Tổng quan về giáo trình
Giáo trình Bài tập Pascal do tập thể giảng viên Khoa Công nghệ Thông tin – Trường Đại học Khoa học Huế biên soạn vào tháng 07 năm 2004. Tài liệu được thiết kế nhằm phục vụ trực tiếp cho học phần Tin học Đại cương thuộc chương trình đào tạo của Bộ Giáo dục và Đào tạo, áp dụng cho sinh viên các khối ngành Khoa học Tự nhiên, đặc biệt là chương trình đào tạo Cử nhân Công nghệ Thông tin.
Mục tiêu học tập của giáo trình tập trung vào việc trang bị cho người học kiến thức cơ sở về ngôn ngữ lập trình bậc cao, rèn luyện kỹ năng viết mã nguồn có cấu trúc, hình thành tư duy phân tích thuật toán và phương pháp giải quyết bài toán trên máy tính. Đây là tài liệu đóng vai trò tạo nền tảng kỹ thuật cho các học phần tiếp theo trong chương trình đào tạo ngành Công nghệ Thông tin như Cấu trúc dữ liệu và Giải thuật hay Kỹ thuật lập trình.
Về cấu trúc, toàn bộ nội dung giáo trình được chia thành 10 chương chuyên đề. Mỗi chương tuân thủ bố cục sư phạm gồm ba phần tuần tự:
- Tóm tắt lý thuyết: Trình bày ngắn gọn cú pháp, quy tắc và nguyên lý hoạt động của các thành phần ngôn ngữ.
- Bài tập mẫu: Đưa ra các bài toán cụ thể; đối với các bài tập có thuật toán phức tạp, tài liệu nêu rõ ý tưởng toán học và giải thuật trước khi cung cấp mã nguồn cài đặt bằng ngôn ngữ Pascal.
- Bài tập tự giải: Cung cấp hệ thống câu hỏi, bài toán kèm gợi ý hướng dẫn để người học tự kiểm tra và củng cố kiến thức.
Điểm đặc thù của giáo trình là việc kết hợp chặt chẽ giữa các bài tập lập trình căn bản theo khung chương trình chuẩn với các bài toán mở rộng dựa trên thuật toán kinh điển và cấu trúc dữ liệu nền tảng.
Nội dung kiến thức cốt lõi
Các chương/chủ đề chính
Tài liệu bao quát hệ thống kiến thức từ các khái niệm cơ sở đến các cấu trúc dữ liệu và giải thuật trong môi trường Turbo Pascal:
- Chương 1: Các thành phần cơ bản của ngôn ngữ lập trình Pascal: Giới thiệu lịch sử ngôn ngữ do Niklaus Wirth đề xuất năm 1970; cấu hình môi trường Turbo Pascal gồm các tệp thực thi và thư viện (
TURBO.EXE, TURBO.TPL, GRAPH.TPU, các tệp .BGI, .CHR); cấu trúc một chương trình Pascal (PROGRAM, USES, CONST, VAR, BEGIN...END); hệ thống phím tắt chức năng (F2, F3, F8, F9, Ctrl-F9, Alt-F5); các quy ước cú pháp về từ khóa, định danh, dấu chấm phẩy và cách đặt lời chú thích.
- Chương 2: Các kiểu dữ liệu cơ bản, khai báo hằng, biến, kiểu, biểu thức và câu lệnh: Phân loại và định nghĩa các kiểu dữ liệu chuẩn gồm kiểu logic (
BOOLEAN), kiểu số nguyên (Shortint, Byte, Integer, Word, LongInt), kiểu số thực (Single, Real, Double, Extended, Comp kết hợp chỉ thị biên dịch {$N+}), kiểu ký tự (CHAR); các phép toán số học, phép toán xử lý bit (SHL, SHR, AND, OR, XOR, NOT); thứ tự ưu tiên trong biểu thức; cú pháp định nghĩa kiểu (TYPE); thủ tục nhập/xuất có quy cách (WRITE, WRITELN, READLN) và các thủ tục điều khiển màn hình văn bản thuộc thư viện CRT (CLRSCR, GOTOXY, TEXTCOLOR, TEXTBACKGROUND).
- Chương 3: Các câu lệnh có cấu trúc: Cấu trúc rẽ nhánh điều kiện (
IF...THEN...ELSE, CASE...OF); cấu trúc lặp xác định (FOR...TO, FOR...DOWNTO) và lặp không xác định (WHILE...DO, REPEAT...UNTIL). Minh họa thuật toán giải phương trình bậc nhất, phương trình bậc hai, thuật toán Euclid tìm ước số chung lớn nhất (USCLN), tính xấp xỉ số Pi, kiểm tra số nguyên tố, số hoàn thiện và giải các bài toán số học dân gian (bài toán gà thỏ, trăm trâu trăm cỏ).
- Chương 4: Chương trình con: Thủ tục và hàm: Khái niệm hàm (
FUNCTION) và thủ tục (PROCEDURE); phân biệt cơ chế truyền tham số theo giá trị (tham trị) và theo biến (tham biến có từ khóa VAR); phạm vi hoạt động của biến toàn cục và biến địa phương; nguyên lý giải thuật đệ quy (trường hợp suy biến và trường hợp chung); giải thuật quay lui (Backtracking) qua bài toán liệt kê chuỗi nhị phân; cấu trúc tạo thư viện tự định nghĩa (UNIT) thông qua hai phần INTERFACE và IMPLEMENTATION (ví dụ Unit MYTOOL, Unit SOHOC).
- Chương 5: Dữ liệu kiểu mảng (Array): Khai báo mảng một chiều và mảng hai chiều (ma trận); truy xuất phần tử; các thuật toán xử lý danh sách gồm tìm kiếm tuần tự, tìm kiếm nhị phân, sắp xếp đổi chỗ trực tiếp, tính toán ma trận chuyển vị, phương pháp chia đôi giải phương trình đa thức $f(x)=0$, thuật toán điền ma phương bậc lẻ và giải thuật tìm dãy con liên tiếp có tổng lớn nhất.
Bảng tổng hợp các kiểu dữ liệu cơ bản trong giáo trình
| Tên kiểu dữ liệu |
Nhóm kiểu |
Phạm vi giá trị |
Dung lượng bộ nhớ |
Phép toán / Hàm tiêu biểu |
Boolean |
Logic |
TRUE, FALSE (FALSE < TRUE) |
1 byte |
AND, OR, XOR, NOT |
Shortint |
Số nguyên |
-128 đến 127 |
1 byte |
+, -, *, /, DIV, MOD, SHL, SHR |
Byte |
Số nguyên |
0 đến 255 |
1 byte |
+, -, *, /, DIV, MOD, SHL, SHR |
Integer |
Số nguyên |
-32.768 đến 32.767 |
2 byte |
+, -, *, /, DIV, MOD, SHL, SHR |
Word |
Số nguyên |
0 đến 65.535 |
2 byte |
+, -, *, /, DIV, MOD, SHL, SHR |
LongInt |
Số nguyên |
-2.147.483.648 đến 2.147.483.647 |
4 byte |
+, -, *, /, DIV, MOD, SHL, SHR |
Real |
Số thực |
$2.9 \times 10^{-39}$ đến $1.7 \times 10^{38}$ |
6 byte |
SQR, SQRT, ABS, SIN, COS, LN, EXP |
Single / Double |
Số thực |
Mở rộng (yêu cầu chỉ thị {$N+}) |
4 / 8 byte |
Các phép toán số học thực |
Char |
Ký tự |
256 ký tự bảng mã ASCII |
1 byte |
ORD, CHR, UPCASE, PRED, SUCC |
Kiến thức nền tảng được xây dựng
Giáo trình xây dựng các nguyên lý cốt lõi của lập trình cấu trúc:
- Nguyên lý định kiểu dữ liệu tĩnh: Mọi định danh biến, hằng đều phải được gán kiểu dữ liệu cụ thể nhằm xác định chính xác kích thước bộ nhớ và tập hợp phép toán hợp lệ.
- Nguyên lý phân rã chức năng (Top-down design): Chia nhỏ chương trình lớn thành các thủ tục và hàm độc lập, kiểm soát luồng dữ liệu thông qua cơ chế truyền tham số tường minh (tham trị, tham biến).
- Mô hình lặp và đệ quy: Cung cấp cơ sở lý thuyết về việc chuyển đổi giữa các cấu trúc lặp kiểm tra trước (
WHILE), kiểm tra sau (REPEAT) và đệ quy phân rã bài toán lớn về các bài toán cơ sở.
Kỹ năng phát triển
- Kỹ năng kỹ thuật: Cài đặt mã nguồn đúng cú pháp trên môi trường Turbo Pascal 7.0; quản lý tập tin dự án; dịch mã nguồn (
F9); kiểm thử và gỡ lỗi từng bước (F8); sử dụng các phím tắt và thao tác khối văn bản.
- Kỹ năng phân tích giải thuật: Chuyển đổi công thức toán học và điều kiện logic sang thuật toán máy tính (ví dụ: công thức tính khoảng cách điểm đến đường thẳng, tìm nghiệm xấp xỉ bằng chia đôi khoảng).
- Năng lực thiết kế mô-đun: Đóng gói các hàm và thủ tục toán học/hệ thống vào các tệp Unit để tái sử dụng trong nhiều chương trình khác nhau.
Phương pháp giảng dạy và học tập
Giáo trình áp dụng phương pháp sư phạm tiếp cận theo vấn đề kết hợp thực hành cài đặt trực tiếp. Cụ thể:
[Tóm tắt Lý thuyết & Cú pháp]
[Phân tích Ý tưởng Toán học & Thuật toán]
[Minh họa Mã nguồn Cài đặt Mẫu]
[Thực hành Bài tập Tự giải (Kèm gợi ý)]
Phương pháp tiếp cận bài toán
Đối với mỗi bài toán phức tạp, tài liệu không đưa ngay mã lệnh mà tiến hành phân tích ý tưởng toán học trước:
- Trong bài toán hoán vị hai số (Bài tập 2.3), giáo trình trình bày cả hai phương án: sử dụng biến trung gian và sử dụng biến đổi đại số không cần biến trung gian ($a := a + b; b := a - b; a := a - b$).
- Trong bài toán tính nghiệm của phương trình $f(x) = 0$ (Bài tập 5.8), tài liệu nêu rõ nguyên lý thu hẹp đoạn $[a, b]$ dựa trên tính chất đổi dấu của hàm liên tục trước khi cài đặt đệ quy hàm
TimNghiem.
- Trong bài toán sinh ma phương cấp lẻ $N \times N$ (Bài tập 5.9), giáo trình quy định quy tắc dịch chuyển tọa độ theo hướng đông bắc và các điều kiện biên khi vượt khỏi bảng.
Hệ thống bài tập và thực hành
Hệ thống bài tập trong giáo trình được phân cấp rõ ràng:
- Bài tập kiểm tra cú pháp và điều khiển màn hình: Sử dụng thư viện
CRT để định vị con trỏ (GOTOXY), thiết lập màu chữ (TEXTCOLOR), vẽ khung giao diện bằng bảng mã ký tự ASCII mở rộng từ mã #179 đến #218 (Bài tập 4.5).
- Bài tập tính toán số học và giải thuật số: Đếm ước số, phân tích số nguyên ra thừa số nguyên tố (Bài tập 3.25, 4.6), tính dãy số Fibonacci (Bài tập 4.15), tính tổ hợp $C_n^k$ theo công thức truy hồi (Bài tập 4.13), tính hàm Ackermann (Bài tập 4.14).
- Bài tập xử lý cấu trúc dữ liệu mảng: Thao tác trên mảng số nguyên, mảng hai chiều, tính toán các phần tử cực trị trên từng dòng của ma trận, tìm giao của hai tập hợp biểu diễn bằng mảng (Bài tập 5.10).
Hướng dẫn tự học và đánh giá
Giáo trình cung cấp các bài tập tự giải đi kèm phần hướng dẫn (Gợi ý) về mặt thuật toán, giúp người học định hướng cách giải quyết trước khi tự viết chương trình:
- Người học chủ động kiểm tra kết quả bằng cách nhập mã nguồn vào môi trường Turbo Pascal, dịch tệp và quan sát kết quả trên màn hình qua tổ hợp phím
Alt-F5.
- Tài liệu đưa ra các tình huống đối chiếu mã nguồn (ví dụ Bài tập 2.8 và 2.9 về tính dung lượng màn hình đồ họa $640 \times 480$) nhằm giúp người học tự phân tích nguyên nhân sai lệch do tràn số giữa kiểu
Integer và Word/LongInt.
Điểm nổi bật và cập nhật
Tích hợp môi trường Turbo Pascal 7.0
Tài liệu được xây dựng dựa trên tiêu chuẩn của trình biên dịch Turbo Pascal 7.0, ghi nhận các đặc điểm kỹ thuật:
- Hỗ trợ hiển thị phân biệt màu sắc giữa từ khóa hệ thống và mã người dùng.
- Tích hợp các chỉ thị trình biên dịch như
{$N+} để bật chế độ đồng xử lý số thực khi sử dụng các kiểu dữ liệu dấu phẩy động độ chính xác cao (Single, Double, Extended).
- Hướng dẫn chi tiết hệ thống tệp môi trường gồm thư viện đơn vị chuẩn
TURBO.TPL, trình điều khiển màn hình đồ họa dạng tệp *.BGI và các tệp phông chữ *.CHR.
Hệ thống thuật toán khoa học máy tính chuẩn mực
Giáo trình tích hợp nhiều thuật toán cơ bản phục vụ trực tiếp cho ngành Khoa học Máy tính:
- Thuật toán tìm kiếm: Triển khai thuật toán tìm kiếm tuần tự và tìm kiếm nhị phân trên mảng đã sắp xếp ($O(\log N)$).
- Thuật toán sắp xếp: Cài đặt phương pháp đổi chỗ trực tiếp thông qua hai vòng lặp lồng nhau.
- Mô hình quay lui: Trình bày cấu trúc tổng quát của thủ tục đệ quy quay lui
THU(k) và áp dụng trực tiếp cho bài toán sinh dãy nhị phân độ dài $n$.
Procedure THU(k:Integer);
Var j:Integer;
Begin
For j:=1 To nk Do
If <j chấp nhận được> Then
Begin
<Xác định xk theo j>;
If k=n Then <Ghi nhận một bộ giá trị>
Else THU(k+1); {Quay lui}
End;
End;
Minh họa tính toán thực tế trong kiến trúc máy tính
Giáo trình đưa vào các bài toán liên hệ trực tiếp với cơ chế lưu trữ và quản lý tài nguyên của phần cứng máy tính:
- Tính toán dung lượng bộ nhớ cần thiết để lưu trữ một màn hình đồ họa độ phân giải $640 \times 480$ pixel với chuẩn 1 byte/điểm ảnh (Bài tập 2.8).
- Minh họa sự khác biệt giữa các kiểu dữ liệu nguyên (
Integer giới hạn 32.767, Word giới hạn 65.535, LongInt giới hạn hơn 2 tỷ) để giải thích lỗi tràn số khi thực hiện phép nhân $640 \times 480 = 307.200$.
- Ứng dụng các hàm xử lý bit (
SHL, SHR) để tối ưu hóa các phép toán nhân, chia với lũy thừa của 2 ($a \text{ SHL } n \Leftrightarrow a \times 2^n$; $a \text{ SHR } n \Leftrightarrow a \text{ DIV } 2^n$).
Đối tượng sử dụng giáo trình
Giáo trình được biên soạn phục vụ các nhóm đối tượng cụ thể trong hệ thống giáo dục đại học:
Sinh viên đại học
- Đối tượng chính: Sinh viên năm thứ nhất thuộc khối ngành Khoa học Tự nhiên và sinh viên theo học chương trình Cử nhân Công nghệ Thông tin.
- Học phần áp dụng: Tin học Đại cương, Cơ sở Lập trình.
- Yêu cầu kiến thức tiên quyết (Prerequisites): Người học cần nắm vững kiến thức toán học phổ thông, bao gồm đại số cơ bản, lượng giác, hình học tọa độ phẳng và các khái niệm cơ bản về giải tích (đạo hàm, giới hạn hàm số).
Giảng viên chuyên ngành
- Sử dụng làm tài liệu giảng dạy thực hành tại phòng máy cho học phần Tin học Đại cương.
- Khai thác hệ thống bài tập mẫu và bài tập tự giải để xây dựng đề thi, bài kiểm tra đánh giá năng lực lập trình của sinh viên.
Người tự học và nghiên cứu cơ bản
- Cung cấp tài liệu tham khảo cho học sinh, sinh viên bước đầu tiếp cận kỹ thuật lập trình máy tính.
- Phù hợp cho người học muốn nắm bắt phương pháp xây dựng giải thuật có cấu trúc thông qua ngôn ngữ có tính chuẩn mực cao như Pascal trước khi chuyển tiếp sang các ngôn ngữ khác như C/C++ hay Java.
Câu hỏi thường gặp
1. Giáo trình này phù hợp với đối tượng người học nào?
Giáo trình được biên soạn dành cho học sinh, sinh viên bước đầu học lập trình, đặc biệt là sinh viên năm thứ nhất khối ngành Khoa học Tự nhiên và Cử nhân Công nghệ Thông tin theo học học phần Tin học Đại cương.
2. Cần chuẩn bị những kiến thức nền tảng nào trước khi học?
Người học cần có kiến thức toán học phổ thông vững vàng (đại số, lượng giác, số học, hình học giải tích) để hiểu và chuyển đổi các công thức toán học thành giải thuật trong chương trình.
3. Giáo trình này có điểm gì khác biệt về mặt cấu trúc so với các tài liệu lý thuyết khác?
Tài liệu tập trung trọng tâm vào hệ thống bài tập thực hành. Mọi chương đều có tóm tắt lý thuyết ngắn gọn, bài tập mẫu có phân tích ý tưởng giải thuật chi tiết trước khi cài đặt mã nguồn, và phần bài tập tự giải có định hướng gợi ý.
4. Phương pháp tự học giáo trình này như thế nào để đạt hiệu quả cao?
Người học nên đọc phần tóm tắt lý thuyết để nắm vững cú pháp, tự gõ lại và chạy thử các bài tập mẫu trên môi trường Turbo Pascal, sau đó tự giải các bài tập trong phần bài tập tự giải mà không xem trước gợi ý.
5. Giáo trình cung cấp những cấu trúc mã nguồn nâng cao nào có thể tái sử dụng?
Giáo trình hướng dẫn cách xây dựng các mô-đun thư viện độc lập dạng UNIT (như Unit MYTOOL hoặc Unit SOHOC.PAS ở Chương 4), cho phép đóng gói các hàm số học, hình học và thuật toán kiểm tra để tái sử dụng trong các chương trình ứng dụng khác.
Kết luận
Giáo trình Bài tập Pascal của Khoa Công nghệ Thông tin – Trường Đại học Khoa học Huế là tài liệu học tập chuẩn hóa cho học phần Tin học Đại cương. Giá trị cốt lõi của giáo trình thể hiện qua cách tiếp cận giải thuật rõ ràng, hệ thống bài tập phong phú được phân cấp từ cơ bản đến nâng cao, bám sát các khái niệm nền tảng của khoa học máy tính.
Lộ trình học tập đề xuất:
- Giai đoạn 1 (Chương 1 - 2): Làm chủ môi trường Turbo Pascal, quy ước cú pháp, hệ thống kiểu dữ liệu và thao tác nhập/xuất chuẩn.
- Giai đoạn 2 (Chương 3): Rèn luyện tư duy logic qua các cấu trúc điều khiển rẽ nhánh, vòng lặp và bài toán số học.
- Giai đoạn 3 (Chương 4 - 5): Nâng cao kỹ năng lập trình cấu trúc với chương trình con (hàm/thủ tục), kỹ thuật đệ quy, thiết kế Unit và xử lý cấu trúc dữ liệu mảng, ma trận.
Tài nguyên phục vụ học tập đi kèm giáo trình bao gồm môi trường biên dịch Turbo Pascal (tối thiểu phiên bản 7.0), các tệp thư viện chuẩn (TURBO.TPL, GRAPH.TPU, CRT) và các bài tập mẫu cài đặt Unit tự định nghĩa.