Lập trình bằng Turbo Pascal

Ch-ơng 1 - Giới thiệu chung1

1. Các khái niệm cơ bản1

1.1 Mở đầu.1

1.2 Các kí tự.2

1.3 Các từ khoá.3

1.4 Tên - Identifier3

1.5 Tên chuẩn4

1.6 Câu lệnh4

2. Phát triển một ch-ơng trình Pascal5

2.1 Cấu trúc một ch-ơng trình Turbo Pascal.5

2.2 Các b-ớc xây dựng ch-ơng trình.6

3. Môi tr-ờng phát triển tích hợp Turbo Pascal.7

3.1 Các công cụ phát triển.7

3.2 Các chức năng vàcách dùng.8

3.3 Các b-ớc xây dựng một ch-ơng trình trong môi tr-ờng Turbo Pascal11

Câu hỏi vàbàI tập12

Ch-ơng 2 - Các kiểu dữ liệu chuẩn, các hàm chuẩn14

1. Các kiểu dữ liệu chuẩn.14

1.1 Khái niệm kiểu dữ liệu14

1.2 Phân loại các kiểu dữ liệu trong TurboPascal.14

1.3 Các kiểu đơn giản chuẩn16

2. Các hàm chuẩn.18

2.1 Bảng các hàm chuẩn.19

2.2 Sử dụng.20

Câu hỏi vàbài tập20

Ch-ơng 3 - Các khai báo vàcâu lệnh đơn giản21

1. Khai báo hằng vàbiến21

1.1 Khai báo hằng21

1.2 Khai báo biến22

2. Biểu thức trong ngôn ngữ Pascal.23

2.1 Biêủ thức làgì.23

2.2 Bảng thứ tự -u tiên24

2.3 Viết đúng biểu thức25

3. Các câu lệnh đơn giản25

3.1 Lệnh gán26

3.2 Lệnh in ra màn hình không kèm định dạng.26

3.3 Quy cách mặc định in ra các kiểu dữ liệu.27

3.4 Lệnh in ra có kèm quy cách28

Nguyễn Đình Hoá, Viện CNTT - ĐHQG Hànội ii

Lập trình bằng Turbo Pascal

3.5 Lệnh in ra máy in29

3.6 Lệnh nhập dữ liệu từ bàn phím.30

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ập32

Ch-ơng 4- Các cấu trúc điều khiển35

1. Câu lệnh ghép35

2. Câu lệnh IF.35

2.1 Cú pháp vàcông dụng.36

2.2 Các ví dụ minh hoạ.37

2.3 If lồng nhau hay dãy if38

2.4 AND hay IF lồng nhau39

3. Câu lệnh CASE.40

3.1 Cú pháp vàtác dụng.40

3.2 Ví dụ minh hoạ41

3.3 Chú ý 42

3.4 Các lỗi th-ờng gặp.42

4. Câu lệnh FOR.43

4.1 Cú pháp vàtác dụng43

4.2 Ví dụ minh hoạ44

5. Câu lệnh Repeat.45

5.1 Cú pháp vàtác dụng45

5.2 Ví dụ minh hoạ46

6. Câu lệnh While.48

6.1 Cú pháp và côngdụng.48

6.2 Ví dụ minh hoạ49

7. Xây dựng cấu trúc lặp.50

7.1 Điều khiển vòng lặp bằng giá trị canh chừng.50

7.2 Điều khiển vòng lặp bằng cờ báo51

8. Các lệnh kết thúc sớm vòng lặp hoặc ch-ơng trình.51

8.1 Lệnh nhảy khôngđiều kiện - goto51

8.2 Lệnh chấm dứt sớm vòng lặp.52

8.3 Lệnh thoát khỏi ch-ơng trình con.53

8.4 Lệnh dừng ch-ơng trình bất th-ờng.53

Câu hỏi vàbài tập53

Ch-ơng 5 - Định nghĩa Các kiểu dữ liệu đơn giản56

1. Khai báo kiểu dữ liệu mới.56

1.1 Cú pháp chung.56

1.2 Ví dụ 56

2. Kiểu liệt kê.57

2.1 Định nghĩa vàcú pháp57

2.2 Tính chất vàcác phép toán.58

2.3 Ví dụ minh hoạ60

3. Kiểu đoạn con.60

3.1 Định nghĩa và cú pháp.60

3.2 Ví dụ minh hoạ.62

4. Kiểu tập hợp.62

4.1 Định nghĩa vàcú pháp.62

4.2 Các phép toán trên tập hợp63

4.3 Ví dụ minh hoạ64

Ch-ơng 6 - Kiểu mảng66

1. Mảng một chiều66

1.1 Định nghĩa vàcú pháp.66

1.2 Các tính chất.67

1.3 Tại sao nên khai báo kiểu.68

1.4 Ví dụ minh hoạ.68

2. Mảng nhiều chiều.69

2.1 Định nghĩa cú pháp vàcấu trúc69

2.2 Ví dụ minh hoạ.70

3. Tìm kiếm trên mảng.71

3.1 Tìm kiếm tuần tự.71

3.2 Tìm kiếm nhị phân.72

4. Một vài cách sắp xếp mảng.73

4.1 Ph-ơng pháp đổi chỗ trực tiếp.73

4.2 Ph-ơng pháp chèn trực tiếp.75

4.3 Ph-ơng pháp chọn trực tiếp.77

Câu hỏi vàbài tập79

Ch-ơng 7 - Kiểu xâu kí tự81

1. Cú pháp vàcấu trúc.81

1.1 Cú pháp.81

1.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. Thao tác với xâu kí tự84

2.1 Các phép toán.84

2.2 Các thủ tục vàhàm trên xâu kí tự.84

Câu hỏi vàbài tập86

Ch-ơng 8 - Kiểu bản ghi88

1. Định nghĩa vàkhai báo88

1.1 Định nghĩa.88

1.2 Khai báo kiểu bản ghi.88

2. Sử dụng. 90

2.1 Truy cập từng thành phần.90

2.2 Các phép toán với toàn bộ bản ghi.90

2.3 Đọc vào, viết ra với một biến kiểu bản ghi.91

2.4 Câu lệnh With.92

3. Bản ghi có cấu trúc thay đổi93

3.1 Định nghĩa vàcú pháp93

3.2 Sử dụng bản ghi có cấu trúc thay đổi.94

Ch-ơng 9 - Kiểu tệp98

1. Các khái niệm vàđịnh nghĩa98

1.1 Mục đích sử dụng tệp.98

1.2 Tệp định kiểu.98

1.3 Tệp truy cập tuần tự.99

2. Viết ra tệp, đọc vào từ tệp100

2.1 Mở tệp để viết ra.100

2.2 Viết dữ liệu ra tệp.101

2.3 Mở tệp để đọc vào.102

2.4 Đọc dữ liệu vào từ tệp.102

2.5 Tệp truy cập trực tiếp.103

3. Các thao tác khác104

3.1 Một số hàm vàthủ tục với tệp.104

3.2 Bẫy lỗi khi mở tệp.105

4. Tệp văn bản.107

4.1 Định nghĩa vàcấu trúc.107

4.2 Viết ra tệp văn bản108

4.3 Đọc vào từ một tệp văn bản.108

4.4 Các hàm, thủ tục chuẩn khác cho tệp văn bản109

4.5 Các thiết bị vào ra chuẩn111

5. Tệp không định kiểu.112

5.1 Định nghĩa vàcấu trúc.112

5.2 Các hàm, thủ tục khác.112

Câu hỏi vàbài tập114

Ch-ơng 10 - Ch-ơng trình con115

1. Ch-ơng trình con - Hàm vàthủ tục115

1.1 Tại sao cần sử dụng ch-ơng trình con.115

1.2 Khai báo ch-ơng trình con.115

1.3 Xây dựng ch-ơng trình con117

1.4 Lời gọi ch-ơng trình con.117

1.5 Ví dụ minh hoạ.118

2. Hàm hay thủ tục, tham biến hay tham trị.120

2.1 Phân biệt hàm với thủ tục.120

2.2 Phân biệt tham biến vàtham trị.121

2.3 Một vài l-u ý khi xây dựng ch-ơng trình con122

2.4 Khai báo tr-ớc - Forward.124

3. Ch-ơng trình con lồng nhau.125

3.1 Biến toàn cục, biến cục bộ, tầm tác dụng125

3.2 Minh hoạ126

Câu hỏi vàbài tập128

Ch-ong 11 - Thiết kế ch-ơng trình129

1. Ph-ơng pháp xây dựng ch-ơng trình129

1.1 Khái niệm Công nghệ phần mềm.129

1.2 Chu kì phát triển phần mềm.129

1.3 Ví dụ minh hoạ130

1.4 Lập trình mô đun - Modula programming131

1.5 Thủ tục hoá - Procedural abstraction133

2. Thiết kế chi tiết dần từng b-ớc.133

2.1 Sơ đồ cấu trúc ch-ơng trình - structure chart133

2.2 Ví dụ.134

3. Tính đệ quy vàthuật giải đệ quy.138

3.1 Tính đệ quy138

3.2 Thuật giải đệ quy.139

3.3 Thiết kế giải thuật đệ quy.140

4. Một số ví dụ về thuật giải đệ quy.141

4.1 Bài toán tháp Hànội.141

4.2 Bài toán vết mực.142

4.3 Tìm kiếm nhị phân144

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 - Units147

5.1 Sử dụng lại các ch-ơng trình con147

5.2 Cấu trúc của một unit.147

5.3 Biên dịch vàsử dụng.149

5.4 Ví dụ minh hoạ.149

5.5 So sánh việc dùng Unit với chèn trực tiếp tệp mã nguồn150

5.6 Các unit chuẩn của Turbo Pascal150

6. Giớithiệu Unit CRT.151

6.1 Các biến151

6.2 Các hàm, thủ tục152

6.3 Màu sắc vàchế độ màn hình văn bản.153

6.4 Xử lí gõ phím.156

6.5 Các thủ tục khác156

7. Ví dụ ứng dụng - Làm bảng chọn.157

7.1 Các b-ớc xây dựng bảng chọn.157

7.2 Phân tích thiết kế chi tiết dần từng b-ớc.158

7.3 Ch-ơng trình chi tiết.162

7.4 Chuyển thành Unit bảng chọn.165

8. Một ch-ơng trình ứng dụng.167

8.1 Phân tích thiết kế167

8.2 Triển khai chi tiết ch-ơng trình.170

Câu hỏi vàbài tập174

Ch-ơng 12 - Con trỏ và cấu trúc dữ liệu động176

1. Con trỏ 176

1.1 Biến tĩnh vàbiến động.176

1.2 Định nghĩa vàkhai báo.177

1.3 Các phép toán đối với con trỏ.178

2. Biến động.179

2.1 Cấp phát vùng nhớ vàtruy cập biến động.179

2.2 Giải phóng biến động, thu hồi vùng nhớ180

3. Con trỏ không định kiểu - Pointer180

3.1 Định nghĩa180

3.2 ứng dụng181

4. Vùng ngăn xếp vàvùng Heap.182

4.1 Khái niệm182

4.2 Giải toả heap183

4.3 Ví dụ minh hoạ - mảng cỡ lớn.183

Câu hỏi vàbài tập184

Ch-ơng 13 Danh

sách & danh sách móc nối187

1. Danh sách bằng mảng.187

1.1 Mô hình danh sách.187

1.2 Danh sách biểu diễn bằng cấu trúc mảng.188

1.3 Các phép toán đối với danh sách mảng.188

1.4 Các -u, nh-ợc điểm.189

1.5 Ví dụ minh hoạ190

2. Danh sách kiểu ngăn xếp - Stack.193

2.1 Định nghía danh sách kiểu ngăn xếp.193

2.2 Biểu diễn danh sách kiểu ngăn xếp.194

2.3 Các phép toán đối với kiểu ngăn xếp.194

3. Danh sách kiểu hàng đợi - Queue.195

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

3.2 Các phép toán.196

4. Danh sách nối đơn.198

4.1 Mô tả.198

4.2 Cấu trúc móc nối.198

4.3 Các phép toán.200

5. Danh sách nối kép202

5.1 Cấu trúc danh sách nối kép.202

5.2 Các phép toán với danh sách nối kép.203

6. Ví dụ ứngdụ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

6.2 Phân tích thiết kế.205

6.3 Triển khai chi tiết.207

Câu hỏi vàbài tập213

Ch-ơng 14 - Dồ hoạ215

1. Các khái niệm cơ bản215

1.1 Hai chế độ hiển thị màn hình215

1.2 Khởi tạo vàđóng chế độ đồ hoạ216

1.3 Một ch-ơng trình đồ hoạ đơn giản218

1.4 Màu sắc, kiểu nét vẽ, kiểu tô nền.218

2. Các thủ tục đồ hoạ th-ờng dùng.219

2.1 Di chuyển, vẽ một điểm, một đoạn thẳng.219

2.2 Các thủ tục vẽ hình.220

2.3 Tỷ lệ biểu kiến.221

2.4 Viết chữ ra màn hình đồ hoạ222

3. Các thủ tục về môi tr-ờng đồ hoạ224

3.1 Các thủ tục thiết lập màu.224

3.2 Các thủ tục về mẫu tô, mẫu nét vẽ225

3.3 ViewPort.229

4. Vẽ đồ thị một hàm số230

4.1 Phân tích thiết kế.231

4.2 Ch-ơng trình chi tiết.232

4.3 Chuyển thành ch-ơng trình con.234

5. Làm hoạt hình.235

5.1 Di chuyển hình vẽ trên nền trơn235

5.2 Di chuyển hình vẽ trên nền hình ảnh tĩnh.236

5.3 Sử dụng phép lật trang màn hình.240

Câu hỏi vàbài tập242

Ch-ơng 15 - Thâm nhập hệ thống vàHệ điều hành DOS244

1. Gọi thực hiện các chức năng ROM-BIOS vàDOS.244

1.1 Các thanh ghi của 8086 vàđịa chỉ trong bộ nhớ244

1.2 Các ngắt - interrupt245

1.3 Thâm nhập trực tiếp qua thanh ghi vàngắt246

1.4 Các ví dụ minh hoạ.247

1.5 Sử dụng các hàm, thủ tục của unit DOS250

2. Điều khiển chuột251

2.1 Toạ độ chuột251

2.2 Ngắt điều khiển chuột $33252

2.3 Ví dụ minh hoạ.253

2.4 Th-viện các thủ tục thao tác chuột.255

2.5 ứng dụng vào bảng chọn.256

3. Thâm nhập trực tiếp vào bộ nhớ vàcổng257

3.1 Thâm nhập trực tiếp bộ nhớ.257

3.2 Thâm nhập cổng.259

4. Ch-ơng trình th-ờng trú260

4.1 Khái niệm260

4.2 Cách xây dựng một ch-ơng trình th-ờng trú261

4.3 Ví dụ minh hoạ.261

Câu hỏi vàbài tập265

pdf275 trang | Chuyên mục: Pascal | Chia sẻ: dkS00TYs | Lượt xem: 2620 | Lượt tải: 5download
Tóm tắt nội dung Lập trình bằng Turbo Pascal, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ông giải phóng vùng nhớ 
đã dμnh cho ch−ơng trình, nghĩa lμ không chép Command.com đè lên vùng 
nμy mμ chép vμo phần còn trống khác. Nh− vậy, ch−ơng trình vẫn còn nằm 
lại trong bộ nhớ. 
 Ch−ơng trình th−ờng trú hay TSR- Terminate and Stay Resident - lμ 
ch−ơng trình mμ khi kết thúc không bị xoá khỏi bộ nhớ, nó vẫn còn l−u lại 
chờ vμ thực hiện chức năng công việc của mình phục vụ cho ch−ơng trình 
khác khi cần đến. 
Ví dụ các phần mềm để chuyển bμn phím từ gõ tiếng Anh sang gõ 
đ−ợc tiếng Việt đều lμ các ch−ơng trình th−ờng trú. Nó chặn ngắt bμn phím 
vμ thay vec tơ ngắt thông th−ờng bằng một thủ tục xử lí khác để khi gõ aa 
thì sẽ chuyển thμnh mã của â, gõ dd thì chuyển thμnh mã của đ, v.v... 
Kĩ thuật lập trình th−ờng trú đòi hỏi phải kết hợp chặt chẽ với hệ thống, 
chặn vμ thay đổi một số ngắt để phục vụ cho mục đích của mình. 
Nguyễn Đình Hoá, Viện CNTT - ĐHQG Hμ nội 260 
Lập trình bằng Turbo Pascal 
4.2 Cách xây dựng một ch−ơng trình th−ờng trú 
4.2.1 
4.2.2 
 Các b−ớc. 
Các b−ớc cơ bản để xây dựng một ch−ơng trình th−ờng trú lμ: 
- Xây dựng thủ tục xử lí ngắt mới. 
 - L−u lại các véc tơ ngắt mμ ch−ơng trình sẽ chiếm dụng. 
- Thiết đặt lại các véc tơ ngắt để ứng với các thủ tục ngắt mới. 
- Phục hồi lại chúng khi kết thúc. 
 - Tạo phím nóng để kích hoạt, gỡ bỏ ch−ơng trình. 
 Các thủ tục hỗ trợ. 
Có thể sử dụng ngắt $27 để kết thúc một ch−ơng trình vμ cho th−ờng 
trú. 
Tuy nhiên Unit Dos của Turbo Pascal cung cấp cho chúng ta một số 
thủ tục phục vụ xây dựng ch−ơng trình th−ờng trú. Tr−ớc hết đó lμ hμm Keep 
đã nói đến ở trên . 
Keep(exitCode: word) ; 
Cho kết thúc ch−ơng trình vμ ở lại th−ờng trú. 
Mã thoát exitCode = 0 lμ kết thúc bình th−ờng, exitCode = 1 lμ thoát 
bằng Ctrl+C, exitCode = 2 lμ thoát khi chia cho 0. 
Vậy một ch−ơng trình th−ờng trú phải có Keep(0) tr−ớc từ khoá END. 
 Ngoμi ra còn một số thủ tục hỗ trợ lμm việc vói các véc tơ ngắt. 
GetIntVec (IntNo: Byte; Vector: Pointer) ; 
L−u lại véc tơ ngắt số hiệu IntNo vμo địa chỉ xác dịnh trong biến 
Vector. 
SetIntVec (IntNo: Byte; Vector: Pointer); 
Đặt lại véc tơ ngắt số hiệu IntNo ứng với địa chỉ xác định trong biến 
Vector. 
Toán tử lấy địa chỉ @ hay Addr() th−ờng đ−ợc sử dụng để lấy địa chỉ 
của một thủ tục xử lí ngắt. thủ tục xử lí ngắt phải có kiểu Interrupt. 
 Một điểm cần l−u ý lμ ch−ơng trình th−ờng trú không thể biết chắc các 
ngắt hiện tại có phải lμ bản gốc của BIOS , DOS hay không vì có thể một 
ch−ơng trình th−ờng trú khác đã thay thế nó rồi ! 
4.3 Ví dụ minh hoạ. 
Nguyễn Đình Hoá, Viện CNTT - ĐHQG Hμ nội 261 
Lập trình bằng Turbo Pascal 
4.3.1 Ví dụ 1 
 Đầu tiên ta xét một ví dụ đơn giản, lμm một ch−ơng trình th−ờng trú 
chiếm ngắt số $05 lμ ngắt có chức năng in nội dung của mμn hình ra máy in. 
Ngắt nμy ứng với phím Print-screen. Ta sẽ thay nó bằng một thủ tục ngắt 
mới, thực hiện việc in ra kí tự #1 (khuôn mặt c−ời) tại góc mμn hình. 
program Smile1; 
{$M 1024,0,0} 
uses dos; 
procedure VietRaGocManHinh; interrupt; 
begin 
MemW[$B800:0]:=$0701; 
{07 lμ byte thuộc tính, 01 lμ mã kí tự #1} 
end; 
BEGIN 
 SetIntVec($00,saveInt00); 
{khôi phục ngắt khi chia cho 0} 
 SetIntVec($05,@VietRaGocManHinh); 
 keep(0); 
END. 
 Trong ch−ơng trình trên cần l−u ý mấy điểm sau. 
1- Phải có chỉ thị biên dịch {$M 1024,0,0} để hạn chế vùng Heap. 
Nhắc lại rằng chỉ thị cho trình biên dịch phân bố bộ nhớ {$M StackSize, 
HeapMin, HeapMax} có các giá trị mặc định lμ {$M 16384, 0, 655360}, 
nghĩa lμ HeapMax có thể đạt đến địa chỉ cao nhất của bộ nhớ RAM. Nếu 
HeapMax không đ−ợc giơí hạn bởi 0 vμ dùng hμm Keep để kết thúc ch−ơng 
trình thì bộ nhớ sẽ bị chiếm dụng hết đến byte cuối cùng, không còn chỗ để 
tái nạp lại Command.com khi kết thúc thi hμnh ch−ơng trình. 
2- Khai báo Interrupt lμ bắt buộc đối với một thủ tục ngắt, tức lμ thủ 
tục đ−ợc gọi khi có một ngắt xảy ra. Trong ch−ơng trình nμy lμ thủ tục 
VietRaGocManHinh. Lúc nμy trình biên dịch sẽ sinh mã để cất giữ tạm thời 
nội dung tất cả các thanh ghi tr−ớc khi gọi thủ tục ngắt vμ hoμn nguyên lại 
các giá trị thanh ghi sau khi thủ tục ngắt kết thúc. Nếu thiếu khai báo nμy, 
trình biên dịch coi thủ tục ngắt lμ một thủ tục thông th−ờng nh− mọi thủ tục 
khác, không báo lỗi vμo thời điểm dịch vμ ch−ơng trình sẽ đổ vỡ ngay. 
3- Lệnh SetIntVec($00, SaveInt00) để khôi phục lại ngắt $00 - "chia 
cho không". 
 Ch−ơng trình trên mới chỉ quan tâm lμm thế nμo chiếm chỗ của một 
ngắt khác. Nó đã viết đè lên giá trị gốc ban đầu của ngắt $05. Không có cách 
nμo để khôi phục lại chức năng gốc của phím Print-Screen ngoμi việc tắt máy 
khởi động lại. 
Nguyễn Đình Hoá, Viện CNTT - ĐHQG Hμ nội 262 
Lập trình bằng Turbo Pascal 
 Ch−ơng trình d−ới đây khắc phục nh−ợc điểm nμy. Nó l−u lại địa chỉ 
chứa trong vec tơ ngắt $08 (lμ ngắt đồng hồ hệ thống). Sau đó mới thay thế 
bằng địa chỉ của thủ tục ngắt VietRaGocManHinh_2 . Trong thủ tục nμy, véc 
tơ ngắt $08 đ−ợc đặt lại để trỏ đến thủ tục xử lí cũ đã l−u. 
program Smile2; 
{$M 1024,0,0} 
uses dos; 
var SaveInt08: pointer; 
procedure VietRaGocManHinh_2; interrupt; 
begin 
 Inline($9C/ {PUSHF } 
 $FF/$1E/SaveInt08); {CALL FAR [SaveInt08]} 
 MemW[$B800:0]:=$0701; {07 lμ byte thuộc tính, 01 lμ mã 
kí tự #1} 
end; 
BEGIN 
 GetIntVec($08, SaveInt08); 
 SetIntVec($08,@VietRaGocManHinh_2); 
 keep(0); 
END. 
4.3.2 Ví dụ 2 
Một ch−ơng trình hẹn giờ. Ta thử xây dựng một ch−ơng trình th−ờng 
trú phức tạp hơn, có xử lí dòng lệnh. Dòng lệnh Alarm n sẽ khởi động 
ch−ơng trình vμ chờ đúng n phút máy sẽ phát tiếng còi vμ dòng thông báo 
trên mμn hình để nhắc lμ đã đến giờ hẹn. Trong thời gian chờ máy vẫn hoạt 
động bình th−ờng. 
Ch−ơng trình sử dụng ngắt $1C lμ nhịp đồng hồ cho ng−ời sử dụng. 
Cứ đều đặn một Tic thì ngắt nμy đ−ợc gọi một lần. Một giây ngắt nμy đ−ợc 
gọi khoảng 18.2 lần. Ta sẽ chặn ngắt nμy vμ thay thế nó bằng thủ tục xử lí 
mới, tăng biến đếm CurrentTime lên một đơn vị vμ so sánh với khoảng thời 
gian chờ đã ấn định. Nếu v−ợt quá sẽ phát lệnh báo động. 
Các b−ớc công việc mμ thủ tục xử lí phải lμm lμ 
- Phục hồi vectơ ngắt $1C trả lại cho hệ thống. 
- L−u vectơ ngắt bμn phím, thay bằng thủ tục xử lí mới lμ: phát còi liên 
tục, hiện thông báo vμ đợi gõ phím F12 để kết thúc thật sự ch−ơng 
trình. 
program Alarm; 
{$M $1024,0,0} {cap bo nho $M Stacksize,heapmin,heapmax} 
uses crt,dos; 
const DefaultTime = 1; {Tham số mặc định, báo thức sau 1 
phút} 
Nguyễn Đình Hoá, Viện CNTT - ĐHQG Hμ nội 263 
Lập trình bằng Turbo Pascal 
Var CurrentTime: longint; 
 Worktime: word; {khoảng thời gian đợi báo thức} 
 KbdIntVec: procedure; 
 {để l−u địa chỉ của ch−ơng trình xử lí ngắt bμn phím 
của hệ thống} 
{$F+} { force Far call} 
procedure KeyClick; interrupt; 
 Begin 
 gotoXY(1,1); 
 TextColor(Yellow); 
 TextBackGround(Red); 
 Write(' Over time ! - Press F12 to continue.'); 
 While Port[$60] 88 do Write(#7); 
 { phát còi khi ch−a gõ F12(có mã 88)để chấm dứt} 
 { Port[i] truy cập cổng i=$60 lμ cổng bμn phím } 
 SetIntVec($9,Addr(KbdIntVec)); 
 Inline($9C); 
 KbdIntVec; 
 {gọi lại ch−ơng trình xử lí ngắt bμn phím cũ} 
 end; 
{$F-} 
{$F+} 
procedure TestTime; interrupt; 
begin 
 Inc(CurrentTime); 
 if (CurrentTime >= Round(workTime*60*18.2)) then 
 begin 
 SetIntVec($1C,Addr(KbdIntVec)); 
{phục hồi vecto ngắt $1C cũ} 
 GetIntVec($9,Addr(KbdIntVec)); 
{l−u vecto ngắt bμn phím} 
 SetIntVec($9,Addr(KeyClick)); 
{ngắt bμn phím bây giờ nối đến KeyClick} 
 end; 
 Inline($9C); 
 KbdIntVec; {gọi lại ch−ơng trình xử lí ngắt bμn phím 
cũ } 
end; 
{$F-} 
procedure TestParam; {xử lý tham số dòng lệnh = số phút đợi 
báo thức} 
var WorkTimeStr: String; 
 i: byte; 
 code: integer; 
begin WorktimeStr:=''; 
 For i:=1 to ParamCount do 
 WorkTimeStr:= WorkTimeStr + ParamStr(i); 
Nguyễn Đình Hoá, Viện CNTT - ĐHQG Hμ nội 264 
Lập trình bằng Turbo Pascal 
 Val(WorkTimeStr,WorkTime, code); 
 if code 0 then 
 workTime:=DefaultTime; 
end; 
BEGIN 
 TestParam; 
 CurrentTime:=0; 
 GetIntVec($1C,Addr(KbdIntVec)); 
{l−u vecto ngắt $1C } 
 SetIntVec($1C,Addr(TestTime)); 
{trỏ đến ch−ơng trình xử lí testTime của ta} 
 keep(0); 
END. 
Câu hỏi vμ bμi tập 
1. Véc tơ ngắt lμ gì. Chúng thực hiện những chức năng gì. 
2. Để gọi trực tiếp thực hiện ngắt từ trong một ch−ơng tình Pascal cần 
phải theo các b−ớc nh− thế nμo. Tham số đầu vμo đặt ở đâu, kết quả 
trả vể lấy ở đâu. 
3. Vai trò của kiểu thanh ghi Registers trong Unit DOS lμ gì. Tại sao nó 
lại đ−ợc khai báo lμ kiểu bản ghi có cấu trúc thay đổi. 
4. Thâm nhập hệ thống qua hỗ trợ của Unit DOS có −u nh−ợc điểm gì. 
5. Nguyên lí chung để xây dựng một ch−ơng trình th−ờng trú lμ gì. 
6. Khi nμo cần thâm nhập trực tiêp bộ nhớ, các cổng thiết bị. Cách lμm. 
Thực hμnh. 
1. Lập hai thủ tục l−u lại mμn hình (ở chế độ văn bản) vμ khôi phục mμn 
hình đã l−u. ứng dụng để hoμn thiện ch−ơng trình bảng chọn: sau khi 
chọn thì bảng chọn biến mất vμ mμn hình cũ đ−ợc khôi phục lại. 
2. Lập hai thủ tục l−u lại một phần mμn hình (ở chế độ văn bản) nằm 
trong một khung cửa sổ hình chữ nhật vμ khôi phục lại phần cửa sổ đó. 
ứng dụng để hoμn thiện ch−ơng trình bảng chọn: sau khi chọn thì bảng 
chọn biến mất vμ mμn hình cũ đ−ợc khôi phục lại. 
Nguyễn Đình Hoá, Viện CNTT - ĐHQG Hμ nội 265 
Lập trình bằng Turbo Pascal 
TμI liệu tham khảo 
1. Hoμng Kiếm (chủ biên), “Tin học đại c−ơng nâng cao”, Nxb Giáo dục, 
1998. 
2. Quách Tuấn Ngọc, “Ngôn ngữ lập trình Pascal”, Nxb Giáo dục, 2000. 
3. Quách Tuấn Ngọc, “Bμi tập ngôn ngữ lập trình Pascal”, Nxb Giáo dục, 
2000. 
4. Schapers A.,” Mẹo vμ thủ thuật lập trình bằng Turbo Pascal 5.5”, Nxb 
KHKT Hμ nội, 1996. 
5. Bùi Thế Tâm, Võ Văn Tuấn Dũng, “Giáo trình tin học đại c−ơng”, 
Nxb GTVT, Hμ nội, 1995. 
6. Koffman E. B., “ Pascal- Problem Solving and Problem Design”, 
Addison-Wesley Pub. Company, 1993. 
7. Catambay B., “The Pascal Programming Language”, Academic Press, 
2001,  
Nguyễn Đình Hoá, Viện CNTT - ĐHQG Hμ nội 266 

File đính kèm:

  • pdfLập trình bằng Turbo Pascal.pdf