Lập trình một bài toán lớn rất phức tạp và vất vả nếu nó phải sử
dụng nhiều thuật toán lập đi lập lại. Việc tạo ra nhiều mẫu chương trình con
nhằm giảm nhẹ công việc của một lập trình viên (programmer). Tuy nhiên, mỗi
chương trình con chỉ có ứng dụng được trong chính chương trình chứa nó mà thôi.
Ðể khỏi mất thời gian để viết lại chúng, người ta biến mỗi chương trình con
thành các module độc lập, được biên dịch sẵn và lưu trữ trên đĩa như một thư
viện. Khi cần ta cứ việc gọi các module này ra mà không cần phải viết lại
chúng. Mỗi module như vậy được gọi là một đơn vị chương trình, hay gọi tắt là
UNIT.
Khái
niệm Unit đã được vào sử dụng từ chương trình Pascal version 4.0 trở đi. Có hai
loại Unit là các Unit chuẩn do Turbo Pascal tạo sẵn và các Unit tự tạo do người
lập trình tự viết ra.
a. Một số Unit chuẩn
trong Turbo Pascal 5.5 trở đi
* Unit SYSTEM :
gồm các hằng, biến, kiểu, hàm, thủ tục trong version 3.0
* Unit CRT :
gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến
chế độ Text của version 5.5
chế độ Text của version 5.5
* Unit PRINTER :
gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến
chế độ in ấn.
chế độ in ấn.
* Unit GRAPH :
gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến
chế độ đồ thị của version 5.5
chế độ đồ thị của version 5.5
* Unit TURBO3 :
gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến
chế độ Text của version 3.0
chế độ Text của version 3.0
* Unit
GRAPH3 : gồm
các hằng, biến, kiểu, hàm, thủ tục liên quan đến
chế độ đồ thị của version 3.0
chế độ đồ thị của version 3.0
* Unit
DOS :
gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến hệ điều
hành MS-DOS
* Unit
OVERLAY : gồm các hằng,
biến, kiểu, hàm, thủ tục liên quan đến
việc truy xuất đĩa phủ lấp khi chạy chương trình.
việc truy xuất đĩa phủ lấp khi chạy chương trình.
Các
Unit trên được lưu trữ trong tập tin TURBO.TPL của Turbo Pascal.
Chúng
ta có thể sử dụng chương trình TPUMOVER.EXE để lấy ra hoặc đưa vào một hay
nhiều Unit nhằm tiết kiệm bộ nhớ hay tăng cường tiện ích sử dụng.
b. Cách
gọi Unit
Muốn sử dụng UNIT thì trong đầu chương trình ta phải khai báo Unit
theo cú pháp sau:
USES <Tên
Unit> [ { , <Tên Unit> } ] ;
Ví dụ
7.10 USES CRT,
GRAPH ;
Ðặc biệt, chỉ riêng Unit SYSTEM thì không cần phải khai báo.
c. Một số
thủ tục và hàm trong Unit CRT
* ClrScr :
thủ tục xóa màn hình
*
ClrEol : thủ
tục xóa ký tự bên phải con trỏ màn hình, sau khi xóa con trỏ vẫn
ở tại chỗ
* InsLine :
thủ tục xen vào một hàng ở vị trí con trỏ màn hình
* DelLine :
thủ tục xóa bỏ một hàng ở vị trí con trỏ màn hình
* GotoXY(XPos, Ypos): đưa con trỏ màn hình về vị trí có tọa độ
Xpos và
Ypos. X có giá trị từ 1 - 80, và Y có giá trị từ 1 - 25
Ypos. X có giá trị từ 1 - 80, và Y có giá trị từ 1 - 25
* Delay(time): tạo thời gian trễ tính theo
milisecond. Time là một số nguyên
dùng để làm chậm chương trình cho ta kịp quan sát dữ liệu
dùng để làm chậm chương trình cho ta kịp quan sát dữ liệu
* Sound(F) : thủ
tục tạo ra âm thanh với tần số F (hz). F là số nguyên
* NoSound : thủ
tục tắt âm thanh
* LowVideo và NormVideo: thủ tục màn hình, khi gọi LowVideo thì
mọi ký tự
viết ra màn hình có độ sáng yếu dần đi cho đến khi
nhận thủ tục NormVideo mới về độ sáng bình thường.
* TextBackGround (color): thủ tục chọn màu nền,
color cho ở bảng (từ 1 -7)
* KeyPressed: hàm cho giá trị kiểu kết quả
Boolean, cho giá trị là
True nếu
có một phím được bấm.
* TextColor (color): thủ tục chọn màu chữ, color lấy ở
bảng
Các
hằng số màu của CRT unit
Hằng số color
|
Màu hiển thị
|
Giá trị
|
Black
Blue
Green
Cyan
Red
Magenta
Brown
LightGray
DarkGray
LightBlue
LightGreen
LightCyan
LightRed
LightMagenta
Yellow
White
|
Ðen
Xanh da trời
Xanh lá cây
Xanh lơ
Ðỏ
Tím
Nâu
Xám nhạt
Xám đậm
Xanh da trời nhạt
Xanh là cây nhạt
Xanh lơ nhạt
Ðỏ nhạt
Tím nhạt
Vàng
Trắng
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Ðể
tạo ra màu nhấp nháy, ta cộng thêm hằng số Blink của CRT vào bất kỳ màu chữ mà
ta chọn. Ta không thể làm nhấp nháy màu nền.
Ví dụ để trình bày chữ vàng trên nền xanh, ta viết:
TextColor(Yellow)
; TextBackground(Blue) ;
Muốn có một dòng chữ đỏ nhấp nháy thì ra
lệnh:
TextColor(Red
+ Blink) ;
* ReadKey : hàm
có kiểu kết quả là Char, khi nhấn các phím chức năng trên bàn
phím thì có kết quả là 1 ký tự mã ASCII. Nếu ký tự đầu tiên do ReadKey trả về bằng
ASCII 0 thì ký tự kế theo sẽ chỉ định phím như ở bảng dưới. Các phím Home, phím
mũi tên, ... luôn tạo nên một ký tự đi theo ASCII 0. Các phím chức năng từ F1
đến F10 sinh ra một trong 4 ký tự tùy theo ta dùng với tổ hợp phím Alt, Ctrl
hay Shift hay dùng một mình.
Các
phím chức năng đặc biệt
Tên phím
|
Bình thường
|
Alt
|
Ctrl
|
Shift
|
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
Home
.
PageUp
. ¬
® .
End
¯ .
PageDn
Ins
Del
|
: (59)
< (60)
= (61)
> (62)
? (63)
@ (64)
A (65)
B (66)
C (67)
D (68)
G (71)
H (72)
I (73)
K (75)
M (77)
O (79)
P (80)
Q (81)
R (82)
S (83)
|
h (104)
i (105)
j (106)
k (107)
l (108)
m (109)
n (110)
o (111)
p (112)
q (113)
|
^ (94)
- (95)
. (96)
a (97)
b (98)
c (99)
d (100)
e (101)
f (102)
g (103)
|
T (84)
U (85)
V (86)
W (87)
X (88)
Y (89)
Z (90)
[ (91)
\ (92)
] (93)
|
Ðể tạo ra một Unit của mình cần đi qua các bước sau:
[Uses
<danh sách các unit>]; {Khai báo các unit dùng trong chương
trình }
[Khai
báo các hằng, kiểu, biến dùng chung] ;
[Khai
báo các thủ tục, hàm (tên, danh sách tham số của thủ tục và hàm] ;
IMPLEMENTATION (* Cài đặt các hàm,
thủ tục của Unit, không có dấu ; ở đây *)
[Các
khai báo kiểu, hằng, biến cục bộ ];
[Nội
dung cài đặt các thủ tục, hàm của unit ];
[BEGIN] (*
Phần khởi tạo : Initialization Part *)
[Các
lệnh khởi tạo ];
END. (*
Dù có BEGIN để khởi tạo hay không, ở đây vẫn có END. *)
Bước 2 : Dịch
file này lên đĩa theo trình tự sau:
i). Gõ Alt - C để vào Menu COMPILE
ii). Ði đến mục Destination và nhấn Enter
để chương trình tự động đổi Memory thành Disk
iii). Gõ C (hoặc F9) để biên dịch chương trình tạo nên một
file .TPU
iv). Khi dịch xong gõ một phím bất kỳ. Sau
đó ta có thể lập lại bước a và b
để chuyển Destination từ Disk sang Memory.
để chuyển Destination từ Disk sang Memory.
Ví dụ 7.11: Tạo một UNIT tính Cộng, Trừ, Nhân, Chia cho học sinh tiểu học. Tên file Unit là TTIEUHOC.PAS với nội dung sau: UNIT TTieuHoc ; {Phần đầu : Chương trình Toán Tiểu học } INTERFACE {Phần giao diện} PROCEDURE Cong (Var So1, So2, So3 : Real) ; PROCEDURE Tru (Var So1, So2, So3 : Real) ; PROCEDURE Nhan (Var So1, So2, So3 : Real) ; PROCEDURE Chia (Var So1, So2, So3 : Real) ; INPLEMENTATION {Phần cài đặt } PROCEDURE Cong ; BEGIN IF So1 + So2 = So3 THEN Writeln ('Giỏi lắm ! Em đã làm đúng! ') ELSE Writeln (' Rất tiếc, em đã làm sai ! '); END; PROCEDURE Tru ; BEGIN IF So1 - So2 = So3 THEN Writeln (' Giỏi lắm ! Em đã làm đúng!') ELSE Writeln (' Rất tiếc, em đã làm sai ! '); END; PROCEDURE Nhan ; BEGIN IF So1 * So2 = So3 THEN Writeln ('Giỏi lắm ! Em đã làm đúng !') ELSE Writeln (' Rất tiếc, em đã làm sai ! '); END; PROCEDURE Chia ; BEGIN IF So2 = 0 THEN Writeln ('Số chia phải khác 0') ELSE IF So1 / So2 = So3 THEN Writeln ('Giỏi lắm! Em đã làm đúng! ') ELSE Writeln (' Rất tiếc, em đã làm sai ! '); END; END. {Chấm dứt UNIT }Sau khi gõ chương trình Unit trên, đổi Compile Destination thành Disk, biên dịch và tạo tập tin TTIEUHOC.TPU trên đĩa.
Chương trình Pascal cho bài toán Cộng, trừ, Nhân, Chia dùng Unit TTIEUHOC: PROGRAM Toan_Tieu_Hoc ; USES CRT, TTieuHoc ; VAR chon : Integer ; So1, So2, So3 : Real ; PROCEDURE Menu (Var chon : integer) ; BEGIN ClrScr ; Writeln (' == TOÁN TIỂU HỌC == ') ; Writeln (' = 0. Chấm dứt = ') ; Writeln (' = 1. Toán cộng = ') ; Writeln (' = 2. Toán trừ = ') ; Writeln (' = 3. Toán nhân = ') ; Writeln (' = 4. Toán chia = ') ; Writeln (‘ ================== ‘) ; Write (' Bạn chọn số mấy ? ') ; Readln (chon); END ; PROCEDURE nhapso (Var So1, So2, So3 : real ); BEGIN Write (' Nhập vào số thứ 1 : ') ; Readln(So1) ; Write (' Nhập vào số thứ 2 : ') ; Readln(So2) ; Write (' Kết quả là : ') ; Readln (So3) ; END ; {=====================Chương Trình Chính ========================} BEGIN CLRSCR; REPEAT Menu (chon) ; CASE chon OF 1 : BEGIN Writeln ; Writeln (' == Toán cộng == ') ; Nhapso(So1, So2, So3) ; Cong(So1, So2, So3) ; END; 2 : BEGIN Writeln ; Writeln (' == Toán trừ == ') ; Nhapso(So1, So2, So3) ; Tru(So1, So2, So3) ; END; 3 : BEGIN Writeln ; Writeln (‘ == Toán nhân == ‘) ; Nhapso(So1, So2, So3) ; Nhan(So1, So2, So3) ; END; 4 : BEGIN Writeln ; Writeln (‘ == Toán chia == ‘) ; Nhapso(So1, So2, So3) ; Chia(So1, So2, So3) ; END; END; {case} Writeln (' Gõ bất kỳ phím nào để tiếp tục ... '); Readln; UNTIL chon = 0; END. {Ngưng làm toán}
Không có nhận xét nào:
Đăng nhận xét