1. Khái Ni m V Unitệ ề
Vi c t o ra các chệ ạ ương trình con trong m t chộ ương trình đã làm cho vi c l pệ ậ
trình đ v t vã h n r t nhi u. Tuy nhiên, các chỡ ấ ơ ấ ề ương trình con này ch có tác d ngỉ ụ
trong chương trình ch a chúng mà thôi, trong m t chứ ộ ương trình khác mu n s d ngố ử ụ
chương trình con này b t bu c ph i vi t l i chúng, nh v y r t m t th i gian. Đắ ộ ả ế ạ ư ậ ấ ấ ờ ể
kh c ph c, ngắ ụ ười ta gom các chương trình con thường s d ng thành m t moduleử ụ ộ
đ c l p và biên d ch s n trên đĩa. Sau đó, b t kỳ chộ ậ ị ẵ ấ ương trình nào cũng có th sể ử
d ng l i các chụ ạ ương trình con này mà không c n ph i vi t l i chúng. Các moduleầ ả ế ạ
nh v y đư ậ ược g i là UNIT. Khái ni m Unit đọ ệ ượ ạc t o ra t version 4.0 c a Turboừ ủ
Pascal.
Có hai lo i UNIT là Unit chu n c a Pascal t o ra và Unit do ngạ ẩ ủ ạ ườ ậi l p trình tự
t o đ ph c v riêng cho mình.ạ ể ụ ụ
2. Các Unit Chu nẩ
a. Gi i thi u m t s Unit chu nớ ệ ộ ố ẩ
- Unit CRT: G m các h ng, ki u, bi n, hàm, th t c liên quan đ n ch đ mànồ ằ ể ế ủ ụ ế ế ộ
hình văn b n (TEXT mode).ả
- Unit PRINTER: G m các h ng, ki u, bi n, hàm, th t c liên quan đ n ch đ in nồ ằ ể ế ủ ụ ế ế ộ ấ
qua c ng LPT1 (Connector DB25).ổ
- Unit GRAPH: G m các h ng, ki u, bi n, hàm, th t c liên quan đ n ch đồ ằ ể ế ủ ụ ế ế ộ
đ h a.ồ ọ
- Unit DOS: G m các h ng, ki u, bi n, hàm, th t c liên quan đ n vi c x lí tr cồ ằ ể ế ủ ụ ế ệ ử ự
ti p các thanh ghi, các ng t và l i g i đ n các hàm ch c năng c a h đi u hànhế ắ ờ ọ ế ứ ủ ệ ề
MS-DOS.
- Unit OVERLAY: G m các h ng, ki u, bi n, hàm, th t c liên quan đ n vi c b tríồ ằ ể ế ủ ụ ế ệ ố
các đo n mã th c thi đạ ự ược truy xu t trên đĩa (n p/ nhã) thay vì đ t h t m t lúc vàoấ ạ ặ ế ộ
b nh khi ch y chộ ớ ạ ương trình.
- Các Unit khác: SYSTEM, TURBO3, GRAPH 3… là các Unit phiên b n 3.0 sả ử
d ng.ụ
Khi mu n s d ng m t Unit nào thì ta ph i khai báo tên Unit đó đ u chố ử ụ ộ ả ở ầ ương trình (tr các unit m c đ nh c a Pascal nh unit SYSTEM) v i cú pháp nh dừ ặ ị ủ ư ớ ư ưới đây.
b. M t s hàm và th t c hay dùng trong Unit CRTộ ố ủ ụ
- ClrScr: Th t c xoá màn hình.ủ ụ
- GotoXY(x, y: Byte): D i con tr t i v trí c t ờ ỏ ớ ị ộ x, dòng y trên màn hình. Thông
thường, màn hình trong TextMode(Co80) có 25 dòng (t dòng 1 đ n dòng 25)ừ ế
và 80 c t (c t 1 đ n c t 80). V y to đ góc trên trái c a màn hình là (1, 1),ộ ộ ế ộ ậ ạ ộ ủ
to đ góc dạ ộ ưới ph i là (80, 25)ả 10.
- Delay(ms: Word): Th t c trì hoãn chủ ụ ương trình trong ms mili-giây.
- Sound(hz: Word): Th t c phát ra âm thanh qua loa bên trong (internal speaker)ủ ụ
v i t n s ớ ầ ốhz.
- Nosound: Th t c ng ng phát ra âm thanh.ủ ụ ừ
- Keypressed: Hàm cho k t qu là TRUE n u có m t phím đế ả ế ộ ượ ấc n.
- Readkey: Hàm cho k t qu là mã ASCII c a ký t khi phím đế ả ủ ự ượ ấc n.
- TextBackGround(color: Byte): Th t c ch n màu n n. Ta có th đ t màu n nủ ụ ọ ề ể ặ ề
cho toàn màn hình b ng cách đ t l nh này v a trằ ặ ệ ừ ướ ệc l nh ClrScr.
- TextColor(color: Byte): Th t c ch n màu cho ch . ủ ụ ọ ữ
Dưới đây là danh sách các h ng màu mà Pascal đ nh s n.ằ ị ẵ
· Black = 0 Đen.
· Blue = 1 Xanh dương. · Green = 2 Xanh l c.ụ
· Cyan = 3 Xanh tr ng sáo.ứ
· Red = 4 Đ .ỏ
· Magenta = 5 Tím cánh sen.
· Brown = 6 Nâu.
· LightGray = 7 Xám sáng. · DarkGray = 8 Xám t i.ố
· LightBlue = 9 Xanh dương sáng. · LightGreen = 10 Xanh l c sáng.ụ
· LightCyan = 11 Xanh tr ng sáo sáng.ứ
· LightRed = 12 Đ sáng.ỏ
· LightMagenta = 13 Tím cánh sen sáng. · Yellow = 14 Vàng.
· White = 15 Tr ng.ắ
(8 h ng tr đ u tiên t Black đ n LightGray áp d ng cho c màu ch l nằ ị ầ ừ ế ụ ả ữ ẫ
màu n n. Các h ng tr còn l i ch áp d ng cho màu ch ).ề ằ ị ạ ỉ ụ ữ
Unit CRT cũng thi t l p bi n h th ng TextAttr đ xác đ nh ch đ màuế ậ ế ệ ố ể ị ế ộ
c a màn hình văn b n hi n t i. Ví d đ thi t l p màn hình có màu chủ ả ệ ạ ụ ể ế ậ ữ
xanh l c sáng trên n n xanh da tr i ta thi t l p câu l nh gán:ụ ề ờ ế ậ ệ
TextAttr:=LightGreen+16*Blue;
II. THI T L P UNITẾ Ậ
1. Các Bước T o M t Unitạ ộ
a. Bước 1
T o ra m t t p tin Pascal có đuôi ạ ộ ậ .PAS và có c u trúc nh trình bày dấ ư ưới đây, l u ý là tên c a unit ph i trùng v i tên t p tin.ư ủ ả ớ ậ
10 Hi n nay đ i v i các màn hình TextMode gi l p c a Windows khi ch y Borland Pascal có th đệ ố ớ ả ậ ủ ạ ể ược thi tế l p m c đ nh t i 80 c t và 50 dòng. Sinh viên ph i th c th trên màn hình. M t s màn hình LCD wide screenậ ặ ị ớ ộ ả ử ụ ể ộ ố cũng có th cho s c t l n h n! H u nh các projector hi n nay h tr kém ch đ văn b n. C n c n th n khiể ố ộ ớ ơ ầ ư ệ ỗ ợ ế ộ ả ầ ẩ ậ l p trình đ hi n th (cu i cùng) trên projector.ậ ể ể ị ố
UNIT <Tên Unit>; {Tên unit b t bu c ph i trùng v i tên t p tin}ắ ộ ả ớ ậ
INTERFACE {Không có d u ; đây}ấ ở
{Đây là ph n giao di n c a Unit. Trong ph n này chúng ta s khai báo các unitầ ệ ủ ầ ẽ
đã có mà các unit này s d ng, khai báo các h ng, ki u, bi n mà các chử ụ ằ ể ế ương trình khác s s d ng. Khai báo các hàm, th t c mà chẽ ử ụ ủ ụ ương trình khác s g iẽ ọ
t i, ch khai báo tên chớ ỉ ương trình con, các tham s , ki u k t qu . Nh ng hàm,ố ể ế ả ữ
th t c thi t l p ph n sau mà không khai báo trong ph n này thì các chủ ụ ế ậ ở ầ ầ ương trình khác không g i t i đọ ớ ược.}
IMPLEMENTATION {Không có d u ; đây}ấ ở
{Đây là ph n hi n th c các hàm, th t c đã khai báo trong ph n Interface.ầ ệ ự ủ ụ ầ
Trong ph n này n u có các chầ ế ương trình con được dùng riêng bên trong Unit mà không khai báo trong ph n Interface, các chầ ương trình con này s khôngẽ
th truy c p để ậ ược b i ngở ười dùng Unit.} BEGIN
{Ph n ch a các câu l nh s đầ ứ ệ ẽ ược th c thi ngay trự ước khi câu l nh đ u tiênệ ầ
c a chủ ương trình g i Unit này đọ ược th c hi n. Ph n này không b t bu c ph iự ệ ầ ắ ộ ả
có, tuy nhiên trong trường h p đó v n ph i gi l i t khóa “END.” dợ ẫ ả ữ ạ ừ ưới đây.}
END.
b. Bước 2
Unit không được thi t k đ ch y mà đ biên d ch đ t lên đĩa nên ta khôngế ế ể ạ ể ị ặ
th nh n CTRL+F9 mà làm theo trình t sau:ể ấ ự Ch n menu ọ Compile (Alt + C).
Ti p t c ch n ế ụ ọ Destination đ chuy n thành ể ể Disk. L u ýư : Destination Disk là t o unit lên đĩa, Memory là t o unit lên b nh RAM.ạ ạ ộ ớ
Ch n l i menu ọ ạ Complie và ch n ti p ch c năng ọ ế ứ Complie (Alt + F9). Lúc này trên đĩa xu t hi n t p tin là tên c a unit ta t o v i ph n m r ngấ ệ ậ ủ ạ ớ ầ ở ộ
là TPU.
K t đây, ta có th s d ng unit này b ng cách g i nó trong câu l nh USESể ừ ể ử ụ ằ ọ ệ
nh đã nói trên.ư
2. Ví d ng d ngụ ứ ụ
Dưới đây là chương trình t o ra m t unit đ n gi n có 3 hàm là ạ ộ ơ ả HamMu để
tính a mũ n (an), GiaiThua đ tính ể n giai th a (ừ n!) và USCLN đ tính ể ướ ốc s chung l n nh t c a hai s nguyên không âm..ớ ấ ủ ố
Unit MyUnit; {Trùng tên v i t p tin MyUnit.pas}ớ ậ
INTERFACE
Function HamMu(a: Real; n: Integer): Real; Function GiaiThua(n: Integer): Longint;
Function USCLN(X,Y:Word):word;
IMPLEMENTATION
Function HamMu(a: Real; n: Integer): Real; Var tam: Real;
i: Integer; Begin tam := 1; For i:=1 to n do tam := tam * a; HamMu := tam; End;
Function GiaiThua(n: Integer): Longint; Var tam: Longint;
i: Integer; Begin tam := 1; For i:=1 to n do tam := tam * i; GiaiThua := tam; End;
Procedure HoanChuyen(var x,y:word); VAR Tam:word;
BEGIN
Tam:=x; x:=y; y:=Tam; END;
Function USCLN(x,y:Word):word; BEGIN
While (y<>0) DO Begin
IF (x<y) THEN HoanChuyen(x,y) ELSE x:=x-y;
End;
USCLN:=x; END;
END.
Sau khi biên d ch ta s có t p tin unit là MyUnit.TPU. Khi s d ng unit nàyị ẽ ậ ử ụ
người dùng có th g i các hàm đã khai báo trong ph n INTERFACE nh ngể ọ ầ ư
không th g i t i Procedure HoanChuyen để ọ ớ ược.
III. T PẬ TIN TURBO.TPL
File \BP\BIN\TURBO.TPL (Turbo Pascal Library) là t p tin th vi n gom cácậ ư ệ
Unit thường dùng nh t vào m t t p tin duy nh t và đấ ộ ậ ấ ược n p vào b nhạ ộ ớ
th vi n này mà không c n đ c đĩa. M c đ nh, sau khi cài đ t, TURBO.TPLư ệ ầ ọ ặ ị ặ
ch a các Unit SYSTEM, DOS, OVERLAY, PRINTER, CRT. Riêng đ i v iứ ố ớ
Unit System.tpu ta không c n ph i khai báo “USES SYSTEM;” đ s d ngầ ả ể ử ụ
các th t c writeln hay readln .v.v. ủ ụ
Pascal cũng cho phép ta g b kh i TURBO.TPL các Unit không c n thi tỡ ỏ ỏ ầ ế
ho c thêm vào đó các Unit khác b ng cách ch y fileặ ằ ạ
\BP\BIN\TPUMOVER.EXE.
TPUMOVER.EXE ch y trong môi trạ ường DOS. Cú pháp s d ng nh sau:ử ụ ư • H i cú pháp s d ngỏ ử ụ :
TPUMOVER.EXE
• Xem m t t p tin th vi n đang ch a các Unit nàoộ ậ ư ệ ứ : TPUMOVER.EXE <Tên t p tin th vi n> ậ ư ệ • Thêm/ b t/trích m t Unit kh i t p tin th vi nớ ộ ỏ ậ ư ệ :
TPUMOVER.EXE <Tên t p tin th vi n> <Tác v > ậ ư ệ ụ
Trong đó <tên t p tin th vi n> là t p tin có đuôi file m c đ nh là .TPLậ ư ệ ậ ặ ị
Và tác v là m t trong 3 trụ ộ ường h p sau đây:ợ
<+UnitName> : Đ thêm Unit UnitName này vào t p tin th vi n.ể ậ ư ệ
<-UnitName> : Đ lo i Unit UnitName này kh i t p tin th vi n.ể ạ ỏ ậ ư ệ
<*UnitName> : Đ trích Unit UnitName này kh i t p tin th vi n.ể ỏ ậ ư ệ
B n c n c n th n khi lo i m t Unit ra kh i t p tin th vi n. Đ an toàn, t tạ ầ ẩ ậ ạ ộ ỏ ậ ư ệ ể ố
h n h t nên trích xu t nó ra đã … trơ ế ấ ước khi làm thao tác lo i b .ạ ỏ
Ví d :ụ
Thêm MyUnit.TPU vào t p tin th vi n TURBO.TPL :ậ ư ệ
TPUMOVER.EXE TURBO.TPL +MyUnit.TPU
Xem coi t p tin th viên TURBO.TPL đang ch a các Unit nào:ậ ư ứ
TPUMOVER.EXE TURBO.TPL
G Unit OVERLAY.TPU kh i TURBO.TPL:ỡ ỏ
TPUMOVER.EXE TURBO.TPL -OVERLAY.TPU