Chương 1 Giới thiệu chung Pascal lμ một ngôn ngữ lập trình cho máy tính, do Niklaus Wirth, giảng viên trường Đại học Kĩ thuật Zurich, Thuỵ sĩ xây dựng nên vμo năm 1970 với mục đích để g
Trang 1LơI NOI đầU
Lμ một ngôn ngữ lập trình có cú pháp chặt chẽ, đơn giản vμ
dễ hiểu, Pascal được giảng dạy cho sinh viên tin học ngay năm học
đầu tiên Nó lμ ngôn ngữ cơ sở để giới thiệu cho sinh viên lμm quen với kĩ thuật xây dựng chương trình Ngoμi ra, nó còn được dùng để trình bμy nhiều chuyên đề khác nữa của tin học trong những năm học tiếp theo
Nắm vững các thμnh phần cơ bản, hiểu rõ các yếu tố cú pháp của ngôn ngữ lập trình Pascal, lμ rất quan trọng Nhưng vận dụng nó để xây dựng được các chương trình mới lμ điều quan trọng nhất
Qua kinh nghiệm nhiều lần giảng dạy ngôn ngữ Pascal cho các đối tượng sinh viên khác nhau, có thể nhận thấy rằng sinh viên lúng túng nhất ở khâu vận dụng xây dựng chương trình cụ thể, không biết lμm thế nμo, bắt đầu từ đâu
Giáo trình nμy đặt trọng tâm vμo trình bμy kĩ thuật xây dựng chương trình song song với việc giới thiệu ngôn ngữ lập trình Pascal Các ví dụ ứng dụng tổng hợp ở cuối chương được chọn lọc
để minh hoạ những vấn đề lí thuyết trình bμy trong chương đó Những ví dụ ứng dụng nμy có liên quan chặt chẽ với nhau, được phát triển hoμn thiện dần một cách có hệ thống để sinh viên hiểu
rõ các bước xây dựng chương trình, từ thô sơ, đơn giản đến hoμn thiện, hiệu qủa hơn
Vì đây lμ hệ thống lại các bμi giảng lần đầu tiên nên chắc chắn còn nhiều thiếu sót Rất mong sự đóng góp ý kiến của các thầy, cô đồng nghiệp cũng như của các bạn sinh viên lμ đối tượng phục vụ của giáo trình nμy
Tác giả
Trang 2NÔI DUNG
Chương 2 - Các kiểu dữ liệu chuẩn, các hμm chuẩn 14
1.2 Phân loại các kiểu dữ liệu trong TurboPascal 14
Câu hỏi vμ bμi tập 20
Chương 3 - Các khai báo vμ câu lệnh đơn giản 21
Trang 33.5 Lệnh in ra máy in 29
4 Một số hμm, thủ tục trình bμy mμn hình 32 Câu hỏi vμ bμi tập 32
Chương 4- Các cấu trúc điều khiển 35
7.1 Điều khiển vòng lặp bằng giá trị canh chừng 50
Câu hỏi vμ bμi tập 53
Chương 5 - Định nghĩa Các kiểu dữ liệu đơn giản 56
Trang 41.2 CÊu tróc kiÓu x©u kÝ tù - Truy cËp trùc tiÕp tõng thμnh phÇn 82
2.3 §äc vμo, viÕt ra víi mét biÕn kiÓu b¶n ghi 91
Trang 54.4 Các hμm, thủ tục chuẩn khác cho tệp văn bản 109
1.1 Tại sao cần sử dụng chương trình con 115
2 Hμm hay thủ tục, tham biến hay tham trị 120
2.3 Một vμi lưu ý khi xây dựng chương trình con 122
1.4 Lập trình mô đun - Modula programming 131 1.5 Thủ tục hoá - Procedural abstraction 133
2.1 Sơ đồ cấu trúc chương trình - structure chart 133
Trang 63 Tính đệ quy vμ thuật giải đệ quy 138
4.4 Sắp xếp kiểu phân đoạn hay sắp xếp nhanh - Quick Sort 145
5 Tự xây dựng thư viện chương trình con - Units 147
5.5 So sánh việc dùng Unit với chèn trực tiếp tệp mã nguồn 150
Câu hỏi vμ bμi tập 174
Chương 12 - Con trỏ vμ cấu trúc dữ liệu động 176
Trang 7Câu hỏi vμ bμi tập 184
Chương 13 Danh sách & danh sách móc nối 187
2.1 Định nghía danh sách kiểu ngăn xếp 193
2.3 Các phép toán đối với kiểu ngăn xếp 194
3.1 Định nghĩa danh sách kiểu hμng đợi 195 3.2 Biểu diễn danh sách kiểu hμng đợi bằng mảng 196
5.2 Các phép toán với danh sách nối kép 203
6 Ví dụ ứng dụng của danh sách móc nối 205 6.1 Cải tiến chương trình quản lí hồ sơ 205
Câu hỏi vμ bμi tập 213
2.1 Di chuyển, vẽ một điểm, một đoạn thẳng 219
Trang 81.3 Th©m nhËp trùc tiÕp qua thanh ghi vμ ng¾t 246
1.5 Sö dông c¸c hμm, thñ tôc cña unit DOS 250
2.4 Th− viÖn c¸c thñ tôc thao t¸c chuét 255
C©u hái vμ bμi tËp 265
Trang 9Chương 1 Giới thiệu chung
Pascal lμ một ngôn ngữ lập trình cho máy tính, do Niklaus Wirth,
giảng viên trường Đại học Kĩ thuật Zurich, Thuỵ sĩ xây dựng nên vμo năm
1970 với mục đích để giảng dạy
Lμ ngôn ngữ lập trình cấu trúc, trong sáng, dễ hiểu, Pascal đã vượt ra
khỏi nhμ trường, phát triển thμnh một ngôn ngữ mạnh, có thể dùng để phát
triển chương trình chuyên nghiệp
N Wirth đã được giải Turing do công lao sáng tạo vμ phổ biến ngôn
ngữ Pascal
Hiện nay ngôn ngữ lập trình Pascal có nhiều biến thể do các công ty
khác nhau bổ xung hoμn thiện thêm: TURBO PASCAL của Borland,
QUICK PASCAL của Microsoft, ANSI PASCAL
Nói riêng Turbo Pascal cũng đã được cải tiến hoμn thiện qua nhiều
phiên bản, từ bản 1.0 ban đầu cho đến bản 5.5 năm 1989, bản 6.0 năm 1990,
bản 7.0 năm 1992
1 Các khái niệm cơ bản
1.1 Mở đầu
Pascal lμ một ngôn ngữ lập trình cấp cao, nghĩa lμ gần với ngôn ngữ
của con người Khái niệm cấp cao, cấp thấp của một ngôn ngữ lập trình máy
tính để nói nó gần hơn với ngôn ngữ con người hay với ngôn ngữ của máy
tính chứ không phải để nói về khả năng
Tương tự như ngôn ngữ thông thường, Pascal cũng sử dụng các kí tự để
tạo nên các từ, dùng các "từ" vμ các yếu tố cơ bản khác để tạo thμnh các
"câu" có ý nghĩa xác định Các "câu" được phối hợp thμnh một "văn bản"
hoμn chỉnh gọi lμ văn bản chương trình nhằm ra lệnh cho máy tính thực hiện
một số công việc xử lí thông tin nμo đó
Để minh hoạ ta xét một văn bản chương trình Pascal sau đây
Program HinhTron;
Var BanKinh,ChuVi,DienTich: real;
Trang 10DienTich:= pi * BanKinh * BanKinh ;
Write(' Chu vi la = ' , ChuVi );
Write(' Dien tich la = ' , DienTich);
ViÕt ra: Chu vi lμ = gi¸ trÞ ChuVi (tÝnh ®−îc ë trªn)
ViÕt ra: DiÖn tÝch lμ = gi¸ trÞ DiÖnTÝch (tÝnh ®−îc ë trªn) KÕt thóc
Tr¸i l¹i
ViÕt: B¸n KÝnh ©m, Kh«ng hîp lÖ !
KÕt thóc
1.2 C¸c kÝ tù
Turbo Pascal sö dông c¸c kÝ tù sau ®©y trong b¶ng m· ASCII:
- C¸c ch÷ c¸i th−êng vμ hoa: a z, A Z
Trang 111.3 Các từ khoá
Nhìn lại chương trình vμ bản "dịch" trong ví dụ trên ta thấy các từ
Program, Var, Real, Begin, If, Then, Else, End lμ những thμnh phần hết sức
quan trọng Chúng phối hợp với nhau để tạo nên phần khung của các câu
lệnh Đó lμ các từ khoá Các từ khóa lμ các đơn vị từ vựng cơ sở của một
ngôn ngữ lập trình nói chung
Khác với ngôn ngữ thông thường, một từ có thể nhiều nghĩa, một ý có thể viết theo nhiều cách, mỗi từ khoá trong một ngôn ngữ lập trình có một ý nghĩa xác định chính xác, những câu lệnh được xây dựng theo những quy tắc hết sức chặt chẽ
Dưới dây liệt kê những từ khoá của Turbo Pascal Y nghĩa vμ cách sử dụng chúng ta sẽ lμm quen dần sau nμy
If Implementation
In Inline Interface Label Mod
Nil Not Object
Of
Or Packed Procedure Program Record Repeat Set Shl
Shr String Then
To Type Unit Until Uses Var While With Xor
Với các từ khóa, Pascal không phân biệt chữ in hoa hay chữ thường Trong văn bản chương trình Pascal ta có thể tuỳ ý viết một từ khóa bằng các chữ cái dạng in thường hay in hoa hoặc xen kẽ cả hai dạng
1.4 Tên - Identifier
Nhìn lại chương trình trong ví dụ ở trên, ngoμi các từ khoá ta thấy còn
có các thμnh phần khác như BanKinh, ChuVi, DienTich Chúng lμ tên của
các đối tượng mμ ta xử lí trong chương trình
Quy định đặt tên trong Pascal như sau:
- Tên lμ xâu kí tự gồm chữ cái , chữ số, dấu nối dưới ( _ )
- Tên không được chứa dấu cách;
- Tên không được bắt đầu bằng số;
- Tên có thể dμi tuỳ ý nhưng chỉ có 63 kí tự đầu tiên lμ có ý nghĩa;
- Tên không được trùng với từ khoá;
Nên đặt tên phản ánh đúng nội dung của đối tượng, gợi nhớ Tránh
kiểu đặt tên không mang lại thông tin gì bổ ích, ví dụ: prog01, baitap02
Trang 12Giống như đối với các từ khóa, trong văn bản chương trình Pascal, các
tên cũng được viết bằng các chữ cái dạng in thường hay in hoa, không phân
biệt BanKinh hay bankinh đều chỉ lμ một tên Ta có thể chọn một phong
cách viết thích hợp
Để tách các âm tiết cho dễ đọc có thể dùng dấu nối dưới ( _ ) hoặc
viết hoa chữ cái đầu tiên của mỗi âm tiết, ví dụ: giai_pt_bac_hai, dinh_thuc,
HeSo, BanKinh , DienTich Trong tμi liệu nμy sẽ dùng cách viết hoa chữ cái
đầu của mỗi âm tiết
Khái niện tên (identifier - ID) ở đây chính xác vμ chặt chẽ hơn khái niệm tên gọi thông thường (name) Tên phải đảm bảo đúng quy định, không
trùng lặp, tương ứng một-một giữa tên vμ đối tượng gắn với nó
1.5 Tên chuẩn
Tên chuẩn lμ tên mμ Pascal đã sử dụng, có một ý nghĩa hoμn toμn xác
định trong môi trường Pascal Trong ví dụ trên các thμnh phần Read, Write
lμ các tên chuẩn Đó lμ tên của hai thủ tục có sẵn trong Turbo Pascal
Tên chuẩn khác từ khoá ở chỗ, có thể dùng lại tên nμy vμo việc khác, định nghĩa lại với nghĩa mới khác đi, do người dùng quy định Tuy nhiên không nên lμm thế vì mọi thay đổi khác lệ thường, đều dễ đưa đến nhầm lẫn
Các tên chuẩn bao gồm
- Các kiểu dữ liệu: boolean, char, integer, real, byte, text ;
- Các hằng kiểu lô gic: false, true ;
- Các hμm, thủ tục chuẩn đã lμm sẵn:
chr, odd, abs, sqr, sqrt, exp, ln
arctan, cos, sin,
eof, eoln, read, readln, write, writeln
1.6 Câu lệnh
Sử dụng các từ khoá của ngôn ngữ Pascal, các tên đối tượng, các dấu phép toán vμ các kí hiệu đặc biệt khác, người lập trình viết các câu lệnh Câu lệnh lμ một chỉ thị cho máy tính thực hiện một thao tác tính toán, xử lí nμo đó
Ví dụ,
DienTich:= pi * BanKinh * BanKinh ;
lμ một câu lệnh yêu cầu máy tính bình phương bán kính nhân với số π rồi gán cho diện tích hình tròn
Có thể viết nhiều câu lệnh trên một dòng Phải dùng dấu chấm phẩy
“ ; ” để ngăn cách hai câu lệnh dù lμ trên cùng một dòng hay trên hai dòng khác nhau
Một văn bản chương trình lμ một tập hợp các câu lệnh, điều khiển máy tính hoμn thμnh một công việc nhất định nμo đó Các câu lệnh nμy được viết tuân theo một quy định hết sức chặt chẽ vμ chính xác Mỗi ngôn ngữ lập trình
Trang 132 Phát triển một chương trình Pascal
2.1 Cấu trúc một chương trình Turbo Pascal
Để cho dễ hiểu từ đây ta quy ước khi trình bμy các thμnh phần cú pháp của Pascal ta sẽ dùng cách nhấn mạnh bằng chữ in nghiêng để chỉ những
phần mμ người lập trình cần điền vμo tuỳ theo từng trường hợp cụ thể Những
từ khoá, tên chuẩn của ngôn ngữ Pascal lμ phần khung phải giữ nguyên
không được thay đổi sẽ được thể hiện bằng kiểu chữ đứng đậm hơn
2.1.1 Các thμnh phần
Về cấu trúc, một chương trình Pascal gồm 3 phần: phần tên, phần khai
báo, phần thân
Program tên chương trình ; Phần tên
Uses danh sách các unit ;
Const các khai báo hằng ;
Type các khai báo kiểu ;
Var các khai báo biến ;
Procedure ;
Function ;
Phần khai báo
Phần các chương trình con.BEGIN
các câu lệnh của chương trình;
END
Phần thân
Phần tên có thể không có
Phần khai báo phải theo đúng trình tự các mục: uses, const, type,
var,v.v Có thể lặp lại các từ khoá ở trên nhiều lần, trên nhiều dòng nếu như
có nhiều nội dung Phần khai báo có thể không có
Phần thân chương trình bắt buộc phải có ! Lưu ý rằng văn bản chương trình kết thúc với từ khoá END kèm dấu chấm “.”
Phần khai báo có thể phân chia chi tiết hơn Với các chương trình lớn,
sau khai báo danh sách các thư viện hμm, thủ tục lμm sẵn (các unit), khai báo
các hằng, các kiểu dữ liệu, các biến sẽ lμ phần dμnh cho các chương trình con
Trang 14ở đây có khai báo nguyên mẫu (tức lμ tên, danh sách tham số, kiểu kết quả
trả về) của mỗi chương trình con kèm triển khai chi tiết của chúng Ta sẽ tìm
hiểu kĩ hơn sau nμy trong chương "Chương trình con"
Đoạn chú thích có thể trên một dòng hay nhiều dòng
đây ta chỉ trình bμy những công việc cơ bản nhất của hai bước cuối cùng lμ viết chương trình vμ chạy thử
Viết văn bản chương trình
Sau khi đã có thuật giải, có thể triển khai viết văn bản chương trình Văn bản chương trình lμ một tệp văn bản, nghĩa lμ gồm các kí tự trong bảng
Trang 152.2.2
2.2.3
Biên dịch vμ liên kết
Tệp văn bản chương trình gồm các câu lệnh gần với ngôn ngữ thông thường, dễ hiểu với con người, nhưng không phải lμ ngôn ngữ của máy tính
Để máy tính hiểu vμ thực thi được các câu lệnh cần phải biên dịch chương trình từ tệp mã nguồn Pascal thμnh tệp mã máy
Trong quá trình biên dịch có thể máy sẽ phát hiện ra các lỗi cú pháp -
syntax error Ta cần sửa chữa để đảm bảo chương trình hết lỗi cú pháp, được
biên dịch thμnh công vμ liên kết thμnh tệp thi hμnh được
Chạy thử vμ sửa lỗi
Giống như một bμi văn gồm toμn những câu đúng ngữ pháp nhưng vô
lý, không thể hiểu được, một chương trình đã đúng cú pháp có thể vẫn chưa chạy thông được Máy dừng khi chương trình thực hiện nửa chừng Lúc nμy
lμ lỗi khi chạy chương trình - run time error
Ngay khi chương trình đã chạy thông cũng vẫn có thể cho kết quả sai
Đây lμ lỗi nội dung thuật giải Cần phải sửa lại thuật giải để đảm bảo chương
trình cho kết quả đúng như mong muốn
Một bμi toán thường có nhiều trường hợp khác nhau Ví dụ, chương trình giải phương trình bậc hai sẽ có ba trường hợp khác nhau ứng với giá trị của biệt thức (Delta) lμ âm, dương hay bằng không Chương trình đã chạy
đúng với trường hợp nμy có thể vẫn chưa đúng hoặc thậm chí không chạy thông được cho trường hợp khác Cần chạy thử chương trình với nhiều bộ dữ liệu đầu vμo khác nhau để kiểm tra tính đúng đắn của chương trình trong mọi trường hợp có thể xảy ra
3 Môi trường phát triển tích hợp Turbo Pascal
3.1 Các công cụ phát triển
Như đã trình bμy ở trên, việc triển khai một chương trình Pascal cần tiến hμnh nhiều bước, từ soạn thảo văn bản chương trình cho đến biên dịch, liên kết, chạy thử vμ sửa lỗi Mỗi bước như vậy đều cần có một công cụ hỗ trợ tương ứng Để soạn thảo văn bản chương trình cần dùng một bộ soạn thảo
– Editor Để biên dịch chương trình cần có trình biên dịch – Compiler Để
liên kết các đoạn mã sau biên dịch thμnh chương trình cần dùng trình liên kết
– Linker Trình hỗ trợ phát hiện vμ sửa lỗi gọi lμ Debuger Turbo Pascal đã
kết hợp tất cả các công cụ cần thiết thμnh một tổng thể hoμn chỉnh, cho phép
dễ dμng thực hiện mỗi bước vμ chuyển tiếp giữa các bước Đó lμ môi trường
Trang 16phát triển tích hợp (IDE - Integrated Development Environment) của Turbo
Pascal
Bộ phần mềm Turbo Pascal gồm nhiều tệp Dưới đây lμ một số tệp chính
- Turbo.exe: soạn thảo, biên dịch, liên kết, sửa lỗi, trợ giúp.v.v Đây lμ
tệp chính tạo nên môi trường phát triển tích hợp của Turbo Pascal
- Turbo.tpl : (Turbo Pascal Library) thư viện chuẩn phục vụ cho turbo.exe
- Graph.tpu: (Turbo Pascal Units) thư viện chương trình về đồ hoạ
- *.CHR : các phông chữ trong chế độ đồ hoạ
- *.BGI : (Borland Graphics Interfaces) các trình điều khiển mμn
hình đồ hoạ của Borland
3.2 Các chức năng và cách dùng
Để mở môi trường phát triển Turbo Pascal cần phải cho chạy tệp
Turbo.exe Sau nhiều lần cải tiến, phiên bản phổ biến hiện nay lμ Turbo
Pascal 7.0 Phần trình bμy dưới đây lμ căn cứ trên phiên bản nμy
3.2.1 Mμn hình lμm việc
Sau khi khởi động sẽ hiện ra mμn hình để bắt đầu việc soạn thảo, biên dịch, chạy thử vμ sửa lỗi chương trình Trên đỉnh mμn hình lμ thanh chọn chính Dưới đáy mμn hình lμ dòng nhắc lệnh ở giữa lμ vùng lμm việc
Mỗi mục tên trên thanh chọn chính cho phép mở ra một bảng chọn
buông xuống Mỗi bảng chọn buông xuống chứa nhiều mục chọn thực hiện
các công việc khác nhau Tên các bảng chọn, mục chọn phản ánh khá chính
Trang 17Gõ Alt + chữ cái được lμm nổi bật để mở các bảng chọn buông
xuống tương ứng Ví dụ, gõ Alt + F để mở bảng chọn File, gõ Alt + E để mở bảng chọn Edit, gõ Alt + S để mở bảng chọn Search, v.v Cũng có thể dùng
các phím mũi tên sang phải, sang trái để di chuyển trên thanh chọn chính vμ
gõ Enter để mở bảng chọn buông xuống tại vị trí đó
Dòng nhắc lệnh gồm nhiều cặp phím gõ tắt - tên lệnh cho biết cách thực hiện nhanh các lệnh hay dùng Cặp F1 Help nghĩa lμ gõ phím F1 để mở phần trợ giúp, cặp Alt+F9 Compile nghĩa lμ gõ tổ hợp phím Alt - F9 để
thực hiện biên dịch,v.v
3.2.2 Các bảng chọn
Sau đây lμ nội dung của các bảng chọn vμ chức năng của các mục chọn chứa trong đó Y nghĩa của các mục chọn sẽ được tìm hiểu kĩ hơn khi gặp vấn đề có liên quan
Mở cửa sổ soạn thảo mới
Mở tệp đã có trên đĩa để sửa chữa, viết tiếp Ghi lưu tệp chương trình đang soạn thảo lên đĩa với tên cũ
Ghi lưu tệp chương trình đang soạn thảo lên đĩa với tên khác
Ghi lưu tất cả các tệp đang mở trong các cửa sổ soạn thảo
Chuyển sang lμm việc ở thư mục khác
In văn bản chương trình ra máy in Thiết đặt các tham số cho thao tác in Tạm về DOS,
Thoát hẳn khỏi môi trường Turbo Pascal trở về DOS
Lưu ý rằng ở bên phải, cạnh một số tên mục chọn hay dùng có ghi kèm các phím gõ tắt ứng với mục chọn đó
- Bảng chọn Edit
Bảng chọn nμy có nhiều chức năng hỗ trợ cho việc soạn thảo văn bản chương trình như sao chép, cắt dán Trước khi thực hiện sao chép, cắt dán,
v.v cần đánh dấu khối văn bản bằng cách nhấn tổ hợp phím Shift + các phím
mũi tên lên, xuống, sang phải, sang trái