You are on page 1of 207

TRNG I HC NNG NGHIP I - H NI

B MN CNG NGH PHN MM



TS. DNG XUN THNH









Gio trnh
LP TRNH NNG CAO
( Trn ngn ng Pascal )
(Son theo chng trnh c B GD&T ph chun)

















H ni, 2005
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 2

Li m u

Cun gio trnh ny c bin son theo ng cng chi tit mn hc c B
Gio dc v o to ph chun. Thi gian hc mn hc ny l 60 tit trong c 10 tit thc
hnh trn my. Tc gi l ngi trc tip ging dy lp trnh Pascal trong nhiu nm cho
sinh vin chuyn tin v sinh vin cc ngnh khc.
i tng s dng gio trnh l sinh vin chuyn ngnh Tin hc h i hc chnh quy,
tuy nhin gio trnh cng c th s dng nh l mt ti liu tham kho cho sinh vin chuyn
Tin h cao ng v nhng ngi mun nghin cu nng cao v lp trnh.
Mc ch bin son cun gio trnh l cung cp cho ngi c mt ti liu n gin,
c ng nhng kin thc v lp trnh nng cao. Ngi c c th t hc m khng nht thit
phi c thy hng dn.
Gio trnh bao gm 6 chng v 4 ph lc.
Chng 1: Chng trnh con - Th tc v hm, sinh vin c hc qua trong
chng trnh Tin hc i cng, do vy y ch yu i su vo khi nim tham s, cch
thc m h thng dnh b nh cho vic lu tr cc tham s v vic gi chng trnh con t
chng trnh con khc.
Chng 2: Cc kiu d liu c cu trc, tp trung vo cc kiu d liu m sinh vin
cha c hc nh bn ghi c cu trc thay i, tp hp..
Chng 3: n v chng trnh v th vin chun, l chng cha c hc Tin
hc i cng , y hng dn cch thit k cc n v chng trnh (Unit), cch thc s
dng cc Unit v to lp th vin chng trnh .
Chng 4: Con tr v cu trc ng, l mt chng kh, v n va lin quan n
qun l b nh, va lin quan n kin thc ca mn hc Cu trc d liu v Gii thut do
vy trong chng ny trnh by nhiu v d ngi c tham kho.
Chng 5: Gii thut quy, c trnh by hi di dng do c th ca tnh
quy. Bi ton Thp Hanoi c m t khc hon ton so vi tt c cc sch v Pascal c.
Chng 6: ho, ngoi vic gii thiu cc th tc v thng thng, cn dnh mt
phn trng tm cho vic x l nh Bitmap. Trong chng ny c s dng mt vi v d ca
cc tc gi khc (xem phn ti liu tham kho) nhng c ci tin i rt nhiu.
Ph lc 1: Bng m ASCII
Ph lc 2: Tm tt cc th tc v hm ca Turbo Pascal 7.0
Ph lc 3: nh hng bin dch
Ph lc 4: Thng bo li
Cc ph lc a ra nhm gip ngi lp trnh tin tra cu cc th tc, hm v x l
cc li khi Pascal thng bo li trn mn hnh
Do phi bm st cng v s hn ch v s trang tc gi nn trong gio trnh cha
a vo c phn x l m thanh, lp trnh hng i tng....
Vic bin son ln u khng th trnh c thiu st, tc gi mong nhn c s gp
ca bn c v ng nghip ln xut bn sau s tt hn. Mi gp xin gi v a ch:
B mn Cng ngh Phn mm, Khoa Cng ngh Thng tin,
i hc Nng nghip I , Tru qu, Gia lm, H ni.
Xin trn trng cm n.
H ni, thng 5 nm 2005

Ts. Dng Xun Thnh
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 3





Chng I

Chng trnh con - Th tc v hm





Khi nim chng trnh con c trnh by trong mn hc Tin hc i cng, do vy
trong chng ny chng ta nhc li s qua mt s khi nim c v dnh thi gian cho vic tm
hiu su v tham s (tham bin v tham tr), li gi chng trnh con, cch thc b tr
chng trnh con trong thn chng trnh m. Sau khi hc chng ny bn c cn nm c
cc ni dung ch yu sau:
Th no l bin ton cc, bin a phng
Cc bin ton cc v bin a phng c b tr u
Tm tc dng ca tng loi bin
Th t xy dng cc chng trnh con c nh hng th no n ton b chng
trnh
Th no l tnh quy ca chng trnh con
Li gi chng trnh con th no l c php
Cch khai bo trc gi chng trnh con khng theo th t thit k


Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 4
1. Khi nim v chng trnh con

Chng trnh con trong Pascal c hiu l mt chng trnh nm trong lng mt
chng trnh khc. Chng trnh con gm hai loi: Th tc (Procedure) v hm
(Function). Cc chng trnh con c dng rng ri khi xy dng cc chng trnh ln
nhm lm cho chng trnh d theo di, d sa cha. Mt c im ni bt ca chng trnh
con l n c tnh quy nh th m nhiu bi ton s c gii quyt d dng.
Khi mt chng trnh con c gi th cc bin c khai bo trong chng trnh con
(ta gi l bin cc b) s c cp pht b nh. Kt thc chng trnh con, cc bin cc b
c gii phng, iu ny s c lp li mi khi chng trnh con c gi v n ng
ngha vi vic thi gian x l bi ton s tng ln.
Bn thn tn gi ca hai loi chng trnh con ni ln phn no s khc nhau gia
chng. Function (Hm) l mt loi chng trnh con cho kt qu l mt gi tr v hng. Khi
gi tn Function vi cc tham s hp l ta s nhn c cc gi tr, bi vy tn hm c th
a vo cc biu thc tnh ton nh l cc ton hng. Procedure l loi chng trnh con khi
thc hin khng cho ra kt qu l mt gi tr, mi Procedure nhm thc hin mt nhm cng
vic no ca chng trnh m, v vy tn ca Procedure khng th a vo cc biu thc
tnh ton. Bng cch xy dng cc chng trnh con ngi lp trnh c th phn mnh chng
trnh cho nhiu ngi cng lm di s ch o thng nht ca ngi ch tr. Trong Turbo
Pascal c sn mt s chng trnh con, v d: sin(x), sqrt(x).... l cc Function, cn read(),
write(), gotoxy (x1,x2)..... l cc Procedure.
Trong mt chng trnh cc chng trnh con c b tr ngay sau phn khai bo
bin. Cu trc tng qut mt chng trnh Pascal nh sau:

PROGRAM tn_chng_trnh;
USES tn cc UNIT; (*khai bo cc n v chng trnh cn thit*)
LABEL (*khai bo nhn*).
CONST (*Khai bo hng*)
TYPE (*nh ngha kiu d liu mi*)
VAR (*khai bo bin*)

PROCEDURE Tn_CTC1 (danh sch tham s hnh thc);
Begin
............ (*thn th tc th nht*).
End;

PROCEDURE Tn_CTC2 (danh sch tham s hnh thc);
Begin
................... (*thn th tc th hai*)
End;


Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 5
FUNCTION Tn_HAM1(danh sch tham s hnh thc):kiu hm;
Begin
............... (*thn hm th nht*)
End;
...........

BEGIN (*bt u chng trnh m*)
..........
END.

Ghi ch:
1. Cc chng trnh con v nguyn tc cng bao gm cc phn khai bo bo nh i
vi mt chng trnh m, phn no khng cn thit th khng khai. iu khc nhau c bn l
thn chng trnh con nm gia hai t kho Begin v End; (sau End l du ";" ch khng
phi l du "." nh trong chng trnh m) ngoi ra chng trnh con cn c th thm phn
khai bo cc tham s hnh thc, cc tham s hnh thc c t trong du () v vit ngay sau
tn chng trnh con.
2. Nu chng trnh con l Function th cui chng trnh cn c lnh gn gi tr vo
tn chng trnh con.

2. Tham s trong chng trnh con

Cc chng trnh con c th khng cn tham s m ch c cc bin ring (bin cc
b). Trong trng hp cn nhn cc gi tr m chng trnh m truyn cho th chng trnh
con cn phi c cc tham s (Parameter). Tham s c khai bo ngay sau tn chng trnh
con v c gi l tham s hnh thc.
Nhng gi tr lu tr trong cc bin ton cc ca chng trnh m, nu c truyn
cho cc th tc hoc hm thng qua li gi tn chng th c gi l Tham s thc.
Tham s hnh thc bao gm hai loi:
2.1 Tham bin (Variabic parameter)
Tham bin l nhng gi tr m chng trnh con nhn t chng trnh m, cc gi tr
ny c th bin i trong chng trnh con v khi chng trnh con kt thc cc gi tr ny s
c tr v cho tham s thc.
Cch khai bo tham bin:
Tn chng trnh con (Var tn tham bin : kiu d liu);

2.2 Tham tr (Value parameter)
Nhng tham s truyn vo cho chng trnh con x l nhng khi quay v chng
trnh m vn phi gi nguyn gi tr ban u th c gi l tham tr.
Cch khai bo tham tr:
Tn chng trnh con (tn tham tr : kiu d liu);
Di y l mt v d khai bo tham s:
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 6
PROCEDURE VIDU(x,y,z: integer; lam:boolean; var qq: char);
Cu lnh khai bo chng trnh con trn y ng thi khai bo cc tham s hnh thc
trong x, y,z, lam l cc tham tr, vi x, y,z c kiu integer, lam c kiu boolean, qq l tham
bin v n c vit sau t kho VAR.

V d 1.1: Lp chng trnh tm s ln nht trong n s nguyn c nhp t bn
phm.

Program Tim_cuc_dai;
Uses Crt;
TYPE dayso = array[1..100] of integer; (* nh ngha kiu d liu dayso l kiu mng
gm nhiu nht l 100 phn t*).
VAR a: dayso (*khai bo bin ca chng trnh m*)
n: integer;
PROCEDURE nhapso(m:integer; var x:dayso);
(* Nhp dy s cn tm cc i vo mng mt chiu x[i]*)
Var i : integer; (*khai bo bin cc b ca chng trnh con*)
Begin
writeln('Nhap day so kieu integer);
For i:=1 to m Do (* m c truyn t chng trnh m qua tham s thc n*)
Begin
write('a[', i , '] = '); realln (x[i]);
End; End;
FUNCTION Max(m: integer; b:dayso); integer;
(* Hm MAX dng tm s ln nht trong dy s nhp, kiu gi tr ca hm l kiu integer *)
VAR
i,t: integer; (* Bin ring ca hm Max *)
Begin
t:=b[1]; (* Gn phn th nht ca mng b[i] cho bin t *)
For i:=2 to m Do
if t<b [i] then t:=b[i];
Max:=t; (* Gn gi tr cho chnh hm Max*)
End;
BEGIN (* Thn chng trnh m *)
Write('Ban can nhap bao nhieu so ? '); Readln(n);
NHAPSO(N, A); (* Gi chng trnh con NHAPSO vi 2 tham s thc l n v a. Hai tham
s ny s thay th cho hai tham s hnh thc m, x trong chng trnh con *)
Writeln (' So lon nhat trong day so da nhap = ', MAX(n,a):5);
(* Vit ra gi tr ca hm MAX vi 2 tham s thc n,a di s l 5 k t *)
Repeat until keypressed;
END.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 7
V d1.1 l mt chng trnh bao gm hai chng trnh con, chng trnh con th
nht l mt th tc (Procedure), chng trnh con th hai l mt hm (Function).
Chng trnh m c lnh c s phn t n ca mng dayso (tc l s lng con s s
nhp vo). V mng Dayso c khai bo c 100 phn t nn khng th c vo nhiu qu
100 con s.
Sau l lnh gi chng trnh con NHAPSO vi 2 tham s thc l n, a, y a l
tham bin ngha l gi tr ca mng a s c thay i trong chng trnh con bi tham s
hnh thc x[i]. Chng trnh con nhp vo tham bin x[i] kiu mng n con s thng qua tham
tr m (m=n).
Lnh vit gi tr ln nht ca dy s c km li gi hm MAX v hm MAX thc cht
trong trng hp ny ch l mt con s.
Hm MAX dng tm s ln nht trong cc s nhp, li gi hm trong chng
trnh m km theo vic truyn hai tham s thc l n v a thay th cho hai tham s hnh thc l
m v b. Tn hm c dng nh l mt bin trong bn thn hm khi ta dng php gn gi tr
MAX:=t;

Ch :
1. Kiu d liu trong khai bo tham s hnh thc ch c th l: s nguyn, s thc, k
t, hoc Boolean. Nu mun a cc kiu d liu c cu trc vo trong khai bo tham s th
phi nh ngha trc kiu d liu ny phn khai bo kiu sau t kho Type (xem v d 1.1).
2. Vi kiu d liu chui, nu chng ta khai bo tham s thc trong chng trnh m
v tham bin trong chng trnh con u l STRING (khng quy nh di ti a ca chui)
th khng cn phi nh ngha trc kiu d liu phn TYPE. thy r vn chng ta
xt v d sau y:

V d: 1.2
Program Chuong_trinh_me;
Var s:string; m:byte
Procedure Chuong_trinh_con( Var a:string; n:byte);
Cch khai bo trn l c php trong Pascal .
Nu chng ta quy nh di chui nh mt trong ba dng sau th s b bo li:

Dng th nht
Program Chuong_trinh_me;
Var s:string[30]; m:byte
Procedure Chuong_trinh_con( Var a:string[30]; n:byte);

Dng th hai
Program Chuong_trinh_me;
Var s:string[30]; m:byte
Procedure Chuong_trinh_con( Var a:string; n:byte);

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 8
Dng th ba
Program Chuong_trinh_me;
Var s:string; m:byte
Procedure Chuong_trinh_con( Var a:string[30]; n:byte);
Tuy nhin c mt ngoi l khi tham s hnh thc trong cc chng trnh con khng
phi l tham bin m l tham tr th c th khai bo theo dng th hai.
Mun quy nh di chui trong cc khai bo tham bin th phi khai bo kiu d
liu theo mu sau:

Program Chuong_trinh_me;
Type S1 = string[30];
Var s:s1; m:byte
Procedure Chuong_trinh_con( Var a:s1; n:byte);

3. Truyn tham s cho chng trnh con

Tr li v d 1.1 ta thy trong mi chng trnh con c nhng tham s ring ca mnh.
Chng trnh con nhp s s dng hai tham s hnh thc l m v x. Hai tham s ny c
chun b nhn cc gi tr m chng trnh m truyn cho thng qua li gi chng trnh
con vi cc tham s thc l n v b. V m c khai bo kiu khng c t kho Var nn n l
tham tr, ngha l khi chng trnh con kt thc th gi tr ca tham s thc n vn khng thay
i, tham s x l tham bin v n c khai bo sau t kho Var.
Khi tham s hnh thc trong chng trnh con l tham bin th tham s thc trong
chng trnh m phi l bin ch khng th l hng. Trong mi trng hp c hai tham s
thc v tham s hnh thc u phi cng kiu d liu.
Cc tham s thc truyn cho tham bin th gi tr ca n c th thay i trong chng
trnh con, khi ra khi chng trnh con n vn gi nguyn cc gi tr thay i . Trong v
d 1.1 tham s thc a l mt mng ca n phn t v tt c cc phn t u cn rng, khi
truyn a vo tham bin x th thi im ban u cc phn t ca x cng rng. Php gn trong
chng trnh con NHAPSO s lm thay i gi tr cc phn t ca x, sau khi ra chng trnh
con n gi nguyn cc gi tr gn tc l cc gi tr ta nhp t bn phm vo cc phn t ca
mng.
Khi tham s hnh thc l tham tr th tham s thc phi l mt gi tr. Chng trnh
con nhn gi tr ny nh l gi tr ban u v c th thc hin cc php tnh lm bin i gi
tr , qu trnh ny ch tc ng trong ni b chng trnh con, khi ra khi chng trnh con
gi tr ca tham s thc khng bin i. C th trong v d trn bin n nhn gi tr c t bn
phm trong chng trnh m v c truyn cho tham s m trong c hai chng trnh con. Sau
li gi chng trnh con NHAPSO gi tr ny c th b thay i nhng khi ri NHAPSO n
li gi hm MAX th n li vn gi gi tr ban u.
Nh vy nu mun bo v gi tr mt tham s no khi truyn chng cho chng
trnh con th phi qui nh chng l tham tr. Cn nu mun nhn li gi tr m chng trnh
con sinh ra thay th cho nhng gi tr ban u c trong chng trnh m (hoc l dng
nhng gi tr ca chng trnh con thay th cho bin cha c gn gi tr trong chng trnh
m nh vi d 1.1) th tham s phi l tham bin.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 9
thy r hn ngha ca cc tham s chng ta xt v d sau y:
Ngi m trao cho con trai mt chic nhn v mt ti tin. Trc khi con i lm n
phng xa m dn: "Chic nhn l tn vt dng nhn li gia nh v h hng khi con tr v,
cn ti tin l vn ban u cho con kinh doanh".
Trong qa trnh lm n, ngi con c th cm c chic nhn nhng khi tr v nh nht
thit phi mang chic nhn v, cn ti tin khi quay v c th nhiu ln cng c th t i,
thm ch khng cn ng no. Trong v d ny chic nhn ng vai tr tham tr, cn ti tin
ng vai tr tham bin.
Vn t ra l Pascal lm th no m bo cc tnh cht ca tham tr v tham
bin. iu ny s c lm r khi nghin cu vic b tr b nh (mc 5).

Khi la chn tham s cn lu mt s im sau:

a. Kiu ca tham s trong chng trnh con phi l cc kiu v hng n gin
c nh ngha sn trong Pasacl hoc c nh ngha trong phn u ca chng trnh
m. Trong chng trnh con khng th nh ngha kiu d liu mi.
b. Chng trnh con c thc s cn tham s hay khng? Nu chng trnh con ch s
dng cc bin ton cc v bin a phng cng p ng c yu cu ca bi ton th khng
nn dng tham s. Nu chng trnh con thc hin nhiu cng vic trn cng mt loi i
tng (i tng y c th l hng, bin, hm, th tc, kiu), ngha l li gi chng trnh
con c lp li nhiu ln trn cng mt hoc mt nhm i tng th cn dng n tham s.
c. Nu khng mun thay i gi tr ca cc tham s thc trong chng trnh m khi
truyn n cho chng trnh con th phi dng tham s hnh thc di dng tham tr (trong
phn khai bo kiu khng c t kho Var). Nu cn thay i gi tr ca tham s thc trong
chng trnh m v nhn li gi tr m chng trnh con x l th tham s trong chng
trnh con phi l tham bin (tn tham s phi t sau t kho Var).

4. Bin ton cc v bin a phng

4.1 Bin ton cc
Bin khai bo u chng trnh m c gi l bin ton cc. N c tc dng trong
ton b chng trnh, k c cc chng trnh con. Khi thc hin chng trnh my dnh cc
nh vng d liu (Data) lu gi gi tr ca bin.
M rng ra tt c cc i tng trong Pascal (Kiu d liu, Hng, Bin, Hm, Th
tc) khai bo trong chng trnh m c gi l i tng ton cc. Nh vy mt kiu d liu
c nh ngha trong chng trnh m th ng nhin c php s dng trong cc
chng trnh con ca n.
Trong v d 1.1 bin a v n l bin ton cc, hai bin ny c th s dng trc tip
trong th tc NHAPSO v trong hm MAX m khng cn khai bo li.
Pascal dnh cc nh vng Data (vng d liu) cho cc i tng ton cc.
4.2 Bin a phng
Nhng i tng khai bo trong chng trnh con ch c tc dng trong ni b
chng trnh con , chng c gi l i tng a phng. i tng hay c s dng
nht l Bin.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 10
Bin a phng c th trng tn vi bin ton cc song h thng dnh cc nh
trong vng nh ngn xp (Stack) lu gi cc gi tr ca bin. Kt thc chng trnh con h
thng s gii phng nh ca bin a phng dng vo vic khc, gi tr ca cc bin lu
tr trong cc nh ny s khng cn.
Trng hp trong chng trnh con li c cc chng trnh con khc th bin a
phng ca chng trnh con cp trn li c xem l bin ton cc i vi chng trnh con
cp di.
Mt bin sau khi c khai bo trong mt chng trnh s ch c tm tc dng trong
bn thn chng trnh v cc chng trnh con ca n. Bin ny khng c tc dng trong
cc chng trnh cng cp khc hoc trong cc chng trnh con ca chng trnh khc. iu
ny c ngha l cc chng trnh con v chng trnh m c th c nhiu bin trng tn,
nhng tm tc dng th khc nhau do tnh ton vn ca d liu lun c bo m.

V d 1.3
Program Chuong_trinh_con;
Uses crt;
Var i,n:byte; c1:string[30];
Procedure Bien_dia_phuong;
Var i,n:byte; c1:string[30];
Begin
n:=3;
C1:='Thu do Ha noi';
Writeln('Gia tri n trong chuong trinh con: ',n);
Writeln('Chuoi C1 trong chuong trinh con: ',C1);
end;
Begin (* thn chng trnh m *)
Clrscr;
Bien_dia_phuong;
Writeln;
n:=0;
for i:= 1 to 10 do n:= n+i;
c1:='Happy Birth Day';
Writeln('Gia tri n trong chuong trinh me: ',n);
Writeln('Chuoi C1 trong chuong trinh me: ',C1);
Readln;
End.
V d 1.3 thit k mt chng trnh m v mt chng trnh con di dng th tc.
Phn khai bo bin trong c hai l nh nhau. Php gn d liu vo bin n v chui C1 l khc
nhau.
Sau li gi chng trnh con Bien_dia_phuong mn hnh xut hin:
Gia tri n trong chuong trinh con: 3
Chuoi C1 trong chuong trinh con: Thu do Ha noi
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 11
Tip l kt qu cc lnh vit trong chng trnh m:

Gia tri n trong chuong trinh me: 55
Chuoi C1 trong chuong trinh me: Happy Birth Day

Li gi chng trnh con c thc hin trc, kt qu l bin n mang gi tr 3, cn
chui C1 l ' Thu do Ha noi '. Khi tr v chng trnh m bin n =55 cn chui C1 = ' Happy
Birth Day' . iu ny c ngha l bin n v C1 trong chng trnh con khng nh hng n
bin n v C1 trong chng trnh m.

5. Cch thc b tr b nh

Khi mt chng trnh Pascal dng EXE c chy my s cp pht mt vng nh c
s 640 Kb. Vng nh ny s bao gm cc nh nm lin nhau ngha l a ch cc nh tng
lin tc.

Phn loi vng nh Tn vng Dung lng
Cao Heap 0 - 655360 Bytes
Stack Segment 16 - 64 Kb
Data Segment 64 Kb
Code Segment Mi on c 64 Kb
Thp Program Segment Prefix 256 Bytes

Hnh 1.1

Chng trnh c b tr trong b nh nh sau:
* Program Segment Prefix: ghi a ch cc hm, bin, th tc
* Code Segment: lu m chng trnh chnh v m cc Unit lin quan n chng
trnh, vng ny c th gm nhiu on, mi on 64 Kb.
* Data Segment: lu tr cc bin, hng, kiu ca chng trnh chnh, vng ny ch c
64 Kb nn nu chng trnh chnh c qu nhiu hng, bin th c th gp li: Too many
variables
* Stack Segment: Lu m chng trnh con v bin a phng
* Heap: vng nh t do dng cho vic cp pht ng
Cc tham tr v bin cc b khai bo trong chng trnh con c b tr vo cc
nh ca Stack. Khi chng trnh m gi v truyn tham s cho chng trnh con th gi tr
ca cc tham s ny s c sao chp vo cc nh b tr stack. Mi bin i din ra
trong stack khng nh hng n cc gi tr ca tham s thc trong chng trnh m.
Vi cc tham bin, Pascal khng b tr nh ring m s dng con tr tr vo a ch
ca nh cha bin ton cc. Khi chng trnh con lm thay i gi tr ca cc tham bin th
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 12
cng c ngha l n lm thay i gi tr ca cc bin ton cc trong chng trnh m. Kt thc
chng trnh con ch cc bin a phng l b gii phng cn bin ton cc khng b gii
phng cho nn chng ta ni chng trnh con mang cc gi tr mi v cho chng trnh
m.
Cn ch rng Pascal 7.0 ch dnh 16 Kb cho vng Stack, dung lng ny p ng
y cc ng dng thng thng. Vi nhng ng dng s dng tnh quy m s ln gi
quy l qu ln th s c th b li: Stack Overflow (b nh ngn xp b trn).

Gp trng hp ny cn phi m rng vng nh Stack bng cch sau:
Trn thanh thc n chn Options/Memory Size s xut hin ca s (hnh 1.2)


Hnh 1.2

Stack size 16384: dung lng hin thi ca Stack
Size of your program's stack segment (between 1024 and 65520)
C th thay i dung lng Stack trong khong 1024 - 65520 Bytes
Mun thay i dung lng ca Stack chng ta ch vic g dung lng mi thay vo
v tr 16384 hin thi.
Cc tham s:
Low heap limit 0
High heap limit 655360 L vng nh t do dnh cho cp pht ng, khng nn
nhm chng vi gi tr ti thiu v ti a ca Stack.

6. Tnh qui ca chng trnh con

Thng thng li gi mt chng trnh con ch c thc hin khi chng trnh con
c thit k hon chnh. Tuy nhin Pascal cho php mt chng trnh con ngay trong
qu trnh xy dng li c th gi ti chnh n, khng nhng th t mt chng trnh con cn
c th gi ti cc chng trnh con khc cng cp hoc chng trnh con cp cao hn n.
Memory Sizes
Stack size 16384
Low heap limit 0
High heap limit 655360




F1 Help - Size of your program's stack segment (between 1024 and 65520)

OK Cancel Help
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 13
Mt chng trnh con c th c li gi ti chnh tn chng trnh con , tnh cht ny
c gi l tnh " qui ca chng trnh con". quy c th s dng trong c Procedure v
Function. Ging nh mng trong Pascal tng ng vi ma trn trong ton, quy trong
Pascal tng ng vi tnh Quy np trong ton hc. V iu ny chng ta s cp n
trong chng V Gii thut quy.

7. Li gi chng trnh con

Mt chng trnh m c th c nhiu chng trnh con trc thuc, bn trong mi
chng trnh con li c th c cc chng trnh con ring. Ni cch khc trong Pascal tn ti
mt lp chng trnh con ngang cp nhau, mi chng trnh con ny li c th ng vai tr
chng trnh m ca mt lp chng trnh con khc.
Khi thit k, mi chng trnh con phi l mt khi ring bit khng th lng nhau
hoc c cc lnh nhy Goto t chng trnh con ny ti chng trnh con khc.

7.1 Gi chng trnh con t trong chng trnh m
Li gi chng trnh con c th t bt k ch no trong chng trnh m. Nu
chng trnh con l mt th tc th li gi chng trnh con (tc l tn chng trnh con) c
th to nn mt cu lnh, v d:
Readln; Gotoxy(5,8);
Nu chng trnh con l hm th tn hm khng th to nn mt cu lnh, ni khc i
tn hm phi nm trong mt biu thc hay trong mt th tc no , v d vi hm khai cn
bc hai SQRT() chng ta khng th vit
sqrt(9);
iu ny l d hiu v hm cho ta gi tr v hng, gi tr ny khng phi l mt lnh
do Pascal khng bit phi lm g vi gi tr .
Cch gi hm nh sau l hp l:
a:= sqrt(9) + 5;
Witeln('Can bac hai cua 9 bang ',sqrt(9));

7.2 Gi chng trnh con t chng trnh con khc
Cc chng trnh con cng cp c th gi ti nhau v truyn tham s cho nhau.
Nguyn tc gi l: nhng chng trnh con xy dng sau c th gi ti cc chng
trnh con xy dng trc n, ng thi cc chng trnh con cp di cng c th gi ti
cc chng trnh con cp trn nu chng cng mt gc. iu ny c ngha l cc chng
trnh con xy dng trc khng th gi ti cc chng trnh con xy dng sau nu khng c
ch bo FORWARD (xem mc 8). Xt mt s v d sau:

V d 1.6
Program Goi_ctc;
Uses crt;
Type dayso=array[1..60] of byte; s1=string[30];
Var
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 14
a:s1; b:dayso; i,j,n:byte;
Procedure nhapso(m:byte; var c:dayso);
Begin
For i:=1 to m do
Begin
Write('c[',i,'] = '); readln(c[i]);
End;
End;
Function tinhtong(m:byte; d:dayso):real;
var tong:real;
Begin
tong:=0;
for i:= 1 to m do Tong:=tong+d[i];
tinhtong:=tong;
End;
Procedure viet(k:byte; e:dayso);
Begin
Write('Tong cac phan tu mang = ',tinhtong(k,e):8:0);
readln;
End;

BEGIN
clrscr;
write('Nhap so phan tu n '); readln(n);
nhapso(n,b);
viet(n,b);
END.

V d 1.6 thit k ba chng trnh con l Nhapso, Tinhtong v Viet. Th tc Nhapso
dng nhp cc phn t vo mng mt chiu. Hm Tinhtong dng tnh tng cc phn t
mng v th tc Viet dng hin kt qu tnh tng ln mn hnh.
Chng trnh m gi chng trnh con Viet v truyn cc tham s l s phn t mng
n v gi tr ca cc phn t ca mng ( mng b ). Chng trnh con Viet li gi hm Tinhtong
v truyn cc tham s cho hm ny. y l trng hp mt chng trnh con gi mt chng
trnh con cng cp.
Vic cc chng trnh con gi ti nhau phi tun theo quy nh sau y:
Mt chng trnh con ch c th gi ti mt chng trnh con cng cp thit k
trc chng trnh con hin thi.
Trong v d 1.6 nu chng ta a hm Tinhtong xung di th tc Viet th khi chy
chng trnh s b bo li:
Unknown Indentifier.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 15

V d 1.7 di y trnh by cch thc m mt chng trnh con cp di gi ti mt
chng trnh con cp trn cng gc.

V d 1.7
Program goi_ctc;

Uses crt;
Type dayso=array[1..60] of byte;
Var b:dayso; i,n:byte;
{Hai chng trnh con Nhapso v Tinhtong cng cp vi th tc Xuly}
Procedure nhapso(m:byte; var c:dayso);
Begin
For i:=1 to m do
Begin
Write('c[',i,'] = '); readln(c[i]);
End;
End;

Function tinhtong(m:byte; d:dayso):real;
Var tong:real;
Begin
tong:=0;
for i:= 1 to m do Tong:=tong+d[i];
tinhtong:=tong;
End;
Procedure xuly(j:byte; ds:dayso);
Procedure viet(k:byte; e:dayso);
Var i:byte;
Begin
Writeln('Tong cac phan tu mang = ',tinhtong(k,e):8:0);
Writeln('Day so sap xep giam dan ');
for i:=1 to k do write(e[i],' ');
readln;
End; { Kt thc th tc Viet}

Procedure sapxep(m:byte; d:dayso);
Var p,q:byte; Tg:byte;
Begin
For p:= 1 to m-1 do
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 16
For q:=p+1 to m do
If d[p]<d[q] then
Begin
tg:=d[p]; d[p]:=d[q]; d[q]:=tg;
End;
viet(m,d);
End; { Kt thc th tc sapxep}

Begin {than thu tuc Xuly}
Writeln('Thu tuc xu ly dung de sap xep va viet ket qua');
sapxep(j,ds);
end; { Kt thc th tc Xuly}

BEGIN {Than chuong trinh me}
clrscr;
write('Nhap so phan tu n '); readln(n);
nhapso(n,b);
xuly(n,b);
END.

V d 1.7 c ba chng trnh con cng cp l Nhapso, Tinhtong v Xuly. Trong th
tc Xuly c hai chng trnh con l Viet v Sapxep trong chng trnh con Viet c thi
k trc, Sapxep c thit k sau. Chng trnh con Sapxep c li gi n chng trnh con
Viet cng cp vi n, mc ch ca li gi ny l truyn cho chng trnh con Viet nhng d
liu mng sp xp gim dn. Chng trnh con Viet c li gi n hm Tinhtong l mt
chng trnh con cp cao hn n, v Tinhtong c thit k trc Xuly nn li gi l hp
l. Nu o v tr ca hai chng trnh con Viet v Sapxep, ngha l a chng trnh con
Viet xung sau Sapxep th s b bo li , v iu ny chng ta s nghin cu mc 8.

8. Khai bo trc bng Forward

Nh nu trong mc 7 vic cc chng trnh con gi ti nhau b hn ch bi th t
xy dng cc chng trnh con . V nhng l do khc nhau ngi ta khng th thay i th
t xy dng cc chng trnh con nhng li mun cc chng trnh con phi gi c ti
nhau khng ph thuc vo th t xy dng chng. lm vic ny Pascal cho php s dng
t kho Forward. Ngha en ca t Forward l "pha trc" thng c dng bo hiu
mt ci g ta s gp sau ny v d: pha trc 200 mt l cng trng.

C php:
Tn chng trnh con (danh sch tham s); Forward;

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 17
Dng khai bo trn y phi c t trong chng trnh trc khi xy dng tt c
cc chng trnh con. Khi tn mt chng trnh con c khai bo vi c php nu trn th
vic n nm trc hay sau mt chng trnh con s gi ti n l khng quan trng. S lng
chng trnh con khi bo trc vi t kho Forward l khng hn ch.
Cn lu rng nu c nhiu chng trnh con cn khai bo trc th mi tn chng
trnh con phi i vi mt t kho Forward, khng th ghp nhiu tn chng trnh con vi
cng mt t Forward.

V d 1.8
Program Tu_khoa_Forward;
uses crt;
Type dayso=array[1..60] of byte;
var
a:string; b:dayso;
i,j,n:byte;

Function c2(m:byte; d:dayso):real; forward;
Procedure c4(p:byte; var q:dayso); forward;

Procedure c1(m:byte; var c:dayso);
Begin
For i:=1 to m do
Begin
Write('c[',i,'] = '); readln(c[i]);
End;
End;

Procedure c3(k:byte; e:dayso);
Var i:byte;
Begin
c4(k,e);
writeln('Mang sau khi sap xep');
for i:= 1 to k do write(e[i],' ');
writeln;
Write('Tong cac phan tu mang = ',c2(k,e):8:0);
readln;
End;

Function c2(m:byte; d:dayso):real;
var tong:real;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 18
Begin
tong:=0;
for i:= 1 to m do Tong:=tong+d[i];
c2:=tong;
End;

Procedure c4(p:byte; var q:dayso);
Var i,j:byte; tg:integer;
Begin
for i:= 1 to (p-1) do
for j:= i+1 to p do
if q[i]>q[j] then
Begin
tg:=q[i]; q[i]:=q[j]; q[j]:=tg;
End;
End;

BEGIN
clrscr;
write('Nhap so phan tu n '); readln(n);
c1(n,b);
c3(n,b);
END.
V d 1.8 c 4 chng trnh con trong c1 v c3 thit k trc cn c2 v c4 thit k
sau. Trong c3 c li gi n c2 v c4 do vy phi khai bo trc c2 v c4 . Nu khng mun
khai bo trc th cn a c2 v c4 ln trn c3.




Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 19
Bi tp ng dng chng 1

1. Lp chng trnh tnh din tch ton phn v th tch cc hnh : Tr trn, nn.
Yu cu: Thit k menu theo mu sau, Menu c th dng con tr dch chuyn chn
cc chc nng: Hinh Tru Hinh Non Ket thuc

Vic tnh ton din tch, th tch mi hnh ng vi mt chng trnh con
Tt c cc hnh u chung mt chng trnh con hin kt qu. Chc nng Ket thuc
dng quay v ca s Pascal.

2. Lp mt chng trnh to thc n vi cc chc nng:
Tnh giai tha Tnh t hp Tr v
Dng cc chng trnh con lp gii bi ton sau: Cho n im trn mn hnh, qua
hai im bt k bao gi cng ni c bi mt on thng. Tnh xem c bao nhiu on
thng c to ra. Tm on ngn nht v di nht , chng ni cc im no?

3. Thit k thc n vi cc chc nng:
1.giai he pt bac nhat 2. giai pt bac hai 3.Ket thuc

Yu cu: Bm s chn chc nng trn thc n. Chc nng Ket thuc dng quay
v ca s Pascal.
Chng trnh c 2 chng trnh con gii h phng trnh bc nht 2 n v gii
phng trnh bc 2

4. A,B l mng hai chiu ca cc s thc, s dng v ct ca tng mng nhp t bn
phm, lp chng trnh bao gm cc chng trnh con: nhp d liu vo mng, kim tra xem
c th nhn hai mng hay khng, nu c th chy chng trnh con nhn hai mng, nu khng
th thng bo khng th nhn hai mng. Hin kt qu nhn di dng ma trn.

5. Cho hai chui s1, s2, vit chng trnh bao gm cc chng trnh con:
NHAP dng nhp vo s1, s2 cc k t ca bng m gm c ch ci v ch s,
TACH dng tch ring cc ch s v ch ci, nhng ch s tch ra lu vo mng
mt chiu theo th t ca s1 trc, s2 sau.
CONG dng cng cc ch s tch ra t hai chui
Thng bo kt qu theo mu:
Chui s1 sau khi tch:..................
Chui s2 sau khi tch:..................
Tng cc ch s:.........................

6. Lp chng trnh vi 4 chng trnh con dng chuyn i cc s gia 4 h m:
H 10 sang h 2, 8, 16
H 2 sang h 8, 10, 16
H 8 sang h 2, 10, 16
H 16 sang h 2, 8, 10
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 20




Chng 2

Cc kiu d liu c cu trc




Trong chng ny khng trnh by chi tit cc kiu d liu c cu trc n gin nh
kiu mng, chui. Ni dung trng tm ca chng l kiu bn ghi (Record) c cu trc thay
i, kiu tp v kiu tp hp. Chng ny bn c cn nm c cc vn sau:
Cch thc nh ngha mt kiu d liu mi
Khai bo bin vi cc kiu d liu do ngi lp trnh t nh ngha
Cch s dng ton t CASE khi khai bo bn ghi c cu trc thay i
Cch thc ghi v c d liu cho ba loi tp: tp vn bn, tp c kiu v tp
khng kiu, ch trng cch ghi d liu kiu s vo tp vn bn v ly s liu ra
x l
X dng d liu kiu tp hp trong lp trnh





Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 21
1. D liu kiu bn ghi (record)

1.1 Khi nim c bn

Kiu b tr d liu thng dng nht m con ngi ngh ra l b tr di dng bng.
Bng c coi l mt i tng ( qun l hoc nghin cu), bng bao gm mt s ct v
mt s dng. S ct, dng trong bng ph thuc vo phn mm qun l m chng ta s dng.
Trong tng ct d liu c tnh cht ging nhau. Cc phn mm qun tr d liu nh Excel,
Foxpro... u ng dng khi nim bng v Pascal cng khng phi l ngoi l. c c
mt bng trc ht Pascal xy dng nn mt dng gi l "bn ghi", tp hp nhiu dng s cho
mt bng, mi bng c ghi vo b nh di dng mt tp.
Bn ghi (Record) l mt cu trc bao gm mt s (c nh hoc thay i) cc phn t
c kiu khc nhau nhng lin quan vi nhau. Cc phn t ny gi l cc trng (Field). V d
bng im ca lp hc bao gm cc trng Hoten, Ngaysinh, Gioitinh, Lop, Diachi, Toan,
Ly, Hoa,...., d liu in vo cc trng hnh thnh nn mt bn ghi (Record). C th c
nhng trng trong mt bn ghi li l mt bn ghi, v d trng Ngaysinh trn c th l mt
bn ghi ca ba trng l Ngay, Thang, Nam. Bn ghi khng phi l kiu d liu c sn
trong Pascal m do ngi s dng t nh ngha do chng phi c khai bo phn
TYPE.
Bn ghi bao gm hai loi:
* Bn ghi c cu trc khng i : l loi bn ghi m cu trc c nh ngha ngay
t khi khai bo v gi nguyn trong sut qu trnh x l.
* Bn ghi c cu trc thay i: l loi bn ghi m cu trc ca n (tn trng, s
trng, kiu trng) thay i tu thuc vo nhng iu kin c th. Loi bn ghi ny khi khai
bo th vn khai bo y song khi x l th s trng c th gim i (so vi cu trc
khai bo) ch khng th tng ln.
im mnh ca Bn ghi l cho php xy dng nhng cu trc d liu a dng phc v
cng vic qun l, tuy vy mun lu tr d liu s dng nhiu ln th phi kt hp kiu
Bn ghi vi kiu Tp.

1.2 Khai bo

Kiu d liu ca cc trng trong Record c th hon ton khc nhau v c khai
bo sau tn trng, nhng trng c cng kiu d liu c th khai bo cng trn mt dng
phn cch bi du phy "," . Cui mi khai bo trng phi c du ";" .
Kiu d liu Record c khai bo nh sau:
TYPE
<Tn kiu > = RECORD
<Tn trng 1>: Kiu;
<Tn trng 2>: Kiu;
......
<Tn trng n>: Kiu;
END;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 22
V d 2.1
Khai bo kiu d liu BANGDIEM bao gm mt s trng nhm phc v vic qun
l im.
TYPE
BANGDIEM = RECORD
Hoten: String[25];
Gioitinh: Char;
Lop: String[5];
Diachi: String[30];
Toan,Ly,Hoa: Real;
END;

Vi khai bo nh trn dung lng b nh dnh cho cc trng (tnh bng Byte) s l:
Hoten 26, Gioitinh 1, Lop 6, Diachi 31, Toan 6, Ly 6, Hoa 6. (Cc trng kiu String
bao gi cng cn thm 1 Byte cha k t xc nh di chui).
Tng di ca Record bng 26+1+6+31+18=82 Bytes.
C th dng hm Sizeof(tn kiu) xc nh di mt kiu d liu, v d:
Write(sizeof(bangdiem)) s nhn c s 82

V d 2.2
Xy dng kiu d liu qun l h s cng chc. Chng ta s to ra bn kiu d liu
mi t tn l Diadanh, Donvi, Ngay v Lylich.

Type
Diadanh = Record
Tinh, Huyen, Xa, Thon: String[15];
End;
Donvi = Record
Truong: String[30];
Khoa, Bomon: String[20]
End;

Ngay = Record
Ng: 1..31;
Th: 1..12;
Nam: Integer;
End;

Lylich = Record
Mhs: Word;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 23
Hoten: String[25];
Ngaysinh: Ngay;
Quequan: Diadanh;
Coquan: Donvi;
End;

Trong cch khai bo trn trng Ngaysinh thuc kiu Ngay, Quequan thuc kiu
Diadanh, Coquan thuc kiu Donvi, ni cch khc ba trng ny li chnh l ba Record.
khc phc cch khai bo nhiu kiu bn ghi nh trn c th s dng cc bn ghi
lng nhau. Kiu bn ghi lng nhau c th khai bo trc tip, ngha l khng cn khai bo
ring r cc bn ghi con.

V d 2.3

Uses crt;
Type
Lylich=record
Mhs:word;
Hoten:string[25];
Ngaysinh:record
Ng:1..31;
Th:1..12;
Nam:Integer;
End;
Quequan:record
Tinh,Huyen,xa,thon:string[15];
End;
Coquan:record
Truong:string[30];
Khoa, Bomon:string[20];
End;
End;
.................

Ngoi cch khai bo kiu ri mi khai bo bin, Pascal cho php khai bo trc tip
bin kiu bn ghi theo c php sau:
Var
Tn bin:Record
Tn trng 1:kiu trng;
Tn trng 2:kiu trng;
.................
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 24
End;
1.3 Truy nhp vo cc trng ca bn ghi

Sau khi khai bo kiu d liu ta phi khai bo bin, gi s cn qun l danh sch
cn b mt trng i hc chng ta phi khai bo mt bin cha danh sch vit tt l DS. Khi
ta phi khai
VAR
DS: Lylich;
Ging nh hai kiu d liu Mng v Chui, vic x l c thc hin trn cc phn t
ca mng hoc chui. y mc d DS l mt bin nhng chng ta khng th x l chnh
bin m ch c th x l cc trng ca bin DS. truy nhp vo trng cn vit:
<Tn bin>.<Tn trng m>.<tn trng con>.
V d nhp d liu cho trng Hoten ta vit cc lnh:
Write(' Ho va ten can bo: '); Readln(DS.hoten);
Lnh Readln(DS.hoten); cho php ta gn H tn cn b vo trng Hoten ca bn ghi
hin thi.
nhp ngy thng nm sinh chng ta phi truy nhp vo cc trng con
Readln(Ds.Ngay.Ngays);
Readln(Ds.Ngay.Thang);
Readln(Ds.Ngay.Nam);
Lnh vit d liu ra mn hnh cng c c php ging nh lnh nhp.
Writeln(DS.Hoten);
Writeln(Ds.Ngay.Ngays);
...........
Ch :
Khi khai bo bin DS kiu LYLICH chng ta c th nhp d liu vo bin DS nhng
ch nhp c mt bn ghi ngha l ch nhp d liu c cho mt ngi. Nu mun c mt
danh sch gm nhiu ngi th phi c nhiu bn ghi, thc hin iu ny chng ta c th
xy dng mt mng cc bn ghi. Trnh t cc bc nh sau:
* nh ngha kiu d liu bn ghi
* Khai bo bin mng vi s phn t l s ngi cn qun l, kiu phn t mng l
kiu Bn ghi nh ngha. (xem v d 2.4)
Vi tt c cc trng khi truy nhp ta lun phi ghi tn bin ri n tn trng m, tn
trng con, iu ny khng ch lm mt thi gian m cn khin cho chng trnh khng
p, Pascal khc phc nhc im ny bng cch a vo lnh WITH... DO.

1.4 Lnh WITH...DO
C php ca lnh:
WITH <Tn bin kiu RECORD> DO <Cc lnh>
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 25
Khi s dng lnh WITH...DO chui lnh vit sau DO ch cn vit tn trng c lin
quan m khng cn vit tn bin. Xt v d nhp im cho lp hc vi gi thit lp c nhiu
nht l 40 hc sinh.
V d 2.4:
Program Nhapdiem;
Uses CRT;
Type
BANGDIEM = RECORD
Hoten: String[25];
Gioitinh: ('T','G'); (* kiu lit k, 'T' = Trai, 'G' = Gi *)
Lop: String[5];
Diachi: String[50];
Toan,Ly,Hoa: Real;
End;
Var
DS_LOP: Array[1..40] of BANGDIEM (*danh sch lp l mng 40 phn t*)
i,j: Integer;
lam: Char;
BEGIN
clrscr;
lam:='C'; i:=1;
Repeat
With DS_LOP[i] Do
Begin
Write(' Ho va ten hoc sinh: '); Readln(Hoten);
Write(' Trai hay gai T/G: '); Readln(Gioitinh);
Write(' Thuoc lop: '); Readln(Lop);
Write(' Cho o thuong tru: '); Readln(Diachi);
Write(' Diem toan: '); Readln(Toan);
Write(' Diem ly: '); Readln(Ly);
Write(' Diem hoa: '); Readln(Hoa);
End;
i:=i+1;
Write(' NHAP TIEP HAY THOI ? C/K '); Readln(lam);
Until upcase(lam)='K';
clrscr;
For j:=1 to i-1 do
With DS_LOP[j] DO
Writeln(Hoten:15,' ',Gioitinh:2,' ',Lop:4,' ',Diachi:10,' Toan:', Toan:4:2,'
Ly:',Ly:4:2,' Hoa:',Hoa:4:2);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 26
Repeat Until Keypressed;
END.

V d 2.4 s dng mng DS_LOP gm 40 phn t, mi phn t l mt Record. Mi
ln nhp xong d liu cho mt phn t li hi "Nhap tiep hay thoi?", nh vy s phn t c
th ca mng tu thuc vo cu tr li C hay l K.
Vn ng quan tm y l cch s dng lnh With ... Do, v d 2.4 s dng bin
mng DS_LOP v vy trc tin phi truy nhp vo phn t th i ca mng DS_LOP
(1<=i<=40), vi mi phn t chng ta tip tc truy nhp vo cc trng ca chng.
Vi lnh
With DS_LOP[i] Do
chng ta c th nhp trc tip d liu vo cc trng Hoten, Gioitinh, ...
Write(' Ho va ten hoc sinh: '); Readln(Hoten);
Write(' Trai hay gai T/G: '); Readln(Gioitinh);
........
vit d liu ra mn hnh chng ta cng dng lnh With Do
With DS_LOP[j] DO
Writeln(Hoten:15,' ',Gioitinh:2,' ',Lop:4,' ',Diachi:10,' Toan:', Toan:4:2,' Ly:',Ly:4:2,'
Hoa:',Hoa:4:2);
i vi cc bn ghi lng nhau nh v d 2.3 th lnh With.. Do cng phi lng nhau,
xt v d sau:

V d 2.5
Program Kieu_Record;
Uses crt;
Type Tencb=record
Mahoso:word;
Hoten:string[25];
Ngaysinh: Record
ngay:1..31;
thang:1..12;
nam:integer;
End;
End;
Var
DS: array[1..50] of tencb;
i,j:byte; tl:char;
Begin
Clrscr;
i:=1;
Repeat
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 27
With ds[i] do
Begin
Write('Ma ho so: '); Readln(mahoso);
Write('Ho va ten: '); readln(hoten);
With ngaysinh do
Begin
Write('Ngay sinh: '); readln(ngay);
Write('Thang sinh: '); readln(thang);
Write('Nam sinh: '); readln(nam);
End;
End;
Write('Nhap tiep hay thoi? C/K '); readln(tl);
If upcase(tl)='C' then i:=i+1;
Until upcase(tl)='K';
clrscr;
Writeln('DANH SACH CAN BO CO QUAN');
For j:= 1 to i do
Begin
With ds[j] do
Begin
Write(mahoso,' ',hoten,' ');
With ngaysinh do Writeln(ngay,' ',thang,' ',nam);
End;
End;
Readln;
END.

Trong v d 2.5 nhp d liu vo bn ghi v vit d liu (tc l danh sch cn b
c quan) ra mn hnh, chng trnh cn phi s dng hai lnh With .. Do lng nhau, lnh th
nht vi bin DS, cn lnh th hai vi bin Ngaysinh. Tuy nhin nu c mt cht tinh th
cc khi chng trnh nhp v vit d liu ra mn hnh c th thu gn li, v d khi vit d
liu ra mn hnh s nh sau:

Writeln('DANH SACH CAN BO CO QUAN');
For j:= 1 to i do
With ds[j] do
Writeln(mahoso,' ',hoten,' ',ngaysinh.ngay,' ',ngaysinh.thang,' ',ngaysinh.nam);

1.5 Bn ghi c cu trc thay i

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 28
a. Xy dng kiu d liu
Bn ghi c cu trc c nh dng m t mt i tng m cc c th ca n (tc l
cc xut hin ca i tng) c cc thuc tnh (cc trng) nh nhau. V d DS l bn ghi m
t mt loi i tng l "hc vin ", mi xut hin ca DS ng vi mt hc vin c th v tt
c cc hc vin u c cc thuc tnh nh nhau bao gm (xem v d 2.5)
Mahoso, Hoten, Ngay, Thang, Nam.
Trong thc t nhiu khi ta gp nhng i tng m thuc tnh ca chng li gm hai
loi:
- Thuc tnh chung cho mi xut hin
- Thuc tnh ring cho mt s xut hin c bit
Di y l mt s v d minh ho:

- Kiu d liu qun l v ngnh g st
Trn mt tuyn ng st c nhiu on tu chy trong ngy, c nhng chuyn tc
hnh ch dng li mt vi ga dc ng, c nhng chuyn tu thng dng li tt c cc ga
l. Vi tu tc hnh, hnh khch ch c mang theo hnh l khng qu 20 Kg v s c sut
n trn tu. Vi tu thng hnh khch phi mua v hng ho nu c vn chuyn hng ho v
khng c sut n trn tu.
* Thuc tnh chung: tn on tu (TDT), tuyn ng (TD), gi i (GD), loi tu (LT)
(v d: tc hnh - TH, tu thng - TT)
* Thuc tnh ring vi tu tc hnh: S xut n (SXA), s ga l dng dc ng
(SGD), cn tu thng c thuc tnh ring l cc hng ho (CHH). Nh vy vic xy dng
cc bn ghi d liu s phi ch n cc thuc tnh chung cho cc loi tu v cc thuc tnh
ring ca tng loi (xem v d 2.6).

V d 2.6:
Type QLDS = record
Ten_doan_tau: string[3];
Tuyen_duong: string[15];
Gio_di: real;
Case Loai_tau : (Toc_hanh, Tau_thuong) of
Toc_hanh: (So_xuat_an:Word; So_ga_do: Byte);
Tau_thuong: (cuoc_hang_hoa:real);
End;

V d 2.6 cho ta mt kiu d liu bn ghi c cu trc thay i mt mc, s thay i
y th hin qua thuc tnh Loai_tau. Nh vy tng s trng ca mi bn ghi tu thuc vo
on tu thuc loi g. Nu l tu tc hnh th mi bn ghi c 5 trng, cn tu thng ch
c 4 trng. di ca cc bn ghi c tnh cn c vo di ca cc trng c trong bn
ghi . Nh bit di tng trng c tnh nh sau:
Ten_doan_tau: 4,
Tuyen_duong: 16
Gio_di: 6
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 29
So_xuat_an: 2
So_ga_do: 1
Ve_hang_hoa: 6
Bn ghi vi tu tc hnh s l 4+16+6+2+1 = 29 Byte
Bn ghi vi tu thng l: 4+16+6+6 = 32 Byte

- Cc bc nh ngha kiu bn ghi c cu trc thay i:
- nh ngha mt kiu bn ghi c cu trc thay i, chng ta khai bo cc thuc
tnh chung trc, tip tm trong cc thuc tnh chung mt thuc tnh dng phn loi.
- Thuc tnh phn loi c th bao gm mt hoc mt s ch tiu phn loi, tt c cc
ch tiu ca thuc tnh phn loi phi t trong cp du m-ng ngoc n, v d: Loai_tau :
(Toc_hanh, Tau_thuong)
- S dng ton t Case .. . of phn loi, v d:
Case Loai_tau : (Toc_hanh, Tau_thuong) of
Toc_hanh: .....
Tau_thuong:....
- Vi mi ch tiu phn loi, chng ta c th khai bo tn mt s trng thay i hoc
khai bo mt bn ghi con vi cu trc thay i, v d:
Case Loai_tau : (Toc_hanh, Tau_thuong) of
Toc_hanh: (So_xuat_an, So_ga_do: Word);
Tau_thuong: ( Case Cuoc :(cuoc_hanh_ly,cuoc_hang_hoa) of ............ );
- Cc trng thay i nu c cng kiu d liu th tn trng vit cch nhau bi du
phy.
- D liu cc trng phn loi phi thuc kiu n gin, c th l:
kiu nguyn, thc, logic, chui, lit k, khong con.

phn loi chng ta dng ton t Case Of.
Cn ch rng ton t Case .. Of y khng ging nh cu trc Case .. Of nu
trong phn cc cu trc lp trnh ngha l cui phn khai bo khng c t kho "End;"

Trong vng nh cp pht cho chng trnh s c hai on dnh cho hai loi trng,
on th nht dnh cho cc trng c nh, trong v d 2.6 on ny c dung lng l 26
byte. on th hai dnh cho cc trng thay i, on ny s c dung lng bng dung lng
ca ch tiu phn loi ln nht.
Trong v d 2.6 trng phn loi l Loai_tau, ch tiu phn loi l toc_hanh v
Tau_thuong. Vi ch tiu Toc_hanh, chng ta khai bo hai trng thay i l So_xuat_an v
So_ga_do cn vi ch tiu Tau_thuong c mt trng l Cuoc_hang_hoa. Nh vy dung
lng ca trng thay i ca tu tc hnh cn 3 byte cn tu thng cn 6 byte, on nh
dnh cho trng thay i s c dung lng 6 byte.
Chng trnh qun l ng st c thit k bao gm mt chng trnh con ly tn
l NHAP dng nhp d liu cho cc on tu, phn thn chng trnh chnh s yu cu
nhp s chuyn tu trn ton tuyn v cho hin d liu ra mn hnh (xem v d 2.7).
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 30


V d 2.7
Program quan_ly_duong_sat;
Uses crt;
Type doan_tau = record
ten_doan_tau:string[3];
tuyen_duong:string[15];
gio_di:real;
loai:string[10];
Case loai_tau: (toc_hanh,tau_thuong) of
toc_hanh:(so_xuat_an:word;so_ga_do:byte);
tau_thuong:(cuoc_hang_hoa:real);
End;
dt = array[1..5] of doan_tau;
Var
dt1:dt;
n,i,j:byte;tg:doan_tau;
Procedure Nhap(m:byte;var qlds:dt);
Begin
For i:= 1 to m do
with qlds[i] do
Begin
Write('Loai tau: ');readln(loai);
if loai ='toc hanh' then
Begin
write('ten doan tau: '); readln(ten_doan_tau);
write('tuyen duong: '); readln(tuyen_duong);
write('gio xuat phat: '); readln(gio_di);
write('so xuat an: '); readln(so_xuat_an);
write('so ga do doc duong: '); readln(so_ga_do);
writeln;
end
else
if loai = 'tau thuong' then
Begin
write('ten doan tau: '); readln(ten_doan_tau);
write('tuyen duong: '); readln(tuyen_duong);
write('gio xuat phat: '); readln(gio_di);
write('tien cuoc hang hoa: '); readln(cuoc_hang_hoa);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 31
writeln;
End;
End; End;

Begin
clrscr;
write('co bao nhieu doan tau tren toan tuyen: '); readln(n);
writeln;
nhap(n,dt1);
clrscr;
writeln('danh sach tau chay toan tuyen');
for i:= 1 to n-1 do {sap xep du lieu tang dan theo loai tau}
for j:= i+1 to n do
with dt1[i] do
if dt1[i].loai < dt1[i+1].loai then
begin
tg:=dt1[i]; dt1[i]:=dt1[j]; dt1[j]:=tg;
end;
Writeln(' DANH MUC CAC DOAN TAU TREN TUYEN');
for i:= 1 to n do
with dt1[i] do
writeln(loai:10,' ',ten_doan_tau:3,' ',tuyen_duong:10,' ',gio_di:4:2,' ',so_xuat_an:3,'
',so_ga_do:3,cuoc_hang_hoa:10:2);
readln;
END.

- Kiu d liu qun l im ca sinh vin
SV l kiu d liu bn ghi dng qun l im ca sinh vin. Cc trng c nh ca
SV bao gm: MHS (m h s), HOTEN (h v tn), NS (ngy sinh), GIOI (nam, n), Khoa
(S phm - SP, Kinh t - KT, C in - CD). Cc mn hc tu thuc vo khoa m sinh vin
ang theo hc, gi s chng ta quy nh khoa S phm c cc mn: Ton, L, Tin c bn, lp
trnh nng cao, khoa Kinh t c cc mn: K ton my, Marketing, khoa C in c cc mn:
C hc my, Sc bn vt liu, Hnh ho. Tt c sinh vin nu l Nam th hc thm mn Bi
li, nu l N th hc thm Th dc ngh thut.
R rng l chng ta khng th to ra kiu bn ghi c nh cho sinh vin trong ton
trng, bi l s mn hc khng ging nhau. Cc trng MHS, HOTEN, NS l chung cho
mi sinh vin, trng KHOA v GIOI dng phn loi sinh vin t xc nh cc mn
hc. V rng mi kiu bn ghi ch c th khai bo duy nht mt trng phn loi ngang hng
vi cc trng c nh nn cng mt lc chng ta khng th phn loi theo c KHOA v
GIOI. Gii php duy nht l chn mt trng phn loi vi hai ch tiu phn loi i din cho
Khoa v Gioi, gi s tn trng phn loi by gi ly tn l MONHOC v hai ch tiu phn
loi l PL1 v PL2. PL1 i din cho Gioi cn PL2 i din cho Khoa.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 32
Cc ch tiu phn loi li c th tr thnh thuc tnh phn loi vi mt s ch tiu no
m chng ta gi l ch tiu con chng hn xem PL1 l thuc tnh phn loi vi hai ch tiu
con l Nam v Nu, PL2 l thuc tnh phn loi vi ba ch tiu con l SP,KT,CD. Mi ch tiu
con bao gm mt s trng c th hoc n li c s dng nh trng phn loi mi....
Mt bn ghi kiu SV c th c cu trc thuc mt trong cc dng sau:
* Sinh vin khoa S phm
1/ Mhs, Hoten, Ns, Boi_loi, Toan, Ly, Tincoban, Lap_trinh_nang_cao
2/ Mhs, Hoten, Ns, The_duc, Toan, Ly, Tincoban, Lap_trinh_nang_cao
* Sinh vin khoa C in
3/ Mhs, Hoten, Ns, Boi_loi, Co_hoc_may, Suc_ben_vat_lieu, Hinh_hoa
4 / Mhs, Hoten, Ns, The_duc, Co_hoc_may, Suc_ben_vat_lieu, Hinh_hoa
* Sinh vin khoa Kinh t
5 / Mhs, Hoten, Ns, Boi_loi, Ke_toan_may, Marketing
6 / Mhs, Hoten, Ns, The_duc, Ke_toan_may, Marketing

C th nhn thy rng tn cc trng phn loi khng c trong cu trc bn ghi. Nu
chng ta mun trong mi bn ghi li c c tn khoa v gii tnh th phi a thm vo cc
trng c nh mi.
Kiu d liu bn ghi SV c khai bo nh sau:

V d 2.6
Type
SV = record
Mhs: Byte;
Hoten: String[20];
NS : Record
Ngay:1..31; Thang: 1..12; Nam: Word;
End;
Case monhoc:(pl1,pl2) of
pl1:( case gioi:(nam,nu) of
Nam: (Boi_loi:real);
Nu: (The_duc: real));
pl2:( case KHOA: (SP,CD,KT) of
SP: (Toan, Ly, Tincb, Ltnc: Real);
CD: (Co_hoc_may, Suc_ben_vat_lieu, Hinh_hoa:real);
KT: (Ke_toan_may, Marketing:real));
End;

T cch khai bo trn chng ta rt ra mt s nhn xt quan trng sau y:
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 33
Nhn xt 1
Trong mt kiu record cc trng c nh c khai bo trc, trng phn loi khai
bo sau, nh vy trng phn loi phi l trng khai bo cui cng. Cc trng thay i
khai bo bn trong trng phn loi.
Nhn xt 2
Mi kiu d liu Record c cu trc thay i ch c php c duy nht mt trng
phn loi, ngha l khng th c hai ton t case .... of ngang hng khi khai bo. Nu chng ta
khai bo kiu SV nh trong v d 2.8 sau y th s nhn c thng bo li :
Error in Expression

V d 2.8
Type SV = record
Mhs: Byte;
Hoten: String[20]
NS : Record
Ngay:1..31;
Thang: 1..12;
Nam: Word;
End;
Case GIOI: (Nam, Nu) of
Nam: Boi_loi:real;
Nu:The_duc: real;
Case KHOA: (SP,CD,KT) of
SP: (Toan, Ly, Tin_cb, Ltnc: Real);
CD: (Co_hoc_may, Suc_ben_vat_lieu, Hinh_hoa:real);
KT: (Ke_toan_may, Marketing:real);
End;

Li xut hin do chng ta chn hai trng phn loi l GIOI v KHOA ngang hng
nhau. khc phc li ny chng ta phi la chn li cu trc ca Record. Thay v c hai
trng phn loi cng cp chng ta chn mt trng l MONHOC, ch tiu phn loi l PL1
v PL2. Lc ny tn mn hc c th s tu thuc vo gi tr m PL1 v PL2 c th nhn (xem
v d 2.9)
Nhn xt 3
V mi trng li c th l mt bn ghi cho nn bn trong trng phn loi li c th
cha cc trng phn loi khc, y l trng hp bn ghi thay i nhiu mc.
Vi kiu d liu SV nh ngha chng ta xy dng chng trnh qun l im ca
sinh vin nh v d 2.9 sau y.
V d 2.9
Program QUAN_LY_DIEM;
Uses crt;
Type
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 34
SV = record
Mhs: Byte;
Hoten: String[20];
NS : Record
Ngay:1..31;
Thang: 1..12;
Nam: Word;
End;
Case monhoc:(pl1,pl2) of
pl1:( case gioi:(nam,nu) of
Nam: (Boi_loi:real);
Nu: (The_duc: real));
pl2:( case KHOA: (SP,CD,KT) of
SP: (Toan, Ly, Tincb, Ltnc: Real);
CD: (Co_hoc_may, Suc_ben_vat_lieu, Hinh_hoa:real);
KT: (Ke_toan_may, Marketing:real));
End;
Var
Ds:Array[1..100] of sv; tg:sv;
i,j,k:byte; pl,tk:string[3]; tl,gt:char;
BEGIN
clrscr; i:=1;
writeln(' Nhap diem cho sinh vien ');
Repeat
With ds[i] do
Begin
Write('Nhap ma ho so '); readln(mhs);
Write('Nhap ho va ten '); readln(hoten);
With ns do
Begin
Write('Nhap ngay sinh '); readln(ngay);
Write('Nhap thang sinh '); readln(thang);
Write('Nhap nam sinh '); readln(nam);
End;
Write('Cho biet gioi tinh nam "T" - nu "G" '); Readln(gt);
if upcase(gt)='T' then ds[i].gioi:=nam else ds[i].gioi:=nu;
Case ds[i].gioi of
nam: begin
Write('Nhap diem mon boi loi '); Readln(boi_loi);
end;
nu: begin
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 35
Write('Nhap diem mon The duc '); readln(the_duc);
end; End; {ket thuc Case ds[i].gioi...}
Write('Nhap ten khoa '); Readln(tk);
for k:= 1 to length(tk) do tk[k]:=upcase(tk[k]); { chuyn tn khoa thnh ch in}
if tk='SP' then ds[i].khoa:=sp
else if tk='CD' then ds[i].khoa:=cd
else ds[i].khoa:=kt;
Case ds[i].khoa of
sp:Begin
Write('Nhap diem mon Toan '); Readln(toan);
Write('Nhap diem mon Ly '); Readln(ly);
Write('Nhap diem mon Tin Co ban '); Readln(tincb);
Write('Nhap diem mon Lap trinh nang cao '); Readln(ltnc);
End;
cd: Begin
Write('Nhap diem mon Co hoc '); Readln(co_hoc_may);
Write('Nhap diem mon Suc ben vat lieu '); Readln(suc_ben_vat_lieu);
Write('Nhap diem mon Hinh hoa '); Readln(hinh_hoa);
End;
kt: Begin
Write('Nhap diem mon Ke toan may '); Readln(ke_toan_may);
Write('Nhap diem mon marketing '); Readln(marketing);
End;
End; {ket thuc Case..}
{Sap xep du lieu tang dan theo ten Khoa}
for j:=1 to i-1 do
for k:=j+1 to i do
if ds[j].khoa<ds[j+1].khoa then
Begin
tg:=ds[j]; ds[j]:=ds[k]; ds[k]:=tg;
End;

End; {ket thuc with}
writeln;
Write('Nhap tiep hay thoi? C/K '); readln(tl);
if upcase(tl)='C' then i:=i+1;
Until upcase(tl)='K';

{Hien du lieu da nhap }
Write('Co xem du lieu khong? C/K '); readln(tl);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 36
if upcase(tl)='C' then
Begin
Writeln('DU LIEU DA NHAP ');
For j:= 1 to i do
with ds[j] do
Begin
write(mhs:3,' ',hoten:20);
with ns do write(' ',ngay,'/',thang,'/',nam);
case ds[j].khoa of
sp:writeln(' Khoa SP ',toan:4:1,ly:4:1,Tincb:4:1,ltnc:4:1);
cd:writeln(' Khoa CD ', co_hoc_may:4:1, suc_ben_vat_lieu:4:1,
hinh_hoa:4:1);
kt:writeln(' Khoa KT ',ke_toan_may:4:1,marketing:4:1);
end;
End;
End;
Readln;
END.

V d 2.9 tuy chy hon chnh song c mt s nhc im sau:
* T chc chng trnh cha hp l
* D liu a ra mn hnh cha p
Bn c c th thit k li bng cch a vo chng trnh con Nhap v chng trnh
con Hien. Chng trnh con Hien c th thit k d liu a ra di dng bng theo mu
sau y:

DANH SACH SINH VIEN TRUONG ........

Ma ho so Ho va Ten Gioi Khoa So mon hoc Tong diem Trung binh
.......


b. Truy nhp
Vic truy nhp vo cc trng c nh ca bn ghi c cu trc thay i hon ton
ging nh bn ghi thng. Cn vic truy nhp v cc trng thay i cn phi ch mt s
im sau:
- Khng dng php gn hoc nhp d liu t bn phm cho cc trng phn loi. Nu
trong v d 2.9 chng ta a vo lnh
monhoc:='Toan';
th s nhn c thng bo li: Type Mismatch
cn nu a vo lnh
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 37
Read(monhoc);
th s nhn c thng bo: Cannot Read or Write Variables of this Type

- Lnh With ... Do c tc dng vi tt c cc trng k c cc trng thay i bn
trong cc trng phn loi. C th trong v d 2.9 vi lnh
With ds do chng ta c th a vo trc tip lnh
Write('Nhap diem mon boi loi '); Readln(boi_loi);

- Tn cc trng phn loi khng th a ra mn hnh nh l mt tn trng bnh
thng ngha l cng ging nh trong mc 2.2 khng th vit lnh Write(monhoc). Trong
trng hp cn thit chng ta c th s dng cc bin trung gian.


2. D liu kiu tp (file)

2.1 Khi nim v tp

Tp d liu l mt dy cc phn t cng kiu c sp xp mt cch tun t. Tp
d liu c ct gi b nh ngoi (a mm hoc a cng) di mt tn no , cch t
tn tun theo quy nh ca DOS ngha l phn tn tp di khng qu 8 k t v phn ui
khng qu 3 k t.
Tp tp hp trong n mt s phn t d liu c cng cu trc ging nh mng (Array)
song khc mng l s phn t ca tp cha c xc nh.
Trong Pascal c 3 loi tp c s dng l:

a. Tp c kiu
Tp c kiu l tp m cc phn t ca n c cng di v cng kiu d liu. Vi
nhng tp c kiu chng ta c th cng mt lc c d liu t tp ra hoc nhp d liu vo
tp.
b. Tp vn bn (Text)
Tp vn bn dng lu tr d liu di dng cc k t ca bng m ASCII, cc k
t ny c lu thnh tng dng, di ca cc dng c th khc nhau. Khi ghi mt s
nguyn, v d s 2003 (kiu word) vo tp vn bn, Pascal cn 4 byte cho bn k t ch
khng phi l 2 byte cho mt s. Vic ghi cc s nguyn hoc thc vo tp vn bn s phi
qua mt cng on chuyn i, iu ny s do Pascal t ng thc hin. phn bit cc
dng Pascal dng hai k t iu khin l CR - v u dng v LF - xung dng mi.
Trong bng m ASCII k t CR = CHR(13) cn LF = CHR(10)

c. Tp khng kiu
Tp khng kiu l mt loi tp khng cn quan tm n kiu d liu ghi trn tp. D
liu ghi vo tp khng cn chuyn i.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 38
Khi khai bo mt bin kiu tp th ng thi ta cng phi to ra mt mi lin h gia
bin ny v mt tp d liu lu trn thit b nh ngoi. Cch khai bo ny c chun ho
trong Pascal.
Kiu d liu ca cc phn t trong bin kiu tp c th l bt k kiu no tr kiu ca
chnh n tc l tr kiu tp. V d nu kiu phn t l mt mng mt chiu ca cc s nguyn
ta c tp cc s nguyn, nu kiu phn t l Record ta c tp cc Record...
Tc dng ln nht ca kiu d liu tp l ta c th lu tr cc d liu nhp vo t bn
phm cng cc kt qu x l trong b nh RAM ra tp dng nhiu ln. Cc kiu d liu
hc ch x l trong RAM v in kt qu ra mn hnh hoc ra my in, khi kt thc chng trnh
hoc mt in c d liu nhp vo v kt qu x l u b mt.

d. Khai bo
Tp c kiu c nh ngha sau t kho TYPE cn bin kiu tp c khai bo sau t
kho VAR. Th tc khai bo bin kiu tp gm 2 cch:
- nh ngha kiu tp vi t kho FILE OF trong phn m t kiu sau t TYPE,
tip theo l khai bo bin tp trong phn khai bo bin
V d 2.10
Type
MSN = Array[1..100] of integer; (*nh ngha mng 100 s nguyn*)
TSN = File of MSN; (* nh ngha d liu kiu tp TSN c cc phn t l mng s
nguyn *)
CHUVIET = File of String[80]; (* nh ngha CHUVIET l tp cc chui c
di 80 k t *)
BANGDIEM = Record
Hoten: String[25];
Gioitinh: Char;
Lop: String[5];
Diachi: String[50];
Toan,Ly,Hoa: Real;
END;
TBD = File of BANGDIEM;
VAR
Tep1: TSN; (* bin tep1 c cc phn t l mng s nguyn *)
Tep2: CHUVIET; (* bin Tep2 c cc phn t l chui k t *)
Tep3: TBD; (* bin Tep3 c cc phn t l record*)
...........

- nh ngha trc tip bin kiu tp trong phn khai bo bin
V d 2.11
Var
Tep4: File of Array[1..5] of String[80];
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 39
Tep5: File of BANGDIEM;
Trong phn khai bo ny bin Tep4 l mt bin kiu tp, tp ny c 5 phn t, mi
phn t l mt chui di ti a 80 k t. Bin Tep5 l mt bin tp m cc phn t ca n c
kiu Bangdiem.

e. Truy nhp vo tp
Cc phn t ca tp c lu gi tun t thnh mt dy v vic truy nhp vo tng
phn t ph thuc vo thit b ghi, c ca my vi tnh. Turbo Pascal c th x l hai loi tp
l: Tp truy nhp tun t v tp truy nhp trc tip.
* Tp truy nhp tun t: truy nhp vo mt phn t no ta bt buc phi i
qua cc phn t trc . Nu mun thm cc phn t vo tp th ch c th thm vo cui
tp. Tp kiu ny d hnh dung, d x dng song khng linh hot, tn thi gian x l. Vic
truy nhp tun t thng c thc hin thng qua mt vng lp. Tp vn bn l tp thuc
kiu ny.
* Tp truy nhp trc tip: l tp c th truy nhp vo phn t bt k trong tp, trn
nhng thit b nh ngoi c in nh bng t, bng c l khng th to tp kiu ny v
khng th c ngay vo gia bng. Ch nhng my s dng a (mm hoc cng) th mi c
th to tp truy nhp trc tip v c th iu chnh u t t ng vo mt cung t cha
d liu no .
Mun truy nhp trc tip phi dng th tc Seek(s hiu phn t).

f. M tp

m mt tp chun b lu tr d liu Pascal x dng hai th tc chun sau y:
ASSIGN(bin tp, tn tp); (*lin kt bin tp vi mt tn tp s ghi vo thit b
nh ngoi *)
REWRITE(bin tp); (* to mt bin tp rng chun b nhp d liu vo *)
Trong :
* Bin tp: l tn bin tp khai bo sau t kho VAR
* Tn tp: L tn do ta chn ghi d liu vo a (theo quy nh ca DOS). Tn tp
c th bao gm c ng dn ti th mc m chng ta la chn. ng dn v tn tp phi
t trong du nhy n. V d:
ASSIGN(f,'a:\baitap.txt');
Sau th tc REWRITE ta s c mt tp rng v cha c phn t no c c vo.
Nu trn thit b nh ngoi ta c sn mt tp trng tn vi tn ghi th tc ASSIGN th
tp ngoi s b xo i.
Sau hai th tc chun b trn y, tin hnh ghi d liu vo tp ta li dng th tc
WRITE(....) nh bit.
Cch vit:
WRITE(bin tp, cc gi tr cn ghi vo tp);
Bc cui cng l phi ng tp li bng th tc
CLOSE(bin tp);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 40
Sau th tc ny d liu s c lu trn a v tp s b ng.
2.2 Tp vn bn
a. Khai bo tp vn bn
Tp vn bn c khai bo trc tip trong phn khai bo bin:
Var
Bien_tep : Text;
V d
Var
Hoso: Text;
T1,T2,T3:Text;

b. Truy nhp vo tp
Truy nhp vo tp c hiu l nhp d liu vo tp, ghi li d liu trn thit b nh
ngoi, c d liu c ra mn hnh hoc my in v x l d liu .
i vi tp vn bn vic ghi d liu vo tp c th thc hin qua hai cp th tc sau:
- M tp mi ghi
Assign(bien_tep, ng dn\ten_tep);
Rewrite(bien_tep);
Cp th tc trn dng m mt tp mi chun b nhn d liu, nu trong b nh
ngoi c tp trng tn th tp ngoi s b xo. Nu b qua ng dn th tp s c lu
vo th mc hin hnh tc l th mc m t Pascal c khi ng (C:\TP\BIN). Gi
s chng ta mun lu tp vi tn l BT1.DAT vo th mc BAITAP trn a A th phi vit
lnh:

Assign(bien_tep, 'A:\BAITAP\BT1.DAT');

- M tp c ghi thm
Assign(bien_tep, ten_tep);
Append(Bien_tep);
Cp th tc trn m mt tp lu trong thit b nh ngoi nhp thm d liu, nu
tp khng c th my s thng bo li. D liu nhp thm s c ghi vo cui tp.

- M tp c d liu
Di y l cp th tc dng m tp tn ti, chun b cho vic c d liu t tp
ra thit b ngoi:
Assign(bien_tep, ten_tep);
Reset(bien_tep);

c. Ghi d liu vo tp
Sau khi m tp chng ta c th dng th tc Write hoc Writeln ghi d liu vo
tp.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 41
C php:
Write(Bien_tep, gi tr 1, gi tr 2, ...);
Hoc
Writeln(Bien_tep, gi tr 1, gi tr 2, ...);
S khc nhau gia Write v Writeln l ch th tc Write s ghi d liu lin tc trn
cc nh, khng c cc k hiu v u dng v xung dng. Th tc Writeln s a thm
vo cui dng cc k t iu khin CR (v u dng) v LF (nhy xung dng di).
Gi tr 1, gi tr 2... trong lnh ghi c th l chui k t vit tng minh, tn bin hoc
biu thc, cc gi tr phi c phn cch t nht bng mt khong trng.
Th tc Writeln(Bien_tep); s to nn mt dng rng khng cha k t no c.
D liu trc khi ghi vo tp vn bn c th thuc cc kiu n gin sau y: S
nguyn, s thc, k t, chui, logic. D thuc kiu g th khi ghi vo tp u c chuyn
i thnh kiu k t. iu ny cng ng ngha vi quy nh rng cc kiu d liu c cu trc
nh: Array, Set, Record, File khng th lu tr trn tp vn bn.
Khi c th tc Close(bien_tep) Pascal s a thm vo dng cui cng k hiu kt
thc tp EOF (End of File).

V d 2.12
Var
T1:text;
Begin
Assign(T1,'DULIEU.DAT');
Rewrite(T1);
Writeln(t1,'Tep van ban');
Write(T1,123);
Write(T1,' ',123.45);
Writeln(T1);
Close(T1);
End.

V d 1.13 to ra tp vn bn DULIEU.DAT tp ny s c lu tr ti th mc hin
hnh tc l C:\TP\BIN.
Lnh Writeln(t1,'Tep van ban'); s ghi vo bin tp T1 (cng c ngh l ghi vo tp
DULIEU.DAT) dng ch "Tep van ban" tip l cc k t iu khin CR, LF.
Lnh Write(T1,123); s t ng chuyn i s 123 thnh k t v ghi vo tp khng
km theo CR, LF.
Lnh Write(T1,' ',123.45); ghi vo tp mt khong trng trc dy 123.45 tip
chuyn i v ghi s 123.45 vo tp theo quy cch ngm nh ca Pascal.
D liu s c ghi vo tp nh sau
Tep van ban
123 1.234500000E+02
(dng trng)
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 42

T v d trn c th nu mt s nhn xt sau:
* Cc k t nhp vo tp phi nm trong cp du nhy n
* Cc s khng cn trong du nhy, Pascal s t ng chuyn i chng khi ghi
vo tp. Nu chng ta khng ch r quy cch c hoc ghi s th cc s s c ghi theo quy
cch chun, c th l:
- S nguyn s c ghi chnh xc nh gi tr ca n trong lnh Write(...)
- S thc s c chuyn thnh dng khoa hc ngha l dng s vi lu tha c s
10, v d 123.45 chuyn thnh 1.234500000E+02. Trong cch vit khoa hc Pascal ngm nh
nh sau:
- Phn nguyn l 1 k t
- Phn l l 10 k t k c du chm thp phn
- Phn cn li l 4 k t cho lu tha c s 10, V D:
E+02 = 10
2
, E-03 = 10
-3

* Cc s c th ch r quy cch ghi nh sau
Write(T1,123:5);
Ghi vo tp s nguyn 123 vi di 5 k t, Pascal s trng hai v tr bn tri
Write(T1,' ',123.45:6:2);
S 123.45 c ghi vo tp vi di 6 k t v 2 k t cha s l

d. c d liu t tp vn bn
D liu lu tr trong tp vn bn c th cho hin ln mn hnh bng lnh TYPE ca
DOS, bng cc phm chc nng F3, F4 ca NC hoc a vo Word xem v sa cha nu
cn.
Vi Pascal tp vn bn thuc loi tp truy nhp tun t, do vy nu c tnh dng lnh
truy nhp ngu nhin Seek(...) th my s bo li:
Error 63: Invalid File Type
Sau khi tin hnh m tp con tr tp s c t ti dng u, Cch thc m Pascal
dng c d liu l nh sau: dng th tc Read, hoc Readln c d liu t dng hin
thi v gn vo bin tng ng, vit bin ra mn hnh hoc my in.
Read(Bien_tep, Dong); hoc Readln(Bien_tep, Dong);
Write(Dong); hoc Writeln(Dong);
Trong hai v d trn Bin trung gian l Dong, bin ny phi c khai bo trc v
phi thuc kiu String.
c th vit ton b d liu t mt tp vn bn ra cc thit b ngoi th cc lnh c
vit trn phi c lp i lp li t dng 1 n dng cui cng ngha l chng trnh phi s
dng mt trong hai vng lp:
While not eof(Bien_tep) Do
Begin
Readln(Bien_tep, Dong);
Writeln(Dong);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 43
End;
Hoc
For i := 1 to Filesize(Bien_tep) Do
Begin
Readln(Bien_tep, Dong);
Writeln(dong);
End;

Nu trn mt dng chng ta ghi nhiu gi tr ng vi cc bin khc nhau th khng
th c ring tng bin. Cch m chng ta ra lnh cho Pascal ghi d liu vo tp s nh hng
rt nhiu n vic chng ta gi d liu ra v x l d liu .
V d sau y s gii thch c th iu ny.
V d 2.14
Var
F:text;
Hoten:string[25]; heso:real; socon:byte; t:string;
Begin
Hoten:=' Tran Van Tam'; Heso:=4.25; Socon:= 2; {gn d liu cho cc trng}
Assign(f,'hoso.txt');
Rewrite(f);
Witeln(f,hoten,' ',heso:4:2,' ',socon);
Close(f);
Reset(f);
Readln(f,t); {c d liu t dng hin thi v gn vo bin t }
Writeln(t);
Readln;
End.

Chng trnh trn y c nhiu iu cn phi lu :
- Lnh ghi vo tp:
Witeln(f,hoten,' ',heso:4:2,' ',socon); s ghi tt c d liu trn mt dng.

T r a n V a n T a m 4 . 2 5 2 CR LF EOF

Nhn vo hnh v d dng nhn thy rng chui Hoten chim 13 Byte, Heso chim 4
Byte v Socon chim 1 Byte. Trong thc t cc s kiu Real c di l 6 Bytes nhng v
chng ta yu cu Pascal ghi Heso di 4 k t trong c hai s l nn khi ghi vo tp,
Heso ch chim 4 Bytes. Gia cc bin c hai khong trng do tng chiu di ca dng l
20 Bytes.
Lnh c d liu t tp Readln(f,t) s c c dng hin thi vo bin t v lnh vit
Writeln(t) s a ra mn hnh c dng ngha l ta li nhn c ton b dng nh trn. Cn
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 44
phn bit rng d liu vit ra l cc k t ca bng m ch khng phi cc ch v s nh ta
nhp vo.
Trng hp bin t khng di cha ht c dng th s k t tha s b ct b.

- Nu chng ta vit lnh c:
Readln(f,Hoten,' ',Heso,' ',socon);
th my s bo li: Error 106 : Invalid Numeric Format
ngha l khng th c trc tip cng mt lc t tp ra mn hnh c bin kiu k t v
bin kiu s.

- Nu chng ta vit li lnh ghi d liu:
Witeln(f,hoten);
Writeln(f,heso:5:2,' ',socon);
ngha l ghi ring d liu kiu "ch" trn mt dng cn d liu kiu "s" trn dng
khc, gia cc s c mt khong cch, sau dng lnh c:
Readln(f,hoten);
Readln(f,heso, Socon);
th li nhn c thng bo li dng Readln(f,heso, Socon);
Error 106 : Invalid Numeric Format
ngha l cc s ghi vo tp trn cng mt dng th cng khng th c chng nh l
cc bin.

- Chng ta sa li lnh ghi mt ln na
Witeln(f,hoten);
Writeln(f,heso:5:2);
Writeln(f,socon);
Ri dng lnh c
Readln(f,Hoten);
Readln(f,Heso);
Readln(f,socon);
sau l lnh vit
Writeln(Hoten, ' ', Heso:5:2,' ',socon,' ' ,Heso*290000);
th chng trnh s khng bo li .

n y c th rt ra kt lun l:
- Mun ly li kiu ca d liu nhp vo tp vn bn th mi bin phi nhp trn mt
dng.
- Vi cc bin kiu s ghi ring r trn mt dng khi gi ra Pascal s t ng
chuyn i t dng k t thnh dng s v ta c th a cc s ny vo cc biu thc tnh
ton bnh thng. Trong v d trn chng ta tnh Lng bng cch ly Heso*290000.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 45
- Trong b nh ca my d liu c ghi lin tc trong cc nh, phn bit cc
dng Pascal dng cp k t iu khin CR v LF. Ni cch khc d liu c lu tr lin tc
ch khng phi di dng bng, khi ly d liu ra chng ta cng ly lin tc nhng li c th
b tr trn mn hnh sao cho trc quan v d theo di.
V d 2.15: xy dng mt chng trnh n gin qun l cng chc. D liu nhp
vo bao gm H tn, H s lng v S con. D liu xut ra mn hnh bao gm H tn, H s
lng, S con v Lng thng, Lng thng y tnh theo quy nh ca nh nc =
heso*290000.
Chng trnh t ra hai kh nng la chn:
a. Nu tp d liu tn ti th nhp thm ngi
b. Nu tp cha c th m tp mi
Trong c hai trng hp u yu cu cho bit s ngi cn nhp.
D liu in ra di dng bng.

V d 2.15
Program Quan_ly_can_bo;
Uses crt;
Var f:text; hoten:string[20]; c1,heso:real; c2,i,n,socon:byte;
ten:string[12];
Begin
clrscr;
Write('Cho biet ten tep '); readln(ten);
{$I-}
assign(f,ten);
reset(f);
{$I+}
if Ioresult=0 then
Append(f)
else
rewrite(f);
write('Nhap bao nhieu nguoi '); readln(n);
for i:= 1 to n do
Begin
Write(' Ho ten ' ); Readln(hoten);
Write( ' He so '); readln(heso);
Write(' So con ' ); Readln(socon);
Writeln(f,hoten);
Writeln(f,heso:4:2);
writeln(f,socon);
End;
close(f);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 46

assign(f,ten);
reset(f);
writeln(':-----------------------:------:----------:---------------:');
writeln('| Ho va ten | Hs | socon| Luong |');
writeln(':-----------------------:-------:---------:----------------:');
while not eof(f) do
begin
readln(f,hoten);
readln(f,heso);
readln(f,socon);
writeln('|',hoten:19,'|',heso:4:2,'| ',socon:4,' | ',heso*290000:10:2,' |');
end;
readln;
End.

V d 2.15 c s dng nh hng chng trnh dch {$I+}, {$I-}. Khi nh hng
l {$I+} th chng trnh s kim tra li vo ra IO (Input, Output) nu pht hin thy li th
dng chng trnh, y l ch ngm nh ca Pascal. Nu nh hng l {$I-} th vic
kim tra li vo ra tm thi khng thc hin, ngha l nu pht hin thy li th tm treo cc
th tc vo ra v tm xem hm IORESULT cho kt qu l g. Nu hm ny cho kt qu bng
0 th c ngha l vic kim tra IO khng c g sai st v chng trnh tip tc lm vic. Nu
hm Ioresult cho kt qu khc 0 th c ngha l vic kim tra IO pht hin thy li v chng
trnh cn phi c sa cha.

V d 2.16: To tp vn bn Baitho.txt lu tr mt bi th c n dng, dng cui
cng ghi " Nam 2003". Khi nhp bi th cn hi trc bi th c bao nhiu dng.

V d 2.16

Program tep_van_ban;
Uses crt;
var i,n:integer; f:text; t:string;
Begin
clrscr;
assign(f,'baitho.txt');rewrite(f);
writeln('Bai tho gom bao nhieu cau? '); readln(n);
writeln('Hay nhap bai tho cua ban');
for i:= 1 to n do
begin
write('Cau ',i,' '); readln(t); writeln(f,t);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 47
end;
writeln(f,'Nam ', 2003);
close(f);
clrscr;
gotoxy(15,5); i:=6;
clrscr;
writeln('Du lieu viet tu tep baitho.txt ');
reset(f);
while not eof(f) do
begin
readln(f,t); gotoxy(15,i);
writeln(t);
i:=i+1;
end;
readln;
End.

V d 2.16 c th ci tin theo nhiu cch c c mt chng trnh p dng cho
vic lu tr vn bn, chng hn chng ta s a vo cc chng trnh con GHIMOI,
GHITHEM v DOC phc v vic ghi d liu vo tp mi, ghi thm d liu vo tp c
hoc c t tp ra. Trc khi ghi hoc c cn kim tra xem tp tn ti cha, khi nhp vn
bn vo tp khng hn ch s dng, mun kt thc vic nhp th khi bt u mt dng mi ch
cn bm du "*" v.v... (xem v d 2.17)


V d 2.17:
Program tep_van_ban;
Uses crt;
var i,j,n:integer; f:text; t:string;
tl,tl1,tl2:char; ten:string[12];

Procedure Ghimoi(ten:string);
Begin
clrscr;
assign(f,ten);
rewrite(f);
writeln('Hay nhap bai tho cua ban');
i:=1;
repeat
write('Cau ',i,' '); readln(t);
if t<>'*' then writeln(f,t);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 48
i:=i+1;
Until t='*';
close(f);
End;

Procedure Ghithem (ten:string);
Begin
clrscr;
assign(f,ten);
append(f);
writeln('Hay bo xung bai tho cua ban');
i:=1;
repeat
write('Cau ',i,' '); readln(t);
if t<>'*' then writeln(f,t);
i:=i+1;
Until t='*';
close(f);
end;

Procedure Doc(tep:string);
Begin
clrscr;
gotoxy(15,5); i:=6;
writeln('Du lieu viet tu tep ',tep);
assign(f,tep);
reset(f);
while not eof(f) do
begin
readln(f,t); gotoxy(15,i);
writeln(t);
i:=i+1;
end;
readln;
end;
BEGIN { Thn chng trnh m}
Clrscr;
Write('cho biet ten tep '); Readln(ten);
Write('Ban Ghi hay Doc du lieu G/D '); Readln(tl1);
If upcase(tl1)='G' then
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 49
Begin
write('Ghi tep moi hay ghi them vao tep cu M/C ');
Readln(tl2);
If upcase(tl2)='M' then Ghimoi(ten)
else
Ghithem(ten);
End
Else
Doc(ten);
END.
Trong v d 2.17 c s dng mt bin ton cc l TEN, kiu bin l string[12]. Khi ly
Ten lm tham s thc truyn cho cc chng trnh con th cn ch nh ngha kiu d
liu trc. C th nu chng ta vit dng lnh:
Procedure Doc(tep:string);
Di dng mi l
Procedure Doc(tep:string[12]); th my s bo li.

2.3 Tp c kiu
Tp c kiu l tp m mi phn t u c cng di v cng kiu. Kiu cc phn t
ca tp c th l s nguyn, thc, k t, chui, mng hoc bn ghi. Cch thc khai bo bin
kiu tp trnh by trong mc II. S khc nhau c bn gia tp c kiu v tp vn bn l tp
c kiu c th va ghi vo va c ra, cn vi tp vn bn chng ta buc phi kt thc ghi
bng lnh Close(bien_tep) th mi c th c tp, cn khi ang c tp chng ta cng phi kt
thc c v ng tp th mi c th ghi thm d liu vo tp.

a. c v ghi
- Ghi ln tp
Write(bientep, bien1, bien2, ...)
bien1, bien2, ... l cc bin cng kiu vi bin tp.
- c tp
Read(Bientep, bien1, bien2, ....)
c tp thc cht l c cc phn t ca tp v gn cho cc bien1, bien2,... cng kiu.
Vic c din ra trong b nh do ngi s dng mun bit c cc gi tr c th th phi
vit cc bin c ln mn hnh.

Ch :
Khc vi tp vn bn, vic ghi v c tp c kiu khng s dng cc lnh Writeln
hoc Readln ngha l tp c kiu khng ghi d liu thnh cc dng. Cc phn t ca tp c
kiu c ghi lin tc trong cc nh v ch c k hiu kt thc tp EOF.
Khi chng ta c hoc ghi xong mt phn t th con tr tp s t ng chuyn n v
tr k tip.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 50
b. Truy nhp vo tp
Seek(bientep,i); i=0,1,2,.....
Th tc Seek s nh v con tr ti phn t th i ca tp, Pascal quy nh v tr cc
phn t l 0, 1, 2... nh vy phn t th nht l phn t c v tr 0.
Lnh Seek(bientep, 5); s nh v con tr tp ti phn t th 6.
Cc tp sau khi m theo ngm nh con tr tp lun nh v ti phn t u tin ngha
l phn t c s th t l 0. Trong qu trnh c nu chng ta dng mt cu trc lp c th
khi c xong mt phn t con tr tp s t ng chuyn n phn t k tip.
while not eof(BT) do {Kim tra xem con tr tp nm phn t cui cha}
begin
Read(bt,i); write(i:5);
end;

c. Cc hm x l tp
*. Filesize(bientep) cho bit s phn t c trong tp
*. FilePos(bientep) cho bit v tr hin thi ca con tr tp
*. Eof(Bientep) cho gi tr True nu con tr tp v tr cui tp (v tr cui tp c
hiu l v tr sau phn t cui cng), nu con tr tp nh v ti bt k phn t no ca tp th
hm eof() cng cho gi tr False.
Gi s tp DS c 8 phn t khi hm
Filesize(DS) s cho kt qu l s 8,
cn th tc
Seek(DS,Filesize(DS))
s nh v con tr ti phn t th 8 (s th t ca phn t ny l 7) ngha l cui tp
(bi v phn t u tin c s th t l 0).

V d 2.18
To mt tp ly tn l TEPCK.DAT va ghi va sa d liu
Program Tep_co_kieu;
Uses crt;
Var bt: file of byte; i:byte; n:real;
Begin
clrscr;
assign(bt,'TEPCK.DAT');
rewrite(bt);
for i:= 0 to 5 do write(bt,i); {ghi vo tp nm s nguyn}
reset(bt);
writeln(' Du lieu luu tru trong tep TEPCK.DAT ');
while not eof(BT) do {vit d liu t tp ra mn hnh}
begin
Read(bt,i); write(i:5);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 51
end;
writeln;
seek(bt,3); {nh v con tr ti phn t th 4}
textcolor(magenta);
read(bt,i); {c phn t thc 4 vo bin i}
writeln('So cu trong tep o vi tri 3: ',i);
i:=33;
seek(bt,3);
write(bt,i); {sa phn t th 4, gi tr mi l 33}
seek(bt,3); read(bt,i)
Writeln('So moi trong tep o vi tri 3: ', i);
writeln('Vi tri hien thoi cua con tro: ',filepos(bt));
readln;
close(bt);
End.

Nhn xt:
V d 2.18 cho thy khi ghi hoc c d liu vo tp c kiu th chng ta lun lun
phi dng n cc bin c cng kiu vi bin tp.
on chng trnh
i:=33; seek(bt,3); write(bt,i);
dng ghi vo phn t th 4 gi tr mi bng 33. Nu chng ta vit li on lnh ny
vi tng ghi trc tip gi tr 33 vo phn t th 4
seek(bt,3); write(bt,33);
th Pascal s bo li "Variable Indentifier Expertied" ngha l Pascal khng hiu s 33
thuc kiu d liu g.

V d 2.19
Lp chng trnh nhp im cho hc sinh v ghi kt qu vo tp c tn l
DIEM.DAT. Chng trnh nh ngha mt kiu d liu mi l Bangdiem (Kiu Record) vi
cc trng: Stt, Hoten, Diachi, Gioitinh, Lop, Toan, Ly, Hoa. Bin tp Ds thuc loi tp c
kiu. V d 2.19 ch mi lm cng vic l nhp d liu vo tp m cha c d liu ra.

Program Kieutep;
Uses Crt;
Type
Bangdiem = Record
Stt: Integer;
Hoten, Diachi: String[25];
Gioitinh, Lop: string[5];
Toan,Ly,Hoa: Real;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 52
End;
Tepdiem = File of Bangdiem;
Var
DS: Tepdiem;
NGUOI: Bangdiem;
i,j: Integer; lam,TL: Char;

Begin
Assign(DS,'diem.dat');
Rewrite(DS);
Nguoi.stt:=1;
textbackground(white);
textcolor(5);
lam:='L'; TL:='C'; While lam='L' do
Begin
clrscr;
i:=10; j:=5;
gotoxy(i,j); write(' So thu tu: ');
gotoxy(i,j+1); write(' Ho va ten: ');
gotoxy(i,j+2); write(' Nam hay nu: ');
gotoxy(i,j+3); write(' Thuoc lop: ');
gotoxy(i,j+4); write(' Dia chi: ');
gotoxy(i,j+5); write(' Diem Toan: ');
gotoxy(i,j+6); write(' Diem Ly: ');
gotoxy(i,j+7); write(' Diem Hoa: ');
i:=i+15;
With Nguoi do
Begin
Gotoxy(i,j); Readln(STT);
Gotoxy(i,j+1); Readln(Hoten);
Gotoxy(i,j+2); Readln(Gioitinh);
Gotoxy(i,j+3); Readln(lop);
Gotoxy(i,j+4); Readln(Diachi);
Gotoxy(i,j+5); Readln(Toan);
Gotoxy(i,j+6); Readln(Ly);
Gotoxy(i,j+7); Readln(Hoa);
End;
Gotoxy(i,j+9); Write('Co ghi vao danh sach khong? C/K ');
Readln(TL);
If upcase(TL) ='C' then
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 53
Begin
Write(DS,NGUOI);
NGUOI.STT:= NGUOI.STT+1;
End;
textbackground(white);
textcolor(blue);
Gotoxy(28,22);
Write(' NHAP TIEP HAY THOI ? L/T ');
Readln(lam);
lam:=upcase(lam);
textbackground(white);
textcolor(5);
End;
Close(DS);
End.

V d 2.20 Nhp d liu qun l im tuyn sinh trung cp vo tp, tnh tng im v
kt qu cho tng ngi sau c d liu ra mn hnh

V d 2.20
Program Diem_trung_cap;
Uses crt;
Type dong=record
mhs:byte;
hoten:string[12];
toan,ly,tong:real;
ketqua:string[7];
end;
ds = file of dong;
Var nguoi:dong; dsl:ds; i,n:byte;
Begin
clrscr;
assign(dsl,'dsl.txt');
rewrite(dsl);
write('Nhap bao nhieu nguoi ? '); readln(n);
for i:= 1 to n do
Begin
With nguoi do
Begin
write('Ma ho so ', i); mhs:=i;writeln;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 54
write('Ho va ten '); readln(hoten);
write('Diem toan '); readln(toan);
write('Diem ly '); readln(ly);
tong:=toan+ly;
if tong>10 then ketqua:='Do' else ketqua:='Truot';
end;
write(dsl,nguoi);
writeln;
End;
close(dsl);
clrscr;
reset(dsl);
writeln(' Du lieu luu tru trong tep DSL.TXT ');
while not eof(dsl) do
with nguoi do
begin
read(dsl,nguoi);
writeln(mhs:3,hoten:15,toan:5:2,ly:5:2,tong:7:2,ketqua:6);
end;
readln;
End.

2.4 Tp khng kiu
Nh bit tp vn bn cha ng trong n ch cc k t ca bng m, tt c cc kiu
d liu khc u phi chuyn v kiu ny. Tp c kiu i hi kht khe v kiu d liu ca
bin v ca tp. Tp khng kiu l loi tp khng quan tm n kiu d liu. S khc nhau
gia tp c kiu v tp khng kiu l ch sau khi khai bo bin tp vic m tp ghi
hoc c cn ch r ln (tnh bng Byte) ca tng phn t tp. iu ny c ngha l
gia cc phn t khng c k hiu phn cch nh thng thy (tp vn bn l CR v LF, tp
c kiu l khong cch).

a. Khai bo bin tp
khai bo mt bin tp khng kiu chng ta dng mu:
Var Bientep: File;
V d:
Var BT:file;

b. M tp ghi - c
Sau khi khai bo bin tp, mun m tp khng kiu ghi chng ta dng cp th
tc:
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 55
Assign(bientep, tentep);
Rewrite(Bientep, n);
Cn m tp c l cc th tc
Assign(bientep, tentep);
Reset(Bientep, n);
y n l ln tnh theo Byte do ngi s dng quy nh ghi (hoc c) d liu
ca tng phn t ( Record ).
Nu chn n=1 ngha l mi phn t c di 1 byte th d liu ghi vo tp ch c th
thuc kiu Byte, char, shortint, cn nu chn n=2 th d liu c th l Integer, word. Vi s
thc Real phi chn n=6.
Gi s mi phn t ghi vo tp l mt chui di ti a l 10 k t th phi chn n=11
bi v mi chui khi ghi vo b nh cn thm mt byte cha k t cho bit di thc ca
chui.
Nu b qua tham s n th Pascal s dng gi tr ngm nh l 128.

c. c v ghi tp khng nh kiu
* c tp khng nh kiu
BlockRead(bientep, biennho, i, j);
Bn thn t kho BlockRead cho thy vic c tp khng kiu l c tng khi
(block). Khi y c hiu l mt vng nh lu tr d liu. Khi c th l mt bin, mt
chui, mt Record hay mt mng.
- bientep: l bin tp lin kt vi tn tp ch ra trong th tc assign(...)
- biennho: l mt bin c khai bo cng kiu vi cc phn t ca tp, bin nh
ng vai tr vng nh m lu tr d liu c t phn t ca tp ra. T bin nh ny
chng ta c th cho d liu hin trn mn hnh hay in ra my in.
- i l s phn t quy h cho mi ln c
- j l mt bin kiu Word dng ghi li s phn t thc s c c. Tham s j c
th b nu khng cn thit.
- Ghi tp khng nh kiu
* BlockWrite(bientep, biennho, i);
Th tc BlockWrite ch c 3 tham s, ngha ca cc tham s ny cng ging nh vi
th tc BlockRead

d. Truy nhp tp khng kiu
Tp khng kiu cng c truy nhp nh tp c kiu ngha l cng dng th tc
Seek(bientep,n) truy nhp vo phn t th n+1 ca tp.
iu cn c bit lu l vi tp khng kiu l mi ln con tr tp dch chuyn n s
dch chuyn mt s byte ng bng s byte quy nh trong lnh Rewrite() hoc Reset()

V d 2.21
Program tep_khong_kieu1;
Uses crt;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 56
Var bt:file; a:array[1..15] of byte;
i,j,k:byte; n:word;

Begin
Clrscr;
assign(bt,'tep0kieu.dat');
rewrite(bt,1); { di tng phn t l 1 byte}
For i:= 1 to 15 do
begin
a[i] := i;
blockwrite(bt,a[i],1); {ghi vo tp 15 s, mi ln ghi 1 s}
end;
j:=a[2]*a[3];
for i:= 0 to 14 do
begin
seek(bt,i);
Blockread(bt,k,1); {c tng phn t ca tp vo bin K}
textcolor(red);
write(k,' ');
end;
writeln;
seek(bt,filesize(bt)-1); {chuyn con tr n phn t cui}
blockwrite(bt,j,1); {sa gi tr phn t cui}
seek(bt,filesize(bt)-1);
blockread(bt,k,1); {c li phn t cui}
write(k); { vit phn t cui ln mn hnh}
close(bt);
readln;
end.

V d 2.21 to mt bin tp khng kiu l BT, bin tp ny kt ni vi mt tp lu tr
d liu Tep0kieu.dat.
u tin chng trnh ghi ln tp 15 s nguyn (1 byte), sau c d liu t tp v
vit chng ra mn hnh (phn t cui l 15). Tip sa d liu phn t cui v li vit
phn t ra mn hnh (by gi l 6).

V d 2.22
Chng trnh di y to tp khng kiu BT, cc phn t tp l chui c di bng
3, lnh m tp ghi phi quy nh di phn t bng 4 v trong b nh string[3] s chim 4
bytes.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 57
Program tep_khong_kieu2;
Uses crt;
Var bt:file; a:array[1..30] of string[3];
i,j:byte; k:string[3];

Begin
Clrscr;
assign(bt,'tep0kieu.dat');
rewrite(bt,4); { ln ca mi phn t l 4 bytes}
For i:= 1 to 24 do
begin
a[i] := chr(i+64)+chr(i+65)+chr(i+66);
blockwrite(bt,a[i],1);
end;
reset(bt,4);
for i:= 0 to 23 do
begin
seek(bt,i);
Blockread(bt,k,1);
textcolor(green);
write(k,' ');
end;
close(bt);
readln;
end.

V d 2.23
Nhp vo tp cc phn t l Record v sau vit chng ra mn hnh. Trong phn
khai bo Record chng ta chn Hoten l string[15] v Diem thuc kiu Real nh vy di
ca mi phn t phi l 15+1+6=22.

Program tep_khong_kieu4;
Uses crt;
Type hs = record
hoten:string[15];
diem:real;
end;
Var
bt:file; k,nguoi:hs; i,j:byte;

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 58
Begin
Clrscr;
assign(bt,'tep0kieu.dat');
rewrite(bt,22);
write('Nhap bao nhieu nguoi? ');
readln(n);
For i:= 1 to n do
with nguoi do
Begin
write('Ho va ten : '); readln(hoten);
Write('Diem tong : '); readln(diem);
blockwrite(bt,nguoi,1);
end;
for i:= 0 to n-1 do
begin
seek(bt,i);
Blockread(bt,k,1);
textcolor(red);
with k do
writeln(hoten,' ',diem:5:2);
end;
close(bt);
readln;
end.

tm hiu thm v tp khng kiu chng ta c th m Help ca Pascal v xem trong
v d v vic dng tp khng kiu sao chp d liu t tp ny sang tp khc.

3. D liu kiu tp hp

3.1 Khi nim tp hp

a. Khi nim tp hp
Mt tp hp bao gm n phn t cng kiu d liu (0 <= n <= 255), kiu ca cc phn
t phi l kiu v hng m c (nguyn, k t, logic, lit k, on con). S th t cc
phn t trong tp hp lun nm trong khong 0 - 255.

b. Khai bo kiu v gn d liu vo tp hp
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 59
m t kiu tp hp, Pascal dng t kho Set of tip l kiu d liu c bn ca
cc phn t to nn tp hp. Cch vit kiu d liu ny phi tun theo nhng quy nh m
Pascal thit k:
* Vi Pascal 7.0 s phn t khng qu 256 v s th t ca cc phn t phi tng dn
* Kiu d liu c bn ca cc phn t ca tp hp c th vit tng minh hoc thng
qua cc gi tr c th. V d :

Type
a = set of Char;
b = set of Byte;
c = set of 1..100;
d = set of 'a' .. 'z';
Maytinh = set of (Compact, Mitac, IBM, CMS);
Trong v d trn kiu d liu ca cc phn t ca tp hp a, b c khai bo tng
minh, a l tp cc k t, b l tp cc s nguyn. Kiu d liu cc phn t ca tp c v d c
xc lp qua cc gi tr vit sau SET OF, tp c s l tp cc s nguyn trong khong t 1 n
100, tp d l tp cc cha cc ch ci thng cn Maytinh l tp hp ca 4 phn t lit k.
thy r hn chng ta xt v d sau:

V d 2.24
Program Taphop1;
Uses crt;
Type
mau= set of (xanh, hong, tim, vang, den, nau);
sn1 = set of 0..100;
sn2 = 100..200;
chucai1 = set of 'a'..'z';
chucai2 = set of 'A'..'Z';
Kytu = set of Char;
Var
a,b:mau; b1:sn1;
b2 : set of sn2; c :chucai1; d:chucai2; e:kytu;
i,j,k:word;
tl : set of boolean;
BEGIN
clrscr;
i:=300; j:=160; k:=i+j;
a:=[xanh.. vang];
b:=[tim,nau];
b1:=[15,255,i+j,i*j];
b2:=[1, 200, 155, 123, 145];
c:=['z','','k'];
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 60
d:=[2, 3,'4'];
tl:=[true,false];
readln;
END.

V d 2.24 khai bo nm kiu tp hp l Mau, Sn1, Chucai1, Chucai2, Kytu cn Sn2
l kiu d liu on con. Bin a thuc kiu tp hp MAU, bin B1 v B2 thuc kiu tp hp
s nguyn, bin c v d thuc kiu tp hp ch ci, bin e thuc kiu k t cn bin Tl thuc
kiu boolean. Cc php gn trong v d s xc nh mt s tp hp, chng hn cu lnh
a:=[xanh, hong, den, tim];
xc nh tp hp a gm cc phn t xanh, hong, den, tim.
e:=['0'..'9', 'a'..'z'];
xc nh tp hp e gm 10 k t 0, 1,...9 v 26 k t 'a', 'b', ... 'z'

Khi khai bo kiu tp hp cn ch mt s iu sau y:
* Th nht: Th t cc phn t trong tp hp lun theo chiu tng dn, nu chng ta
khai bo:
sn1 = set of 200..100;
hoc
chucai = set of 'z' .. 'a';
th Pascal s thng bo li: Lower bound greater than upper bound.

* Th hai: Kiu d liu ca cc phn t mc d c th l s nguyn song khi khai
bo li ch c th l ki Byte.
Lnh SN0 = set of Byte; l ng
Cc lnh khai bo sau l sai:
SN1 = set of Word;
SN2 = set of Integer;
SN3 = set of Shortint;
Li m Pascal thng bo l:
Error 23: Set base type out of Range

* Th ba: Nhng ga tr m chng ta khai bo sau t kho SET OF s dn ti mt
trong hai kh nng:
- Nu l khai bo kiu lit k, kiu Boolean th y chnh l cc gi tr m tp hp c
th nhn. Tr li v d 2.24 cc php gn
a:=[xanh, tim, luc];
tl:=[tru, fal];
s b bo li v phn t "luc" khng c trong danh sch lit k ca mu, cn Tru v Fal
khng c trong kiu boolean.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 61
- Vi nhng kiu cn li (nguyn, k t, on con) nhng khai bo sau t kho Set of
khng phi l gi tr ca cc phn t ca tp hp m l th t ca cc phn t , Kiu ca
cc d liu s cho bit cc phn t ca tp hp s phi thuc kiu g

V d: 2.25
Type
sn1 = set of 0..100; {cc phn t tp hp phi l s nguyn}
kytu = set of char; {cc phn t tp hp phi thuc kiu k t}
Var
a : sn1; b : kytu;
.....................
Vi khai bo nh trong v d 2.25 chng ta khng th dng php gn:
b := ['a', 12, 'c']; ( cc phn t ca tp b phi l s )
c:= [1, 2, 100]; ( cc phn t ca tp c phi l k t )

* Th t: Khng c gn trc tip cc s nguyn c gi tr ln hn 255, v d php
gn
b2:=[100, 200, 256]; s b bo li Error 76: Constant out of Range

* Th t: Cc phn t trong tp hp c th l hng, bin hay biu thc. Nu l tp s
nguyn th gi tr cc bin hay biu thc trong php gn c th ln hn 255
Trong v d 2.25 php gn sau khng b bo li
i:=300; j:=160; k:=i+j;
b1:=[15,255,i+j,i*j];

3.2 Phn loi tp hp

a. Tp hp cng kiu
Cc tp hp c coi l cng kiu nu chng c xy dng trn cng mt kiu c
bn.
Gi s chng ta khai bo cc tp hp nh v d sau:

V d 2.26
Type
mau= set of (xanh, hong, tim, vang, den, nau);
mau_xe = set of (xanh..vang);
sn1 = set of 0..100;
sn2 = 100..200;
sn3 = set of Byte;
chucai1 = set of 'a'..'z';
chucai2 = set of 'A'..'Z';
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 62
Kytu = set of Char;
Var
a:sn1; b:sn2; c:sn3; mau_oto:mau; chu:kytu;
.......
th cc nhm tp hp sau y l cng kiu
mau, mau_xe
sn1, sn2, sn3
chucai1, kytu
chucai2, kytu

b. Hnh thnh mt tp hp

Mt tp hp c hnh thnh khi chng ta gn cho bin tp hp cc gi tr c th, cc
gi tr ny c t trong hai du ngoc vung.

V d 2.27
c := [2, 15, 30, 100..200];
mau_oto := [xanh, den, vang, tim];
a := [];
chu := ['A'..'Z'];
Nu mt tp hp khng cha mt phn t no c th n c gi l tp rng v c
k hiu l []. Trong v d 2.28, a l mt bin tp hp rng.
Tp hp rng c xem l cng kiu vi mi kiu tp hp.


3.3 Cc php tnh trn tp hp

Cc php tnh gii thiu sau y ch thc hin c trn cc tp hp cng kiu, ngha
l cc phn t ca mi tp hp phi cng thuc mt kiu c bn.

a. Php gn
Php gn c dng hnh thnh nn mt tp hp. C th gn mt tp hp cho mt
bin tp hp cng kiu hoc gn mt bin tp hp cho mt bin tp khc cng kiu. (xem v
d 2.28)

b. Php hp
Php hp c k hiu bi ton t " + ". Hp ca hai tp hp A v B khi c th
vit l A + B
Hp ca hai tp A v B l mt tp hp gm cc phn t thuc A hoc thuc B.
Gi s cc tp A, B, C c hnh thnh nh sau:
A := [1..8,10..15];
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 63
B := [5..9, 20,30];
C := A + B;
Tp C c hnh thnh bi php hp A v B nn s gm cc phn t [1..15,20,30]

c. Php giao
Giao ca hai tp A v B k hiu l A*B l mt tp hp gm cc phn t ng thi
thuc c A v B.
C := A*B; tp C s c cc phn t [5, 6, 7, 8]

d. Php tr
Php tr hai tp hp A v B k hiu l A - B cho ta mt tp gm cc phn t thuc A
nhng khng thuc B
C := A - B; tp C s c cc phn t [1..4, 10..15]
cn [1..5] - [1..10] = [ ]

e. Php thuc v
Php thuc v k hiu l IN l mt php th xem mt gi tr hay mt bin (khng phi
l bin tp) c thuc v mt tp khc hay khng? Nu c gi tr php th l True, ngc li
php th cho kt qu False.

V d 2.28
T1:= ['a'..'z'];
T2:= [true,false];
T3 := 'c';
Write( T3 in T1); cho kt qu True
Write(false in T2); cho kt qu True
Wite('1' in T1 ); cho kt qu False

3.4. Cc php so snh trn tp
Cc php so snh ni trong mc ny ch c thc hin trn cc tp cng kiu. Kt
qu ca php so snh thuc kiu Boolean ngha l cho ra mt trong hai gi tr True hoc
False.

a. Php bng, k hiu l =
Hai tp A v B gi l bng nhau nu mi phn t ca A u thuc B v mi phn t
ca B u thuc A khng ph thuc vo th t cc phn t.
V d php so snh
[1..6] = [1,2,4,5,3,6] cho kt qu True
['a', 'b', 'c'] = ['A', 'B', 'C'] cho kt qu False

b. Php khng bng, k hiu l <>
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 64
Hai tp A v B gi l khng bng nhau nu tp A c t nht mt phn t khng thuc
tp B hoc tp B c t nht mt phn t khng thuc tp A.
[1..6] <> [1,2,4,5,3,6] cho kt qu False
['a', 'b', 'c'] <> ['A', 'B', 'C'] cho kt qu True

c. Php nh hn hoc bng, k hiu l <=
Tp A gi l nh hn hoc bng tp B nu mi phn t ca tp A u thuc tp B.
[1..6] <= [1,2,4,5,3,6,8,9] cho kt qu True
[1..6] <= [1,2,4,5,3] cho kt qu False

d. Php ln hn hoc bng, k hiu l >=
Tp A gi l ln hn hoc bng tp B nu mi phn t ca tp B u thuc tp A.
[1..6] >= [1,2,4,5] cho kt qu True
[1,5] >= [1,2,4,5] cho kt qu False

Ch : Trong Pascal khng tn ti cc php so snh nh hn < v ln hn >

Cc v d v d liu kiu tp hp

V d 2.29 : Tm s nguyn t
Ta bit s nguyn t l cc s ch chia ht cho 1 v chnh n (ngoi tr s 1) tm
cc s nguyn t trong khong t 1 n n chng ta s dng nguyn l sng Eratosthne.
Nguyn l ny c th pht biu nh sau: nu a l mt s nguyn t trong tp [1..n] th khng
th tn ti mt s b thuc tp [1..n] m b l bi s ca a. Ni cch khc nu ta tm c a l
mt s nguyn t th ta phi loi tr khi tp [1..n] tt c cc s l bi s ca a.

Program Tim_so_nguyen_to;
Uses crt;
Const n=255;
Type Songuyen = 1..n; {nh ngha kiu d liu Songuyen gm n s}
Var snt,sang: set of songuyen;
so:songuyen; i:integer;
Begin
clrscr;
Writeln('Cac so nguyen to tu 2 den ',n);
snt:=[];{Tp snt ban u l tp rng}
sang:=[2..n]; {Xc lp tp Sang gm s nguyn t u tin (2) v cc s khc}
so:=2; {Gn vo bin So s nguyn t u tin = 2}
Repeat
While not (so in sang) do so:=so+1;
snt:=snt+[so]; {B xung s nguyn t va tm c vo tp Snt}
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 65
i:=so;
Write(so,' '); {Vit s nguyn t va tm c ra mn hnh}
While i<=n do
Begin
sang:=sang-[i]; i:=i+so; {Xo cc s l bi s ca s nguyn t va tm c}
End;
Until sang = [];
Readln;
End.

V d 2.30
Tr chi gieo xc xc: nguyn tc chi nh sau: ngi chi chn mt s trong khong
t 1 n 6, my s gieo 3 con xc xc c 3 s. Nu s ca ngi chi nm trong tp s
m my gieo th ngi chi thng, ngc li ngi chi thua. Nu ba ln chi m ngi
chi u thng th tuyn b ngi chi trng s c c.

Program xuc_xac;
Uses crt;
Var xucxac: set of 1..6;
So,i,dem,a,b,c:1..6;tl:char;
Begin
Clrscr;
Repeat
clrscr;
For i:= 1 to 3 do
Begin
Textcolor(5);
Write('Moi ban chon mot so tu 1 den 6 '); readln(so);
a:=random(6); b:=random(6); c:=random(6);
xucxac:=[a,b,c];
Writeln('So ma ban da chon ',so);
Writeln('So ma may da gieo ',a,' ',b,' ',c);
If so in xucxac then
Begin
textcolor(14);
writeln('Ban thang van thu ',i);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 66
dem:=dem+1;
End
else
Writeln('Ban thua van thu ',i);
If dem = 3 then Writeln('Ban trung doc dac - Xin chuc mung');
End;
Writeln;
Write('Choi tiep hay thoi? C/K ');
Readln(tl);
Until upcase(tl)='K';
End.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 67

Bi tp ng dng chng 2

1. Nhp vo th vin n u sch (n<=50), cc thng s cn a vo l: Tn sch, Tn
tc gi, Nm xut bn, Tn nh xut bn, S trang, Gi tin. Hin danh mc sch nhp ln
mn hnh.

2. D liu tuyn sinh gm cc trng: SBD, HOTEN, TOAN, LY, HOA, TONG,
KETQUA.
Lp chng trnh nhp d liu cho mt phng thi khng qu 40 th sinh, s liu trong
trng Tong = Toan+Ly+Hoa, trng Ketqua in vo ch "DO" nu tng >=20, cn li l
"TRUOT".
Hin ln mn hnh nhng ngi DO

3. D liu qun l hng ho bao gm: M hng, Tn hng, S lng, n gi, Ngy
nhp, S chng t.
Lp chng trnh nhp hng vo kho, sau mi mt hng nhp li hi: "Nhap tiep hay
thoi? C/K ". Nu bm "K" th kt thc nhp v hin danh mc hng nhp ln mn hnh.

4. TOADO l kiu bn ghi cha to (ct,dng) ca ba im trn mn hnh. Lp
chng trnh kim tra xem ba im ny c thng hng khng, nu khng thng hng th to
nn tam gic g (Vung, Cn, ...)

5. D liu qun l v xe la gm: S toa, s gh, gi v, ga i, ga n, bn v
cha. Mi toa tu c 50 gh nh s th t t 1 n 50.
Lp chng trnh nhp vo nhng gh bn v, thng bo cn bao nhiu ch cha
bn v.
6. D liu qun l hng ho bao gm: M hng, Tn hng, S lng, n gi, Ngy
nhp, S chng t. Ngy nhp bao gm Ngay, Thang, Nam.
Lp chng trnh nhp hng vo kho, kt thc nhp khi m hng bng du "*" .
Cho mt thng no , hin nhng hng nhp trong thng .

7. D liu qun l t ai bao gm hai trng Ch t v t. Ch t bao gm: M
h s, H tn, M t, a ch. t bao gm: M t, Din tch, Loi t, Mc ch s dng.
Nu mc ch s dng l trng trt th c thu nng nghip
Nu mc ch s dng l cng ch (trng hc, bnh vin, sn vn ng) th khng
phi np thu.
Nu mc ch s dng l kinh doanh bt ng sn th c thu t v thu mn bi.
Nhp d liu cho n ngi (n<=30) sau hin ln mn hnh 10 ngi s dng nhiu
t nht.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 68
8. Vit chng trnh nhp vo tp vn bn F mt s dng vn bn, m xem trong tp
cc k t a,b,....z mi k t xut hin bao nhiu ln?
9. Thng tin v th sinh thi i hc bao gm Hoten, namsinh, diemthi, ketqua. Thng
tin trn c ghi trong mt tp vn bn, mi trng trn mt dng. Lp chng trnh in ra
mn hnh mi th sinh trn mt dng
V d:

Trong tp In ra mn hnh
Tran Tam
1980
8
Kha
Tran Tam 1980 8 Kha

10. D liu qun l hng ho bao gm: M hng, Tn hng, S lng, n gi, Ngy
nhp, S ho n. Lp chng trnh nhp d liu t bn phm v ghi vo tp c kiu. Cho bit
mt s ho n, hin ln mn hnh s liu ng vi ho n .

11. T1 v T2 l cc tp vn bn, ni dung T1, T2 nhp t bn phm, hy ni T1 vi T2
thnh T3, hin T3 ln mn hnh.

12. T1 l tp vn bn cha 15 k t dng s Integer. Lp chng trnh chuyn T1
thnh tp s nguyn T2, tnh tng cc s v vit kt qu ln mn hnh.

13. Gi s th mc hin hnh l C:\TP\BIN. Cho bit mt tn tp t bn phm, kim
tra xem trong th mc hin hnh c tp cha, nu c th hin ni dung tp, nu cha th
m tp mi ghi d liu.

14. Hai tp A v B gi l lin thng nu chng c t nht mt phn t chung. Nu cc
cp tp hp sau l lin thng (A,B), (B,C), (C,D), (D,E) th ta ni c mt ng ni t A n
E.
Lp chng trnh tm ng ni gia n im A
1
, A
2
, ... An trn mn hnh bit rng to
gia cc cc im ln lt l (x
1
, y
1
), (x
2
, y
2
), ... (xn, yn). In ra tt c ng ni theo mu:
A
1
-> A
2
->... -> An

Nu gia cc cp im Ai, Aj

khng c ng ni th tr li khng c.
V d:
A
1
(1,2)

, A
2
(2,3) ,A
3
(3,4), A
4
(4,1), A
5
(5,6)
A
1
-> A
5
khng c ng ni
A
1
-> A
2
c hai ng ni
A
1
-> A
2

A
1
-> A
4
-> A
3
->A
2

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 69





Chng 3

n v chng v trnh Th vin chun





Khi nim n v chng trnh ging nh mt cun sch v Th vin chun ging
nh mt t sch. Th vin chun ca Pascal khng cha ht mi n v chng trnh, l do l
v tit kim b nh. Chng ny bn c nn dnh nhiu thi gian cho vic khai thc cc Unit
thit k trong Pascal, tuy nhin l mt ngi lp trnh th khng th khng bit t to ra
cc Unit. Nhng phn ngi c cn nm c l:
Cc th tc hoc hm c trong cc Unit System,Graph, Crt, Dos..
Phng php xy dng cc Unit
Nhng nguyn tc cn tun th khi tham chiu n cc Unit
Bin dch Unit t chng trnh ngun sang dng m my (ui tp l TPU)






Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 70
1. Khi nim n v chng trnh (Unit)

Thut ng Unit trong ngn ng lp trnh Pascal c dch l "n v chng trnh".
Mi Unit c xem nh mt modul nh cha ng mt s cng c cn thit gip cho ngi
lp trnh c th d dng thit k chng trnh. Cc Unit c th gp chung li thnh th vin
chng trnh hoc phn tn trong mt th mc quy c ca Pascal .
Lnh tham chiu n Unit c t u chng trnh vi c php:
USES tnUnit;
V d: USES CRT, GRAPH;
Cc Unit c t chc trong Pascal di hai dng:
* Cc file c lp vi phn m rng l TPU (Turbo Pascal Unit), v d GRAPH.TPU
* File th vin chun vi phn m rng TPL (Turbo Pascal Library), v d
TURBO.TPL
Th vin chun ca Pascal cha ng mt s Unit c bn, hay c dng n, chng
c ng gi li v c cng ch vi tp khi ng TURBO.EXE. Thng thng
chng trnh Pascal c ci t trn a C, vi Pascal 7.0 ng dn n ni lu tr cc
tp TURBO.EXE v TURBO.TPL l:
C:\TP\BIN
Khi tp TURBO c gi, ngha l chng trnh Pascal c khi ng th tp
TURBO.TPL cng t ng c ti vo b nh. Lc ny cc Unit cha trong th vin chun
s sn sng c tham chiu n. Vic truy cp n cc Unit trong th vin chun nhanh hn
so vi truy cp vo cc Unit c lp v chng thng tr trong b nh. Khi c li gi mt
Unit no bao gi Pascal cng u tin tm kim chng trong th vin chun, nu khng tm
thy th tip tc tm kim bn ngoi.

2. Th vin chun
Th vin chun ca Pascal c tn l TURBO.TPL, th vin ny ngm nh ban u
cha nm Unit l:
2.1 Crt
CRT bao gm cc th tc qun l mn hnh, bn phm v m thanh, nh c Unit ny
m ngi lp trnh c th thit k giao din chng trnh tng i p
2.2 Dos
Unit ny cha cc chc nng qun l tp, a, ngy thng. Ngoi ra cng c th dng
Unit ny gi trc tip cc lnh ca h iu hnh DOS hoc cc ngt h thng.
2.3 Overlay
Unit ny c s dng khi chng trnh ngun c dung lng ln. Mc d c
bin dch sang dng m my song i khi do b nh trong (RAM) khng nn khng th ti
cng mt lc ton b Code ca chng trnh ngun. S dng OVERLAY c th ti tng phn
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 71
ca chng trnh ngun vo b nh trong chy. Vi nhng my PC c Ram 128MB, hoc
256 MB th khng my khi phi s dng Unit ny.
2.4 Printer
Unit ny nh ngha tn my in l LST. Vic kt xut thng tin bng lnh Write khi
tham chiu n LST s cho php ta in ra my in cc kt qu bi ton.
2.5 System
y l Unit c bn v quan trng nht ca Pascal, n cha cc th tc vo ra nh
Read, Write, cc hm s cp thng dng nh Ln, Sqrt, Sin, Cos Khi Pascal c khi
ng v th vin chun c np vo b nh th Unit ny cng t ng lin kt vi mi
chng trnh v th u chng trnh khng cn n li gi USES SYSTEM.
Ngoi nhng Unit c sn trong th vin chun, Pascal cn cho php ngi lp trnh
thit k thm cc Unit mi, cc Unit ny sau s c lu vo tp Turbo.tpl v c xem
nh mt b phn cu thnh ca ngn ng. Vic chuyn cc Unit ca ngi lp trnh vo th
vin chun c thc hin thng qua trnh tin ch TPUMOVER s cp n mc sau.

3. Cc Unit khc
Pascal c khong 20 Unit c lp lu tr trong th mc TP\UNIT. Cc Unit ny c
phn chia thnh 4 nhm gm:
* Interface Unit: nhm Unit chung cho mi ng dng
* Objects Unit: danh mc (theo vn a,b,c..) ca cc Unit thuc kiu Turbo vision
* System Unit: Unit h thng
* Turbo vision Unit: Unit phc v cho lp trnh hng i tng
Mun tm hiu v mt Unit no ta c th c phn gii thiu Unit trong cc tp
cng tn vi phn m rng l INT, cc tp ny lu tr trong th mc TP\DOC. Cc tp ui
INT ny l tp vn bn nn c th c chng bng bt k phn mm son tho vn bn no v
d Word, NC Cng xin lu thm l mt s Unit mc d c tn trong th mc TP\UNIT
nh GRAPH3.TPU, TURBO3.TPU nhng do qu li thi nn khng c gii thiu
trong th mc TP\DOC. Di y l mt vi Unit thng dng

3.1 Graph
Unit GRAPH c lu tr trong mt File ring c tn l GRAPH.TPU. Unit ny
cha cc th tc v hm cho php la chn loi mn hnh, s dng, ct v cc th tc v cc
hnh c bn, t mu nt v hoc mu nn cc hnh khp kn

3.2 Memory
Unit Memory cha cc phc v qun l vng nh cp pht cho chng trnh, cc
chng trnh vi phn m rng EXE th vng nh c s c cp pht l 640 Kb. on thp
nht ca vng nh ny (256 byte) dnh cho vic nh a ch cc bin, hm, th tc trong
chng trnh.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 72
3.3 Menus
Unit Menus cha cc phc v thit k thc n nh chn phm nng (Hot key), to
di thc n (Menu Bar), khung thc n (menu box)

3.4 Views
Unit Views cha cc th tc v hm lin quan n vic quan st cc khung hoc ca
s nh thanh cun (Scroll Bar), con tr (Cursor), chuyn trang (Nextview, Prevview)

4. Xy dng cc Unit

Cc Unit cng c vit v lu vo th mc ngm nh TP\BIN nh cc chng trnh
Pascal khc. Tp lnh ngun ca Unit s c phn m rng l PAS. son tho mt Unit
chng ta c th dng mt phn mm son tho vn bn bt k nhng ni chung ngi ta vn
hay dng cng c son tho (Text Editor) ca Pascal. Mc d c lu di dng mt tp
ui PAS nhng cc Unit khng th chy bng t hp lnh Ctrl F9 nh cc chng trnh
bnh thng.
Cc chng trnh Pascal khi bin dch sang dng m my s c phn m rng l EXE
(Execute), cn cc Unit khi bin dch s c phn m rng l TPU (Turbo Pascal Unit).
Cu trc mt Unit bao gm bn phn c bn sau y:

4.1 Phn tiu
Phn ny ch gm mt dng m u l t kho UNIT sau l tn Unit, kt thc dng
bng du chm phy.
Unit tenUnit;
Tn Unit phi vit cch t kho Unit t nht mt khong trng, cc k t ca tn phi
vit lin nhau theo cc quy nh ging nh tn chng trnh.
Cn phi c bit lu rng Pascal quy nh bt buc tn Unit sau ny s c dng
lm tn tp lu tr tp ngun ca Unit (ui Pas) ng thi cng l tn ca n v chng
trnh (ui Tpu) do vy khi t tn khng nn chn tn qu di, nn chn cc tn gi nh n
ni dung ca Unit tin s dng v sau.

4.2 Phn khai bo chung
Phn ny bt u bng t kho INTERFACE
Bn thn t kho Interface c ngha l dng chung, iu ny quy c rng y
chng ta phi khai bo cc kiu d liu mi, cc bin, hng, hm, th tc m sau ny cc
chng trnh tham chiu n Unit s s dng. C th hnh dung rng nhng g vit trong phn
ny s l nhng ti nguyn m Unit c th cung cp cho cc chng trnh ngoi, n ging nh
bn thc n m nh hng trnh by cho thc khch.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 73
V d chng ta xy dng mt Unit ly tn l HHP (hnh hc phng) trong c cc
hm tnh din tch , chu vi cc hnh ch nht, tam gic, trn l dtcn, dttg, dttr, cvcn, cvtg,
cvtr. Khi phn khai bo chung s l:
INTERFACE
Function dtcn( a,b: real) : real;
Function dttg( a,b,c: real) : real;
Function dttr( a: real) : real;
Function cvcn( a,b: real) : real;
Function cvtg( a,b,c: real) : real;
Function cvtr( a: real) : real;
V d trn khai bo ba hm tnh din tch v ba hm tnh chu vi, sau ny khi cc
chng trnh tnh ton tham chiu n Unit hhp thng qua lnh USES HHP s c th dng
trc tip cc hm ny. Cc tham s khai bo trong c su hm u l cc tham tr ngha l gi
tr ca chng s khng bin i khi quay v lm vic vi chng trnh chnh. Vic s dng
tham s l tham tr hay tham bin s tu thuc vo cc bi ton c th.

4.3 Phn ni dung
Phn ni dung bt u bng t kho IMPLEMENTATION. Ti y chng ta s xy
dng nn cc hm, th tc m tn ca chng c gii thiu phn Interface. Vic xy
dng cc chng trnh con c gii thiu phn lp trnh c bn nn chng ta khng
cp n y.
iu cn nhn mnh l nhng hm v th tc chng ta gii thiu Interface th bt
buc phi c xy dng y bi l chng chnh l nhng g m cc chng trnh tham
chiu n Unit cn s dng. Ngc li trong phn ny chng ta c th xy dng cc hm v
th tc khc hoc khai bo cc bin, hng mi khng c trong phn Interface, chng c
xem l phn ring ca Unit m cc chng trnh tham chiu n Unit khng c php s
dng. V d:
IMPLEMENTATION
Function dtcn( a,b: real) : real;
Var s : real;
Begin
S:=a*b; Dtcn:=s;
End;
...
Function cvcn( a,b: real) : real;
Var s : real;
Begin
S:=a*b; Dtcn:=s;
End;

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 74
4.4 Phn khi ng
Phn khi ng t gia hai t kho BEGIN v END, sau End l du chm ging nh
cc chng trnh Pascal bnh thng. Trong phn ny chng ta c th a vo cc lnh gn
gi tr ban u cho bin hoc li gi cc th tc ring no cn cho qu trnh to hm v th
tc ca phn IMPLEMENTATION .
Phn khi ng l khng bt buc phi c, trong trng hp khng c phn ny th
chng ta b i t kho BEGIN song vn phi c t kho END. bo hiu kt thc Unit.
Di y l cu trc tng th ca mt Unit.
Unit Tn_Unit ;
Interface .....
Uses Tn_Unit; (tn cc Unit s dng trong cc chng trnh con ca Unit ny)
Const .... (khai bo hng)
Type ... (khai bo kiu d liu)
Var ... (khai bo bin cho cc chng trnh con trong Unit )
Tn cc Procedure v Function ca Unit

Implementation
(ni dung ca tng chng trnh con)

Begin
Phn khi to gi tr ban u (tu chn)
End.

V bn cht Unit cng l mt chng trnh ca Pascal, n c xy dng trn c s
cc t kho v t vng m Pascal thit k do vy t bn trong Unit chng ta li c th tham
chiu n cc Unit khc khng phn bit l Unit chun ca Pascal hay Unit do ngi s dng
to ra.

V d 3.1 Xy dng Unit HHP cha hm tnh din tch hnh ch nht.

Unit HHP;
Interface
Function dtcn( a,b: real) : real;
Implementation
Function dtcn( a,b: real) : real;
Uses crt, dos;
Var s : real;
Begin
S:=a*b;
Dtcn:=s;
End;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 75

Sau khi son tho song Unit chng ta cn ghi Unit thnh tp vi tn tp trng vi
tn chn phn tiu . Cc Unit lc ny mi ch dng tp vn bn nn khi ghi vo a
Pascal s gn phn ui l .Pas. Cc chng trnh Pascal c th tham chiu n cc Unit ny
nhng Pascal s phi lm cng vic bin dch trc do s mt mt thi gian. Tt nht c
th s dng cc Unit chng ta phi dch chng sang dng m my thng qua chc nng
Compile trn thc n chnh ca Pascal . Trc khi dch cn ch rng tu chn Destination
ca thc n Compile phi l Disk ch khng phi l Memory. C th dng mt trong ba
cch dch bit trong chc nng ny l Make, Build, hoc Run tuy nhin cch hay c
dng l t mn hnh son tho Unit, bm t hp phm Alt + F9, nu khng gp mt li no
Pascal s dch Unit sang dng m my v t ng lu tp bin dch vo th mc TP\BIN.
Tp ny s c tn ging nh tn tp ngun nhng phn m rng s l TPU.
Cc TPU c th lu vo th mc khc do ngi s dng t chn hoc th mc UNITS
ca Pascal. Nu lu v th mc khc th ngi s dng cn khai bo ng dn n ni lu
tr thng qua la chn Options Directories Unit Directories.
Trong trng hp vic dch gp li Pascal s thng bo li nh khi dch mt chng
trnh thng thng.

Ch :
Nu tn tp ngun ca Unit trong th mc TP\BIN khc vi tn ghi sau t kho Unit
th vic dch khng thng bo li, song Pascal khng to ra c TPU.

Lnh tham chiu Uses TnUnit trong cc chng trnh trc ht s tham chiu n cc
TPU, ngha l n cc Unit bin dch, nu khng tm thy cc TPU, Pascal s tm cc
chng trnh ngun ca Unit v t ng bin dch chng trc khi thc hin chng trnh.

V d 3.2: xy dng Unit
Chng ta s xy dng mt Unit ly tn l HHP (hnh hc phng). Unit ny s to nn
mt s hm dng tnh din tch , chu vi cc hnh trn, ch nht v tam gic. i vi tam
gic ch xt trng hp bit kch thc ba cnh, bn c c th thm vo y cc hm mi
tnh cho hai trng hp cn li ca tam gic (cnh gc cnh v gc cnh gc) hoc
tnh th tch, din tch cho cc hnh khng gian...
Unit HHP;
Interface
Function Dtcn( a,b:real): real;
Function Dttr( a:real): real;
Function Dttg( a,b,c:real): real;
Function Cvcn( a,b:real): real;
Function Cvtr( a:real): real;
Function Cvtg( a,b,c:real): real;
Implementation
Function Dtcn( a,b:real): real;
Var dt:real;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 76
Begin
dt:=a*b;
dtcn:=dt;
End;

Function Dttr( a:real): real;
Var dt:real;
Begin
dt:=pi*a*a;
dttr:=dt;
End;

Function Dttg( a,b,c:real): real;
Var p,dt:real;
Begin
p:=(a+b+c)/2;
dt:=sqrt(p*(p-a)*(p-b)*(p-c));
dttg:=dt;
End;

Function Cvcn( a,b:real): real;
Var cv:real;
Begin
cv:=(a+b)*2;
cvcn:=cv;
End;

Function cvtr( a:real): real;
Var cv:real;
Begin
cv:=2*pi*a;
cvtr:=cv;
End;
Function cvtg( a,b,c:real): real;
Var cv:real;
Begin
cv:=a+b+c;
cvtg:=cv;
End;
End.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 77
4.5 Phn hng dn
Mi Unit khi xy dng xong cn c phn hng dn ngi s dng khng gp phi
cc li khi chng trnh tham chiu n Unit, chng hn trong Unit HHP khi tnh din tch
chu vi tam gic s c th xy ra trng hp s o cc cnh a, b, c khng to thnh tam gic.
Trong trng hp ny ngi thit k Unit phi hng dn ngi s dng kim tra iu kin
to nn tam gic trc khi gi cc Function ca HHP.
Thng thng phn hng dn ca Pascal t trong th mc DOC di dng cc tp
vn bn (phn m rng l TXT). Do b m dng trong Pascal khng c cc k t ting Vit
nn phn hng dn ch c th vit bng ting Vit khng du.
Mc d c phn hng dn song nhiu khi ngi lp trnh khng c k hoc c m
vn qun cc iu kin ca bi ton do vy cn c gng hn ch nhng rng buc m ngi
s dng phi tun theo. lm c iu ny cn phi ch n cc lp bi ton c th tham
kho n Unit, ng thi phi lng trc nhng sai st m ngi s dng c th mc phi.
Trong thc t ngay c ngi lp trnh chuyn nghip cng khng th no trnh c sai lm
do vy cn ch n cc thng bo li khi ngi s dng a ra cc lnh khng ph hp.
V d 3.3 sau y nu cch s dng Unit HHP tnh din tch chu vi tam gic

Program tinh_dtcv;
Uses crt,hhp;
Var m,n,q:real;
Begin
clrscr;
Write('Cho biet ba canh '); readln(m,n,q);
if (m+n>q) and (n+q>m) and (q+m>n) then
Begin
Writeln('Dien tich tam giac la ',dttg(m,n,q):5:2);
Writeln('Chu vi tam giac la ',cvtg(m,n,q):5:2)
End
Else
Writeln('So lieu da cho khong tao thanh tam giac');
readln;
End.
Trong v d trn nu ngi chy chng trnh nhp vo gi tr ca ba cnh l 1, 3, 8 v
trong chng trnh khng kim tra iu kin to nn tam gic thng qua cu lnh
if (m+n>q) and (n+q>m) and (q+m>n) then ...
th s dn ti din tch l cn bc hai ca mt s m. Chng ta c th thit k li Unit
sao cho khi cc tham s truyn cho chng trnh con khng ph hp th s xut hin thng
bo li v yu cu nhp vo cc gi tr khc. Mun th chng ta phi thay th cc Function
tnh din tch v chu vi tam gic thnh cc Procedure.
Thng thng cc Unit c thit k cha th bao qut ngay mi yu cu m cc bi
ton t ra v vy vic chnh sa, nng cp l iu kh trnh khi. lm vic ny ngi thit
k Unit nn lu tr cc cu trc d liu, cc gi v cch thc t chc Unit khi cn c th
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 78
tra cu d dng. iu ny c ngha khi chng ta nn cung cp cho ngi dng khng ch cc
TPU m c tp ngun vi mc ch ngi s dng c th t nng cp khi cn.

5. Tham chiu n cc Unit

Mt chng trnh c th tham chiu n nhiu Unit cng mt lc, cc Unit ny c th
l Unit chun ca Pascal hay l Unit t to. Trong cc Unit t to ngi thit k cng c th
a vo cc lnh tham chiu n cc Unit khc. Pascal c mt nguyn tc t ra l trong mt
chng trnh cc Unit khng c tham chiu vng trn.
Gi s chng ta thit k ba Unit l U1, U2, U3 vi phn tiu v Interface nh
sau:
Unit U1 ;
Interface
Uses U2;
....
End.

Unit U2;
Interface
Uses U3;
....
End.

Unit U3;
Interface
Uses U1;
....
End.

Nu trong mt chng trnh chng ta c lnh
Uses U1, U2, U3;
Th s dn n mt tnh trng l U1 tham chiu n U2, U2 tham chiu n U3 v U3
tham chiu li U1, trong trng hp ny Pascal s thng bo li: Circular Unit Reference
(Unit tham chiu vng trn). y c th l mt li kh hiu i vi ngi lp trnh nu nh
ngi khng bit c bn thn cc Unit m mnh s dng ang tham chiu n nhng
Unit no.
iu ny c th gii thch l do Unit U1 cn phi tham chiu n U3 thng qua U2,
nhng U3 li phi tham chiu n U1 trong khi bn thn U1 cha hon thin do s gy li.
Mt vn khc cng cn phi ch l th t tham chiu n cc Unit, v d lnh:
Uses CRT, GRAPH; quy c rng CRT c tham chiu trc, GRAPH tham chiu
sau.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 79
Trong trng hp cc TPU v chng trnh tham chiu n chng c mt s bin ,
hm trng tn v c mt s i lng c khi to gi tr ban u th Pascal s u tin s
dng cc gi tr c khi to cui cng. Chng ta s gii thch iu ny qua v d sau;

V d 3.4
Unit u1;
Interface
Var traloi:char;
Procedure P11;
Implementation
Procedure P11;
Begin Writeln('Day la Unit U1');
End;
Begin
traloi:='K';
End.

Unit u2;
Interface
Var traloi:char;
Procedure P11;
Implementation
Procedure P11;
Begin
Writeln('Day la Unit U2');
End;

Begin
traloi:='C';
End.

Program dung_unit;
Uses crt,u1,u2;
Begin
Clrscr;
if upcase(traloi)='C' then
Begin
p11;
Writeln('Bien Traloi mang gia tri : ',traloi);
Writeln('Thu tu tham chieu la U1, U2 ')
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 80
End
Else
Begin
p11;
Writeln('Bien tra loi mang gia tri : ',traloi);
Writeln('Thu tu tham chieu la U2, U1 ')
End;
Readln;
End.

V d 3.4 xy dng hai Unit U1 v U2, c hai u c bin Traloi, v th tc P11. Th
tc P11 ch lm mt cng vic l vit ln mn hnh dng ch Day la unit .... Trong U1 bin
Traloi c gn gi tr l K cn trong U2 bin ny mang gi tr C.
Chng trnh Dung_Unit c lnh tham chiu
uses crt, u1, u2;
Do Unit U2 c tham chiu sau U1 nn gi tr ca bin Traloi c khi to cui
cng s thuc v U2 ngha l Traloi = C. Lc ny biu thc iu kin if
upcase(traloi)='C' trong chng trnh Dung_unit mang gi tr True do trn mn hnh
chng ta nhn c kt qu
Day la Unit U2
Bien Traloi mang gia tri : C
Thu tu tham chieu la U1, U2
Nu chng ta o ngc li th t tham chiu
Uses crt, u2, u1;
th s nhn c kt qu
Day la Unit U1
Bien Traloi mang gia tri : K
Thu tu tham chieu la U2, U1

V d trn cng cng ch ra rng nu trong cc TPU chng ta thit k c cc hm hoc
th tc trng tn vi nhau v trng tn vi hm, th tc c trong chng trnh chnh, ng
thi cc bin (hm) c gn gi tr ban u ngay trong phn Implemetation th khi chng
trnh tham chiu n TPU n s ly gi tr ca bin (hm) c gn cui cng. Nu trong bn
thn chng trnh chnh cng c lnh gn gi tr cho bin (hm) (trng tn vi cc bin (hm)
c trong TPU) th Pascal coi y l gi tr c gn cui cng v gi tr ny s c s dng
trong cc ng dng.
Ni tm li vic thit k Unit ng cha cho chng ta kt qu ng nu chng ta
khng khng nm c nguyn l s dng chng. Cch tt nht l trnh dng cc hm v
bin trng tn nhau. Trong trng hp cc Unit c thit k phc v mt lp bi ton no
v bt buc phi s dng mt s th tc hoc hm trng tn th cn ch r cch thc s dng
chng trong phn hng dn s dng.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 81
6. Trnh tin ch TPUMOVER
Thut ng TPUMOVER c ghp ni bi hai thnh t TPU (Unit ca Pascal ) v
MOVER (chuyn ng, dch chuyn) v th c th hiu TPUMOVER ngha l dch chuyn
cc Unit. Trnh tin ch TPUMOVER c lu tr di dng mt File chng trnh vi phn
m rng l EXE. Nh TPUMOVER ngi s dng c th t t chc cc Unit do mnh to ra
thnh mt th vin di dng File vi tn File theo quy nh ca h iu hnh DOS v phn
m rng l TPL (ngm nh ca Pascal ). Khng nhng th ngi s dng cn c th thm,
bt cc Unit ca mnh vo chnh th vin chun TURBO.TPL ca Pascal hoc trch mt Unit
no trong th vin tr thnh mt TPU c lp.
T chc cc Unit t to thnh th vin ring ca ngi lp trnh s trnh c vic cc
TPU nm ri rc trong th mc nhng li gp mt rc ri l mi ln mun dng Unit ta li
phi tch chng ra ngoi. S d nh vy l v Pascal ch t ng np th vin chun
TURBO.TPL khi khi ng my. Cch tt nht l nhng Unit hay c dng n chng ta
gp chng vo th vin chun TURBO.TPL. Vic a cc Unit t to vo TURBO.TPL s
cho php tng tc x l bi v cc Unit trong th vin chun c t ng np vo b
nh Ram khi Pascal khi ng, vic tm kim Ram bao gi cng nhanh hn tm kim b
nh ngoi.
Mun bit c php ca Tpumover chng ta c th c trong tp Until.doc mc s 4,
tp ny nm trong th mc TP\DOC hoc t mn hnh son tho chng trnh ca Pascal
chng ta g Tpumover ri bm t hp phm Ctr F1. Pascal a ra c php ca Tpumover
nh sau:

Tpumover Filename Operations
- Filename l tn th vin chun (Turbo) hoc tn th vin m chng ta mun to ra
- Operations l danh sch tu chn ca Tpumover, bao gm
+Unitname: tn Tpu mun a vo th vin (du cng u )
-Unitname: tn Tpu mun xo khi th vin (du tr u )
*Unitname: tn Tpu mun tch thnh Unit c lp (du sao u )
Nu chng ta b qua Operations th Tpumover s hin ln danh sch cc Unit ang c
trong th vin Filename.

V d 3.5:
Gi s chng ta mun a thm hai Unit U1, U2 thit k vo th vin chun Turbo.
chy Tpumover chng ta c hai cch:

a. T mn hnh nn ca Window:
Chn Start Run
Trong ca s Run g vo
C:\TP\BIN\Tpumover.exe Turbo +u2 +u1
Chn OK
b. T du nhc h thng C:\> ca Dos:
G cc lnh vo th mc Bin
C:\>CD TP
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 82
C:\TP>CD BIN
Tip g lnh
C:\TP\BIN>Tpumover Turbo +U1 +U2
Hai Unit U1, U2 lc ny c a vo trong th vin chun Turbo.tpl.
xo Unit U2 khi Turbo chng ta g lnh:
C:\TP\BIN>Tpumover Turbo -U2
Mun a Unit U1 thnh mt Unit c lp ta g lnh:
C:\TP\BIN>Tpumover Turbo *U1
Unit U1 sau khi tch ra s tr thnh tp U1.TPU trong th mc BIN nhng bn trong
th vin chun Turbo.tpl vn tn ti Unit U1. Khi c lnh tham chiu
Uses U1;
Pascal s u tin tm U1 trong Turbo, nu khng thy th mi tm ngoi.

7. Cng dng ca Unit

7.1 Lm gn nh chng trnh
V cc hm v th tc cn thit cho chng trnh u ct trong Unit nn kch thc
chng trnh s gim ng k.

7.2 Tng tc thc hin chng trnh
Nh bit trong phn lp trnh c bn, mi chng trnh trc khi chy u cn phi
bin dch. V cc Unit m chng trnh tham chiu n c bin dch trc cho nn thi
gian dch chng trnh c Unit s gim v h qu l tc thc hin chng trnh tng.

7.3 Cho php vit c cc chng trnh ln
Nhng chic PC u tin s dng b x l Intel 8086, b x l ny ch x l 16 bit d
liu. S dng 16 bits ln nht khi khng xt du l 1111 1111 1111 1111
2
= 65535
10
. Ni
cch khc Intel 8086 ch c th qun l c 65535 a ch (tc l 64 KB). Vi nhng b nh
c dung lng ln hn 64 KB ngi ta phi chia chng thnh cc on nh mi on c kch
thc 64 KB v dng hai tham s cho mt a ch, tham s th nht Segment l a ch ca
on trong b nh v tham s th hai Offset l a ch ca nh trong mi on. Cc my th
h sau ny d x l 32 bit nhng kch thc mi on vn ch l 64 KB. y chnh l l do
khin cho cc chng trnh Pascal khng th vt qu 64 KB. Nh cc Unit chng ta c th
chuyn nhng hm, th tc, thng trnh vo Unit. Trong b nh cc Unit ny s c np
vo cc on khc vi on cha chng trnh. iu c ngha l kch thc chng trnh
c th vt qu 64 KB.

7.4 Bo m an ton
Sau khi bin dch cc TPU c lu tr di dng m my, vic tham chiu n
TPU l tham chiu n phn Interface, nh vy chng ta khng s b thay i nhng thit k
trong phn Implementation. y chnh l cch m chng ta bo v cc cu trc d liu cng
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 83
nh cu trc cc th tc, hm thit k. Vic nng cp thay i ch c th thc hin trn tp
ngun v sau li phi bin dch trc khi c th s dng.
Cng cn phi lu rng Unit khng phi ch hon ton c li, tt c cc Unit trong
th vin chun Turbo u c np vo b nh khi Pascal khi ng v thng tr cho
nn chng chim dng mt khng gian nh nht nh. Vic a qu nhiu Unit vo th vin
chun s lm gim i kch thc b nh m chng trnh c php s dng.

8. Mt s Unit chun
Pascal cung cp cho ngi lp trnh khong 20 Unit chun do vic gii thiu ton
b cc Unit trong cun sch ny l iu khng th. Bn c c th tham kho danh mc cc
th tc v hm ca tng Unit trong ph lc cui sch. Trong mc ny chng ta s tm hiu
mt s Unit thng dng nht.

8.1 System
System l n v c bn ca Turbo Pascal trong ci t ton b cc th tc v hm
m chng ta s dng t u chng trnh, system c thit k chy t ng khi c
mt chng trnh c thc hin do khng cn lnh gi USES u chng trnh.
Trong UNIT SYSTEM c mt s th tc hay dng khi lp trnh nh sau:
a. Th tc EXIT:
Khi gp EXIT trong mt chng trnh th kt thc chng trnh v ra khi chng
trnh , nu t exit trong chng trnh chnh th dng ton b cng vic.
b. Th tc CHDIR (tn th mc):
Th tc CHDIR (change Directory) cho php chuyn th mc c tn vit trong du
ngoc n thnh th mc hin thi.
c. Th tc RMDIR (tn th mc):
Th tc RMDIR (remove Directory) cho php xo mt th mc rng trn a hin
thi.
d. Th tc Rename (<tn c>; <Tn mi>):
Th tc ny i tn tp ngoi vi t tn c thnh tn mi.

8.2 Dos
DOS l UNIT cha cc th tc lin quan n h iu hnh v qun l tp:
a. SETDATE(nm, thng, ngy):
Th tc ny s t li ngy thng nm cho ng h ca my, v d: SETDATE (1998,
11, 25);
Lu rng ch c th t li cho cc nm trong phm v t nm 1980 - 2099 nu a
vo gi tr khc ma s bo li.
b. SETTIME (gi, pht, giay, phn trm giy):
t li gi cho ng h ca my.
c. GETTIME (gi, pht, giy, phn trm giy):
Cho bit gi h thng, mun vit gi h thng ra mn hnh chng ta c th vit mt
chng trnh nh sau:
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 84
Program Xemgio;
Var x1, x2, x3, x4: wrod;
begin
Gettime (x1, x2, x3, x4);
Write ('Bay gio l ',x1:2,' gio ', x2:2,' phut ', x3:2,' giay');
end.
Chng trnh trn khng vit phn trm giy, xin mi cc bn sa chng trnh c
th thng bo ton b cc thng s , mi s trn mt dng.

8.3 Crt
CRT l Unit lin quan n cc th tc trnh by mn hnh. Crt khng nm trong th
vin chun nn khng c np t ng. Trong CRT c cc th tc sau:
a. Gotoxy(m, n):
Chuyn con tr ti to ct m v dng n. Cn lu rng 1<=m<=80; 1<=n<=25.
b. CLRSCR: xo sch mn hnh a con tr v to (1,1)
c. CLREOL: xo cc k t t v tr con tr hin thi n ht dng
d. SOUND(n): To ra mt m thanh vi tn s n Hz.
hiu r hn v Th tc ny xin xem chng m thanh
e. DELAY (n): Lm chm (hoc ko di) lnh pha trc n mili giy (1 giy = 1000
mili giy). Gi tr ln nht cho php l 65535 ms (tc l gi tr s nguyn kiu Word ln nht
m my c th x l)
f. NOSOUND: Tt ting ku do SOUND (n) to ra
Ba th tc sound, delay, nosound c s dng to ra cc bn nhc, cn lu rng
sau th tc sound v delay m thanh c to ra s ko di lin tc nu khng c nosound
mc d trong delay ta ch nh khong thi gian ko di l n ms, ch khi c th tc nosound
th m thanh mi ko di ng n miligiy
g. LOWVIDEO :lm ti mn hnh.
h. HIGHVIDEO : lm sng thmmn hnh.
i. NORMVIDEO: tr v trng thi sng bnh thng.
j. Thuc tnh mu
C hai th tc gn thuc tnh mu cho k t vit ra mn hnh l:
TEXTCOLOR(M mu) : mu ch
TEXTBACKGROUND(M mu): mu nn
C hai th tc phi vit trc cc lnh Write hoc Writeln v chng s c tc dng cho
n khi chng ta t li m mu mi.
Tham s "m mu" trong hai th tc nh mu trn c th tham kho trong bng 3.1.
Pascal s dng mt Byte trong b nh lu tr thuc tnh mu, thuc tnh mu y
c hiu bao gm: mu ch, mu nn v kh nng nhp nhy ca ch.
Trong byte thuc tnh bn Bit thp c dng lu tr mu ch, ba Bit tip theo lu tr
mu nn, Bit cao nht lu tr thuc tnh nhp nhy. Nh bit trong h m c s 2 s dng
khun 4 Bit chng ta c th biu din cc s t 0 n 15, cn khun 3 Bit ch biu din c
cc s t 0 n 7. iu ny c ngha l mu ch c th chn mt trong 16 gi tr (t 0 n 15)
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 85
cn mu nn ch c 8 gi tr (t 0 n 7). Nu Bit th 8 c bt, ngha l cng thm vo
thuc tnh mu gi tr 128 (1000 0000
2
= 128) th ch s nhp nhy.

Bng 3.1

M mu Tn hng Mu ting Vit M mu Tn hng Mu ting Vit
0 Black en 4 Red
1 Blue Xanh lam 5 Magenta Tm
2 Green Xanh l m 6 Brown Nu
3 Cyan Xanh l 7 LightGray Xm nht

M mu Tn mu Mu ting Vit M mu Tn hng Mu ting Vit
8 DackGray Xm sm 12 LightRed sng
9 LightBlue Xanh lam sng 13 LightMagenta Tm sng
10 LightGreen Xanh l m sng 14 Yellow Vng
11 Lightcyan Xanh l sng 15 White Trng

Gi tr thuc tnh mu c tnh theo cng thc
Thuc tnh mu = M mu nn*16 + M mu ch
V d: chn ch mu trng m mu l 15, nn mu xm sng m mu nn l 7 th
thuc tnh mu s bng
7 * 16 + 15 = 127
Trong thc t khng cn phi cng thm vo m mu ch s 128 m ch cn cho m
mu ch ln hn 15 th ch nhp nhy ri. Pascal c sn mt bin l TextAttr kiu Byte
lu tr thuc tnh mu, nu thuc tnh mu nh hn 128 th
M mu ch = TextAttr Mod 16
M mu nn = TextAttr Div 16
Nu thuc tnh mu ln hn 128 nh cch chn mu sau y:
Textcolor(16);
TextbackGround(7);
Th thuc tnh mu l 240 v m mu ch thc t s l 0, cn m mu nn l 7. S d
nh vy l v Pascal t ng cng thm 128 vo m mu, hay ni cch khc
M mu ch = (240 - 128) Mod 16 = 0
M mu nn = (240 - 128) div 16 = 7
V d 3.6 vit ln mn hnh mt chui k t "*", chng trnh c s dng 3 bin : bin
Ttm lu tr thuc tnh mu, bin Mc l m mu ch, Mn l m mu nn. Ngi s dng c
th chy chng trnh vi cc tham s mu khc nhau v chng trnh s thng bo thuc tnh
mu v m mu thc t .


Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 86
V d 3.6
Program Ma_mau;
Uses crt;
Var Ttm,Mc,Mn:byte;
Begin
clrscr;
textcolor(26);
textbackground(7);
writeln('**********');
ttm:=textattr;
mc:= textattr mod 16;
writeln('Thuoc tinh mau ',ttm);
Writeln('Mau chu : ', mc);
if ttm>127 then
mn:= (ttm-128) div 16
else
mn:= ttm div 16;
Writeln('Mau nen : ', mn);
repeat until keypressed;
E nd.

j. Hm KEYPRESSED:
Hm Keypressed kim tra xem trong qu trnh lm vic c phm no c bm hay
khng, nu c th hm mang gi tr True, cn nu khng th mang gi tr False.
Hm Keypressed thng c dng trong cc cu lnh kim tra iu kin, v d:
If keypressed then.... nu c phm c bm th lm cng vic...
Hoc: Repeat .... Until Keypressed;
lp li cng vic cho n khi c phm c bm
Cng c th dng cu lnh Repeat until keypressed dng chng trnh, khi mun
tip tc th ch cn bm mt phm bt k. (Cn phn bit vi lnh Readln, khi mun tip tc
th phi bm Enter).

k. Hm READKEY:
Hm Readkey nhn din phm c bm, gi tr m n nhn v l mt k t. C hai
kh nng xy ra i vi hm Readkey:
*. Nu vng m bn phm ang rng, ngha l cc k t a vo c x l ht th
Readkey s dng chng trnh ch cho n khi mt phm c bm, phm c bm mt mt
c a vo x l, mt khc c lu trong hm Readkey.
*. Nu vng m bn phm khng rng, ngha l c cc k t c bm ang nm
ch th Readkey s ly ra k t u tin trong vng m v vng m bn phm s gim i
mt k t.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 87
l. Hm GETKEY:
Hm Getkey hot ng tng t nh hm Readkey nhng gi tr m n nhn l mt s
dng i vi cc phm thng thng, nu l cc phm c m qut m th th gi tr Getkey
nhn gm hai s, s u l s 0 cn s th hai l m qut m ca phm, v d:
Nu bm ch J th Getkey cho s 75, cn nu bm phm dch chuyn con tr (mi
tn) sang tri th Getkey cho 0 - 75.
Chng ta cn c s phn bit r rng phm trn bn phm v k t trong bng m. Bn
phm kiu M ch c 101 phm, cn bng m c 256 k t. Ch c mt phn nh k t trong
bng m nhn thy c trn bn phm (bao gm cc ch ci, ch s, ton t s hc, ton t
so snh v mt vi k t khc), cc k t cn li mun cho hin trn mn hnh phi dng t
hp 2 phm Alt - S th t.
Di y l bng i chiu mt s phm v m phm thng dng

Bng 3.2

Phm M Phm M
BackSpace 8 Home 0-71
Tab 9 End 0-79
Enter 13 PageUp 0-73
Esc 27 PageDown 0-81
Shift - Tab 0-15 Ctrl - End 0-117

0-72 Ctrl - Home 0-119

0-75 Ctrl - 0-115

0-77 Ctrl - 0-116

0-80 Ctrl - PageUp 0-132
Insert 0-82 Ctrl - PageDown 0-118
Delete 0-83



c th nhn din cc phm c m qut m rng chng ta c th dng hai bin kiu
Char, mt bin cha k t c m bng 0, cn bin kia cha k t ca phn m qut m, ni
cch khc cn phi gi hm Readkey hai ln mi bt c phm c m qut m.

V d 3.7:
Var C1,C2:char;
Begin
C1:=Readkey; If C1=chr(0) then C2:=Readkey;
End.
Chng ta cng c th dng bin kiu Byte bt cc phm c m qut m. Trong thc
t v bit s th nht trong m qut m bng khng nn ch cn tm s th hai ca m qut
nh v d sau:
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 88
Var mq:byte;
Begin
Mq=readkey;
If ord(mq) = 0 then mq := ord(readkey);
End.
Nu bin mq c gi tr 75 th phm c bm khng phi l ch J m l phm bi v
m qut y l 0 - 75.
Ch :
Khi xy dng chng trnh c vic c m qut, cn c bit ch trong vng m
bn phm c m phm nm ch hay khng, nu c th phi lm sch vng m bn phm
trc khi c m. Vic lm sch vng m bn phm c th thc hin bng cu lnh lp sau:
While Keypressed do mq:= readkey;
Bin mq phi c khai bo trc v thuc kiu Char.

V d 3.8:
Vit chng trnh hin m qut ca cc phm, nu l phm c m qut m rng th
hin c hai s di dng 0_00.

Program Batphim;
Uses crt;
Var k,k1,k2:byte;
Function bp(Var mq1,mq2:byte):byte;
Begin
mq1:=ord(readkey);
if mq1=0 then
begin
mq2 := ord(readkey);
bp := mq2;
end
else
bp:=mq1;
end;

Begin
Clrscr;
Writeln('Xin moi bam 1 phim, bam phim END de ket thuc ');
Repeat
K := bp(k1,k2);
if k1<>0 then
Writeln('Ma phim ban vua bam = ',k1)
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 89
else
Writeln('Ma phim ban vua bam = ',k1,'_',k2);
Until k=79;
End.

Chng trnh t tn l BATPHIM c mt chng trnh con l hm BP, hm BP c
hai tham bin dng lu cc m qut mq1, mq2.
Li gi trong chng trnh m:
K:=bp(k1,k2); s truyn cho hm BP hai tham s thc k1,k2, cc tham s ny s cha
m qut mq1, mq2 khi quay v chng trnh m. Bin K dng lu m qut mq2 ca phm
END khi mun kt thc chng trnh .
Chy chng trnh trn, khi xut hin thng bo:
" Xin moi bam 1 phim, bam phim END de ket thuc",
chng ta c th bm mt phm no trn bn phm v s nhn c thng bo m
phm va bm.

Ch : Cc phm chc nng ph trn bn phm khng thy c m qut bao gm:
CAPSLOCK, SHIFT, CTRL, ALT, INS, DEL, NUMLOCK, PRINT SCREEN,
SCROLL LOCK, PAUSE, F11, F12
Vic bt phm thng c s dng khi thit k cc Menu (thc n) trong trng
hp bi ton cn c mt vi phng n la chn cng vic. Di y l v d thit k thc
n vi bn tu chn
Tamgiac Chunhat Tron Ketthuc
chuyn con tr n mt chc nng no ta bm cc phm hoc , chn
chc nng bm phm Enter, kt thc cng vic bm End. Chng trnh c s dng Unit HHP
thit k.

V d 3.9
Program Menu;
Uses crt,hhp;
label h1,h2,h3;
Var c1,c2,c3,c4:string[20];
l1,l2,l3,l4,mq1,mq2:byte; chon:char;
Procedure tr; { thu tuc tinh hinh tron }
Var a,dt,cv:real;
Begin
clrscr;
write('Hay cho biet ban kinh hinh tron '); Readln(a);
dt:=pi*a*a; cv:=2*pi*a;
writeln('Dien tich hinh la : ',dt:12:4);
writeln('Chu vi hinh la : ',cv:12:4);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 90
writeln('Bam Enter de quay ve thuc don ');
repeat until keypressed;
End;

Procedure cn; { thu tuc tinh hinh chu nhat }
Var a,b,dt,cv:real;
Begin
clrscr;
write('Hay cho biet hai canh a, b '); Readln(a,b);
dt:=a*b; cv:=(a+b)*2;
writeln('Dien tich hinh la : ',dt:12:4);
writeln('Chu vi hinh la : ',cv:12:4);
writeln('Bam Enter de quay ve thuc don ');
repeat until keypressed;
End;

Procedure tg; { thu tuc tinh hinh tam giac }
Var a,b,c,p,dt,cv:real;
Begin
clrscr;
write('Hay cho biet ba canh a,b,c '); Readln(a,b,c);
if (a+b>c) and (b+c>a) and (c+a>b) then
Begin
p:=(a+b+c)/2;
dt:=sqrt(p*(p-a)*(p-b)*(p-c));
cv:=a+b+c;
writeln('Dien tich hinh la : ',dt:12:4);
writeln('Chu vi hinh la : ',cv:12:4);
end
else
writeln('Cac kich thuoc ',a:6:2,' ',b:6:2,' ',c:6:2,' khong tao thanh tam giac');
writeln('Bam Enter de quay ve thuc don ');
repeat until keypressed;
End;

Procedure w1; { thiet ke chuc nang thu nhat }
Begin
textbackground(5);
textcolor(10);
window(1,2,l1+2,2); write(c1);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 91
gotoxy(1,1);
End;

Procedure w2; { thiet ke chuc nang thu hai }
Begin
textbackground(5);
textcolor(10);
window(l1+2,2,l1+l2+3,2); write(c2);
gotoxy(1,1);
End;

Procedure w3; { thiet ke chuc nang thu ba }
Begin
textbackground(5);
textcolor(10);
window(l1+l2+3,2,l1+l2+l3+3,2); write(c3);
gotoxy(1,1);
End;

Procedure w4; { thiet ke chuc nang ket thuc }
Begin
textbackground(5);
textcolor(10);
window(l1+l2+l3+4,2,l1+l2+l3+l4+8,2); write(c4);
gotoxy(1,1);
End;

BEGIN {Than chuong trinh chinh}
Clrscr;
c1:='Tamgiac'; l1:=length(c1);
c2:='Chunhat'; l2:=length(c2);
c3:='Tron'; l3:=length(c3);
c4:='Ketthuc'; l4:=length(c4);
clrscr;
textcolor(red); textbackground(green);
write('Bam ->, <- chuyen thuc don | Bam Enter de chon | Bam End ket thuc ');
h1: w1;w2;w3;w4;w1;
while keypressed do chon:=readkey; {lam sach vung dem ban phim}
chon:=readkey; {tinh tam giac}
if ord(chon)=13 then
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 92
begin
textcolor(blue); textbackground(14);
window(1,4,80,25);
tg;
clrscr;
goto h1
end
else
begin
if ord(chon)=0 then chon:=readkey;
if ord(chon)=79 then halt; {bam END de ket thuc}
if ord(chon)=77 then w2;
end;

h2: w1;w2;w3;w4; w2;
while keypressed do
chon:=readkey; {lam sach vung dem ban phim}
chon:=readkey; {tinh chu nhat}
if ord(chon)=13 then
begin
textcolor(blue); textbackground(14);
window(1,4,80,25);
cn;
clrscr;
goto h2;
end
else
Begin
if ord(chon)=0 then
begin
chon:=readkey;
if ord(chon)=79 then halt; {bam END de ket thuc}
if ord(chon)=77 then w3; {chuyen sang tinh hinh tron}
if ord(chon)=75 then goto h1; {quay ve tinh tam giac}
end;
end;

h3: w1;w2;w3;w4;w3;
while keypressed do chon:=readkey; {lam sach vung dem ban phim}
chon:=readkey; {tinh hinh tron}
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 93
if ord(chon)=13 then
begin
textcolor(blue); textbackground(14);
window(1,4,80,25);
tr;
clrscr;
goto h3;
end
else
Begin
if ord(chon)=0 then
begin
chon:=readkey;
if ord(chon)=79 then halt; {bam END de ket thuc}
if ord(chon)=77 then w4; {sang chuc nang ket thuc }
if ord(chon)=75 then goto h2; {quay ve tinh chu nhat}
end;
end;
while keypressed do chon:=readkey; {lam sach vung dem ban phim}
chon:=readkey;
if ord(chon)=13 then halt
else
if ord(chon)=0 then chon:=readkey;
if ord(chon)=79 then halt;
if ord(chon)=75 then goto h3;
END.

8.4 Printer
n v chun Printer c mt phn khai bo my in phc v vic in n d liu ra giy,
my in c ci t tn l LST.
Khi cn in n ta phi c li gi USES PRINTER; sau trong cc lnh Write hoc
writeln phi a tn my in LST vo trc cc tn bin cn in, v d:
Writeln (lst, 'Ket qua tinh toan:', x1);
Dng lnh trn s in ra giy dng ch: "Ket qua tinh toan:" v gi tr bin ca x1.




Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 94
Bi tp ng dng chng 3

1. Lp chng trnh to thc n hai mc, mc 1 theo chiu ngang , mc 2 theo chiu
dc theo mu di y:

HINH PHANG HINH KHONG GIAN
Tam giac Hinh non
Tron Hinh chop
Ket thuc Ket thuc

Yu cu: khi con tr mt trong hai chc nng HINH PHANG, HINH KHONG
GIAN nu bm Enter th xut hin thc n dc pha di, cn nu bm phm dch chuyn
con tr th s chuyn con tr sang phi hoc tri. Khi thc n dc xut hin s c con tr
dch chuyn ln xung, bm Enter thc hin mt trong cc vic tnh din tch, chu vi
(i vi hnh phng) hoc din tch ton phn v th tch (i vi hnh khng gian).

2. Cho hai ma trn ch nht A(m,n), B(k,q) xy dng chng trnh kim tra xem c
th nhn hai ma trn hay khng? Xy dng mt Unit tnh tch hai ma trn.

3. Xy dng mt Unit vi cc th tc SXT (sp xp tng) v SXG (sp xp gim)
sp xp mt dy s.

4. Xy dng mt Unit ly tn l HAMSOHOC trong c cc hm tnh cn bc n,
lu tha bc n ca mt s (n>2).

5. Xy dng mt Unit nhm i tn mu ting Anh sang ting Vit v d RED - DO,
BLUE - XANH DA TROI...

6. Xy dng chng trnh cho mt dng ch chy trn mn hnh. Khi dng ch ang
chy c th i hng chy bng cch bm cc phm dch chuyn con tr

7. Pht trin bi tp 6 bng cch b xung tnh nng tng hoc gim tc chy khi
bm cc phm PageUp hoc PageDown





Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 95
Chng IV

Con tr v cu trc ng




Chng ny i hi cc kin thc ca mn Cu trc d liu v gii thut, c bit l
kin thc v liu kiu Cy. Do cch thc b tr trong k hoch o to mn ny li hc
song song vi mn Lp trnh nng cao nn s c mt vi kh khn khi trnh by cng nh khi
nghe ging. Trong chng ny bn c cn ch cc vn sau:
Th no l kiu d liu con tr
S khc nhau gia kiu d liu con tr v bin con tr
S phn vng b nh cho bin con tr
Cch thc m h thng cp pht b nh khi chng trnh ang lm vic
Thu hi b nh dnh cho tng bin v thu hi hng lot
Cy v cy nh phn
B nh kiu LIFO v FIFO v ng dng trong thit k cy nh phn
Con tr mng v mng con tr

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 96
1. Khi nim
Khi khai bo mt bin, d l bin n hay bin thuc kiu d liu c cu trc mc
nhin chng ta quy nh ln vng nh dnh cho bin.
V d
a: Real; bin a cn 6 byte
b: aray[1..100] of Integer; bin mng b cn 200 byte.
Vic khai bo nh trn thng l phng on dung lng cn thit ch khng tht
chnh xc. trnh li chng ta thng khai bo di ra gy nn lng ph b nh. Vic xc
nh a ch lu tr bin v cp pht b nh c thc hin khi bin dch, ngha l cc a ch
ny cng nh dung lng b nh cn cp pht c c nh trc khi thc hin cc thao
tc khc. Cc i lng ny khng thay i trong sut qu trnh thc hin chng trnh, ni
cch khc y l cc i lng tnh.
tit kim b nh, ngay khi chng trnh ang lm vic ngi lp trnh c th yu
cu cp pht b nh cho cc bin, iu ny c gi l cp pht b nh ng. Cp pht b
nh ng c thc hin thng qua bin con tr. Mun c bin con tr chng ta phi nh
ngha kiu con tr trc.

2. Kiu d liu con tr - bin con tr

2.1 Con tr c nh kiu
Kiu con tr l mt kiu d liu c bit dng biu din cc a ch. Kiu con tr
do ngi lp trnh nh ngha theo c php sau:
Type
Tn kiu con tr = ^Kiu d liu;
Tn kiu con tr tun theo quy nh t tn ca Pascal, Kiu d liu ca kiu con tr
l cc kiu d liu nh ngha trc trong pascal. mt kiu con tr c th i din cho
mt bin no th Kiu d liu vit sau k t ^ s phi ging nh kiu d liu ca bin ,
ni cch khc hai kiu d liu phi tng thch.
V d 4.1 khai bo kiu con tr:
Type
Chu = string[20]; CT1 = ^Byte; CT2 = ^chu; CT3 = ^Nguoi;
Nguoi = record
Hoten:string[20];
Namsinh: 1900..2100;
End;
V d 4.1 nh ngha ba kiu con tr, ring kiu CT3 cch nh ngha c v hi ngc
l nh ngha kiu con tr trc, nh ngha kiu d liu sau. Tht ra chng ta c nn theo thi
quen l nh ngha kiu d liu trc ri nh ngha kiu con tr sau, cch nh ngha CT3
chng qua l mun gii thiu chng ta bit rng Pascal cho php lm ngc li, tuy nhin
cn nh rng nu nh ngha kiu con tr trc th ngay trong phn Type phi nh ngha
kiu d liu (khng nht thit phi lin ngay sau nh ngha kiu con tr ).
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 97
Cn ch rng Pascal ch cho php a trc tip vo nh ngha kiu con tr cc kiu
d liu n gin sau: s nguyn, s thc, k t. Cc kiu d liu c cu trc mun a vo
con tr th phi thng qua mt tn kiu khai bo trong phn Type
Cch nh ngha hai kiu con tr Hoten v Ds sau l sai:
Type
Hoten = ^String[20];
Ds = ^Array[1..10] of Byte;
Mun s dng kiu chui v mng cho kiu con tr chng ta phi nh ngha nh sau:
Type
S1 = string[20];
Hoten = ^S1;
a = array[1..10] of byte;
Ds = ^a;

2.2 Bin con tr
Bin con tr cng nh bin mng, bin kiu bn ghi hay kiu tp hp c th khai bo
thng qua kiu con tr hoc khai bo trc tip. Bin con tr c nh kiu s tr n mt kiu
d liu c th.
thun tin t nay chng ta dng thut ng "Con tr" thay cho thut ng " Bin con
tr"

V d 4.2
Var
So: ^Integer;
Sinhvien: Ct3;
Hoten: Ct2;
Thutu, Mahoso: ^Word;
Trong v d 4.2 chng ta khai bo ba con tr So, Thutu, Mahoso theo kiu trc tip,
hai con tr Sinhvien v Hoten khai bo thng qua kiu nh ngha trong v d 4.1. Con tr
So tr ti kiu d liu s nguyn, con tr Sinhvien tr ti kiu d liu bn ghi cn con tr
Hoten tr ti kiu d liu chui.
a ch ca cc bin ng v bin tnh s c Pascal lu tr vo bin con tr iu
ny c ngha l bin con tr khng dng lu tr cc gi tr ca bin m l a ch ca bin.
D kch thc vng d liu m cc bin con tr tr ti khc nhau th no th kch thc ca
bin con tr cng vn l 4 byte.
Cc hm v th tc x l bin con tr c Pascal lu tr trong Unit System.
Quy c: Cc bin con tr gi l tng thch nu chng tr ti cng mt kiu d liu

2.3 Con tr khng nh kiu
Con tr khng nh kiu l kiu con tr khng quan tm n kiu d liu m n tr
ti. Pascal dng tn chun Pointer khai bo kiu ny.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 98
Var
Tn bin:Pointer;
Con tr khng nh kiu c coi l tng thch vi mi kiu con tr.

Ch :
* V bn cht tt c con tr u cha a ch nn chng khng c g khc nhau song
trnh nhm ln trong cc qu trnh x l Pascal ch coi cc con tr cng tr ti mt kiu
d liu l tng thch vi nhau.

2.4 a ch ca mt i tng
i tng m chng ta cp trong mc ny c th l bin, hm hay th tc. Khi bin
dch chng trnh mi i tng c cp pht mt vng nh, vng nh ny bao gm mt s
nh lin k nhau.
a ch mt i tng trong b nh c xc nh bi a ch ca nh u tin
m h thng dnh cho i tng .
B nh ca cc my PC hin nay l rt ln v chng c chia thnh nhiu on, mi
on c 65536 nh (2
16
) . u tin ca mi on c a ch l 0 do cui cng c
a ch l 65535. Nh vy, bit a ch mt nh cn bit nh thuc on no v
l nh s bao nhiu trong on .
a ch on gi l Segment v a ch tng i ca nh trong on gi l Offset,
mi gi tr ny Pascal dng 2 byte lu tr nn mt a ch cn 4 byte, 2 byte thp cho
Offset v 2 byte cao cho segment.
Nu ghi a ch bng cc s nh phn th chng ta phi dng 32 ch s 0 v 1 iu ny
kh l phin phc do vy ngi ta dng h m c s 16. Cch ghi a ch nh c quy
c nh sau: a ch on vit trc, v tr ca trong on vit sau, k hiu $ c thm vo
trc cc gi tr s th hin rng cc s vit trong h 16.
V d: $0101:$FFFF
V d trn cho ta a ch nh cui cng ( th ffff
16
= 65535
10
) thuc on 257.

3. Cc th tc v hm tc ng trn con tr

3.1 Gn gi tr ban u
Gi s ct l mt bin con tr c nh ngha, m bo rng ct cha tr n bt
k mt i tng no, ngha l ct l mt con tr rng chng ta phi gn cho ct gi tr NIL
ct := Nil;

3.2 Gn a ch ca mt i tng cho con tr
Gi s ct l mt con tr v x l mt i tng (bin, hm, th tc), c ba cch gn a
ch ca i tng x cho con tr ct:
a. ct := @x;
Trong php gn trn ton t @ tc ng trn i tng x s gn vo con tr ct a ch
kiu Pointer ca i tng .
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 99
b. ct := Addr(x);
Hm Addr() cho a ch ca i tng x, a ch ny thuc kiu Pointer
c. ct := Ptr(segment,offset) ;
Hm Ptr trong php gn trn i hi cc tham s segment v offset phi l gi tr kiu
Word vit trong h 16, v d:
ct := Ptr($B800, $0000); a con tr tr ti nh ca vng Video Ram
Nhn xt:
Hai php gn @ v Addr() cng tr v a ch kiu pointer nn chng l tng ng.

3.3 Php gn gia hai con tr
Hai con tr tng thch (cng kiu) c th gn gi tr cho nhau, khi chng cng tr
ti mt a ch.
V d 4.3
Var
ct1: ^Float;
ct2: ^Byte;
ct3: Pointer;
x: string;
V d trn khai bo ba con tr thuc ba kiu khc nhau, ct1 l con tr thc, ct2 l con
tr nguyn v ct3 l con tr khng nh kiu, x l bin chui. Khi cc php gn:
ct3:=@x;
ct2 := ct3;
l hp l v ct2 v ct3 l tng thch, chng cng tr n a ch ca bin x.
Cn php gn
ct1 := ct2;
l khng hp l v hai con tr khng tng thch.

3.4 Php so snh hai con tr
Ch tn ti php so snh = (bng nhau) v <> (khc nhau) gia hai con tr nu chng
tng thch. Kt qu so snh l mt gi tr Boolean ngha l True hoc False.
Hai con tr tng thch gi l bng nhau nu chng cng tr ti mt i tng,
ngc li gi l khc nhau.

V d 4.4
Program contro;
Uses crt;
Var
x,y:real; z:string;
ct1: ^integer; ct2: ^byte; ct3:pointer; ct4,ct5: ^real;

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 100
Begin
clrscr;
z:='Ha noi'; x:=5; y:=-123.45;
ct1:=@x; ct2:=@z; ct3:=@z; ct4:=@z; ct5:=@y;
Writeln(ct1=ct2); { khng tng thch, my s bo li}
Writeln(ct1=ct3); {false}
Writeln(ct2=ct3); {true}
writeln(ct4=ct5); {false}
readln;
end.

V d 4.4 khai bo nm con tr, ct1 v ct2 tr ti cc kiu nguyn khc nhau, ct3 l
con tr khng kiu tc l tng thch vi mi con tr khc, hai con tr ct4 v ct5 l cng kiu.
Cc php so snh trong thn chng trnh cho thy mt s iu cn ch :
a. Php so snh ct1=ct2 l khng hp l v hai con tr khng tng thch
b. Php so snh ct1 = ct3 cho kt qu False v hai con tr tng thch nhng tr ti cc
a ch khc nhau
c. Php so snh ct2 = ct3 cho kt qu True v hai con tr l tng thch v cng tr ti
mt a ch.
d. Php so snh ct4 = ct5 cho kt qu False v hai con tr cng kiu nhng tr ti cc
a ch khc nhau.

4. Truy nhp d liu

Khi con tr ct ang tr ti mt vng d liu no Pascal cho php dng k hiu ct^
nh l mt bin truy nhp vo vng d liu . Bin ct^ mang trong n d liu ca vng
m con tr ct ang tr ti.
Nh vy chng ta c th truy nhp ti mt bin, hm hay th tc m khng cn bit
tn cc i tng ny min l bit con tr ang tr vo chng.

V d 4.5
Program contro1;
Uses crt;
Type z1=string[3];
Var
z:string; ct:^z1; i:byte;

Begin
clrscr;
z:='Ha noi'; ct:=@z;
writeln(ct^);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 101
for i := 1 to length(z) do write(upcase(ct^[i]));
readln;
end.

Chy chng trnh ta nhn c kt qu:
Ha noi
HA NOI
iu ny cho thy rng mi x l trn bin z u c th x l trn bin ct^ bi v bin
con tr ct ang tr vo z.

n y cn c s phn bit chnh xc v bin con tr CT v bin CT^. Bin con tr
CT mang trong n a ch ca i tng m n tr ti, cn bin CT^ li cha ng d liu
trong vng nh m con tr CT ang tr ti.
Vi con tr c kiu tt c cc thao tc trn bin, hm hay th tc m con tr ang tr
ti c th thay th bi thao tc trn bin ct^. Kiu ca bin ct^ chnh l kiu khai bo cho
con tr ct ch khng phi l kiu ca i tng m bin ct^ i din.
V iu ny cn c mt s gii thch c th qua v d sau:

V d 4.6
Program contro;
uses crt;
Type z1=string[3];
Var x,y:real; z:string;
ct1:^byte; ct2:^integer; ct3:pointer; i:char;
ct4:^real; ct5:^word; ct6:^z1; ct7:^longint;
Begin
clrscr;
z:='H';
ct1:=@z; ct2:=@z; ct5:=@z; ct6:=@z; ct7:=@z;
writeln(ct1^); writeln(ct6^); writeln(ct2^); writeln(ct5^); writeln(ct7^);
readln;
End.

Chy chng trnh trn chng ta nhn c kt qu:
1
H
18433
18433
18433
Thay lnh gn z:='H'; bng lnh gn z:='Ha noi Viet nam': th kt qu chy chng
trnh s l
15
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 102
Ha noi Viet nam
18447
18447
543246351
Trong v d 4.6 tt c con tr u c gn a ch ca bin z, nhng v cc con tr i
din cho cc kiu d liu khc nhau nn kt qu m bin con tr tr v cng khc nhau.
Bin Ct1^ thuc kiu Byte nn n cho ta d liu trong Byte u tin ca vng nh
cha z, chnh l nh cha di ca chui z.
Bin Ct6^ thuc kiu z1 tc l kiu chui nn kt qu m n tr v chnh l chui z
(khng ph thuc vo CT6^ khai bo di bao nhiu).
Cc bin cn li thuc kiu s nn kt qu tr v cng l s, vi trng hp k t H
cc bin con tr ct2^, ct5^, ct7^ cho ta gi tr 18433. Nu k t gn cho z l A th gi tr tr v
l 16641, l B th gi tr ny tng thm 256...
Vi chui "Ha noi Viet nam" sau H l 14 k t na cho nn gi tr tr v l
18433 + 14 = 18447.

n y chng ta c th rt ra mt s kt lun:
*. a ch ca mt i tng c th gn cho bt k con tr no.
*. Kt qu m bin ct^ tr v thuc kiu d liu ca con tr ch khng thuc kiu d
liu ca i tng.
*. Mun s dng bin ct^ nh mt bin thng thng thay th cho i tng th bin
con tr v i tng phi tng thch v kiu (cng mt kiu d liu).
*. Vi con tr khng nh kiu (Pointer) chng ta khng th coi chng l tng ng
vi cc bin nh kiu thng thng, iu ny c ngha l khng th s dng cc th tc
Write, Read hoc php gn cho bin ct^ nu ct l Pointer.

V d: tr li v d 4.5 cc cp thao tc m chng ta thc hin sau y l tng ng:
Thao tc trn bin Thao tc trn con tr
z:='Ha noi'; ct2^ := 'Ha noi';
x:=5; ct1^ := 5;
y:=-123.45; ct5^ := -123.45;

5. Mng con tr v con tr kiu mng

Con tr l mt kiu d liu cho nn bin con tr c th l cc thnh phn ca mng,
ngc li mng l mt kiu d liu c cu trc nn con tr cng c th tr ti cc bin mng.

5.1 Con tr kiu mng
Khai bo:
Type m = array[1..5] of byte;
Var
ct1: ^m;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 103
Vi cch khai bo trn y ct1 l bin con tr kiu mng, khi bin ct1^ s gm 5
phn t, mi phn t l mt s kiu Byte. Vic truy nhp vo bin ct1^ thc cht l truy nhp
vo tng phn t, v d:
Read(ct1^[i]); hoc Write(ct1^[i]); vi 1<=i<=5.

5.2 Mng cc con tr
Khai bo:
Var
ct: array[1..10] of ^string;
s1,s2: String;
Begin
s1:='Ha noi Viet nam';
s2:='Hppy New Year';
........

Cch khai bo trn cho ta ct l mng ca 10 con tr, tt c mi con tr ny u tr
n kiu d liu String. Mi con tr c th tr n mt i tng khc nhau. Trong trng
hp ny cch truy nhp d liu cn phi thn trng.
Nu chng ta cha gn a ch ca bt k i tng no cho bin con tr m ch thc
hin php gn:
ct[i]^ := s1; vi 1 <= i <= 10.
th tt c mi con tr u tr ti bin s1.
Khi cc lnh
Write(ct[1]^); Write(ct[2]^); .... Write(ct[10]^); cho kt qu nh nhau.
Trong trng hp chng ta gn d liu t mt i tng cho nhiu bin con tr th tt
c cc con tr u tr ti i tng c gn cui cng.
Nu thc hin php gn
ct[1] := @s2;
ngha l gn a ch ca bin s2 vo con tr th nht trong mng th ch c con tr
ct[1] l tr ti bin s2, cc con tr cn li cha tr vo u c.
Xt v d sau:

V d 4.7
Uses crt;
Type
m = array[1..5] of byte;
Var
i:byte; s1,s2:string;
mct: array[1..10] of ^string; ctm: ^m;
Begin
clrscr;
for i:=1 to 5 do
begin
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 104
ctm^[i]:=i;
write(ctm^[i], ' ');
end;
writeln;
writeln(ctm^[3]);
s1:='Ha noi Viet nam';
s2:='Happy New Year';
mct[10]^:='aaaaa';
mct[4]^:='bbbbb';
mct[1]:=@s1;
mct[2]:=@s2;
writeln(mct[1]^);
writeln(mct[2]^);
writeln(mct[3]^);
writeln(mct[5]^);
readln;
end.

Chy chng trnh chng ta nhn c kt qu:
1 2 3 4 5
3
Ha noi Viet nam
Happy New Year
bbbbb
bbbbb

V d 4.7 khai bo ctm l con tr kiu mng ca cc s nguyn, cn mct l mng ca
cc con tr kiu chui.
Vi con tr kiu mng ctm chng ta ch c mt con tr, con tr ny tr ti kiu d liu
mng m khai bo nn n c 5 thnh phn v chng ta c th truy nhp n tng thnh phn
thng qua bin ctm^[i].
Bin mct cho ta mt bin mng mi thnh phn mng l mt con tr v tt c cc con
tr ny u tr ti cng mt kiu d liu.
Php gn:
mct[10]^:='aaaaa'; mct[4]^:='bbbbb';

l gn d liu trc tip vo hai bin mct[10]^ v mct[4]^, sau hai php gn ny c mi con
tr u tr ti chui 'bbbbb' chnh v vy cc lnh:
writeln(mct[3]^);
writeln(mct[5]^);
u cho kt qu l bbbbb.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 105
Hai lnh gn:
mct[1]:=@s1;
mct[2]:=@s2;
nh li hng ca con tr, con tr mct[1] tr ti bin s1, cn con tr mct[2] tr ti
bin s2 v vy cc lnh:
writeln(mct[1]^);
writeln(mct[2]^);

cho kt qu l:

Ha noi Viet nam
Happy New Year

6. Cp pht ng

6.1 Qun l vng nh Heap
Vi mt bin con tr ct chng ta c mt bin ct^ tng ng, y khng phi l bin
tnh v khng c khai bo phn Var, nhng cng cha phi l bin ng. Mun ct l mt
bin ng thc s th phi dng k thut cp pht b nh ng.
Cp pht b nh ng l vic cp pht b nh c thc hin bi cu lnh trong thn
chng trnh ch khng phi bng cch khai bo bin hoc tham s. Khi mt bin c cp
pht b nh ng th n tr thnh bin ng (Dynamic Variable). Vng nh dnh cho cp
pht ng bao gi cng l vng nh t do Heap.
Theo mc nh khi mt bin ng c hnh thnh th a ch ca n c lu trong
bin con tr tng ng.
Trc khi nghin cu cch thc cp pht ng chng ta cn bit h thng qun l
vng nh t do nh th no.
Vng nh thp c dnh cho h iu hnh, tip l vng lu m chng trnh
(Code) vng lu cc bin ton cc (Data), vng lu cc bin cc b (Stack). Pascal dng ton
b vng nh cn li ca my PC cho vng nh t do (Heap).
Vng Stack c thit k pht trin theo chiu i xung, ngha l cc a ch cao c
s dng trc, a ch thp c s dng sau
Vng Heap li pht trin theo chiu i ln, ngha l a ch thp c s dng trc,
a ch cao s dng sau.
Ton b vng nh t do Heap trong qu trnh s dng b chia thnh nhiu khi vi
kch thc khc nhau. Do vic thu hi vng nh din ra thng xuyn trong chng trnh nn
cc khi nh t do cn li c th khng nm k nhau.
qun l Heap, Pascal c hai hm l:
Hm MemAvail cho bit tng dung lng cn c php s dng trn Heap
Hm MaxAvail cho bit dung lng ca khi ln nht cn t do trn Heap.
Khi xin cp pht ng, iu quan trng l cn bit kch thc khi nh ln nht cn t
do ch khng phi l tng dung lng t do bi v mi i tng phi c lu tr trong mt
vng nh lin tc.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 106


Vng Heap cha dng

Vng Heap cp pht

Vng m

Vng Stack dng

Vng Stack cha dng
Data segment
Code segment
Dos

Hnh 4.1

Kch thc i tng dt c xc inh bi hm Sizeof(dt), do vy nu:
MaxAvail < Sizeof(dt)
th khng th xin cp pht vng nh trn Heap cho dt c, mc d tng dung lng
trn Heap c th vn cn ln hn kch thc dt nhiu ln.
bit a ch ca Heap bt u v kt thc t u c th s dng cc bin khng kiu
thit k trong Pascal :
Bin HeapOgr: cho a ch im bt u ca Heap dng cho cp pht ng.
Lnh Write(Seg(heaporg^),' : ', ofs(heaporg^)); s hin a ch ny ln mn hnh di
dng Segment:Ofset.
Bin HeapEnd: Cho a ch im cui ca Heap c s dng cho i tng.
Khi chng trnh bt u c ti vo b nh th cc gi tr trn cng c h thng
khi gn v gi nguyn khng thay i
Bin HeapPtr: a ch nh Heap, tc l a ch y ca vng nh t do cn c
php s dng.
Lc u gi tr HeapPtr = Heaporg, sau gi tr HeapPtr s pht trin theo chiu
hng ln.

6.2 Th tc cp pht b nh cho con tr nh kiu
Vi mt con tr nh kiu ct th tc cp pht b nh ng s l :
New(ct);
Th tc New(ct) cng mt lc thc hin cc cng vic sau:
* Cp pht mt vng nh trn Heap vi kch thc bng kch thc kiu d liu m
con tr tr ti.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 107
* To mt bin ng nh kiu ct^ c th truy nhp vo vng d liu ca i tng.
* Lu a ch ca i tng vo con tr ct
Khi mt bin ng ct^ ht gi tr s dng th cn thu hi vng nh cp pht cho
n dng vo vic khc. Th tc thu hi l
Dispose(ct);
Sau khi thu hi vng nh mc d bin ct^ vn cn tn ti nhng d liu trong vng
nh dnh cho ct s khng c bo v, iu ny c ngha l h thng c th dng vng nh
ny vo vic khc. V d sau y s cho ta thy r iu ny.

V d 4.8
Program cp_dong;
Uses crt;
Type s=string[30];
Var
ct:^s;
Begin
clrscr;
new(ct);
ct^:='Ha noi Viet nam';
Writeln('Bien ct^ sau khi cap phat dong: ', ct^);
Dispose(ct);
Writeln('Bien ct^ sau thu tuc Dispose(ct) : ', ct^);
readln;
End.

Chy chng trnh chng ta nhn c kt qu:
Bien ct^ sau khi cap phat dong: Ha noi Viet nam
Bien ct^ sau thu tuc Dispose(ct) : Ha Viet nam
C th thy rng vic gii phng vng nh dnh cho bin lm cho d liu thay i
mc d chng ta cha h ra lnh thay i ni dung vng nh ny.

6.3 Th tc cp pht b nh cho con tr khng nh kiu
Pascal c hai th tc cp pht v thu hi vng nh cho con tr khng nh kiu ct l:
Getmem(ct, n); cp cho ct n Byte.
Freemem(ct, n); thu hi n Byte vng nh cp cho ct.
Vic cp pht khng nh kiu thng c dng trong trng hp cha bit trc
kch thc ca tng, v d lu mt nh nm trong khung ch nht to gc trn tri
l x1, y1 v to gc di phi l x2, y2. Gi n l kch thc nh tnh bng Byte, chng ta
xc nh kch thc nh bng hm:
n := Imagesize(x1,y1,x2,y2);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 108
Th tc Getmem(ct, n) s cp cho con tr khng kiu ct mt vng nh vi kch thc
ng bng kch thc nh, sau c th lu nh vo bin con tr thng qua th tc:
GetImage(x1,y1,x2,y2, ct^);

6.4 Thu hi nhiu vng nh
thu hi mt lc nhiu vng nh hoc ton b vng Heap, chng ta thc hin cc
bc sau y:
* Khai bo mt bin con tr ct khng kiu lu tr a ch nh bt u thu hi (
tc l nh du v tr sau ny thu hi cc vng nh t v tr ny).
* nh du v tr s bt u thu hi bi th tc:
Mark(ct)
* Thu hi vng nh (tc l hu b ton b cc bin ng c cp pht trong vng
nh k t khi nh du)
Release(ct);

6.5 Cc v d v cp pht ng

V d 4.9
V d 4.9 thit k chng trnh con Diachi nhm thng bo kch thc vng nh Heap
m h thng cp cho Pascal, kch thc ca khi nh ln nht c trong Heap v a ch nh
Heap trc v sau khi cp pht ng.
Con tr khng kiu bd (bt u) dng nh du v tr bt u cp pht vng nh
cho cc bin ng ct1 v ct2. Sau ny khi thu hi vng nh chng trnh s bt u thu hi t
y.

Program Quan_ly_Heap;
Uses crt;
Var bd:pointer;
ct1,ct2:^string;
Procedure diachi;
Begin
writeln('Kich thuoc toan bo vung nho Heap: ',memavail);
writeln('Kich thuoc khoi lon nhat tren Heap: ',maxavail);
writeln('Dia chi bat dau vung Heap: ','$',seg(heaporg^),' : $',ofs(heaporg^));
writeln('Dia chi ket thuc vung Heap: ','$',seg(heapend^),': $',ofs(heapend^));
writeln('Dia chi dinh Heap: ','$',seg(heapptr^),' : $',ofs(heapptr^));
writeln;writeln;
end;
Begin
clrscr;
writeln('Trang thai ban dau cua Heap');
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 109
diachi;
Mark(bd);
new(ct1);
ct1^:='aaaaaaaaaaaaaa';
writeln;
writeln('Sau khi cap phat cho bien dong ct1^ ');
diachi;
New(ct2);
ct2^:='qqq';
writeln('Sau khi cap phat cho bien dong ct2^ ');
diachi;
release(bd);
writeln('Sau khi thu hoi toan bo bien dong ');
diachi;
readln;
End.

V d 4.10
V d 4.10 minh ho vic dng con tr mng qun l danh sch hc sinh. Kiu d
liu Nguoi bao gm cc trng Stt (s th t), Hoten (h v tn), Gioi (gii tnh), Tong (tng
im), Xeploai (xp loi). Con tr Dslop tr n kiu d liu ds, v ds l mng ca 100 phn
t kiu Nguoi nn dslop l con tr mng. Trong v d chng ta ch hnh thnh nn mt con
tr v con tr ny c th tr ti 100 phn t ca mng. Th tc xin cp pht ng New(dslop)
s to nn mt bin ng kiu mng, phn th th i ca bin ng ny s l dslop^[i] v
chng ta c th hnh dung dslop^[i] chnh l bn ghi th i trong mng ds. V d cng nu ln
cch thc s dng ton t With ... Do trong cc bi ton c lin quan n con tr.
V ton t With ... Do ch c tc ng i vi cc bin kiu Record nn chng ta
khng th a vo trong With ... Do cc con tr m ch c th l cc bin ng.
Program con_tro_mang;
Uses crt;
Type nguoi=record
stt:byte;
Hoten:string[25];
Gioi:char;
tong:real;
xeploai:string[5];
end;
ds=array[1..100] of nguoi;
Var
dslop:^ds; i,n:byte;

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 110
Begin
clrscr;
write('cho biet so hoc sinh can nhap: ');
Readln(n);
new(dslop);
For i:=1 to n do
with dslop^[i] do
Begin
writeln('So thu tu: ',i); stt:=i;
write('Nhap Ho ten: '); readln(hoten);
write('Nhap gioi T/G : '); readln(gioi);
write('Nhap tong diem: '); readln(tong);
write('Nhap xep loai: '); readln(xeploai);
End;
writeln(' DANH SACH HOC SINH');
writeln('So TT : Ho va ten : Gioi : Tong diem : Xep loai ');
For i:= 1 to n do
With dslop^[i] do
writeln(stt:3, hoten:15,' ' ,gioi:4,' ', Tong:5:2,' ', xeploai);
Readln;
End.

Thay v s dng con tr mng, chng ta s dng mng cc con tr. Trong v d 4.11
Dslop l mng ca 100 con tr, cc con tr ny tr ti kiu d liu Nguoi. Bin khng kiu
BD dng nh du v tr bt u cp pht ng.
Th tc New(dslop[i]) trong vng lp For i:= 1 to n cho php to nn n bin ng
dslop[i]^, cc bin ng ny c cp pht vng nh trn Heap.

V d 4.11
Program mang_con_tro;
uses crt;
Type nguoi=record
stt:byte;
Hoten:string[25];
Gioi:char;
tong:real;
xeploai:string[5];
end;
Var
bd:pointer;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 111
dslop:array[1..100] of ^nguoi; i,n:byte;
Begin
clrscr;
write('cho biet so hoc sinh can nhap: ');
Readln(n);
mark(bd);
For i:= 1 to n do
begin
new(dslop[i]);
with dslop[i]^ do
begin
writeln('So thu tu: ',i);stt:=i;
write('Nhap Ho ten: '); readln(hoten);
write('Nhap gioi T/G : '); readln(gioi);
write('Nhap tong diem: '); readln(tong);
write('Nhap xep loai: '); readln(xeploai);
end; { with}
end; {For}
writeln('So TT : Ho va ten : Gioi : Tong diem : Xep loai ');
For i:= 1 to n do
with dslop[i]^ do
writeln(stt:3, hoten:15,' ', gioi:4,' ', Tong:5:2,' ', xeploai);
Readln;
END.

7. Danh sch lin kt v hng i

Vi con tr kiu mng nu vic lp trnh to danh sch cng nh duyt danh sch
kh n gin, hn ch ca kiu mng l phi khai bo trc kch thc mng do nhiu khi
dn ti khng tit kim b nh. S dng bin ng chng ta c th khc phc c nhc
im ny bng cch cn n u th to bin ng n . S bin ng to ra ch b hn ch
bi b nh trong (Ram) ca my PC m c th l ph thuc vo kch thc vng Heap.
Danh sch c hiu l mt tp hp hu hn cc phn t lin kt vi nhau, trng hp
tng qut nht mi phn t l mt bn ghi. iu c bit ca mi bn ghi trong danh sch l
ngoi cc trng d liu, cn mt trng dng lin kt v trng ny li l mt con tr.
Con tr ny c nhim v tr vo a ch ca bn ghi k tip. Nu bn ghi hin thi l bn ghi
cui cng th con tr s tr vo Nil.
Nh vy xut pht t bn ghi u, ln theo a ch lu trng con tr chng ta c
th truy nhp vo bn ghi tip theo, qu trnh s tip din cho n bn ghi cui cng.
Mt danh sch cha c phn t no c gi l danh sch rng. Vic thm mt phn
t vo danh sch (ngha l to nn danh sch) c th ri vo mt trong ba kh nng:
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 112
a. Phn t mi c thm vo u danh sch
b. Phn t mi c ni vo cui danh sch
c. Phn t mi c chn vo mt v tr xc nh.
Trng hp a chng ta c danh sch lin kt ngc (LIFO), cn trng hp b chng ta
c danh sch lin kt thun (FIFO) hay cn gi l hng i QUEUE.

7.1 Danh sch lin kt ngc
L loi danh sch m trng lin kt ca phn t to ra sau lun tr vo phn t to ra
trc . Trng lin kt ca phn t to ra u tin tr vo Nil. iu ny dn ti vic khi kt
xut thng tin ra chng ta phi bt u t phn t to ra cui cng v ch c nh vy chng ta
mi bit a ch ca phn t to ra trc . Nu c tnh i t phn t to ra du tin th chng
ta khng th bit phn t tip theo l phn t no. Lin kt kiu ny gi l kiu LIFO (Last In
- Firt Out) hay cn gi l kiu xp chng. Phn t nhp vo cui cng s c ly ra u tin.
Danh sch to ra theo kiu ny c gi l danh sch lin kt ngc.
Gi thit rng chng ta cn xy dng mt danh sch hc sinh vi cc trng d liu l
Mhs (m h s), Hoten (H v tn), Diem (im tng kt) , trng lin kt ly tn l Tiep
(tip tc). Kiu d liu bn ghi vi cc trng nu trn ly tn l Nguoi. to ra danh sch
hc sinh chng ta cn to ra mt kiu con tr DS tr vo kiu d liu Nguoi v trng lin kt
Tiep trong bn ghi Nguoi s tr vo kiu d liu Ds.


D liu Phn t cui
Trng lin kt
D liu Cc phn t
trung gian Trng lin kt
D liu Phn t u
Trng lin kt

Hnh 4.2

Type
Ds = ^nguoi;
Nguoi = Record
Mhs:byte;
Hoten: string[20];
Diem:real;
Tiep: Ds;
End;


Nil
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 113
Ch :
Vi cch thc ni trn nu chng ta khai bo kiu bn ghi Nguoi trc khi khai bo
kiu con tr Ds th s b li v khi con tr Tiep s tr vo mt kiu d liu cha c nh
ngha.
Sau khi khai bo kiu d liu cn khai bo bin con tr Dslop lu tr d liu nhp
vo v bin Ctcuoi (con tr cui) tr vo phn t cui cng.
Vn l lm th no con tr lin kt Tiep lun tr vo phn t to ra trc .
lm vic ny chng ta to ra bin ng Dslop lu tr d liu. C mi bn ghi cn nhp vo
th to ra mt bin ng Dslop mi. a ch ca bin ng Dslop lun c gn cho con tr
cui Ctcuoi. Di y l on m phng chng trnh to danh sch lin kt ngc:
Ctcuoi:=nil; {khi to danh sch}
Bt u lp
New(dslop); {to bin ng lu tr d liu nhp vo}
Nhp d liu; {nhp d liu cho phn t th i}
Tiep:=ctcuoi; {trng lin kt ca phn t th i tr vo a ch
ca con tr cui ctcuoi }
Ctcuoi :=dslop; {hng con tr cui vo bn ghi hin thi}
Kt thc lp

Nhn xt:
* Vng lp th 1:
- To bin ng Dslop sau nhp d liu vo phn t u tin.
- Cu lnh Tiep:= ctcuoi; s hng con tr lin kt Tiep ca bn ghi ny tr vo Nil v
lc ny con tr cui ang l Nil.
- Cu lnh ctcuoi:=dslop; s hng con tr cui n phn t th nht.
* Vng lp th 2:
-To bin ng Dslop ln th hai, nhp d liu cho phn t th hai. Cu lnh Tiep:=
ctcuoi; s hng trng lin kt ca phn t th hai n phn phn t th nht v lc ny
ctcuoi ang mang a ch ca phn t th nht.
- Cu lnh ctcuoi:=dslop; s chuyn hng con tr cui sang phn t th hai.
- C th d dng xuy ra rng nu vng lp thc hin ln th ba th con tr lin kt ca
phn t th ba s tr vo phn t th hai, cn con tr cui s tr vo phn t th ba...
Qu trnh s lp li cho n khi kt thc.
Di y l v d xy dng danh sch, chng trnh con Hien_LIFO cho hin d liu
ln mn hnh theo chiu ngc, phn t nhp sau hin trc.

V d 4.12
Program danh_sach_lien_ket_nguoc;
Uses crt;
Type ds= ^nguoi;
nguoi=record
Mhs:byte; Hoten:string[25]; Diem:real; Tiep:ds; End;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 114
Var
dslop, ctcuoi:ds; i,j:byte;
lam:char;
Procedure Hien_LIFO; {Thu tuc hien du lieu tu cuoi ve dau}
var ct1:ds;
Begin
clrscr;
writeln('Du lieu da nhap - Hien tu cuoi ve dau');
writeln;
ct1:=ctcuoi;
while ct1<>nil do
with ct1^ do
Begin
Write(Mhs,' ', hoten);
for j:=1 to (20-length(hoten)) do write(' ');
writeln(diem:5:2);
ct1:=tiep;
end;
End;

Begin {Than chuong trinh chinh}
clrscr;
ctcuoi:=nil; i:=0;
Repeat
New(dslop); i:=i+1;
With dslop^ do
Begin
writeln('Ma ho so so: ',i); mhs:=i;
write('Ho va ten: '); readln(hoten);
write('Diem : '); Readln(diem);
tiep:=ctcuoi;
ctcuoi:=dslop;
writeln('Nhap tiep hay thoi? C/K '); lam:=readkey;
writeln;
end;
Until lam in ['k','K'];
Hien_lifo;
Readln;
END.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 115
Trong v d trn thay v trng Tiep ca phn t hin thi tr trc tip vo phn t
ng trc chng ta cho n tr vo "con tr cui" ri "con tr cui" s tr vo phn t k tip.
M hnh m t qu trnh nhp d liu nh sau:



D liu Phn t cui
Tip
D liu Cc phn t
trung gian Tip
D liu Phn t u
Tip

Hnh 4.3

7.2 Hng i Queue - Danh sch lin kt thun
Vi loi danh sch m phn t no nhp trc th c ly ra trc chng ta gi l
danh sch lin kt thun, n cng ging nh hng i ngi no n trc th c gi trc.
to ra hng i ngoi ctcuoi chng ta phi thm vo con tr u (ctdau). Con tr
cui ctcuoi lun tr vo phn t cui cng, cn con tr u li lun tr vo phn t u ca
danh sch. Di y m phng thut ton chng trnh xy dng Queue.
Ctdau:=nil; {khi to danh sch}
Bt u lp
New(dslop); {to bin ng lu tr d liu }
Nhp d liu; {nhp d liu cho phn th th i, i=1,2... }
Nu Ctdau = Nil th ctdau :=dslop;
Cn nu Ctdau <> Nil th ctcuoi^.tiep := dslop;
Ctcuoi := dslop;
Ctcuoi^.tiep := Nil;
Kt thc lp

Chng trnh m phng trn cho ta kt qu sau:
* Vng lp th nht:
- Nhp d liu cho phn t th nht
- Ctdau tr vo phn t th nht
- Ctcuoi tr vo phn t th nht
- Trng lin kt Tiep tr vo cui danh sch (Nil), v Ctcuoi ang tr vo phn t
th nht nn trng Tiep ca Ctcuoi cng chnh l trng Tiep ca phn t th nht.
* Vng lp th hai
Con tr cui
Con tr cui
Con tr cui
Nil
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 116
- Nhp d liu cho phn t th hai
- V ctdau ang tr vo phn th th nht (ctdau<>Nil) nn chuyn hng trng Tiep
ca ctcuoi n phn t th hai. V Ctcuoi ang tr vo phn t th nht nn iu ny cng c
ngha l trng Tiep ca phn t th nht tr vo phn t th hai (khng tr vo Nil na).
- Xc nhn li rng ctcuoi tr vo phn t th hai (ctdau vn tr vo phn t th
nht).
- Trng lin kt Tiep tr vo cui danh sch (Nil), v Ctcuoi ang tr vo phn t
th hai nn trng Tiep ca Ctcuoi cng chnh l trng Tiep ca phn t th hai.
* Vng lp tip theo s tng t nh vng lp th hai
Di y l chng trnh xy dng hng i, chng trnh con Hien_FIFO cho hin
d liu ln mn hnh theo ng th t nhp vo.

V d 4.13
Program danh_sach_lien_ket_thuan;
Uses crt;
Type
ds= ^nguoi;
nguoi=record
Mhs: Byte; Hoten:string[25]; Diem:real; tiep:ds;
End;
Var
dslop, ctdau, ctcuoi:ds; bd:pointer;
lam:char; i,j:byte;

Procedure Hien_FIFO; {Hien du lieu tu dau xuong cuoi}
Var ct1:ds;
Begin
Clrscr;
writeln('Du lieu da nhap - Hien tu dau xuong cuoi');
writeln;
ct1:=ctdau;
while ct1<>nil do
with ct1^ do
Begin
Write(Mhs,' ',hoten);
for j:=1 to (20-length(hoten)) do write(' ');
writeln(diem:5:2);
ct1:=tiep;
End;
End;

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 117
Begin {Than chuong trinh chinh}
clrscr;
mark(bd);
ctdau:=nil; i:=0;
Repeat
New(dslop); {to bin ng Dslop}
i:=i+1;
With dslop^ do
Begin
Witeln('Ma ho so so: ',i); mhs:=i;
Write('Ho va ten: '); readln(hoten); {nhp d liu}
Write('Diem : '); Readln(diem);
if ctdau=nil then
ctdau:=dslop {ctdau tr vo phn t th 1 }
else
ctcuoi^.tiep:=dslop; {Lu tr a ch ca phn t hin thi - k t phn t
th hai vo trng lin kt Tiep ca Ctcuoi }
ctcuoi:=dslop; {ghi nhn li con tr cui, ngha l Tiep ang tr
vo phn t hin thi}
ctcuoi^.tiep:=nil; { trng lin kt Tiep ca con tr cui tr vo Nil
- ket thuc danh sach}
Writeln('Nhap tiep hay thoi? C/K '); lam:=readkey;
writeln;
End;
Until lam in ['k','K'];
Hien_FiFO;
Release(bd);
End.

7.3 Chn thm phn t vo danh sch
Vic u tin khi mun chn thm phn t vo danh sch l phi xc nh c chnh
xc v tr cn chn, mun vy danh sch phi c mt trng kho, mi phn t trong danh
sch s ng vi mt v ch mt gi tr ca trng kho. V d c th ly trng s th t
(STT) hoc m h s (MHS) lm trng kho, khng th dng trng Hoten lm kho v
trong danh sch c th c nhiu ngi trng Hoten.
Qu trnh chn mt phn t vo danh sch s qua cc bc:
* Xc nh v tr chn
* To mt bin ng (xem nh mt con tr nhp) v xin cp pht vng nh cho bin
ng lu d liu s chn vo danh sch.
* Chuyn trng Tiep ca phn t hin thi n phn t b xung
* Chuyn trng Tiep ca phn t b xung n phn t trc phn t hin thi.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 118
New(ct1); {to phn t nhp tm lu d liu}
With ct1^ do Nhp d liu cho phn phn t b xung
dslop:=ctcuoi; {hng con tr n phn t cui cng trong danh sch}
While (dslop<>nil) and (dslop^.mhs <> n) do
dslop:=dslop^.tiep; {hng con tr n v tr cn chn}
ct1^.tiep:=dslop^.tiep; {gn trng lin kt Tiep ca phn t hin thi cho Tiep ca
ct1 - ngha l chn ct1 vo trc phn t hin thi}
dslop^.tiep:=ct1; {trng lin kt Tiep ca bn ghi hin thi tr vo ct1 - ngha l li
phn t hin thi ra sau ct1 }

7.4 Xo mt phn t khi danh sch
Qu trnh xo mt phn t trong danh sch khng phi l qu trnh lm rng nh
cha phn t m n gin ch l chuyn hng trng lin kt khng tr vo phn t na.
Nu chng ta xo nhiu phn t th b nh s b phn mnh ra nhiu on ngt qung, trong
trng hp ny cn b tr li cc nh mt i tng c b tr trn mt s nh lin
tc (xem v d 4.14).

V d 4.14
Program danh_sach_lien_ket_nguoc;
Uses crt;
Type
ds= ^nguoi;
nguoi=record
Mhs:byte;
Hoten:string[25];
Diem:real;
tiep:ds;
End;
Var
dslop, ctcuoi:ds; i,j,n:byte;
lam:char;

Procedure Hien_LIFO; {Thu tuc hien du lieu tu cuoi ve dau}
var ct1:ds;
Begin
clrscr;
writeln('Du lieu da nhap - Hien tu cuoi ve dau');
writeln;
ct1:=ctcuoi;
while ct1<>nil do
with ct1^ do
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 119
Begin
Write(mhs,' ',hoten);
for j:=1 to (20-length(hoten)) do write(' ');
writeln(diem:5:2);
ct1:=tiep;
end;
Readln;
End;
{**************}
Procedure Chen;
Var n:byte; ct1:ds;
Begin
Clrscr;
writeln('Chen truoc ma ho so nao? '); Readln(n);
New(ct1);
With ct1^ do
Begin
Writeln('Ma ho so so: ',n-1);
Write('Ho va ten: '); readln(hoten);
Write('Diem : '); Readln(diem);
End;
dslop:=ctcuoi;
While (dslop<>nil) and (dslop^.mhs <> n) do dslop:=dslop^.tiep;
ct1^.tiep:=dslop^.tiep;
dslop^.tiep:=ct1;
End;
{***************}
Procedure Xoa;
Var n:byte; ct1:ds;
Begin
Write('Cho biet ma ho so can xoa '); readln(n);
dslop:=ctcuoi;
While (dslop<>nil) and (dslop^.mhs<>n) do
Begin
ct1:=dslop; dslop:=dslop^.tiep;
End;
If dslop=ctcuoi then ctcuoi:=dslop^.tiep
Else
ct1^.tiep:=dslop^.tiep;
End;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 120
Procedure Nhap;
Var lam:char;
Begin
clrscr;
ctcuoi:=nil;
Repeat
New(dslop); i:=i+1;
With dslop^ do
Begin
Writeln('Ma ho so so: ',i); Mhs:=i;
Write('Ho va ten: '); readln(hoten);
Write('Diem : '); Readln(diem);
tiep:=ctcuoi;
ctcuoi:=dslop;
Writeln('Nhap tiep hay thoi? C/K '); lam:=readkey;
writeln;
End;
Until lam in ['k','K'];
End;

Begin {Than chuong trinh chinh}
Repeat
clrscr;
Writeln('1: Nhap du lieu');
Writeln('2: Hien_lifo ');
Writeln('3: Chen them phan tu');
Writeln('4: Xoa phan tu ');
Write('Xin moi chon cong viec! Bam 99 de ket thuc '); readln(n);
Case n of
1:Nhap;
2:Hien_lifo;
3:Chen;
4:Xoa;
End;
Until n=99;
End.




Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 121
V d 4.15
Danh sch lin kt thun

Program danh_sach_lien_ket_thuan;
Uses crt;
Type
ds= ^nguoi;
nguoi=record
mhs:byte;
Hoten:string[25];
Diem:real;
tiep:ds;
End;
Var
dslop, ctdau, ctcuoi:ds;
lam:char; i,j,n:byte;

Procedure Hien_FIFO; {Hien du lieu tu dau xuong cuoi}
var ct1:ds;
Begin
clrscr;
ct1:=ctdau;
writeln('Du lieu da nhap - Hien tu dau xuong cuoi');
writeln;
ct1:=ctdau;
while ct1<>nil do
with ct1^ do
Begin
Write(mhs,' ',hoten);
for i:=1 to (20-length(hoten)) do write(' ');
writeln(diem:5:2);
ct1:=tiep;
end;
readln;
End;

{****************}



Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 122
Procedure Nhap;
Begin
clrscr;
ctdau:=nil; j:=0;
Repeat
New(dslop); j:=j+1;
With dslop^ do
Begin
writeln('Ma ho so: ',j); mhs:=j;
write('Ho va ten: '); readln(hoten);
write('Diem : '); Readln(diem);
if ctdau=nil then
ctdau:=dslop {ctdau tro vao phan tu 1 }
else
ctcuoi^.tiep:=dslop; {truong lien ket Tiep tro vao phan tu tiep theo }
ctcuoi:=dslop; {ghi nhan lai con tro cuoi nghia la Tiep dang tro
vao phan tu tiep theo}
ctcuoi^.tiep:=nil; {truong lien ket tro vao Nil - ket thuc danh sach}
writeln('Nhap tiep hay thoi? C/K '); lam:=readkey;
writeln;
End;
Until lam in ['k','K'];
End;

{***************}

Procedure Chen;
Var n:byte; ct1:ds;
Begin
Clrscr;
writeln('Chen truoc ma ho so nao? '); Readln(n);
New(ct1);
with ct1^ do
Begin
writeln('Ma ho so so: ',n-1);
write('Ho va ten: '); readln(hoten);
write('Diem : '); Readln(diem);
End;
dslop:=ctdau;
While (dslop<>nil) and (dslop^.mhs <> n) do dslop:=dslop^.tiep;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 123
ct1^.tiep:=dslop^.tiep;
dslop^.tiep:=ct1;
End;

{***************}

Procedure Xoa;
Var n:byte; ct1:ds;
Begin
write('Cho biet ma ho so can xoa '); readln(n);
dslop:=ctdau;
while (dslop<>nil) and (dslop^.mhs<>n) do
Begin
ct1:=dslop;
dslop:=dslop^.tiep;
End;
If dslop=ctdau then ctdau:=dslop^.tiep
Else
ct1^.tiep:=dslop^.tiep;
End;

{**************}

Begin {Thn chng trnh}
Repeat
clrscr;
writeln('1: Nhap du lieu');
writeln('2: Hien_Fifo ');
writeln('3: Chen them phan tu');
writeln('4: Xoa phan tu ');
write('Xin moi chon cong viec! Bam 99 de ket thuc '); readln(n);
Case n of
1:Nhap;
2:Hien_Fifo;
3:Chen;
4:Xoa;
End;
Until n=99;
END.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 124
8. Cy nh phn

Chng ta lm quen vi nhiu kiu d liu c cu trc nh mng, tp, bn ghi,
D liu kiu cy cng l mt kiu d liu c cu trc c xy dng trong Pascal.

8.1 Khi nim Cy (Tree)
Cy gm mt tp hp hu hn cc phn t gi l nt (hay l nh) v mt tp hp hu
hn cc cnh c hng ni tng cp nt vi nhau. Trong cy c mt nt c bit gi l Gc,
gia cc nt c mt quan h phn cp gi l quan h cha con.


A

B C

D E


F G H

Hnh 4.4

* Nt c gi l Gc khi t nt ch c cc cnh c hng i khi nt.
* S nt con ca mt nt no gi l bc t do (Degree) hay cn gi l cp ca nt
. Trong hnh v trn nt A v C c bc t do bng 2, cn nt D c bc t do bng 3.
* Nt c cp bng 0 (tc l khng c nt con) gi l nt l, nt phn b gia gc v l
l nt nhnh.
* Mc ca mt nt l mt s xc nh v tr ca nt trong cy. Gc ca mt cy c
coi l mc 1, mc ca mt nt con no bng mc ca nt cha cng vi 1.
* Chiu cao ca cy bng s mc ln nht ca nt c trn cy.
Hnh v bn th hin mt cy, nt A l gc cy, cc nt B, F, G, H, E l nt l, cn
cc nt C, D l nt nhnh, chiu cao ca cy l bng 4 v cc nt F, G, H c mc l 4.
Cy nh phn l trng hp c bit ca cy m bc t do ca mi nt ln nht l bng
hai, ni cch khc mi nt cha ch c nhiu nht l hai nt con.
Nu chng ta xy dng cc cy m mi nt cha c 10 hoc 16 nt con th ta s c cy
thp phn hoc cy thp lc phn.

2. Cy nh phn

Nh nu, cy nh phn l loi cy c bit m mi nt cha ch c nhiu nht l 2
nt con, cc nt con ny c gi l con bn tri (CBT) v con bn phi (CBP). M hnh cy
c v t trn xung, gc trn cng, l di. D liu trong mi nt c th l s hoc k
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 125
t v vic lu tr d liu c quy nh nh sau: Nu d liu trong nt con ln hn d liu
trong nt cha th lu vo con bn phi, ngc li lu vo con bn tri.
Tu thuc vo d liu lu tr ti cc nt chng ta c th c mt trong ba dng cy sau
y:
a. Cy t nhin
Cy t nhin l loi cy m cp ca cc nt nm trong min (0..2)

b. Cy i xng
Cy i xng l loi cy m cp ca tt c cc nt u bng 2.

c. Cy mt pha hay cn gi l cy mc lch
Cy mt pha l loi cy m cp ca tt c cc nt u bng 1.
Hnh 4.5 di y m t cc loi cy nu:

C
C
C C
C

a. Cy lch phi b. Cy lch tri


C

C

C

C C

d. Cy t nhin

C
C C C

e. Cy i xng

Hnh 4.5
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 126

Cy c v theo chiu t trn xung di vi nt gc trn v nt l di. Mt
nt m t c th truy nhp n cc nt khc th c gi l nt cha ca cc nt , cn cc
nt c truy nhp gi l nt con.
Cy nh phn c th ci t bng cch dng cc cu trc lin kt nu trn. D liu
trn mt nt c lu tr bng bn ghi, ti mi nt c hai con tr, CTT v CTP. CTT dng
tr n con bn tri v CTP dng ch n con bn phi. V d di y nu cch ci t
cy nh phn, d liu ti mi nt l mt k t ca bng m ASCII. Cn ch rng theo quy
c th cc k t c th t l:
a < b < c < ..... < z v A < B < C < ..... < Z
Type
ct=^Kytu;
Kytu = record
Nut : char;
Ctt,Ctp : ct;
end;
Var chucai : char; tim : boolean;
goc, ct1 : ct; batdau : pointer;
V d trn khai bo kiu d liu con tr t tn l Kytu, y l kiu bn ghi vi mc
ch lu tr mt k t ca bng m, con tr CT dng tr vo kiu d liu Kytu. Bn trong
kiu Kytu c cc con tr Ctt v Ctp dng tr vo cc nt biu din con bn tri v con bn
phi ca nt cha.

CTT D liu CTP


Con bn tri Con bn phi
Nh vy cy nh phn trong hnh 4.5e c th c biu din nh l cy lin kt ca
cc bn ghi di y
Nt gc

6

4 8


3



5



7



9


Hnh 4.6
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 127
Trong hnh 4.6 cc nt cha cc gi tr 3, 5, 7, 9 l nt l, chng khng c con bn tri
hoc con bn phi. Cc con tr tri CTT v con tr phi CTP ca chng u tr vo Nil
Mt nt cha c th c mt hoc hai cy con v bi ton x l cy nh phn l thm mt
nt, x l d liu ti nt ri chuyn sang thm nt khc. Vn phc tp l ch mi nt
u c hai con tr do vy khi di chuyn sang nt khc chng ta chn hng i no, khng
nhng th khi n mt nt chng ta x l d liu trc ri mi i thm cc nt con hay thm
nt con trc ri x l d liu ti nt cha sau? Tu thuc vo cch thc thm v x l chng
ta s c cc kt qu khc nhau.

Di y l mt v d minh ho.



C
C C C

Hnh 4.7

Chng ta gi thao tc qut mt cy nh phn l vic thm mi nt ng mt ln, khng
st mt nt no v thng tin ti mi nt c x l cng ch mt ln.
Gi s vi cy nh phn trn hnh 4.7, chng ta thc hin qu trnh qut nh sau:
1. Thm nt gc v x l d liu, c th l hin gi tr c ti nt
2. Qut cy con bn tri
3. Qut cy con bn phi

Vi trnh t ny kt qu nhn c s l 6 4 3 5 8 7 9

tng qut chng ta k hiu cc bc ca tin trnh qut cy nh sau:
G: x l d liu ti nt (tc l gc ca cc cy m hoc cy con)
T: qut cy con bn tri
P: qut cy con bn phi
Nh vy c tt c 6 cch qut khc nhau:

TGP; GTP; TPG; GPT; PGT; PTG

C th nhn thy rng i vi vic qut mt cy iu quan trng khng phi l x l d
liu ti cc nt m l vic x l y c thc hin khi no. Trn cng mt cy vi mi trnh t
thc hin chng ta nhn c mt kt qu v cc kt qu ny l khng ging nhau.
Trong 6 cch trn, ba cch u (cy con bn tri c qut trc cy con bn phi) l ba
cch c quan tm nhiu hn c. Cn c vo thi im x l d liu ti nt (bc G), chng
ta t cho ba cch qut ny cc tn nh sau:
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 128
TGP: qut trung tm (Inorder)
GTP: qut trc (Preorder)
TPG: qut sau (Postorder)

Vi cy hnh 4.7 nu x dng cch qut TGP chng ta c kt qu nh sau:
3 4 5 6 7 8 9
S d c kt qu nh trn l v chng ta qut theo nguyn tc: qut cy con bn tri,
x l d liu gc ri sau qut cy con bn phi. V s 6 nm gc nn n cha c x
l m phi chuyn sang cy bn tri. Vi cy con bn tri, s 4 nm gc nn li phi theo
nguyn tc TGP ngha l sang bn tri tip. S 3 nm nt l nn khng cn i u na kt
qu l u ra ta c s 3. Quay v G ta c s 4 sau sang phi ta c s 5. Xong cy con bn
tri ta quay v G v c s 6, tip tc vi cy con bn phi ta c kt qu nu.
Cch qut TGP s cho ta kt qu l mt dy sp xp theo chiu tng dn, iu ny
khng nhng ng vi s m cng ng vi cy nh phn cha cc k t ti mi nt, chng ta
s nghin cu k iu ny qua v d 4.16.
Khi xy dng cy nh phn, d liu ti nt gc mang mt ngha quan trng, n s
quyt nh d liu nhp tip theo s nm cy con bn tri hay cy con bn phi.
Gi s vi mt tp cc k t : P, M, U, B, O, Q, T, V, Y nu chng ta to cy bng cch
t k t P vo nt gc v nhp theo th t trn th cy s c dng hnh 4. 8

P
M U

B O Q T

V

Y
Hnh 4.8

Cn nu chng ta t U vo gc v nhp d liu theo th t U, T, V, O, M, Q, Y, B, P
th cy s c dng nh trong hnh 4.9

U
T V
O Y
M Q

B P
Hnh 4.9
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 129
V d 4.16
Program Caynhiphan;
Uses crt;
Type
ct=^kytu;
kytu = record
Nut:char;
ctt,ctp:ct;
end;
Var chucai:char; goc:ct; i,j:byte;
A:array[1..100] of char;
ch:char;

Procedure Taocay (Var tg: ct);
{Chuong trinh con kiem tra xem ky tu dua vao da co trong cay chua
neu chua thi chen vao}
Begin
If tg=nil then
Begin
New(tg);
With tg^ do
Begin
Nut:= chucai;
ctt:=nil; ctp:=nil;
End;
End
Else
With tg^ do
Begin
if chucai<nut then taocay(ctt)
else
if chucai>nut then taocay(ctp)
else
Begin
textcolor(red);
Writeln('Ky tu ',chucai,' da co trong cay-Hay nhap tiep');
end;
End;
End;

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 130
Procedure quet_trung_tam(contro:ct);
Begin
if contro<>nil then
Begin
quet_trung_tam(contro^.ctt);
write(contro^.nut,' ');
quet_trung_tam(contro^.ctp);
end;
End;

Procedure quet_truoc(contro:ct);
Begin
if contro<>nil then
Begin
write(contro^.nut,' ');
quet_truoc(contro^.ctt);
quet_truoc(contro^.ctp);
end;
End;

Procedure quet_sau(contro:ct);
Begin
if contro<>nil then
Begin
quet_sau(contro^.ctt);
quet_sau(contro^.ctp);
write(contro^.nut,' ');
end;
End;

BEGIN
Clrscr;
writeln('Xay dung cay nhi phan cac ky tu');
goc:=nil; i:=1; taocay(goc);
Repeat
textcolor(14);
write('Nhap ky tu vao nut - Bam so 9 de dung ');
readln(chucai); chucai:=upcase(chucai);
if (ord(chucai)>=65) and (ord(chucai)<=90) then
Begin
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 131
taocay(goc);
a[i]:=chucai;
i:=i+1;
end;
Until (Ord(chucai)<65) or (ord(chucai)>90);
writeln;
textcolor(14);
writeln('Du lieu nhap ban dau');
for j:= 1 to i do write(a[j],' ');
writeln;
writeln('Du lieu hien theo cach quet Trung tam TGP');
quet_trung_tam(goc);
writeln;
writeln('Du lieu hien theo cach quet Truoc GTP');
quet_truoc(goc);
writeln;
writeln('Du lieu hien theo cach quet Sau TPG');
quet_sau(goc);
readln;
END.

Chng trnh con Taocay trong v d 4.6 to nn mt cy nh phn m d liu ti cc
nt l cc k t ca bng m ASCII, khi bm mt phm bt k trn bn phm khng phi l
mt trong cc ch ci chng trnh to cy s kt thc. Cc chng trnh con
Quet_trung_tam, Quet_truoc, Quet_sau thc hin vic qut cy theo cc trnh t TGP, GTP,
TPG.
Nu chng ta nhp vo dy k t U, T, V, O, M, Q, Y, V, U th chng trnh s cho
kt qu:
Du lieu nhap ban dau:
U T V O M Q Y V U

Du lieu hien theo cach quet Trung tam TGP
B M O P Q T U V Y

Du lieu hien theo cach quet Truoc GTP
U T O M B Q P V Y

Du lieu hien theo cach quet Sau TPG
B M P Q O T Y V U


Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 132

Bi tp ng dng chng 4

1. Lp chng trnh nhp vo mng A n s thc, n nhp t bn phm. Nhp vo chui
S ti a 30 k t. S dng phng php cp pht ng cho cc i tng A, S. Cho hin ln
mn hnh cch thc b tr b nh m h thng dnh cho mng A v chui S.

2. S dng con tr mng v mng con tr qun l sch trong th vin, gi thit rng
mi cun sch gm cc thng tin: Tn sch, tn tc gi, s trang, gi tin. Vi cng mt s
sch, b nh m h thng s dng cho con tr mng v mng con tr c bng nhau khng?

3. S liu tuyn sinh bao gm:
SBD, H v tn, phng thi, im thi.
S dng bin ng nhp vo mt s th sinh, cho hin danh sch th sinh theo hai cch:
hin theo th t nhp vo v hin t cui ln u.

4. Tn ngi Vit l mt chui di nht l 7 k t. Nhp vo b nh n tn, s dng
mt trong cc cch qut cy hin tn theo th t tng dn.

5. To cy nh phn m mi nt cha mt s thc. Qut cy theo trnh t GTP, TGP,
TPG. Ti mi nt yu cu x l d liu l : hin gi tr tng cc s trong nt cha v nt con.

6. Dy s a
1,
a
2
, .... , a
n
l cc s thc. Lp chng trnh a dy s trn vo cy nh
phn. Thit k 6 chng trnh con tng ng vi 6 cch qut cy, yu cu x l ti mi nt l
hin tr tuyt i ca s trong nt.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 133





Chng 5

Gii thut quy




Ni dung ca chng ny cp n nhng bi ton c tnh quy. Khng phi bi
ton no cng c tnh quy v khng phi cc bi ton c tnh quy th u phi gii bng
gii thut quy. Cc vn cn quan tm trong chng ny:
Bi ton c tnh quy khng
C cn dng gii thut quy khng
quy c mang li hiu qu hn cc phng php thng thng hay khng

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 134
1. Khi nim quy

Trong thn mt chng trnh con c th a li gi ti chnh chng trnh con , tnh
cht ny c gi l tnh " qui ca chng trnh con".
Trong ton hc khi nim giai tha c nh ngha nh sau:
0! = 1
Nu n > 0 th n! = 1*2*3*...*n
T nh ngha trn d dng thy rng
n! = n*(n-1)!
(n-1)! = (n-1)*(n-2)!
......
1! = 1*0! =1

Cch thc lp lun nh trn a chng ta ti mt nhn xt tng qut l: li gii ca bi
ton A c th c thc hin bi li gii ca bi ton A' c dng ging nh A. Tht vy, vic
tnh n! c th c thc hin bi vic tnh (n-1)!.
iu quan trng bi ton c li gii l tuy A' ging nh A song thc cht A' phi
nh hn A v qu trnh "thu nh" phi c im dng. Trong bi ton tnh giai tha t ch cn
tnh giai tha ca n chng ta i tnh giai tha ca (n-1), tnh giai tha ca (n-1) chng ta i
tnh giai tha ca (n-2)... kt thc l giai tha ca 0.
Mt i tng c gi l quy nu n c nh ngha di dng ca chnh n.
Gii thut ca bi ton A c gi l quy nu n dn ti vic gii bi ton A' ging
nh A nhng nh hn A v qu trnh phi c im dng.

Xt bi ton tnh giai tha vi n = 5:

nh cui 1! = 1
2! = 2*1!
3! = 3*2!
4! = 4*3!
nh u 5! = 5*4!

Hnh 5.1

Nh vy khi bit 1! th tnh c 2!, bit 2! Th tnh c 3!,...
Bng cch s dng b nh ngn xp theo nguyn tc LIFO ( Last In - First Out) (Hnh
1.3) nhng g gi vo cui cng th c ly ra trc tin. Bc nh trn nh ta c 1! = 1 v
l ra tip theo 2! = 2*1!. V 1! bit nn tnh c 2! = 2, bc tip nh pha di ta c
3! = 3*2!, v 2! bit nn 3! = 3*2 = 6 qu trnh tip tc cho n khi bc nh di cng v
chng ta nhn c 5! = 120. Di y l chng trnh tnh giai tha

5! = 5*4!
4! = 4*3!
3! = 3*2!
2! = 2*1!
1! = 1

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 135
V d 5.1:
Program Giaithua;
Uses crt;
Var n: integer;
Function GT(m: integr): integer; (* Hm GT tnh giai tha ca n*)
Begin
if m=0 then GT:=1 else GT:= m*GT(m-1); (*Gi qui ca GT *)
End;
Begin
Clrscr;
write ('Tinh giai thua cua n = '); Readln (n) (*c gi tr n*)
write('Gia thua cua ',n, ' = ',GT(n)); (* Vit gi tr hm GT *)
Repeat until keypressed;
End.

V d 5.1 c mt s iu ng lu sau y:
1. Hm GT c xy dng tnh giai tha vi tham s hnh thc m, kiu ca m l kiu
Integer. Gi tr m sau ny s c thay th bng tham s thc n qua li gi GT(n) trong
chng trnh m.
2. Khi nh ngha kiu ca GT l Integer th gi tr ca n ch c chn nh hn 8 v 8!
= 40320 vt qu gi tr cc i ca Integer (32767). c th tnh giai tha vi n>=8 ta phi
nh ngha function GT c kiu Longint hoc Real. Vi kiu Real lnh vit gi tr ca giai
tha phi l vit s thc vi phn l bng 0, v d:
Write (GT(n):12:0);
3. S dng thut ton quy ng ngha vi vic phi xy dng chng trnh con, v
vy nu s dng cc vng lp c th gii c bi ton th nn dng vng lp. Tr trng hp
bt buc phi gii bi ton khng c tnh lp hoc bi ton c kh nng truy hi.
Vi bi ton tnh giai tha c th dng vng lp v chng ta thy chng trnh s n
gin hn nhiu so vi cch dng tnh quy:

V d 5.2
Program Tinh_GT;
Uses crt;
Var i,n:byte; gt:longint;
Begin
Clrscr;
Write(' Nhap gia tri n '); Readln(n);
if (n = 0) or (n=1) then gt:=1;
if n > 1 then gt:=1;
For i:= 1 to n do gt:=gt*i;
Writeln('Giai thua cua ',n,' = ',gt);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 136
Readln;
End.

V d 5.3: Lp chng trnh tm c s chung ln nht ca hai s nguyn n, m.
c s chung ln nht ca hai s n v m tnh theo cng thc :
n nu m = 0
USC(n,m) =
USC(m, n mod m ) nu m <> 0

V d n= 4, m=8
USC(4,8) = USC(8, 4) = USC(4,0) = 4
Chng trnh c xy dng nh sau:

Program timUSC ;
Uses crt;
Var n,m : word; Lam: Char;
FUNCTION USC(a,b:word): word;
Begin
If b=0 then USC := a Else USC := USC(b,a mod b);
End;
BEGIN
Repeat
Clrscr;
Write(' Hay cho hai so "n" va "m" can tim uoc so chung ');
Readln(n,m);
Writeln(' Uoc so chung lon nhat cua ',n,' va ',m, ' la ',USC(n,m):5);
Writeln;
Write('Tim tiep hay thoi ? C/K '); read(lam);
Until Upcase(lam)='K';
END.

Bi ton kinh in ng dng gii thut quy l bi ton Thp Hanoi. Ni dung bi
ton nh sau:
C n chic a trn ng knh khc nhau, cc a c l gia. Ngi ta xp lng cc
a ny vo mt cc theo th t trn nh di to. Yu cu phi xp cc a ny sang cc mi
theo nguyn tc:

1. Mi ln ch c chuyn 1 a
2. Khng c xy ra tnh trng a to trn, a nh di d l tm thi
3. c php dng mt cc trung gian
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 137

Gi s cc u tin l cc A, cc trung gian l B v cc cn xp a sang l cc C.
Chng ta s xt mt s trng hp n gin tm quy lut (Hnh 5.2)
* n =1: cc A ch c mt a
Chuyn a t cc A sang cc C
Kt thc






A B C

Hnh 5.2

* n = 2: cc A c 2 a (Hnh 5.3)
Chuyn a trn sang B
Chuyn a di sang C
Chuyn a t B sang C
Kt thc









A B C C

Hnh 5.3
* n = 3: cc A c 3 a
Vi trng hp 3 a nu chng ta coi 2 a trn l mt a th bi ton quy v trng
hp n = 2, khi li gii s l: (Hnh 5.4)
Chuyn 2 a trn sang B
Chuyn a di cng sang C
Chuyn 2 a t B sang C
Kt thc
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 138






A B C








Hnh 5.4

Vic chuyn 2 a t A sang B chng ta c li gii ( trng hp n = 2 )
Tm li vi bi ton n a chng ta c li gii tng qut l:

- Chuyn n-1 a trn cng t A sang B
- Chuyn a di cng t A sang C
- Chuyn n-1 a t B sang C
- Kt thc

Vic chuyn n-1 a t A sang B li dn ti bi ton ging nh chuyn n a, song s
lng a gim i 1, ngha l:
- Chuyn n-2 a t A sang B
- Chuyn a th n-1 t A sang C
- Chuyn n-2 a t B sang C
- Kt thc
Qu trnh s dn ti lc trn cc A ch cn a th n trn cc B c n-1 a v trn cc C
khng c a no, n y ta chuyn a th n t A sang C. Bi ton s c thu nh li vi
vic chuyn n-2 a t B sang A.
S ln thc hin cc bc chuyn vi n = 3 c cho trong bng 5.1, y chng ta
quy c a trn cng l a s 1, a gia l a s 2 v a di cng l a s 3. Dy s
trong cc cc lun lun sp xp theo chiu tng dn chng t rng a nh lun trn, a to
lun di.



Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 139
Bng 5.1
Bc ngha Cc A Cc B Cc C
0 1,2,3
1 2,3 1
2 3 2 1
3
Chuyn hai a trn cng t A
sang B
3 1,2
4 Chuyn a s 3 t A sang C 1,2 3
5 1 2 3
6 1 2,3
7
Chuyn 2 a t B sang C
1,2,3

Cc v d trn cho thy s ln chuyn tng rt nhanh khi s a tng tuyn tnh, vi n=
1 s ln chuyn l 1, vi n = 2 s ln chuyn l 3, vi n = 3 s ln chuyn l 7.

Bng 5.2

Bc ngha Cc A Cc B Cc C
0 1,2,3,4
1 2,3,4 1
2 3,4 1 2
3 3,4 1,2
4 4 3 1,2
5 1,4 3 2
6 1,4 2,3
7


Chuyn 3 a trn cng t cc
A sang cc trung gian B

4 1,2,3
8 Chuyn a 4 t A sang C 1,2,3 4
9 2,3 1,4
10 2 3 1,4
11

Chuyn 2 a trn cng t B
sang A
1,2 3 4
12 Chuyn a 3 t B sang C 1,2 3,4
13 2 1 3,4
14 1 2,3,4
15
Chuyn 2 a 1 v 2 t A
sang C
1,2,3,4

C th d dng tm ra cng thc truy hi tnh s ln chuyn a
Nu s a l n th s ln chuyn l 2
n
- 1
Vi n = 4 s ln chuyn s l 15 (bng 5.2).
Nu trn cc c 32 a th s ln chuyn l hn 4 t, cn nu s a l 64 theo nh
bi ton c v thp Hanoi th s ln chuyn s l: 36893488147000000000 ln
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 140
Gi s chng ta cho rng mi ln chuyn mt a ht 1 giy th chuyn ht s a
ni trn t cc A sang cc C chng ta cn 1 169 884 834 700 nm. y l khong thi gian
m bn thn h mt tri v di ngn h cng kh c th tn ti.

2. Thit k gii thut quy - Kh quy

Vi mt bi ton ton bt k, xem n c tnh quy hay khng chng ta phi tr
li c cc cu hi sau y:
2.1 Bi ton cho c th c nh ngha di mt dng ging ht nh n nhng c
kch thc nh hn hay khng?
2.2 Qu trnh thu nh bi ton c dn ti mt im dng no hay khng? Ni cch
khc bi ton thu nh c dn ti mt trng hp c bit m ta gi l trng hp xuy bin
nghi l bit li gii hay khng?
Vi bi ton giai tha trng hp xuy bin l 0! = 1
Vi bi ton Thp Hanoi trng hp xuy bin l khi ch c 1 a trn cc A.
2.3 Khi x dng tnh quy mi ln thu nh bi ton kch thc bi ton gim i nh
th no?
Cc v d v quy c th xem trong nhiu ti liu v lp trnh, vn chng ta quan
tm y l khi mt bi ton c th gii quyt bng c quy v cch thng thng th nn
dng cch no?
Vi bi ton tnh giai tha s dng vng lp For... vic lp trnh rt n gin, cn
dng quy s phc tp hn. Vi bi ton tm c s chung ln nht r rng l cch dng
quy s n gin hn cc cch khc. Vi bi ton Thp Hanoi nu khng dng quy chng ta
kh m tm ra mt thut gii no trong sng hn. Ni nh vy cng c ngha l khng c mt
chun mc no chung cho mi bi ton. Kinh nghim ca cc nh lp trnh ch ra rng nu
mt bi ton va c th gii bng quy, va c th gii bng phng php lp thng thng
th nn trnh dng quy.
Mt bi ton c th thay th gii thut quy bng cc gii thut khng t gi n
chng th gi l kh quy.
V d vi bi ton tnh giai tha chng ta hon ton c th gii bng cch dng vng
lp For . Bi ton trong trng hp ny n gin hn c v thut ton ln k thut lp trnh.

3. Hiu lc ca bi ton quy

Nh nu quy l mt trong cc cng c lp trnh gii cc bi ton. Cn khng
nh rng quy ch c dng cho mt s bi ton m chng ta tm c gii thut quy.
Tr li v d 4.16 v xy dng cy nh phn. Nu cy m mi nt cha c nhiu nht hai nt
con nhng khng quy nh r con bn tri v con bn phi b tr th no th chng ta khng
th dng c tnh quy. Trong trng hp quy nh r gi tr con bn tri lun nh hn
gi tr nt cha cn con bn phi l ln hn nt cha th chng ta thy vic kho st mt cy
nh phn tng qut c th xuy v vic kho st ring tng cy con bn tri v cy con bn
phi. Chng trnh con Taocay trong v d 4.16 s dng tnh quy b xung d liu
vo cc nt, vi cch vit ny chng trnh Taocay khng n gin hn cch vit dng vng
lp. Tuy nhin khi duyt cy vi cc chng trnh con Quet_trung_tam, Quet_truoc, Quet_sau
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 141
th tnh quy lm cho chng trnh tr nn trong sng v rt d hnh dung l cy c
qut nh th nao.
Tnh quy v mt kha cnh no c th xem nh tnh quy np ton hc, tuy nhin
cn phn bit rng quy c thc hin l nh cc b nh kiu LIFO hoc FIFO cn quy
np ton hc thun tu ch l l thuyt. Vic s dng quy np ton hc chng minh tnh
ng n ca gii thut quy c mt vi tc gi thc hin, iu ny ch chng minh
tnh ng n ca gii thut quy ch khng cho bit gii thut y hiu qu nh th no.
Vn l ngi lp trnh phi t xc nh xem thut gii no tiu tn t cng sc ca ngi
lp trnh v ti nguyn trong my nht.







Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 142

Bi tp chng 5

1. Dy s Fibonaci a
1
, a
2
, .... a
n
c nh ngha nh sau:
a
1
= a
2
= 1
a
3
= a
2
+ a
1

....................
a
n
= a
n-1
+ a
n-2


Lp chng trnh vi vic p dng tnh quy xy dng dy s Fibonaci, gi tr n
nhp t bn phm.

2. Lp chng trnh gii bi ton Thp Hanoi

3. Hm F(x,y) c nh ngha nh sau:

nu x = 0
F(x,y) = nu y = 0
vi cc trng hp cn li

Lp chng trnh c dng quy tnh hm F vi gi tr x,y nhp t bn phm.

4. S l mt chui k t c di ti a l 255. Lp chng trnh nhp S t bn phm
sau in ra chui ngc ca chui ban u. Chng trnh c dng quy
V d: S = Chuc mung ngay 8/3
In ra 3/8 yagn gnum cuhC

5. Cho dy s a
1
, a
2
, ..... , a
n
. Gi s hon v ca dy s l k.
Lp mt chng trnh hin ln s hon v ca dy s v gi tr c th ca tng hon v
V d: dy s 1 3 2
In ra: S hon v = 6
Gi tr c th 1 2 3; 1 3 2; 2 1 3; 2 3 1; 3 1 2; 3 2 1

+
)) 1 , ( , 1 (
) 1 , 1 (
1
y x F x F
x F
y
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 143





Chng 6

ho




ho trong Pascal khng phi l cng c chuyn dng thit k hnh nh. Tuy nhin
nu bit tn dng cc cng c sn c trong Unit Graph chng ta c th lm c nhiu vic,
c bit l v th cc hm s. Trong chng ny bn c tip cn cc khi nim sau:
Cc th tc v hnh n gin
Cc th tc vit ch trong ch ho
Cc th tc t mu
Cc phng php x l nh Bitmap
Phng php v th hm s


Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 144
1. Khi nim chung

Mn hnh my vi tnh c th dng mt trong hai ch : ch TEXT - hin th vn
bn v ch GRAPHIC - hin th ho.
Trong ch TEXT mn hnh thng c chia thnh 25 dng v 80 ct, nu vit kn
mn hnh ta c th vit c 2000 k t. Chng ta c th thay i phn gii vit ra 25
dng x 40 ct, 50 dng x 80 ct hoc 132 dng x 43 ct.
Mun v hnh, t mu cc hnh ta phi chuyn sang ch ho, trong ch ny
mn hnh c xem l mt ma trn im, tu thuc phn gii ta c th c ma trn 640x480
im hoc 1024x720 im.... Mi im trn mn hnh c gi l 1 Pixel tc l mt phn t
nh ( Picture Element ), ta c th hon ton ch ng trong vic thay i mu sc ca tng
im to ra mt bc tranh theo mun. V tr ca mi im trn mn hnh c biu din
bi hai to : Honh v Tung . Gc to (0,0) l im gc trn bn tri mn hnh.
Nh nu trong chng 1 phn ci t Pascal, mun chuyn sang lm vic ch
ho, trong th mc hin hnh (th mc cha chng trnh Pascal) phi c cc tp
GRAPH.TPU, *.BGI v *.CHR. Li gi n v chng trnh ho phi t u chng
trnh ngay sau t kho PROGRAM nh v d 6.1.

V d 6.1
Program Ve_hinh;
Uses GRAPH;
.......
Trong phn thn chng trnh cn phi a vo cc thng bo v kiu mn hnh, ch
ho (MODE) tng ng. Nhng ngi lm tin hc ng dng thng khng quan tm lm
n cc thng s ny do vy d lng tng khi cn khai bo. khc phc nhc im
trong Pascal thit k sn mt th tc khi to ch ho l:

Initgraph(var GD,GM: Integer, DP:string[n]);

Khi gi th tc ny vi cc tham s hp l Initgraph s t xc nh kiu mn hnh v
Mode ho ti u .
gi th tc Initgraph cn phi khai bo trc cc tham s GD, GM thuc kiu
Integer (Trong GD: Graph Driver - l mt s nguyn xc nh kiu mn hnh; GM: Graph
Mode - cng l mt s nguyn xc nh Mode ho).
Nu ngay sau t kho Begin ca phn thn chng trnh chng ta khai bo
GD:= Detect;
th Initgraph hiu l n phi t i xc nh kiu mn hnh v Mode ho sao cho t
kt qu ti u. Ni chung tr nhng trng hp c bit, chng ta khng nn t xc nh
nhng thng s ny lm g.
Tham s DP ( Driver Path ) l ng dn ti th mc cha cc tp iu khin kiu mn
hnh ho, thng thng Pascal c ci t trong trong a cng nn DP s l 'C:\tp\bgi'
ngha l a C, th mc con BGI trong th mc TP.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 145
V d 6.2 l chng trnh v mt ng trn c tm ti chnh gia mn hnh v bn
knh l 50 Pixel.

V d 6.2
Program Ve_hinh_tron;
Uses graph;
Var GD,DM: Integer;
Begin
GD:= detect;
Initgraph(GD,GM,'c:\tp\bgi');
If graphresult <> grok then halt(1);
Circle(320,240,50);
Readln; CloseGraph;
End.

Dng th 8 trong v d 6.2
If graphresult <> grok then halt(1);
l cu lnh kim tra gi tr ca hm graphresult (kt qu kim tra ho), nu hm ny
nhn gi tr 0 th ho khng c li, chng trnh tip tc lm vic, cn nu gi tr ca
graphresult khc 0 chng t vic kim tra pht hin ra li, chng trnh phi dng li.
Bng 6.1 cho m li m hm graphresult tr v.
Thng thng li xy ra ch yu l do ngi s dng khai bo khng ng tham s GD,
ngha l khng ch ra cho Pascal bit cc tp iu khin ho nm u, mun sa cha ch
cn khai bo li tham s ny theo ng v tr m n c ci t.

2. Mt s th tc c bn v hnh

2.1. MOVETO(x,y) : Di chuyn con tr n to x,y (x l honh , y l tung )
x,y l cc gi tr kiu Integer, vi mn hnh VGA th 0<= x <=639, 0<= y <= 479

2.2. LINETO(x,y) : V mt ng thng t v tr con tr hin thi ti to x,y kt
thc qu trnh v con tr nm ti to mi.

Pascal c sn hai hm xc nh to gc di bn phi mn hnh l Getmaxx
v Getmaxy. v mt ng cho ca mn hnh t gc trn bn trixung gc di bn
phi ta c th vit cc lnh
MOVETO(0,0);
LINETO(Getmaxx,Getmaxy);

2.3. LINE(x1,y1,x2,y2) : Th tc ny v mt ng thng t to x1,y1 n to
x2,y2
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 146
2.4. LINEREL(dX,dY) : V ng thng t v tr hin thi ( to x,y) ti to x+dx,
y+dy.
Bng 6.1

M li Tn li Ngha ca li
0 Grok Tt, khng c li
1 GrnoInitgraph Khng tm thy n v ho
2 Grnotdetected Khng c phn cng ho
3 GrFilenotfound Khng tm thy cc tp iu khin ho
4 GrInvalidDriver File iu khin ho (BGI) b hng
5 GrNoloadMem Khng b nh np trnh iu khin ho
6 GrNoscanMem Khng b nh khi duyt (kim tra)
7 grNoFloodMem Khng b nh khi kt xut ( a ra)
8 grFontNotFound Khng tm thy Font (cc tp ui CHR)
9 grNoFontMem Khng b nh np Font
10 grInvalidMode Sai mod ho khi la chn cc iu khin
11 grError Li ho (li tng qut)
12 grIOerror C li vo/ra ho
13 grInvalidFont Li cc tp cha Font
14 grInvalidFontNum Li s hiu Font

2.5. CIRCLE(x,y,r) : v ng trn tm ti to x,y bn knh bng r Pixel
2.6. PUTPIXEL(x,y, n) : Th tc ny s v mt im sng ti to x,y vi mu l n.
Gi tr n ly trong khong 0-15 hoc vit trc tip tn mu theo ting Anh.
2.7. RECTANGLE(x1,y1,x2,y2) : V hnh ch nht to gc trn bn tri l x1,y1 ,
to gc di bn phi l x2,y2.
2.8. BAR(x1,y1,x2,y2) : V mt hnh ch nht gc trn bn tri c to x1,y1 gc
di bn phi c to x2,y2. Khi dng kt hp vi th tc s 9 s ng thi cho php k
cc vn hoa trn nn v t mu cho nn.
2.9. SETFILLSTYLE(n1,n2) : Th tc nh vn hoa v mu nn cho th tc BAR.
n1 l mt gi tr nguyn vi 0<= n1 <= 11 : nh kiu vn hoa
n2 l s hiu m mu gii thiu 0<= n2 <= 15
Trong chng trnh khi mun v hnh ch nht vi mu v vn hoa th cn a th tc
SETFILLSTYLE(n1,n2) vo trc th tc BAR. Gi tr ca mu v kiu vn hoa s c gi
cho n khi ta nh ngha li.

3. Thit lp mu ho

Cc th tc trnh by trong mc II khng c tham s nh mu km theo. Nu mun
nh mu cho nt v chng ta c th dng hai th tc sau y :
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 147
3.1. SETCOLOR(n) : nh mu cho cc nt v (n l s hiu mu)
3.2. SETBKCOLOR(n) : nh mu nn ng sau nt v
Pascal s dng mt Byte lu tr cc thuc tnh mu, trong 4 bit thp l mu
ch, 3 bit cao l mu nn, bit cao nht dnh cho thuc tnh nhp nhy. M nh phn 4 bit c
th biu din cc s t 0 (s 0000) n 15 (s 1111) do thuc tnh mu ca ch c 16 gi
tr ng vi 16 mu, cn thuc tnh mu nn ch c 8 gi tr.
Ch :
* Gi tr n trong th tc 10 c th chn t 0 n 15, cn trong th tc 11 ch c
chn t 0 n 7.
* Thay v chn s hiu mu n, Pascal cho php vit tn hng mu, nh vy hai lnh
sau y l tng ng:
Textcolor(4);
Textcolor(Red);
Bng gi tr n v mu tng ng xem trong mc 8.3 chng III (Bng 3.1)
t mu cho mt im chng ta a ngay tham s mu vo th tc PutPixel, cn t
mu cho mt hnh khp kn th dng th tc SetFillstyle.
3.3. GetBkcolor: cho bit m mu nn hin dng

4. Vit ch trong ch ho

Khi chuyn sang lm vic ch ho ta khng th vit ch bnh thng nh
trong ch vn bn. Mun vit ch trn mn hnh ho chng ta s dng mt s th tc
sau y:
4.1. OUTTEXT(chui) : Th tc ny s cho hin chui k t ti v tr con tr hin
thi. Chui c th vit trc tip hoc thng qua bin chui nh trong v d 6.3 sau y:
V d 6.3
Uses Graph;
Var
chuviet : string[30]
Begin
outtext('Cong hoa xa hoi chu nghia Viet nam');
chuviet:='Viet nam dan chu cong hoa';
outtext(chuviet);
End.

4.2. OUTTEXTXY(x,y,chuoi) : th tc ny s vit ra chui k t ti to x,y.
4.3. SETTEXTSTYLE(Kiu ch, Chiu vit, Kch thc); Xc nh kiu ch trong
Mode ho
Kiu ch l mt tham s nguyn nhn gi tr trong khong 0-10
Chiu vit ch nhn 1 trong hai gi tr :
0: ch nm ngang; 1: ch thng ng
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 148
Kch thc L h s phng to ch c th chn t 0-10

Ch :
Cc phin bn Pascal c ch c 5 kiu ch nh s t 0 n 4, phin bn 7 b xung
thm cc kiu t 5 n 10 (xem bng 6.2)

4.4. CLOSEGRAPH; chm dt ch ho tr v ch vn bn.
Sau mun quay li ch ho ta li phi gi li INITGRAPH.
Trong mt s trng hp chuyn nhanh gia ch ho v vn bn chng ta c
th dng hai th tc sau y:
RESTORECRTMODE; ngng ch ho chuyn sang ch vn bn.
SETGRAPHMODE(n) ; Ngt ch vn bn to ra bi Restorecrtmode thit lp
tr li ch ho. Tham s n c th la chn trong khong 0-2. V d 6.4 di y trnh
by cch s dng cc th tc ny.

Gi tr Tn Font Tp lu tr (ui CHR)
0 DefaultFont Khng c
1 TriplexFont TRIP
2 SmallFont LITT
3 SansSerifFont SANS
4 GothicFont GOTH
5 ScriptFont SCRI
6 SimplexFont SIMP
7 TriplexScriptFont TSCR
8 ComplexFont LCOM
9 EuropeanFont EURO
10 BoldFont BOLD

Bng 6.2

V d 6.4
Program dohoa_text;
uses crt,graph;
var
gd,gm:integer;
begin
gd:=detect;
initgraph(gd,gm,'c:\tp\bgi');
if graphresult<>grok then halt(1);
moveto(0,0); setcolor(5);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 149
lineto(300,300); delay(2500);
circle(400,300,100); delay(1500);
restorecrtmode; (* Chuyn v ch vn bn *)
gotoxy(20,20);textcolor(9);
write('AAAAAAAA');
readln;
setgraphmode(2); (* Tr v ch ho vi n=2 cho mn hnh VEGA*)
setcolor(blue);
circle(100,100,50);
delay(2000);
restorecrtmode; (* Chuyn sang ch vn bn ln th hai*)
textcolor(3);
gotoxy(20,0); write('NNNNNNNNNNNNNNNN');
readln;
closegraph; (* Kt thc ch ho*)
End.

5. Cc v d

Vic s dng cc th tc ho khng c g phc tp, vi mt cht c gng bn c th
v c nhng hnh rt p theo mong mun. Trong phn ny chng ta s s dng cc th tc
trnh by v mt s hnh.

5.1 V th hnh Sin
Di y l mt chng trnh v th hnh sin. Chy chng trnh ta s thy ba ng
hnh sin vi cc bin v mu sc khc nhau.

V d 6.5
Program Do_thi_hinh_sin;
uses graph,crt;
const m=0.1;
Var t3,t4,t1,n,t2,gd,gm:integer; t,x,y,z:real;
Begin
gd:=detect;
Initgraph(gd,gm,'C:\tp\bgi');
if graphresult<>grok then Halt(1);
x:=0; t3:=100; n:=0; t2:=10;
while t2<=600 do
Begin
setcolor(green);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 150
y:=sin(x);
t1:=round(y*50);
t3:=round(y*70);
t4:=round(y*100);
t1:=200-t1;
t3:=200-t3;
t4:=200+t4;
moveto(10,200);
lineto(620,200);
line(10,80,10,300);
settextstyle(3,0,3);
outtextxy(610,205,'x');
settextstyle(3,0,3);
outtextxy(15,75,'y');
settextstyle(4,0,3);
setcolor(5);
outtextxy(200,300,'do thi ham sin(x)');
setcolor(12);
moveto(10,200);
putpixel(t2,t1,11);
putpixel(t2,t3,14);
setcolor(red);
putpixel(t2,t4,random(14));
setcolor(12);
delay(5);
x:=x+0.07;
t2:=t2+1;
end;
repeat until keypressed;
t1:=1;
t2:=200;
while t1<=220 do
begin
line(340,240,round(sqrt(440*440-t1*t1)),t1);
t1:=t1+1;
delay(15);
end;
repeat until keypressed;
closegraph;
End.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 151
5.2 V cc hnh khng gian n gin
Chng trnh sau y s v mt khung ch nht bao quanh ton b mn hnh, sau v
hai on thng chia mn hnh thnh 4 phn. Trong gc phn t th nht v mt hnh chp, cc
nt nhn thy v lin, nt khut v bng nt t. Trong gc phn t th hai v mt hnh tr.
Xin mi cc bn nhp chng trnh v sau v thm vo cc gc phn t cn li cc hnh
khng gian khc, chng hn hnh hp ch nht, hnh nn...

V d 6.6
Program vehinh;
Uses crt,graph;
var i,j:word; gd,gm:integer;
Begin
clrscr;
gd:=detect;
initgraph(gd,gm,'C:\tp\bgi');
if graphresult<>grok then halt;
rectangle(0,0,639,479);
moveto(320,0); lineto(320,480);
moveto(0,240); lineto(639,240);
outtextxy(30,90,'Hinh chop');
setcolor(4);
setlinestyle(0,1, normwidth);
moveto(100,200);
Linerel(120,0);
Linerel(50,-40);
setcolor(2);
setlinestyle(3,1, normwidth);
Linerel(-120,0);
Linerel(-50,40);
setcolor(4);
setlinestyle(0,1, normwidth);
Lineto(185,50);
Lineto(220,200);
moveto(270,160);
Lineto(185,50);
setcolor(2);
setlinestyle(3,2, normwidth);
Lineto(150,160);
moveto(185,50);
setcolor(14);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 152
lineto(185,180);
circle(185,179,2);
moveto(100,200);
lineto(270,160);
moveto(150,160);
lineto(220,200);
ellipse(480,50,0,360,60,25);
ellipse(480,170,180,360,60,25);
setlinestyle(0,15, normwidth);
moveto(420,50); lineto(420,170);
moveto(540,50); lineto(540,170);
setlinestyle(2,15, normwidth);
setcolor(5);
ellipse(480,170,0,180,60,25);
setcolor(9);
outtextxy(330,90,'Hinh tru');
repeat until keypressed;
closegraph;
end.

5.3 Vit ch trn mn hnh
S dng cc th tc nu chng ta c th vit ch trn mn hnh ho, v d sau y
s vit ln mn hnh dng ch "Chuc mung nam moi" v cho dng ch ny chy t y ln
nh mn hnh. Vic cho mt dng ch chy c thc hin bng cch vit ch ti mt v tr
no sau xo ch i v vit li ch ti to khc. Tuy nhin trong ch ho chng
ta khng dng c lnh xo CLRSCR do c th dng cch vit li dng ch vi mu
trng mu nn.
V d 6.7
Program chucchay;
uses crt,graph;
var i,j,gd,gm:integer;
Begin
clrscr;
gd:=detect;
Initgraph(gd,gm,'C:\tp\bgi');
if graphresult<>grok then halt;
settextstyle(0,0,2);
For i:=439 downto 0 do
Begin
setbkcolor(3);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 153
setcolor(magenta);
outtextxy(180,i,'Chuc mung nam moi');
delay(24);
setcolor(3);
outtextxy(180,i,'Chuc mung nam moi');
end;
closegraph;
end.

Chng trnh di y thit k mt ng h ba kim , tc chy ca kim giy tu
thuc vo lnh DELAY(n) , nu chn DELAY(1000) th c 1 giy kim giy chuyn mt v tr.
Khi nhp chng trnh vo my cn lu khai bo li ng dn n th mc cha cc tp
*.BGI

V d 6.8
Program Ve_dong_ho;
uses crt,graph;
var
x,y, maxx,maxy, gd,gm,color,i,j,t:integer;
N:real;
LAM,TT:CHAR;
begin
gd:=detect;
initgraph(gd,gm,'c:\tp\BGI');
setcolor(5);
rectangle(30,20,610,450);
rectangle(31,21,609,449);
rectangle(32,22,608,448);
setfillstyle(9,2);
bar(33,23,607,447);
setcolor(red);
setbkcolor(red);
for i:=1 to 10 do circle(320,240,i);
setcolor(11);
setbkcolor(white);
for i:=11 to 80 do circle(320,240,i);
setcolor(14);
setbkcolor(white);
for i:=80 to 160 do circle(320,240,i);
setcolor(white);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 154
for i:=160 to 200 do circle(320,240,i);
setcolor(11);
circle(320,240,79);
circle(320,240,80);
setcolor(4);
circle(320,240,159);
circle(320,240,160);
settextstyle(3,0,4);
outtextxy(310,40,'XII');
outtextxy(405,60,'I');
outtextxy(470,120,'II');
outtextxy(490,200,'III');
outtextxy(480,290,'IV');
outtextxy(410,370,'V');
outtextxy(310,400,'VI');
outtextxy(210,370,'VII');
outtextxy(135,290,'VIII');
outtextxy(130,210,'IX');
outtextxy(155,130,'X');
outtextxy(220,60,'XI');
setcolor(blue);
Settextstyle(4,0,5);
outtextxy(230,100,'DIAMON');
setcolor(random(14));
for i:=1 to 20 do
circle(320,360,i );
settextstyle(1,0,2);
setcolor(5);
outtextxy(200,450,'Copyright by Dr. Duong Xuan Thanh');
for i:=1 to 20 do
begin
setcolor(random(14));
circle(320,360,i );
end;
for i:=1 to 20 do
begin
setcolor(random(14));
circle(320,360,i );

end;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 155
for t:=0 to 12 do {-------- Kim gio --------}
begin
setcolor(12);
moveto(320,240);
setlinestyle(0,0,3);
SetWriteMode(xorput);
linerel(round(110*cos((t*30-89)*pi/180)),round(110*sin((t*30-89)*pi/180)));
moveto(320,240);
linerel(round(110*cos((t*30-90)*pi/180)),round(110*sin((t*30-90)*pi/180)));
moveto(320,240);
linerel(round(110*cos((t*30-91)*pi/180)),round(110*sin((t*30-91)*pi/180)));
moveto(320,240);
linerel(round(110*cos((t*30-92)*pi/180)),round(110*sin((t*30-92)*pi/180)));
for i:=0 to 60 do { ---------Kim phut -------}
begin
setcolor(12);
moveto(320,240);
setlinestyle(0,0,3);
SetWriteMode(xorput);
linerel(round(130*cos((i*6-89)*pi/180)),round(130*sin((i*6-89)*pi/180)));
moveto(320,240);
linerel(round(130*cos((i*6-90)*pi/180)),round(130*sin((i*6-90)*pi/180)));
moveto(320,240);
linerel(round(130*cos((i*6-91)*pi/180)),round(130*sin((i*6-91)*pi/180)));
(*--------Kim giay--------*)
for j:=0 to 360 do
begin
moveto(320,240);
setlinestyle(0,0,3);
SetWriteMode(XORPut);
setcolor(12);
linerel(round(150*cos((j-90)*pi/180)),round(150*sin((j-90)*pi/180)));
moveto(320,240);
linerel(round(150*cos((j-91)*pi/180)),round(150*sin((j-91)*pi/180)));
delay(1000);
moveto(320,240);
linerel(round(150*cos((j-90)*pi/180)),round(150*sin((j-90)*pi/180)));
moveto(320,240);
linerel(round(150*cos((j-91)*pi/180)),round(150*sin((j-91)*pi/180)));
end;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 156
moveto(320,240);
linerel(round(130*cos((i*6-89)*pi/180)),round(130*sin((i*6-89)*pi/180)));
moveto(320,240);
linerel(round(130*cos((i*6-90)*pi/180)),round(130*sin((i*6-90)*pi/180)));
moveto(320,240);
linerel(round(130*cos((i*6-91)*pi/180)),round(130*sin((i*6-91)*pi/180)));
end;
moveto(320,240);
linerel(round(110*cos((t*30-89)*pi/180)),round(110*sin((t*30-89)*pi/180)));
moveto(320,240);
linerel(round(110*cos((t*30-90)*pi/180)),round(110*sin((t*30-90)*pi/180)));
moveto(320,240);
linerel(round(110*cos((t*30-91)*pi/180)),round(110*sin((t*30-91)*pi/180)));
moveto(320,240);
linerel(round(110*cos((t*30-92)*pi/180)),round(110*sin((t*30-92)*pi/180)));
end;
repeat until keypressed;
END.

6. X l nh Bitmap

Mi hnh v trn mt khu vc mn hnh c coi nh mt nh v c gi l Bitmap,
cc Bitmap c lu tr trong b nh bi tp hp cc bit. Mi nh li bao gm nhiu phn
t nh (Pixel), mi Pixel c lu tr bi 4 bit v vic x l nh thc cht l x l tng bit.
Pascal thit k sn mt s th tc lu tr nh hoc a nh ra mn hnh:

6.1 Hm xc nh kch thc (dung lng) nh
ImageSize(x1,y1,x2,y2);
Hm ny cho ta kch thc tnh bng Byte ca mt nh trong min ch nht, gc trn
bn tri x1,y1 v gc di bn phi l x2,y2.

6.2 Th tc gn kch thc vo bin
Getmem(bin, Imagesize(x1,y1,x2,y2));
Gn vo bin la chn kch thc nh trong vng ch nht gc trn tri x1,y1 gc
di phi x2,y2, kch thc c tnh bng Byte

6.3 Th tc lu tr nh
GetImage(x1,y1,x2,y2, bin);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 157
Ct nh trong min ch nht gc trn tri x1,y1 gc di phi x2,y2 vo mt bin, y
l bin khng nh kiu v phi c kch thc ln lu nh, trong nhiu ng dng ho
bin ny thuc kiu con tr v c xc nh kch thc thng qua th tc Getmem.
6.4 Th tc cho hin nh
PutImage(x, y, bin, phng thc);
Cho hin nh lu tr trong "bin" ln mn hnh bt u ti to x,y, "Phng thc"
l mt s gi tr m Pascal thit k nhm a nh Bitmap ra mn hnh. Di y l bng
cc gi tr ca "Phng thc"

Tn phng thc Php ton tc ng
CopyPut hoc NormalPut MOV (mu nh ln trn mu nn)
XorPut XOR
OrPut OR
AndPut AND
NotPut NOT

hiu r hn v khi nim "Phng thc" chng ta cn lu n cc php ton m
mi phng thc x dng.
Chng hn khi phng thc l XorPut th c th hiu v ng ngha Put l a nh ra,
Xor l php ton trn Bit. Cn v phng din k thut s th XorPut c hiu nh sau:
Nu im nh trong Bitmap c mu trng (s hiu mu l 15) v nn c mu xanh da
tri (s hiu mu l 1) th khi a ra mn hnh im nh ny s c mu vng bi v 15
10
=
1111
2
, 1
10
= 0001
2
. Php ton Xor c thc hin trn tng bit
1111
2
xor 0001
2
= 1110
2

S 1110
2
=14
10
ng vi mu vng.
Tng t nh vy nu chn phng thc a nh ra mn hnh l AndPut vi mu nh
l xanh da tri (0001) , cn nn c mu (0100) th:
0001
2
and 0100
2
= 0000
2

ngha l nh s c mu en.
Thng thng chng ta nn dng "phng thc" l CopyPut ngha l mu nh s hin
ln mu nn. Cch hin mu ny cho ta ng mu sc nh c lu tr trong Bitmap.
Cc phng thc cn li mc d a c nh ra mn hnh nhng mu sc khng trung thc,
khng ng vi mu nh c lu tr trong Bitmap.
X dng phng thc XorPut chng ta c th cho hin nh v n nh mt cch d
dng. thy r hn chng ta xt v d sau:
Gi s nh Bitmap c lu trong mt bin con tr P, nh c mu trng v nn mn
hnh c mu . Th tc a nh ra mn hnh bt u t v tr tm mn hnh theo phng thc
XorPut:
PutImage(320,240,P^,XorPut);
Vi th tc trn nh a ra mn hnh s c mu xanh ngc (s hiu mu l 11) v
1111
2
xor 0100
2
= 1011
2
= 11
10

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 158
Nu by gi chng ta li a tip nh ra mn hnh ti cng v tr vi nh c th
nh trn mn hnh s b xo, ni ng hn l nh a ra ln th hai s c mu trng vi mu
nn.
Tr li v d trn, nh trn mn hnh ang c mu l 1011 cn nh trong Bitmap vn l
mu 1111, khi mu nh trn mn hnh s l
1111
2
xor 1011
2
= 0100
2
(ngha l mu trng mu nn)
T y chng ta c thut ton v hnh chuyn ng nh sau:
1- V hnh ti to x,y theo phng thc XorPut
2- Lu hnh trn mn hnh n miligiy
3- Xo hnh (bng cch lp li bc 1)
4- Thay i to x := x+dx; y:=y+dy;
5- Quay li bc 1

Ch : khi v hnh chuyn ng cn phi to cc cc im dng khi khng mun
chuyn ng c th ngt ngay chng trnh.

Di y l chng trnh v mt bu tri sao, s ngi sao trn bu tri l 100 trong
c 40 ngi sao nhp nhy, 20 ngi sao nhp nhy nhanh v 20 sao nhp nhy chm, cc ngi
sao c phn b ngu nhin. Trong chng trnh cn thit k mt a bay, a bay c 25 kch
thc khc nhau, mi hnh v a bay c ct vo mt bin con tr P, cc bin con tr ny
nm trong mt mng con tr. Cc a bay xut hin ngu nhin trn bu tri, chuyn ng nh
dn v bin mt, sau li hin ln ti mt to no . Chng trnh dng li khi bm mt
phm bt k.
Vi cc my tnh c dung lng b nh ln (128 hoc 256 Mb) chng ta c th tng
s hnh a bay ln 50 hnh khi a bay s chuyn ng mn mng hn.

V d 6.9
Program Bautroi_diabay;
Uses graph,crt;
Var
i,j,gd,gm:integer; a,x,y,xx,yy:word;
p: array[1..30] of pointer;
m,n :array[1..40] of word;

Procedure bautroi(a:word);
var i,j:word; m,n :array[1..40] of word; ch:char;

Begin
for j:= 1 to 5 do
Begin
for i:= 1 to a do
begin
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 159
x:=random(639); y:=random(479);
if i<=40 then (*chon 40 ngoi sao nhap nhay*)
begin
m[i]:=x; n[i]:=y; (*ghi toa do sao nhap nhay vao mang*)
end;
putpixel(x,y,random(15));(*hien sao *)
end;
end;
end;

Procedure nhapnhay;
var i,j:word; k:byte;
Begin
for i:= 1 to 40 do (*chon 40 ngoi sao nhap nhay*)
begin
m[i]:=random(639);
n[i]:=random(479); (*ghi toa do sao nhap nhay vao mang*)
end;
setcolor(random(15));
for j:=0 to 3 do
For i:=1 to 20 do (*20 sao nhap nhay nhanh*)
begin
circle(m[i+j],n[i+j],1);
delay(5);
end;
for j:=0 to 3 do
For i:=21 to 40 do (*20 sao nhap nhay cham*)
begin
setcolor(random(4));
circle(m[i+j],n[i+j],1);
delay(10);
end;
End;

procedure vedia;
Var xx,yy,x,y,x1,y1,x2,y2:integer; p: array[1..30] of pointer;
r,i,r1,r2,r3,r4,r5:word;
Begin
setcolor(14);setbkcolor(0);
i:=1; x:= 50; y:= 50; {diem dau tien dia bay xuat hien}
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 160
for r:= 25 downto 1 do {chn 25 a vi cc kch thc gim dn}
Begin
r1:=round(r/2);
r2:=round(r/3);
r3:=round(r/5);
r4:=2*r2;
r5:=round(r/10);
Ellipse(x,y,0,360,r,r1);
Ellipse(x,y-r3,194,346,r,r2);
Line(x+r2,y-r2,x+r4,y-r4);
circle(x+r4,y-r4,r5);
line(x-r2,y-r2,x-r4,y-r4);
circle(x-r4,y-r4,r5);
x1:=x-r;
y1:=y-r4-r5;
x2:=x+r;
y2:=y+r1;
Getmem(p[i], imagesize(x1,y1,x2,y2));(*xac dinh kich thuoc anh*)
getimage(x1,y1,x2,y2,p[i]^); (*cat anh vao bien con tro*)
putimage(x1,y1,p[i]^,xorput); (*xoa anh*)
i:=i+1;
End;
i:=1;
While not keypressed do
Begin (*hien dia bay voi cac kich thuoc khac nhau*)
putimage(x,y,p[i]^,xorput);
delay(100);
xx:=x; yy:=y;
x:=x+random(25);
y:=y+random(25);
putimage(xx,yy,p[i]^,xorput); (*xoa dia bay*)
for j:= 1 to 40 do (*tao su nhap nhay cua ngoi sao*)
begin
setcolor(random(15));
circle(m[j],n[j],1);
end;
i:=i+1;
if i>25 then {da hien het cac hinh dia bay}
begin
x:=random(500);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 161
y:=random(400);
i:=1;
end;
end;
end;

BEGIN {than chuong trinh chinh}
gd:=detect; a:=100; {a la so ngoi sao tren bau troi}
initgraph(gd,gm,'C:\tp\bgi');
if graphresult<>grok then halt;
bautroi(a); {hien bau troi sao}
while not keypressed do
begin
nhapnhay; {thiet ke cac ngoi sao nhap nhay}
vedia; {goi dia bay}
end;
closegraph;
END.

7. th hm s
Gi thit hm y = f(x) xc nh v lin tc trn on [a,b], cn v th hm trong
mt khu vc no trn mn hnh. H to quen thuc m chng ta s dng l h xoy vi
gc to nm gc di bn tri, trc x hng sang phi, trc y hng ln trn.
Mn hnh my vi tnh tu theo kch thc v ch lm vic c th l ma trn im t
640x480 n 1024x720. Gc to ca mn hnh li gc trn bn tri v trc x hng theo
chiu t trn xung di. thun tin cho vic v v quan st th chng ta cn phi
chuyn i t to thc (nh trong ton hc) sang to mn hnh.
K hiu to thc ca min v th im gc di tri l xmin, ymin v gc trn
phi l xmax, ymax. To mn hnh gc trn tri l cmin , dmin, gc di phi l cmax,
dmax.
Mt im bt k trn th c to thc l x, y v to mn hnh l c, d. C th
chng minh rng:
c = m*(x - xmin) + cmin
d = n*(y - ymin) + dmin
xmax, ymax






xmin, ymin

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 162
Trong :
p = (cmax - cmin)/(xmax - xmin)
q = (dmin - dmax)/(ymax- ymin)
Hiu s (dmin - dmax) mang du m cho bit chiu bin thin ca trc thng ng
gia to mn hnh v to thc l ngc nhau.
Khi v th trn mn hnh chng ta s dng cc cng thc trn chuyn i to
tnh c t thc t sang to mn hnh.
Phng php v th l xc nh to tng im sau ni cc im vi nhau
bng cc on thng. th trn tru th s im phi tht nhiu, tuy nhin chng ta khng
th tng v hn s im. Gi s chia on [a,b] thnh n on nh, chng ta s c n+1 im
nh s t 0 n n. Khi chiu rng mi on s l h = (b - a)/n.
Honh ca mt im bt k trong to thc:
xi = a + h*i,
v tung tng ng s l f(xi).
iu cn ch khi chn cc to thc v to mn hnh l min trn mn hnh
phi bao kn min to thc. Mun vy chng ta chn:
xmin = a, xmax = b, ymin = min(yi), ymax = max(yi).
Vic kho st hm s f(x) tm max v min theo kiu ton hc l khng thc t trong
Pascal, do vy c th thay th vic tm min(yi) v max(yi) bng vic lu cc gi tr f(xi) vo
mt mng, sau tm cc tr trong mng.
chng trnh c th ng dng cho tt c cc hm s chng ta s xy dng mt
chng trnh con ly tn l HAM khai bo hm v tnh gi tr ca hm ti cc to xi. Mt
chng trnh con ly tn l TOADO tnh cc h s m, n, v tung cc im chia (tc l
gi tr ca hm f(x) ti cc to xi).

V d 6.10
Program vedothi;
Uses graph;
Const n=200;
cmin=3; dmin=3;cmax=200; dmax=140;{ve o goc phan tu thu nhat}
xmin=-5; xmax=5;
Var gd,gm:integer;
ymin,ymax,h,m,p,q:real;
y:Array[0..n] of real;


Function F(x:real) : real;
Begin
{f:=x*x;}
F:=x*x*x-2*x;
End;

Procedure Toado;
Var i:integer; xi,yi:real;
Begin
h:=(xmax-xmin)/n;
For i:= 0 to n do
Begin
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 163
xi:=xmin+i*h;
yi:=f(xi);
y[i]:=f(xi);
End;
ymin:=y[0]; ymax:=-ymin;
For i:=1 to n do
Begin
If ymin>y[i] then ymin:=y[i];
If ymax<y[i] then ymax:=y[i];
End;
p:= (cmax-cmin)/(xmax-xmin);
q:= (dmin-dmax)/(ymax-ymin);
End;

Procedure Ve;
Var i,c,d:integer; xi:real;
Begin
c:=cmin;
d:= round(q*(y[0]-ymin)+dmax);
Moveto(c,d);
For i:=1 to n do
Begin
xi:=xmin+i*h;
c:=Round(p*(xi-xmin)+cmin);
d:=Round(q*(y[i]-ymin)+dmax);
setcolor(red);
Lineto(c,d) {noi cac diem do thi}
End;
setcolor(14);
moveto(cmin,dmin); Lineto(cmax,dmin);{ve khung do thi}
moveto(cmax,dmin); Lineto(cmax,dmax);
moveto(cmax,dmax); Lineto(cmin,dmax);
moveto(cmin,dmax); Lineto(cmin,dmin);
d:=Round(q*(-ymin)+dmax);
if (d>=dmin) and (d<=dmax) then
Begin
line(cmin,d,cmax,d);{truc hoanh}
line(cmax,d,cmax-6,d-3); {dau mui ten}
line(cmax,d,cmax-6,d+3);
end;
c:=Round(p*(-xmin)+cmin);
if (c>=cmin) and (c<=cmax) then
begin
Line(c,dmin,c,dmax); {truc tung}
Line(c,dmin,c-3,dmin+6); {dau mui ten}
Line(c,dmin,c+3,dmin+6);
end; End;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 164

BEGIN
gd:=detect;
Initgraph(gd,gm,'c:\tp70\bgi');
if graphresult<>grok then halt;
toado;
ve;
readln;
closegraph;
END.


Vi cc hm s cho theo tham s x = x(t), y = y(t), hoc cho trong to cc r = f()
phng php v cng tng t, chng ti xin dnh cho bn c nh l nhng bi tp ng
dng.


Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 165

Bi tp ng dng chng 6

1. Nhp v cho chy th chng trnh trong v d 6.9 sau thit k thm mt tn la.
Cho tn la phng t gc di bn phi mn hnh ln gc trn bn tri. Lung khi pha ui
di bng 3 ln chiu di tn la.

2. Cho cc k t ca dng ch "Happy Birth Day" hin ngu nhin v nhp nhy trn
mn hnh, tip cho chng chuyn ng an xen v thu dn v tm (320,240). Cui cng
cc k t li t tm chy ra trn mt qu o trn v sp xp thnh dng ch hon chnh.

3. Chn kch thc v thit k cc hnh n gin 1, 2, 3, 4 (xem hnh v), mi hnh ct
vo mt bin con tr. Cho hin cc hnh ti cc v tr tu sao cho hnh va chuyn ng va
t quay, cui cng cc hnh t ghp vi nhau thnh mt hnh vung gia mn hnh


C
C

C


C C


4. Lp chng trnh v th hm s cho di dng tham s
x = x(t), y =y(t)

5. Lp chng trnh v th hm s cho di dng to cc
r = f()
6. Cho hm y = f(x) xc nh v lin tc trong khong (a,b). Lp chng trnh nhp
dng mt hm c th. V th hm sau tnh tch phn xc nh

b
a
dx x f ) (

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 166


Ph lc 1

Bng m ASCII

Ngn ng Pascal s dng cc k t trong bng m ASCII xy dng nn cc t
kho, tn chun, cc hm, th tc hoc cc lnh c cu trc. Bng m ASCII gm 256 k t
c nh s t 0 n 255 v c phn thnh cc nhm k t sau:

1. Cc k t iu khin:
32 k t u tin(t 0 n 31) l cc k t iu khin, cc k t ny khng in c ra
mn hnh hoc my in, v d: k t Enter(m 13), k t ESC(m 27).
2. Cc k t c bit:
Cc k t c m ASCII trong khong 32-47, 58-64, 91-96, v 123-127 l cc k t c
bit nh du chm, du phy, k t @, k t Del,...
3. Nhm ch s:
Cc k t c m ASCII trong khong 48-57 l 10 ch s thp phn 0, 1, 2, 3, 4, 5, 6, 7,
8, 9
4. Nhm ch ci:
+ Cc k t c m ASCII trong khong 65-90 l cc ch ci in t A n Z
+ Cc k t c m ASCII trong khong 97-122 l cc ch ci nh t a n z
Cc ch ci thng c m ASCII ln hn 32 so vi ch in tng ng. V d m ASCII
ca a l 97 cn ca A l 65.
5. Nhm k t ho
Cc k t c m ASCII trong khong 128-255 l cc k t ho.

hin ton b cc k t ca bng m ln mn hnh (tr 32 k t u) chng ta c th
cho chy chng trnh sau:
Program Ma_ascii;
Var n : Byte;
Begin
For n:=32 to 255 do Write(chr(n),' ');
End.

Di y l bng m ASCII v hnh dng ca 128 k t u tin.



Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 167
Bng m ASCII

M K t M K t M K t
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
NUI
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
SPACE

33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

!

#
$
%
&

(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A

66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98

B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_

a
b




Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 168

M K t M K t M K t
99
100
101
102
103
104
105
106
107
108
c
d
e
f
g
h
i
j
k
l
109
110
111
112
113
114
115
116
117
118
m
n
o
p
q
r
s
t
u
v
119
120
121
122
123
124
125
126
127

w
x
y
z
{
|
}
~
DEL
























Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 169
Ph lc 2

Tm tt cc th tc v hm ca Turbo Pascal 7.0

Ton b cc th tc, hm v nh hng bin dch ca Pascal c th tm hiu trong
phn Help trn thc n chnh. Tng cng c 65 trang mn hnh, mi trang c chia i v
c 21 dng tc l c khong 2500 mc cn nghin cu. S lng ny ngay c vi nhng
ngi chuyn nghip cng khng th nm bt ht c. Trong ph lc ny chng ti ch chn
ra mt s nh nhng hm v th tc thng dng, khi cn bit ngha v cch dng ca mt
hm hay th tc no bn c ch cn vit tn hm hay th tc ln mn hnh son tho
Pascal sau bm t hp phm Ctrl - F1, Pascal s hin ln cc ch dn v v d minh ho.


1. Hm ABS
C php: Abs(r: Real) : Real; Abs(i: Integer) : Integer;
Cng dng: Cho gi tr tuyt i ca i s.

2. Hm ADDR
C php: Addr(Var Variable) : Pointer;
Cng dng: Cho a ch ca bin.

3. Th tc APPEND
C php: Append(VAR F : Text);
Cng dng: M tp vn bn ghi b sung v nh v con tr ti cui tp.

4. Th tc ARC(Graph Unit)
C php: Arc(x,y:integer;gd,gc,R:word);
Cng dng: V cung trn tm(x,y) bn knh R, t gc gd n gc gc.

5. Hm ARCTAN
C php: Arctan(r: Real) : Real;
Cng dng: Cho Arctangent ca i r.

6. Th tc ASSIGN
C php: Assign(var F : file; Name String);
Cng dng: Lin kt bin tp F vi tp c tn ch nh trong Name.

7. Th tc ASSIGNCRT(CRT unit)
C php: AssignCrt(Var F : text);
Cng dng: Thay vic gi kt qu ra mn hnh bng vic li a vo tp F.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 170
8. Th tc BAR(Graph unit)
C php: Bar(x1,y1,x2,y2:integer);
Cng dng: V vng ch nht gc trn tri (x1,y1) gc di phi (x2,y2).

9. Th tc BARD3(Graph Unit)
C php: Bar3d(x1,y1,x2,y2:integer; Depth:word; Top:Boolean);
Cng dng: V hnh hp 3 chiu c t mu. Chiu su l Depth Pixel (im nh). Nu
Top l True th hp c np, nu Top l False th hp khng np.
10. Th tc BLOCKREAD
C php: Blockread(Var F:file; Var B:type; N:Integer; <KQ:Word>);
Cng dng: c N mu tin t tp khng kiu F vo b nh (qua bin B). KQ cho bit s
mu tin thc s c c.

11. Th tc BLOCKWRITE
C php: Blockwrite(Var F:file; Var B:type; N:Integer);
Cng dng: Ghi N mu tin t vng m B ra tp khng kiu F.

12. Th tc CHDIR
C php: ChDir(S:String);
Cng dng: Chuyn i th mc hin thi sang th mc c ng dn S.

13. Hm CHR
C php: Chr(I: Integer);
Cng dng: Cho k t c m ASCII bng I.

14. Th tc CIRCLE (Graph Unit)
C php: Circle(x,y:Integer; R:word);
Cng dng: V ng trn tm(x,y) bn knh R.

15. Th tc CLEARDEVICE(Graph Unit)
C php: ClearDevice;
Cng dng: Xo mn hnh ho.

16. Th tc CLEARVIEWPORT(Graph Unit)
C php: Clearviewport;
Cng dng: Xa Viewport hin hnh.

17. Th tc CLOSE
C php: Close(Var F:File);
Cng dng: ng tp.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 171
18. Th tc CLOSEGRAPH(Graph Unit)
C php: CloseGraph;
Cng dng: Ngng ch ho, chuyn v ch Text. Th tc ny cng gii phng
vng nh do h ho s dng.

19. Th tc CLREOL(CRT Unit)
C php: Clreol;
Cng dng: Xa k t t v tr con tr (cursor) n cui dng hin hnh.

20. Th tc CLRSCR(CRT Unit)
C php: Clrscr;
Cng dng: Xo mn hnh trong ch vn bn v a con tr v v tr(1,1).

21. Hm CONCAT
C php: Concat(S1,S2,,Sn:String);
Cng dng: To chui mi bng cch ni cc chui S1,, Sn. Nu chiu di ca chui
kt qu ln hn 255 k t, Pascal s ct b cc k t t 256 tr i .

22. Hm COPY
C php: Copy(S:String; P,L:Integer):String;
Cng dng: Trch t chui S mt chui con di l k t bt u t k t th P.

23. Hm COS
C php: Cos(X:Real): Real;
Cng dng: Cho cosine ca gc X.

24. Hm CSEG
C php: Cseg: word;
Cng dng: Cho a ch ca on m chng trnh.

25. Th tc DEC
C php: Dec(Var X: SCalar; n:longInt);
Cng dng: Gim bin X i n. Nu khng c n th X s b gim i 1.

26. Th tc DELAY(CRT Unit)
C php: Delay(s:word);
Cng dng: Tm dng chng trnh trong s miligiy , s<=65535



Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 172
27. Th tc DELETE
C php: Delet(S:String; P,L:integer);
Cng dng: Xo L k t t v tr P ra khi chui S

28. Th tc DELLINE(CRT Unit)
C php: Delline;
Cng dng: Xo dng cha con tr. Cc dng pha di s dn ln pha trn.

29. Th tc DETECTGRAPH(CRT Unit)
C php: DetectGraph(Var GD,GM:Integer);
Cng dng: Pht hin kiu mn hnh, mode ho v gn cho cc bin GD,GM.

30. Hm DISKFREE(DOS Unit)
C php: DiskFree(Drive:word):longint;
Cng dng: Cho bit s byte cn trng trn a ch nh trong Drive. Drive = 0 ng
vi ngm nh ,Drive = 1 cho A, 2 cho B.

31. Hm DISKSIZE(DOS Unit)
C php: Disksize(Drive:word):longint;
Cng dng: Cho bit dung lng a tnh theo byte. Tham s Drive xc nh a
(Drive = 1 cho A, 2 cho B, 0 cho ngm nh).

32. Th tc DISPOSE
C php: Dispose(P:Pointer);
Cng dng: Gii to vng heap cp pht cho bin con tr P. Dispose dng km vi
New.

33. Hm DOSEXITCODE(DOS Unit)
C php: Dosexitcode:word;
Cng dng: Cho m li ca tin trnh con (0 = chm dt bnh thng, 1 = chm dt do
CTRL C, 2 = chm dt do li thit b, 3 = chm dt do th tc KEEP).

34. Hm DOSVERSION(DOS Unit)
C php: Dosversion : word;
Cng dng: Cho s hiu phin bn (Version) ca h iu hnh. Phn chnh nm byte
cao, phn ph nm byte thp.

35. Th tc DRAWPOLY(Graph Unit)
C php: Drawpoly(n:word; Var Polypoints);
Cng dng: V a gic n nh. Mng Polypoints cha to cc nh ca a gic.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 173
36. Hm ENVCOUNT(DOS Unit)
C php: EnvCount:integer;
Cng dng: Cho s lng chui c nh ngha trong mi trng DOS

37. Hm EOF
C php: Eof(F:File): Boolean;
Cng dng: Cho gi tr TRUE nu con tr nh v cui tp , cc trng hp khc cho
kt qu FLASE.

38. Hm EOLN
C php: Eoln(F:File): Boolean;
Cng dng: Cho gi tr TRUE nu con tr nm cui dng(CR/LF) hoc cui tp, cho
FLASE trong trng hp tri li.

39. Th tc ERASE
C php: Erase(F:File);
Cng dng: Xo tp v cc thng tin v tp F khi a .

40. Th tc EXEC
C php: Exec(Path,Cmdline:String);
Cng dng: Thc hin tp c tn nm trong path vi cc tham bin dng lnh c nh
ngha trong Cmdline.

41. Th tc EXIT
C php: Exit;
Cng dng: Thot khi khi hin thi (khi c th l chng trnh con, cu trc lp) nu
exit nm trong chng trnh chnh th thot khi chng trnh).

42. Hm EXP
C php: EXP(X:Real):Real;
Cng dng: Lu tha e ca i s X.

43. Hm FEXPAND(DOS Unit)
C php: Fexpand(P:PathStr):PathStr;
Cng dng: Cho ng dn ca tp P . V d tp A1.pas hin lu trong th mc
c:\tp\bin. Trong phn khai bo chng trnh c lnh: Uses Dos; Khi lnh
Writeln(Fexpand(a1.pas) cho kt qu l C:\TP\BIN\A1.PAS

44. Hm FILEPOS
C php: FilePos(F:File):integer;
Cng dng: Cho s hiu bn ghi ca tp F m con tr ang tr ti.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 174
45. Hm FILESIZE
C php: FileSize(F:file):integer;
Cng dng: Cho s lng bn ghi ang c trong tp F.

46. Th tc FILLELIPES(Graph Unit)
C php: Fillelipse(x,y:integer; a,b:word);
Cng dng: V elipse c tm(x,y) vi hai bn trc l a, b.

47. Th tc FILLPOLY(Graph Unit)
C php: Fillpoly(n:word; Var Polypoints);
Cng dng: V a gic n nh. Mng Polypoints cha to cc nh ca a gic.

48. Th tc FLOODFILL(Graph Unit)
C php: FloodFill(x,y:integer; border:word);
Cng dng: T mu mt vng khp kn trn mn hnh ho nu to (x,y) nm bn
trong vng. Nu x,y nm ngoi vng th min bn ngoi c t.

49. Th tc FLUSH
C php: Flush(Var F:Text);
Cng dng: y ra a tt c kt qu ang nm trong vng m cho tp F.

50. Hm FRAC
C php: Frac(x:Real):Real;
Cng dng: Cho phn l thp phn ca i s x.

51. Th tc FREEMEM
C php: Freemem(Var F:pointer; I:Integer);
Cng dng: Gii phng I byte ca vng heap cp pht cho bin con tr F bng th
tc GetMem.

52. Th tc GETARCCOORDS(Graph Unit)
C php: Getarrccoords(Var ArcCoords : ArcCooType);
Cng dng: Cho bit cc to c lnh Arc hay Ellipse trc s dng. Cu
trc ca ArcCoordsType nh sau:
TYPE
ArcCoordstype = Recode
x, y, XStard, YStart, Xend, Yend:Integer;
End;


Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 175
53. Th tc GETASPECTRATIO(Graph Unit)
C php:
GetAspectratio(Var Xasp, Yasp:word);
Cng dng: Cho phn gii ca mn hnh ho (cha trong cc bin Xasp v Yasp).

54. Hm GETBKCOLOR(Graph Unit)
C php: GetBKColor : word;
Cng dng: chn mu nn , c th thay th s hiu mu bi tn hng mu.

55. Hm GETCOLOR(Graph Unit)
C php: GetColor:word;
Cng dng: Chn mu nt v, c th thay th s hiu mu bi tn hng mu.

56. Th tc GETDATE(DOS Unit)
C php: GetDate(Var year, Month, Day, Dayofweek:word);
Cng dng: Cho ngy thng hin hnh ca h thng.

57. Th tc GETDEFAULTPALETTE(Graph Unit)
C php: Getdefaultpalette(Var Pal:PaletteType);
Cng dng: Cho trong Pal bng mu Ngm nh cho trnh iu khin ho hin hnh.
Cu trc ca kiu PaletteType nh sau:
TYPE
PaletteType = Record
Size:Byte;
Colors: Array[0..Maxcolor] of Shortint;
End;

58. Th tc GETDIR
C php: GetDir(d: Byte; Var S: String);
Cng dng: Cho bit th mc hin hnh trn a c ch nh trong d. Tn th mc
c cho trong S (nu d = 0 th GetDir s tm trong a ngm nh, cn nu d = 1, 2, 3 ng
vi cc a A, B, C).

59. Hm GETDRIVERNAME(Graph Unit)
C php: GetDriverName : String;
Cng dng: Cho tn ca trnh iu khin ho hin hnh.

60. Th tc GETFATTR(DOS Unit)
C php: GetFAttr(Var F; Var Attr: word);
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 176
Cng dng: Cho bit thuc tnh ca tp F. Trc khi gi th tc ny tp phi c gn
thuc tnh nhng khng m.

61. Th tc GETFILLPATTERN(Graph Unit)
C php: GetFillPattern(Var FP : FillpatternType);
Cng dng: Cho trong FP s hiu ca mu t hin hnh (mu nn ch c 8 gi tr). Cu
trc ca FillPartternType l:
TYPE
FillPartternType = Array[1..8] of Byte

62. Th tc GETFILLSETTINGS(Graph Unit)
C php: GetFillSettings(Var FS : FillSettingsType);
Cng dng: Cho trong FS mu v mu t hin hnh. Cu trc ca FillSettingsType l:
TYPE
FillSettingsType = Record
Pattern : word; Color : word;
End;

63. Th tc GETFTIME(DOS Unit)
C php: GetFTime(Var F; Var Time : Longint);
Cng dng: cho bit ngy thng v gi m tp F c ghi.

64. Hm GETGRAPHMODE(Graph Unit)
C php: GetGraphMode : Integer;
Cng dng: cho bit kiu ho hin hnh.

65. Th tc GETIMAGE(Graph Unit)
C php: Getimage(x1,y1,x2,y2 : integer; Var Bitmap);
Cng dng: lu tr phn hnh ch nht (x1,y1,x2,y2) trn mn hnh ho vo BitMap.

66. Th tc GETLINESETTINGS(Graph Unit)
C php: GetlineSettings(Var LST : LineSettingsType);
Cng dng: Cho trong LST gi tr hin hnh ca dng ng , mu, b dy. Cu trc
ca LineSettingsType nh sau:

TYPE
LineSettingsType = Record
LineStyle , Pattern , Thickness : word;
End;

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 177
67. Hm GetMaxcolor(Graph Unit)
C php: GetMaxcolor : word;
Cng dng: cho s hiu cao nht ca m mu trong bng mu hin hnh.

68. Hm GETMAXMODE(Graph Unit)
C php: GetMaxMode : word;
Cng dng: Hm cho gi tr l mt s kiu word, s ny ng vi kiu ho c phn
gii cao nht ca mn hnh ang dng. Hu ht cc mn hnh c kiu ho t 0 n
Getmaxmode.

69. Hm GETMAXX(Graph Unit)
C php: GetMaxX : integer;
Cng dng: cho honh ln nht ca mn hnh ho hin hnh.

70. Hm GETMAXY(Graph Unit)
C php: GetMaxY : Integer;
Cng dng: cho tung ln nht ca kiu mn hnh ho hin hnh.

71. Th tc GETMEM
C php: GetMem(Var P : Pointer; I: integer);
Cng dng: Cp pht cho bin con tr P mt vng nh c dung lng I byte.

72. Hm GETMODENAME(Graph Unit)
C php: GetModeName(ModeNumber : word) : String;
Cng dng: cho mt chui m t kiu ho ng vi ModeNumber.

73. Th tc GETMODERANGE(Graph Unit)
C php: GetModeRange(GraphDriver:Integer; Var Lomode, Himode:Integer);
Cng dng: Cho kiu phn gii thp nht(LoMode) v cao nht (HiMode) ca trnh iu
khin ho ng vi GraphDriver.

74. Th tc GETPALETTE(Graph Unit)
C php: GetPalette(Var P : PaletteType);
Cng dng: tr v gi tr l mt bin kiu bn ghi gm 2 trng trng size cho bit s
lng mu trong Palette, trng color cho bit m mu hin hnh. PaletteType l kiu Record
c nh ngha nh sau:
TYPE
PaleteType = Record
Size : Byte;
Colors : Array[0..15] of Shortint;
End;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 178
75. Hm GETPALETTESIZE(Graph Unit)
C php: GetPaletteSize : word;
Cng dng: Cho s lng s mu ln nht m kiu mn hnh ho hin hnh c
th cung cp. V d mn hnh EGA hm ny cho kt qu l 16.

76. Hm GETPIXEL(Graph Unit)
C php: GetPixel(x,y:Integer);
Cng dng: cho mu ca im nh ti to (x,y).

77. Th tc GETTEXTSETTINGS(Graph Unit)
C php: GetTextSettings(Var TS : GettextsettingsType);
Cng dng: Cho bit cc gi tr nh dng vn bn hin hnh. Cc gi tr ny lu vo
bin TS kiu bn ghi. Cu trc ca bn ghi l:
TYPE
GetTextSettingsType = Record;
Font, Direction, Charsize, Horiz, Vert:word;
End;

78. Th tc GETTIME(DOS Unit)
C php: GetTime(Var Hour,Minute,Second,Sec100:word);
Cng dng: Cho gi h thng.

79. Hm GETX(Graph Unit)
C php: Getx : Integer;
Cng dng: Cho to honh cu con tr hin hnh.

80. Hm GETY(Graph Unit)
C php: Gety : Integer;
Cng dng: Cho tung cu con tr hin hnh.

81. Th tc GOTOXY(CRT Unit)
C php: Gotoxy(x,y: Integer);
Cng dng: a Curson (con tr) n to (x,y);

82. Hm GRAPHERRORMSG(Graph Unit)
C php: GraphErrorMsg(Code : Integer):String;
Cng dng: Cho thng bo li ho ng vi m li trong Code.



Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 179
83. Th tc GRAPHDEFAULTS(Graph Unit)
C php: GraphDefaults;
Cng dng: Tr v cc gi tr ngm nh cho nh dng ho.

84. Th tc GRAPHRESULT(Graph Unit)
C php: Graphresult : Integer;
Cng dng: Cho m li ca th tc ho sau cng.

85. Th tc HALT
C php: Halt;
Cng dng: Dng ngay chng trnh.

86. Hm HI
C php: Hi(I : Integer): Byte;
Cng dng: Cho Byte cao trong s nguyn I.

87. Th tc HIGHVIDEO(CRT Unit)
C php: HighVideo;
Cng dng: tng sng mn hnh .

88. Hm IMAGESIZE(Graph Unit)
C php: ImageSize(x1,y1,x2,y2 : Integer);
Cng dng: Cho dung lng tnh theo byte lu tr mt min nh Bitmap trong vng
ch nht x1,y1,x2,y2.

89. Th tc INC
C php: Inc(Var x [;n : longint]);
Cng dng: Tng gi tr x thm n (x phi thuc kiu nguyn). Nu b qua n th x s tng
ln 1. V d:
Var x:integer;
Begin
X:=15; Inc(x); {x s c gi tr l 16}
Inc(x,5); {x s c gi tr l 20}
End;

90. Th tc INITGRAPH(Graph Unit)
C php: InitGraph(Var GD, GM:Integer; Driverpath:string);
Cng dng: Khi to mi trng ho v a phn cng vo mode ho. GD l
trnh iu khin ho, GM l mode ho. Nu GD bng Detect, th tc t ng kim tra
phn cng v chn cc thng s ti u. Th tc s tm cc tp BGI trong ng dn
DriverPath.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 180
91. Hm INSERT
C php: Insert(Source:String; Var Target:String; Index:Integer);
Cng dng: Chn chui Source vo chui Target v tr Index.

92. Th tc InsLine(CRT Unit)
C php: InsLine;
Cng dng: chn mt dng trng vo v tr hin hnh ca con tr trn mn hnh.

93. Hm INT
C php: Int(x:Real): Real;
Cng dng: Cho phn nguyn ca x

94. Hm INTR(DOS Unit)
C php: Intr(Fune:Byte; Var Regs:Registers);
Cng dng: Gi ngt c s hiu Fune ca Bios vi cc thanh ghi c nh ngha qua
Regs.

95. Hm IORESULT(CRT Unit)
C php: IOResult : word;
Cng dng: Cho m li khi thc hin thao tc vo/ra. Nu IOResult khc khng th c
ngha l xy ra li.

96. Th tc KEEP(DOS Unit)
C php: Keep(Exitcode:word);
Cng dng: Kt thc chng trnh nhng vn gi n thng tr.

97. Hm KEYPRESSED(CRT Unit)
C php: Keypressed : Boolean;
Cng dng: Cho gi tr TRUE khi c mt phm c bm.

98. Hm LENGTH
C php: Leng(S:String):Integer;
Cng dng: Cho chiu di ca chui S

99. Th tc LINE(Graph Unit)
C php: Line(x1,y1,x2,y2:Integer);
Cng dng: V ng thng t (x1,y1) n (x2,y2).



Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 181
100. Th tc LINEREL(Graph Unit)
C php: Linerel(Dx,Dy:Integer);
Cng dng: V ng thng t v tr hin ti ca con tr (to x,y) n im
(x+Dx,y+Dy).

101. LINETO(Graph Unit)
C php: Lineto(x,y:Integer);
Cng dng: V ng thng t v tr hin ti ca con tr n im(x,y).

102. Hm LN
C php: Ln(Var x:Real):Real;
Cng dng: Cho logarit t nhin ca x.

103. Th tc LOWVIDEO(CRT Unit)
C php: LowVideo;
Cng dng: gim sng mn hnh.

104. Th tc MARK
C php: Mark(P:pointer);
Cng dng: nh du a ch nh heap trong con tr P

105. Hm MAXAVAIL
C php: MaxAvail : LongInt;
Cng dng: Cho kch thc khi ln nht ca vng nh cha cp pht ca Heap.

106. Hm MEMAVAIL
C php: MemAvail : ;
Cng dng: cho tng dung lng ca cc khi nh t do trong Heap.

107. Th tc MKDIR
C php: MKDir(S:String);
Cng dng: To th mc mi vi tn ch nh trong S.

108. Th tc MOVE
C php: Move(Var V1,V2,n:Integer);
Cng dng: chp n byte t bin V1 n bin V2.
109. Th tc MOVEREL(Graph Unit)
C php: MoveRel(Dx,Dy:Integer);
Cng dng: chuyn con tr t to hin thi (x,y) n to x+dx, y+dy.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 182
110. Th tc MOVETO
C php: MoveTo(x,y:Integer);
Cng dng: nh v con tr ti to (x,y).

111. Th tc MSDOS(DOS Unit)
C php: MSDOS(Var Regs:Registers);
Cng dng: gi phc v DOS vi tp gi tr ca cc thanh ghi trong Regs.

112. Th tc NEW
C php: New(Var P:Pointer);
Cng dng: cp pht vng heap cho con tr P.

113. Th tc NORMVIDEO(CRT Unit)
C php: NormVideo;
Cng dng: khi phc thuc tnh mn hnh ngm nh.

114. Th tc NOSOUND(CRT Unit)
C php: NoSound;
Cng dng: tt m thanh pht ra loa.

115. Hm ODD
C php: Odd(I:Integer): Boolean;
Cng dng: Cho True khi I l s l v False khi I l s chn

116. Hm OFS
C php: Ofs(<Variable, Procedure, or Function>):Integer;
Cng dng: Cho Offset a ch vng nh ca bin, th tc hay hm.

117. Hm ORD
C php: Ord(S:Scalar):Integer;
Cng dng: Cho s th t ca S (c kiu v hng m c).

118. Th tc OUTTEXT(Graph Unit)
C php: Outtext(Textstring):String;
Cng dng: vit chui Textstring trong ch ho. Cn chn trc kiu ch, kch
thc, mu sc v hng vit.
119. Th tc OUTTEXTXY(Graph Unit)
C php: OuttextXY(x,y:Integer; TextString:String);
Cng dng: Hin th chui TextString v tr(x,y). Cn chn trc kiu ch, kch
thc, mu sc v hng vit.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 183

120. Th tc OVRCLEARBUF(Overlay Unit)
C php: OvrClearBuf;
Cng dng: xo sch vng m Overlay.

121. Hm OVRGETBUF(Overlay Unit)
C php: OvrGetBuf : LongInt;
Cng dng: Cho kch thc ca vng m Overlay.

122. Th tc OVRINIT(Overlay Unit)
C php: OVRInit(FileName:String);
Cng dng: Khi to qu trnh qun l Overlay v m tp Overlay c ch nh trong
FileName. Th tc ny cn c gi ti trc bt c th tc Overlay no.

123. Th tc PACKTIME(DOS Unit)
C php: PackTime(Var DT: DateTime; Var Time:Longint);
Cng dng: Chuyn ho thng tin ngy, thng v gi trong DT (kiu bn ghi) thnh s
4 Byte v gi vo bin Time .

124. Th tc OVRINITEMS(Overlay Unit)
C php: OvrInitEMS(fileName:String);
Cng dng: Np tp Overlay vo vng nh m rng (EMS) nu cn .

125. Th tc OVRSETBUF(Overlay Unit)
C php: OvrsetBuf(BufSize:Integer);
Cng dng: Cp pht Bufsize byte cho vng m Overlay. BufSize phi nh hn vng
m Overlay ngm nh.

126. Hm PARAMSTR
C php: ParamStr(I:word):String;
Cng dng: Cho tham s dng lnh th I. Paramstr(0) cho ng dn tn tp chng
trnh hin hnh (c:\tp\bin\turbo.exe)

127. Hm PI
C php: Pi:Real;
Cng dng: Cho hng s Pi

128. Th tc PIESLICE(Graph Unit)
C php: Pieslice(x,y:Integer; a1,a2,R:word);
Cng dng: V hnh qut tm(x,y) bn knh R, t gc a1 n gc a2.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 184
129. Hm POS
C php: Pos(SubS,S:String):Integer;
Cng dng: Cho v tr bt u ca chui con SubS trong S. Nu SubS khng nm trong
S th hm POS cho gi tr 0.

130. Hm PRED
C php: Pred(S:Scalar):Integer;
Cng dng: Cho phn t pha trc phn t S (S phi thuc kiu v hng m c).
Pred(5) = 4.

131 Th tc PUTIMAGE(Graph Unit)
C php: PutImage(x,y:Integer; Var BitMap; BitBlt:word);
Cng dng: Hin nh cha trong BitMap bt u ti im (x,y). BitBlt ch nh phng
thc hin nh v c th nhn gi tr kiu s hoc hng k t nh sau:
COPYPUT = 0; XORPUT = 1; ORPUT = 2; ANDPUT = 3; NOTPUT = 4;

132. Th tc PUTPIXEL(Graph Unit)
C php: PutPixel(x,y:Integer; Color:word);
Cng dng: V mt im nh (Pixel) ti to (x,y) theo mu ch nh bi color.

133. Hm RANDOM
C php: Random(I:word):word;
Cng dng: Cho mt s ngu nhin k vi 0<=k<I.

134. Hm RAMDOMIZE
C php: Randomize;
Cng dng: Khi to gi tr ban u ca b to s ngu nhin trong ng h h thng.
Gi tr ny c s dng khi c li gi hm Random. Nu khng c th tc Randomize th
gi tr m hm Random to ra s ging nhau mi khi chng trnh c chy.

135. Th tc READ v READLN
C php: Read([Var F : File,] Parameters);
Readln([Var F : File,] Parameters);
Cng dng: Nhp s liu t thit b chun (thng l bn phm) vo bin Parameters
hay t tp c ch nh trong F. Readln ch dng vi tp vn bn, sau khi nhp s liu
Readln di chuyn con tr xung dng k tip.

136. Hm READKEY(CRT Unit)
C php: Readkey : Char;
Cng dng: c mt m phm vo mt bin. Vi cc phm m phm gm hai s, s u
l 0 th cn gi li hm Readkey mt ln na ly gi tr th hai ca m phm.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 185
137. Th tc RECTANGLE
C php: Rectangle(x1,y1,x2,y2:Integer);
Cng dng: V hnh ch nht c gc trn bn tri to (x1,y1) v c gc di bn
phi to (x2,y2).

138. Th tc RELEASE
C php: Release(Var P:Pointer);
Cng dng: Gii to vng nh heap cp pht k t ln ghi (Mark) gn nht trc .
P ct gi a ch ca nh heap.

139. Th tc RENAME
C php: Rename( Var F:File; S:String);
Cng dng: i tn tp F thnh S.

140. Th tc RESET
C php: Reset(Var F:File [;I:Integer]);
Cng dng: M tp F c. Nu tp khng kiu, ta c th ch nh kch thc mu
tin trong I.

141. Th tc RESTORECRTMODE(Graph Unit)
C php: RestoreCRTmode;
Cng dng: thot khi kiu mn hnh ho tr v kiu vn bn.

142. Th tc REWRITE
C php: Rewrite(Var F:File [;I:Integer]);
Cng dng: Chun b tp ghi. Nu tp cha tn ti Pascal s to ra tp mi vi tn
tp ghi trong F . Nu c mt tp trn a th tp c s b xo v mt tp rng c th ch.
Vi tp khng kiu ta c th nh chiu di ca recor (bn ghi) trong I.

143. Th tc RMDIR(DOS Unit)
C php: RmDir(S:String);
Cng dng: xo th mc c c tn ch nh trong S

144. Hm ROUND
C php: Round(x;Real):LongInt;
Cng dng: Lm trn x.

145. Th tc RUNERROR
C php: RunError [(ErrorCode:word)];
Cng dng: Dng chng trnh, pht sinh li Run-Time vi s hiu li Errorcode.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 186
146. Th tc SECTOR(Graph Unit)
C php: Sector(x,y:Integer;g1,g2,a,b:word);
Cng dng: V v t y cung elip c tm (x,y), bn knh ngang l a, bn knh dc l b,
bt u t gc g1 n gc g2.

147. Th tc SEEK
C php: Seek(Var F:Flie; P:Integer);
Cng dng: Di chuyn con tr tp n u ca bn ghi th P trong tp tin F.

148. Th tc SEEKEOF
C php: SeekEof(Var F:File):Boolean;
Cng dng: kim tra tnh trng kt thc tp (ch dng cho tp vn bn), nu kt thc tp
kt qu nhn c l True, ngc li l False (xem thm eof).

149. Hm SEEKEOLN
C php: SeekEoln(Var F:File):Boolean;
Cng dng: kim tra tnh trng kt thc dng, SeekEoln tng t nh Eoln ch c khc
bit l n nhy qua khong trng, tab trc khi kim tra du kt thc ht dng.

150. Hm SEG
C php: Seg(Var Variable):word;
Seg(<Procedure hoc Function>):word;
Cng dng: Cho a ch on ca bin, hm hay th tc.

151. Th tc SETALLPALETTE(Graph Unit)
C php: SetAllPalette(Var Palette);
Cng dng: Thay i bng mu theo thit k cho trong Palette.

152. Th tc SETBKCOLOR(Graph Unit)
C php: SetBKcolor(Color:word);
Cng dng: chn mu nn ngm nh cho mn hnh ho.

153. Th tc SETCBREAK(DOS Unit)
C php: SetCBreak(Break: Boolean);
Cng dng: thit lp trng thi cho t hp CTRL BREAK. Khi Break = True, h
thng s ngng chng trnh mi khi Ctrl-Break c bm. Nu Break=False vic kim tra
ch tin hnh khi vo ra (I/O) vi bn phm hoc my in.

154. Th tc SETCOLOR(Graph Unit)
C php: Setcolor(color:word);
Cng dng: chn mu cho nt v theo s hiu mu color .
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 187
155. Th tc SETDATE(DOS Unit)
C php: Setdate(Year, Month, Day:word);
Cng dng: Cp nht ng h h thng theo ngy thng nm truyn qua tham bin.

156. Th tc SETFILLPATTERN(Graph Unit)
C php: SetFillPattern(Patter:FillPatterType;color:word);
Cng dng: Thit lp mu t hnh v (do ngi d dng nh ngha t chn)

157. Th tc SETFILLSTYLE(Graph Unit)
C php: SetFillStyle(Pattern:word;color:word);
Cng dng: n nh mu t v mu t.

158. Th tc SETGRAPHMODE(Graph Unit)
C php: SetGraphMode(Mode:Integer);
Cng dng: n nh kiu ho hin hnh.

159. Th tc SETLINESTYPE(Graph Unit)
C php: SetLineStyte(lineStyle:word; Pattern:word: thickness:word);
Cng dng: n nh dng, mu v b dy ca ng v.

160. Th tc SETPALETTE(Graph Unit)
C php: SetPalette(m1:word; m2:shortInt);
Cng dng: i mu th m1 trong bng mu thnh mu m2. (0<=m1<=15)
Setpalette(0,red); i mu th nht trong bng mu thnh mu

161. Th tc SETRGBPALETTE(Graph Unit)
C php: SetRGBPalette(m1,RedValue, Greenvalue,BlueValue:Integer);
Cng dng: thay i cc thnh phn t hp mu, mu m1 trong bng mu c thay
bng t hp mu: ,xanh,lc. Th tc ny ch dng vi cc thit b IBM 8514 v VGA

162. Th tc SETTEXTJUSTIFY(Graph Unit)
C php: Settextjustify(Horiz, Vert:word);
Cng dng: Xc nh v tr hin th vn bn trong mn hnh ho.

163. Th tc SETTEXTSTYLE(Graph Unit)
C php: SetTextStyle(Font:word; direction:word; Charsize:word);
Cng dng: Thit lp Font ch, chiu hin th v kch c ch.



Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 188
164. Th tc SETTIME(DOS Unit)
C php: SetTime(H, M, S, S100:word);
Cng dng: t li gi h thng bao gm gi (H), pht (M), giy (S), phn trm giy
(S100).

165. Th tc SETVIEWPORT(Graph Unit)
C php: SetviewPort(x1,y1,x2,y2:Integer; Clip: Boolean;)
Cng dng: Chn hnh ch nht(x1,y1,x2,y2) lm ca s lm vic. Khi Clip = TRUE
cho php v ra ngoi ca ca s.

166. Th tc SETWRITEMODE(Graph Unit)
C php: SetWriteMode(WriteMode;Integer);
Cng dng: Chn mt trong 2 kiu ng: Copyput(0) hay Xorput (1).

167. Hm SIN
C php: Sin(x:Real):Real;
Cng dng: Cho Sin(x)

168. Hm SIZEOF
C php: Sizeof(Var Variable):word;
Cng dng: Cho kch thc(s byte) ca bin hay kiu d liu.

169. Th tc SOUND(Graph Unit)
C php: Sound(Freq:word);
Cng dng: Pht m thanh c tn s Freg.

170. Hm SQR
C php: Sqr(x:Real):Real; Sqr(x:Integer):Integer;
Cng dng: Cho bnh phng ca x.

171. Hm SQRT
C php: Sqrt(x:Real):Real;
Cng dng: Cho cn bc hai ca x

172. Th tc STR
C php: Str(I:Integer; [:length;] Var S:String);
Str(x:Real; [:length; [:Decimals;]] Var S:String);
Cng dng: i s nguyn hay thc ra chui v ct trong S; length l di ca
chui(s k t), Decimals l ch s sau du chm thp phn.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 189
173. Hm SUCC
C php: Suuc(S:Scalar):Integer;
Cng dng: Cho gi tr tip sau S.

174. Th tc TEXTBACKGROUND(CRT Unit)
C php: TextbackGround(color:Byte);
Cng dng: Thay i mu nn ch vit bng mu ch ra trong color.

175. Th tc TEXTCOLOR(CRT Unit)
C php: TextColor(Color: Byte)
Cng dng: Thay i mu k t bng mu ch ra trong color.

176. Hm TEXTHEIGHT(Graph Unit)
C php: TextHeight(TextString:String):word;
Cng dng: Cho chiu cao(s pixel) ca TextString.

177. Th tc TEXTMODE(CRT Unit)
C php: TextMode(Mode:Word);
Cng dng: Chn Mode vn bn.

178. Hm TEXTWIDTH(Graph Unit)
C php: TextWidth(TextString: String):Word;
Cng dng: Cho chiu rng(s pixel) ca chui TexString.

179. Hm TRUNC
C php: Trunc(x:Real):integer;
Cng dng: Cho phn nguyn ca x.

180. Th tc TRUNCATE
C php: Truncate(Var F);
Cng dng: Ct d liu khi tp k t v tr hin thi ca con tr.

181. Th tc UNPACKTIME(DOS Unit)
C php: UnPackTime(Time:Longint; Var DT:DateTime);
Cng dng: Gii m bin Time (l mt s kiu Longint v cha trong n cc i lng
ngy, gi), tr kt qu v DT. Cu trc ca DateTime l:
TYPE
DateTime = Record
Year,Month,Day,Hour,Min,Sec:word;
End;
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 190
182. Hm UPCASE
C php: Upcase(S:Char):Char;
Cng dng: Chuyn cc k t trong S thnh ch in.

183. Th tc VAL
C php: Val(S:String;Var R:Real;Var Code:Integer);
Val(S:String;Var I:Real;Var Code:Integer);
Cng dng: i chui S thnh s (R hoc I). Nu i chui thnh cng bin Code nhn
gi tr 0. Nu khng i c, code cha s nguyn cho bit v tr ca k t trong chui S
gy li.

184. Hm WHEREX(CRT Unit)
C php: WhereX:Byte;
Cng dng: Cho bit ct ang cha Con tr trong c s hin hnh.

185. Hm WHEREY(CRT Unit)
C php: WhereY:Byte;
Cng dng: Cho bit dng ang cha Con trot trong ca s hin hnh.

186. Th tc WINDOW(CRT Unit)
C php: Window(x1,y1,x2,y2:Byte);
Cng dng: nh ngha mt ca s gc tri trn (x1,y1) v gc phi di l (x2,y2).

187. Th tc WRITE v WRITELN
C php: Write(Var F:File, Parameters); Writeln(Var F:File, Parameters);
Cng dng: Write s ghi gi tr cc tham s ln mn hnh hoc ln tp. Writeln lm vic
ging Write nhng ghi thm du hiu ht dng(CR/LF) vo cui .
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 191
Ph lc 3

nh hng bin dch (Compiler Directive)

nh hng bin dch trong ngn ng Pascal bao gm 52 kiu v c quy nh vit
nh sau:
a. V tr
Cc nh hng bin dch c t ti nhng v tr thch hp trong chng trnh tu
thuc vo cc yu cu c th ca bi ton.

b. Tt c nh hng bin dch u t trong cp k t " { " v " } "
Mi nh hng u c ga tr ngm nh (by default) v trnh bin dch s s dng gi
tr ny nu trong chng trnh khng c nhng nh hng bin dch khc. tm hiu ni
dung ca ton b cc nh hng bin dch trong Pascal xin m Help t trang mn hnh th 1
n trang mn hnh th 2. Di y l mt s nh hng bin dch thng dng:

1. Ghp tp
C php:{$I filename}
nh hng cho trnh bin dch gp tn tp ch nh bi FileName vo lc dch. Kt
qu l tp c chn vo vn bn cn dch ngay pha sau dn hng ny. Phn m rng ngm
nh cho filename l .PAS. Nu trong filename khng ch nh th mc, th trnh bin dch s
tm kim tp trong th mc hin hnh.

2. Kim tra vo ra (Input/Output)
C php:{$I+} hoc {$I-}
Ngm nh: {$I-}
Khng t ng sinh m kim tra kt qu lnh khi c lnh gi n cc th tc vo ra.
Khi dng {$I-}, chng trnh s khng dng ngay c khi c li vo ra (m li khc 0). Mun
kim tra li cn dng hm IOResult . Nu th tc vo ra c li v nh hng l {$I+} th
chng trnh s chm dt v a ra thng bo li.

3. Link Object File
C php: {$L filename}
Yu cu trnh bin dch lin kt tp ch nh bi Filename vi chng trnh hay unit
cn dch. Phn m rng ngm nh ca filename l .OBJ. Nu trong filename khng ch r
ng dn th trnh bin dch s tm tp trong th mc hin hnh.

4. X l s(Numeric Processing)
C php:{$N+} hoc {$N-}
Ngm nh: {$N-}
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 192
nh hng vic pht sinh m du phy ng vi s thc trong Pascal. Vi {$N-}
vic sinh m thc hin tnh ton du phy ng do cc chng trnh trong th vin Run-
Time m nhn. Vi {$N+} s dng b x l s 8087 sinh m.

5. Overlay code generation.
C php: {$O+} hoc {$O-}
Ngm nh: {$O-}
Khi chn {$O+} s cho php unit l Overlay. Trnh to m cc x l c bit
truyn tham s cho cc th tc hay hm c Overlay.

6. Kim tra phm vi (Range)
C php: {$R+} hoc {$R-}
Ngm nh: {$R-} nh hng ny cho khng cho pht sinh m kim tra phm vi.
Vi {$R+} tt c biu thc ch s mng v chui u c kim tra xem c nm trong phm
vi nh ngha hay khng. Tt c cc php gn vo bin kiu v hng v on con cng
u c kim tra phm vi. Nu c li, chng trnh kt thc v hin thng bo li Run-time.
nh hng ny s lm cho chng trnh c kch thc ln v chy chm, ch nn dng khi
chy th chng trnh . Sau khi chng trnh chy tt th nn b.

7. Kim tra trn Stack
C php: {$S+} hoc {$S-}
Ngm nh: {$S-}
nh hng ny khng ch vic sinh m kim tra trn Stack.
Vi {$S+} trnh bin dch sinh m phn u ca tng th tc hay hm kim tra
c chiu di Stack cho cc bin cc b v vng nh khc. Khi khng chiu di Stack th
lnh gi n th tc hay hm c bin dch vi {$S+} s chm dt chng trnh v xut
hin thng bo li Run-time.
Vi {$S-} lnh gi nh th s a n ngng h thng.

8. {$U-} hoc {$U+}
Ngm nh {$U-}
nh hng ny khng cho php dng t hp phm Ctrl - C ngt chng trnh. Vi
{$U+} ngi s dng c th dng chng trnh bt k lc no bng cch bm t hp Ctrl - C.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 193
Ph lc 4

Thng bo li


tham kho cc thng bo li, t Text Editor (mn hnh son tho chng trnh) hy
g t Error ri bm Ctrl-F1, chng ta s truy nhp vo mc Error - Message. Trong mc ny
Pascal trnh by ba nhm li:

Compile error messages gm cc li t s 1 n s 99 (lin tc)
Compile error messages gm cc li t s 100 n s 170 (lin tc)
Run - Time error messages gm cc li t s 1 n s 216 (khng lin tc)

Cc li Run-time v Compile c mt s li cng s hiu nhng ngha khc nhau. Do
s lng li kh nhiu nn chng ti b bt mt s li t gp.

1. Li bin dch

S
hiu
li
Thng bo

Gii thch ngha
1 Out of memory B nh khng khi bin dch
2 Identifler
expected
Mt tn c dng khng ph hp. C th bn ang khai bo li
mt danh t ring, t kho ca Turbo Pascal.
3 Unknown
identifier
Tn (hoc bin) cha c khai bo, hoc khng c bit n
trong khi hin thi. C th l mt tn thiu hoc nhm mt
vi k t so vi tn c khai bo.
4 Duplicate
identifier
S dng hai tn trng nhau trong cng mt khi. C th l tn
chng trnh trng tn bin.
5 Syntax error Li chnh t trong vn bn ngun. C th l do b qun du nhy
trn abcde.
6 Error in real
constant
Li khi biu din cc s thc, cch vit sai c th l: .98 (khng
c ch s 0 u).
7 Error in integer
constant
Li biu din s nguyn
8 String constant Thng l do qun nh du kt thc hoc m u mt xu k t,
hoc do v tr du phy v du nhy khng ng.
10 Unexpected end
of file
Kt thc file khng hp l
* File ngun kt thc trc lnh end ca phn lnh chnh, hoc
lnh begin v end khng i cp vi nhau.
* Phn ch thch ng m khng ng
11 Line too long Dng lnh di qu 127 k t
12 Type identifier
expected
Bin (tn) khng ph hp v kiu m ng ra n phi c.
13 Too many open
files
M qu nhiu file hoc trong file CONFIG.SYS khng c khai
bo FILES=n (n l s lng File s m) hoc gi tr n qu nh,
hy tng gi tr ny ln khong t 15 n 20.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 194
14 Invalid file name Tn file khng ng hoc ch nh mt ng dn khng tn ti.
15 File not found Khng tm thy file trong th mc hin hnh hoc trong cc
ng dn ch nh tm kim tng loi file.
16 Disk full a y, khng cn ch. Hy xo b mt vi file, nu l a
mm hay dng a khc.
17 Invalid compiler
directive
K t nh hng dch khng ng hoc cha c bit, mt
trong cc tham s dn hng c th li.
18 Too many files Qu nhiu file (ca chng trnh hay unit ) c a vo dch.
Cn gim s File i.
19 Undefined type
in pointer
definition
Mt kiu c xem nh l con tr tr n kiu c khai bo
trc, song n cha h c khai bo.
20 Variable
identifier
expecvted
Bin (tn) khng th hin mt bin m ng ra n phi c.
21 Error in type Li v kiu d liu
22 Structure too
large
C ln nht cho php ca mt kiu cu trc l 65535 byte.
23 Set base type out
of range
Kiu c bn ca tp hp phi l mt tp con 0..255 hoc l kiu
lit k c khng nhiu hn 256 gi tr.
24 File components
may not be files
or object
Cu trc file of file hoc file of object l khng cho php. Kiu
File v kiu cu trc khng th cha mt kiu object hoc kiu
file.
25 Invalid String
leng
di ca mt chui phi trong khong 1 - 255
26 Type mismatch Li ny xy ra trong cc trng hp sau:
* Gi tr gn cho bin khng tng thch v kiu.
* Tham s thc s v tham s hnh thc khng tng thch v
kiu
* Kiu ca biu thc khng tng thch vi kiu ch s khi lm
ch s mng.
* Khng tng thch gia cc kiu ca cc ton hng trong mt
biu thc.
27 Invalid subrange
base type
Kiu c s ca kiu khong con khng hp l.
28 Lower bound
greater than
upper bound
Khai bo kiu min con cn di cao hn cn trn, hoc gi tr
u v cui trong vng For khng ph hp
29 Ordinal type
expected
Kiu thc, kiu chui, kiu cu trc, kiu con tr khng c cho
php y. Cc kiu ny khng phi l cc kiu m c.
30 Integer constant
expected
Khng vit ng hng s nguyn.
31 Constant
expected
Hng vit khng ng.
32 Integer or real
constant expected
Vit khng ng hng thc hoc hng nguyn.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 195
33 Pointer type
identifier
expected
Bin (tn) khng th hin mt kiu con tr m ng ra n c.
34 Invalid function
result type
Kiu kt qu ca hm khng hp l. Cc kiu kt qu ca hm tr
v hp l l cc kiu n gin, kiu chui v kiu con tr.
35 Label identifier
expected
Tn nhn khng ng.
36 BEGIN expected Thiu t kho Begin hoc
37 END expected Thiu t kho End
38 Integer
expression
expected
Biu thc kiu nguyn khng ng.
39 Ordinal
expression
expected
Biu thc pha trc phi l biu thc m c.
40 Boolean
expression
expected
Biu thc pha trc phi l kiu logic.
41 Operand types
do not match
operator
Ton t s dng trong cc biu thc khng ph hp vi ton
hng, v d A mod 2
42 Error in
expression
Li trong mt thao tc. V d qun vit mt ton t gia hai ton
hng.
43 Legal
assignment
* Khng th gn gi tr cho file v bin khng kiu.
* Tn hm ch c th gn gi tr trong thn ca hm.
44 File identifier
expected
Bin (tn) khng th hin l mt trong bn ghi tng ng hoc
trong bin object.
45 Object file to
large
Pascal khng th lin kt vi cc file .OBJ ln hn 64k.
46 Undefined
external
Th tc hoc hm external khng t nh ngha PUBLIC trong
file object. C th bn ch ra tt c cc file object trong dn
hng bin dich {$L filename}, cn kim tra chnh t trong tn
th tc hay hm trong file ASM.
47 Invallid object
file record
File .OBJ cha mt bn ghi khng hp l. Cn m bo rng file
ny tht s phi l mt file .OBJ.
48 Code segment too
large

B nh dnh cho chng trnh hay unit l 65520 byte (64KB).
Nu chng trnh ln hy chuyn vi th tc hay hm vo trong
mt unit. Nu bn ang bin dch unit hy chia nh n thnh mt
hay nhiu unit .
49 Data segment too
large
Kch thc to nht ca mt on d liu chng trnh l 65520
byte (64KB), k c d liu c khai bo trong cc unit c
dng.
50 Do expected Thiu t kho DO hoc khng ng ch.





Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 196
51 Invalid PUBLIC
defination
nh ngha PUBLIC khng ng.
* Hai hay nhiu ch dn PUBLIC trong ngn ng assemebly nh
ngha cng mt tn.
* File .OBJ nh ngha k hiu PUBLIC khng thuc v on
CODE
52 Invalid EXTRN
definition
nh ngha EXTRN khng ng.
* Bin (tn) c chuyn ti hng dn EXTRN trong ngn ng
asembly. Nhng n khng c khai bo trong chng trnh
Pascal hay unit, khng c c phn giao din ca bt c unit c
dng no.
53 Too many
EXTRN
definitions
Turbo Pascal khng th qun l file .OBJ vi nhiu hn 256 khai
bo EXTRN.
54 OF expected Thiu t kho OF hoc t OF khng xut hin ni n cn c.
55 INTERFACE
expected
Thiu danh t ring Interface.
56 Invalid
relocatable
reference
Ch dn ti nh v b sai

57 Then expected Thiu t THEN hoc n c t khng ng ch
58 To or Downto
expected
T kho To hoc Downto t khng ng v tr.
59 Undefined
forward
* Th tc hoc hm c khai bo trong phn interface ca mt
unit, nhng cha nh ngha trong phn implementation.
* Th tc hoc hm c khai bo vi t kho forwad nhng
nh ngha ca n khng c.
61 Invalid typecast Kch thc ca bin v kiu nhn khc nhau, hoc mt biu
thc c a vo ni ch cho php bin c mt.
62 Division by zero Php chia cho s 0.
63 Invalid file type Kiu file khng ng. V d: readln khng th dng vi file c
kiu hoc seek vi file text.
64 Cannot Read and
Write variables
of this type
Kiu bin khng th p dng trong cc lnh Read hoc Write
65 Pointer variable
expected
Cha khai bo bin kiu con tr.
66 String variable
expected
Cha khai bo bin kiu chui.

67 String expression
expected
Biu thc phi thuc kiu chui.

68 Circular unit
reference
Li v cc Unit tham chiu vng trn (a gi ti b, b gi ti c, c
gi ti a)
69 Unit name
mismatch
Tn ca unit tm thy trong file .TPU khng ph hp vi tn ch
ra trong mnh uses.




Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 197
70 Unit version
mismatch
Mt hoc nhiu unit c dng bi unit ny c thay i t
khi unit c dch. Dng Compliler/Make or Compile/Built trong
IDE v la chn/M hoc /B trong trnh bin dch theo dng lnh
t ng dch li cc unit cn thit.
71 Internal stack
overflow
Trn stack , dung lng hin c ca Stack khng np
nhng g chng trnh yu cu
72 Unit file format
error
File n v chng trnh .TPU b li. C th file c to nn bi
mt version c ca pascal, cn to li file mi bng cch dch li
file ngun.
73 IMPLEMENTA
TION expected
T kho impementation khng xut hin ni cn. C th l do
gp phn imlementation ca mt th tc, mt hm hoc mt hnh
vi vo trong phn interface ca unit.
74 Constan and case
types do not
match
Kiu ca bin chn trong cu trc case khng tng thch vi gi
tr ca cc nhn
75 Record or object
variable expected
Bin phi l kiu d liu bn ghi hoc kiu object.
76 Constant out of
range
Li c th l:
* nh ch s mng vi mt gi tr vt ra ngoi phm vi.
* Gn mt gi tr vt phm vi cho mt bin.
* Cho mt hng vt phm vi lm tham s cho mt bin hoc
hm.
77 File variable
expected
Bin pha trc phi thuc kiu file.
78 Pointer
expression
expected
Biu thc pha trc phi thuc kiu con tr.
79 Integer or real
expected
Biu thc phi l kiu nguyn hay kiu thc
80 Label not within
current block
Nhn khng lin kt vi Block hin ti. Lnh goto nhy ti mt
nhn nm ngoi khi hin ti.
81 Label already
defined
Nhn c s dng
82 Undefined label
in preceding
statement part
Nhn c khai bo v ch dn trong phn lnh trc nhng cha
c nh ngha
83 Invalid @
argument
i s (Argument) hp l cho ton t @ l mt bin, tn th tc
hoc hm.
84 UNIT expected Thiu t kho unit
85 ; expected Thiu du ;
86 : expected Thiu du :
87 , expected Thiu du ,
88 ( expected Thiu du ngoc n m
89 ) expected Thiu du ngoc n ng
90 = expected Thiu du bng
91 := expected Thiu ton t gn

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 198
92 [ or (.
expected
Thiu du mc tri
93 ] or .)
expected
Thiu du mc phi
94 . Expected Thiu du chm .
95 .. expected Thiu du min con .
96 Too many
variables
Qu nhiu bin. (tng cng cc bin ton cc khai bo trong
chng trnh hay unit khng c vt hn 64k. Tng cng cc
bin a phng khai bo trong chng trnh con hay unit cng
khng c vt hn 64k).
97 Invalid FOR
control variable
Bin iu khin trong cu lnh FOR phi thuc kiu n gin
m c v phi c khai bo trc.
98 Integer variable
expected
Bin pha trc phi l kiu nguyn
99 File types are not
allowed here.
Kiu file khng cho php y (hng nh kiu khng th l kiu
file.)
100 String length
mismatch
di ca mt chui k t khng ph hp vi s thnh phn
trong mng k t.
101 Invalid ordering
of fields
Trng ca hng bn ghi hay hng object phi vit trong trt t
ca s khai bo.
102 String constant
expected
Chui hng khng xut hin ni cn c.
103 Integer or real
variable expected
Bin phi thuc kiu nguyn hay kiu thc.
104 Ordinal variable
expected
Bin pha trc phi l kiu m c.
105 INLINE error Ton t < khng cho php cng cc tham chiu ti nh v ti
bin , cc tham chiu nh vy lun lun c kch thc word.
106 Character
expression
expected
Biu thc pha trc phi l kiu k t.
107 Too many
relocation items
Kch thc ca bng ti nh v file kiu .EXE vt hn 64K, li
ny xut hin l do chng trnh qu to nn chng trnh linker
ca Turbo Pascal khng qun l c. N cng c th qu to
DOS thi hnh.
108 Overflow in
arithmetic
operation
Kt qu ca cc php ton s hc khng nm trong phm vi s
nguyn di (-2147483648 .. 21474783647). Hiu chnh php ton
hoc dng gi tr kiu s thc thay th gi tr kiu nguyn.
109 No enclosing
FOR, WHILE, or
REPEAT
statement
Th tc chun Break v continue khng th dng ngoi lnh for,
while hoc repeat.
112 CASE constant
out of range
Trong cu trc CASE cc hng l s nguyn phi trong phm vi
-32768..32767.
113 Error in
statement
K hiu ny khng th bt u mt cu lnh.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 199
114 Cannot call an
interrupt
procedure
Bn khng th trc tip gi mt th tc ngt.
117 Target address
not fount
Lnh Searess Find Error trong IDE hoc la chn /F trong phin
bn dch dng lnh khng pht hin c v tr cu lnh tng
ng vi a ch ch ra.
118 Include files are
not allowed here
Mi phn lnh phi hon ton nm trong mt file.
121 Invalid qualifer Li thuc mt trong cctrng hp sau:
* nh ch s mt bin khng phi l phn t mng.
* Ch ra mt trng trong mt bin khng phi l bn ghi.
* Ly a ch tr v ca mt bin khng phi l con tr.
122 Invalid variable
reference
Chng trnh tham chiu ti bin, nhng bin li khng phi l
mt v tr b nh (v bin phi c lu trong nhng nh c a
ch). Thng l chng trnh ang c gng thay i mt tham s
const hoc ang gi mt hm con tr nhng qun ly a ch tr
v ca kt qu.
123 Too many
symbols
Chng trnh hoc unit khai bo vt qu 64K k hiu. Nu nh
hng dch l {$D+}, hy th t n off, ngha l {$D-}, (iu
ny s ngn tr bn tm li run time trong khi ny). Hy th
chuyn mt s khai bo (hng, bin, kiu) ti mt unit ring r.
124 Statement part
too large
Pascal gii hn dung lng ca phn lnh khong 24K. Gp li
ny, hy ct cc on v a vo mt hay nhiu th tc hn.
126 Files must be var
parameters
Kiu file khng th a lm tham tr trong chng trnh con, kiu
File ch c th l tham bin ngha l phi khai bo vi t kho
Var.
127 Too many
conditional
symbols
Khng ch khai bo k hiu iu kin thm na. C gng
b i vi k hiu hoc rt ngn vi tn tng trng.
129 ENDIF directive
missing
Li khi bin dch cc cu trc c iu kin. S lng ca cc t
kho m {$Ifxxx} v cc t kho ng {$ENDIF}trong file
ngun phi bng nhau.
130 Error in initial
conditional
defines
Cc k hiu iu kin ban u ch nh trong
Option/Compiler/Condition Defines (trong mi trng khp kn
IDE ) hoc trong dch hng bin dch /D (vi trnh bin dch
dng) khng hp l.
131 Header does not
match previous
definition
Cc khai bo phn u (chng trnh) khng ph hp vi khai
bo th tc hoc hm ch ra trong phn interface hoc trong
phn khai bo forward
133 Cannot evaluate
this expression

Khng th c lng (nh gi) biu thc. C th y l mt
php tnh khng hp l. V d bn ang c gng dng hm Sin
trong khai bo const.
134 Expression
incorrectly
terminated
Biu thc kt thc khng hp l. V d cui biu thc phi l
ton hng ch khng phi l ton t.

137 Structured
variables are not
allowed here
Cu trc bin khng cho php thc hin cc thao tc m chng
trnh i hi. V d, bn ang c gng lm php nhn 2 bn ghi.
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 200
138 Cannot evaluate
without system
unit
Th vin TURBO.TPL phi bao gm System Unit chng
trnh g ri c th tnh ton cc biu thc.
140 Invalid floating
point operation
Mt thao tc trn hai ga tr thc to nn s trn hoc mt
php chia cho s 0.
141 Cannot compile
overlays to
memory
Chng trnh dng overlays phi ghi kt qu dch trn a ch
khng th gi vo b nh
142 Pointer or
procedural
variable expected
Hm chun Assigned yu cu i s l mt bin con tr hoc
kiu th tc.
143 Invalid
procedure or
function
reference
Li dng tn mt th tc trong mt biu thc tnh ton.
( Nu bn ang chun b gn mt th tc hoc hm cho mt bin
th tc, n phi c dch trong trng thi {$F+}v khng th
khai bo vi inline hay interrupt.)
144 Cannot overlay
this unit
Bn ang c gng overlay mt unit m n khng c dch vi
trng thi {$0+}.
146 File access denied Khng th m file hay to ra file mi. Li thng xy ra khi trnh
bin dch ang c gng vit vo mt file ch c (Read only file).
147 Object type
expected
Bin (tn) khng th hin mt kiu object.
148 Local object
types are not
allowed
Kiu object ch c th nh ngha tm xa nht ca mt chng
trnh hay unit. nh ngha kiu object trong th tc hay hm l
khng c php.
149 VIRTUAL
expected
T dnh ring virtual b thiu.
150 Method identifier
expected
Bin (tn) khng th hin mt hnh vi.
151 Virtual
constructors are
allowed
Hnh vi constructor phi l tnh.
152 Constructor
identifier
expected
Bin (tn) khng th hin mt constructor.
153 Destructor
identifier
expedted
Bin (tn) khng th hin mt destructor.
154 Fail only allowed
within
constructors
Th tc chun Fail ch c dng bn trong mt constructor.
155 Invalid
combination of
opcode and
operands
M assembler khng chp nhn lin kt cc ton hng. Cc
nguyn nhn c th:
* Qu t hay qu nhiu cc ton hng i vi lnh assembler ny,
v d INC AX, BX hay Mov AX.
* S lng cc ton hng l ph hp, nhng kiu hoc th t
khng ph hp vi m; v d DEC1, MOV AX, CL hoc MOV
1, AX.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 201
161 Code generation
error
Phn lnh pha trc cha mt lnh LOOPNE, LOOPE, LOOP,
hoc JCXZ song cc lnh nhy ny khng th vi ti nhn ch.
162 ASM expected Bn ang c gng bin dch mt hm hoc th tc assembler c
sn bn trong v chng cha mt cu lnh begin...end thay v
dng asm...end.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 202

2. Li lin quan n h iu hnh DOS (Dos errors)


1 Invalid function
number
S hiu ca mt hm (DOS) khng tn ti
2
File Not Found
Khng tm thy file (c th l do cc th tc Reset, Append,
Rename, Rewrite, Erase bo li khi tn File khng hp l
hoc tn gn cho bin file khng xc nh mt file tn ti.)
3 Path not found ng dn khng tm thy, li c th l do:
Cc th tc Reset, Append, Rename, Rewrite, ChDir, Mkdir
RmDir hoc Erase gp tn gn cho tn bin file khng hp l
hoc ng dn ti mt th mc con khng tn ti.
4 Too many open
files
Do cc th tc Reset, Rewrite hoc Append bo li nu
chng trnh c qu nhiu file c m. DOS khng cho
php m qu 15 file cho mt ng dng. Nu gp li ny khi
m t hn 15 file th c th l trong file CONGIG.SYS khng
cha khai bo FILES=n hoc gi tr n qa nh hy tng n ln
5 File access denied T chi truy cp fille, li c th xy ra khi cc th tc:
* lm vic vi file nhng li b ch nh ti tn th mc
* lm vic vi cc file gn thuc tnh ch c.
* Lm vic vi cc file cha c m
6 Invalid file handle Li ny c bo li nu mt th file khng hp l c
chuyn ti mt li gi h thng DOS, nguyn nhn c th l
do file b li.
12 Invalid file access
code
Th tc Reset hoc Append gp phi mt file c kiu hoc
khng c kiu m gi tr FileMode khng hp l.
15 Invalid drive
number
Do cc th tc GetDir hoc ChDir bo li nu m s a
khng hp l.
16 Cannot remove
current directory
Khng th chuyn th mc ang lm vic (bi th tc
RmDir)
17 Cannot rename
across drives
Khng i c tn v hai tn khng c cng ng dn
18 No more files Do bin DosError trong unit Dos v WinDos bo li khi mt
li gi ti FindFirst hoc FindNext khng tm thy file thch
hp vi tn file v tp cc thuc tnh ch ra.


3. Li vo ra (Input/Output error)

Li vo ra thng xut hin khi bin dch chng trnh, nu nh hng dch l {$I+}
(ngm nh) th chng trnh s dng ngay khi gp li. Nu u chng trnh chng ta quy
nh {$I-} th chng trnh tip tc thi hnh, v li c thng bo bi hm IOResult. Di
y l nhng li hay gp:


Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 203

100
Disk read error
Li c d liu, thng l do th tc Read thng bo khi
trn mt file c kiu nu bn ang c gng c qu v tr
cui file.
101 Disk write error

Li khi thc hin cc th tc Close, Write, Writeln hoc
Flush khi a y
102 File not assigned File khng th to ra, li ny xut hin khi thc hin cc
th tc Reset, Rewrite, Append, Rename v Erase nhng
bin file cha c gn tn qua th tc Assign.
103 File not open File cha c m khi thc hin cc th tc Close, Read,
Write, Seek, Eof, FilePos, FileSize, Flush, BlockRead
hoc BlockWrite .
104 File not open for
input
File (vn bn) cha c m c khi thc hin cc th
tc Read, Readln, Eof, Eoln, SeekEof hoc SeekEoln .
105 File not open for
output
File cha c m ghi khi thc hin cc th tc Write
hoc Writeln .
106 Invalid numeric
format
Tr s c t file vn bn khng ng vi dng s hp l
Khi thc hin cc th tc Read hoc Readln .


4. Cc li lin quan n phn cng

Cc li lin quan n phn cng c th tham kho thm trong cc ti liu v h iu
hnh MS-DOS


150 Disk is write
protected
a (mm) b kho chng ghi. Hy b cc ly chng ghi
trn a ra.
151 Unknown Unit Tn n v chng trnh cha c bit n
152 Drive not ready a khng sn sng. C th do cha a a vo, c th
mt ngun in nui.
153 Unknown command Khng c lnh ny. Chc b g nhm mt vi k t.
154 CRC error in data Li vng d liu
155 Bad drive request
structure length

156 Disk seek error Li khi truy nhp a
157 Unknown media
type
Kiu thit b khng r
158 Sector not found Cung t khng tm thy. C l b hng do nhiu nguyn
nhn: mc, xc hoc b bi bn...
159 Printer out of paper My in khng c giy
160 Device write fault Vic ghi vo thit b khng thc hin c
161 Device read fault Vic c b li
162 Hardware failure Phn cng b hng

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 204
5. Li trnh bin dch (run-time error)

Khi trnh bin dch gp cc li ny chng trnh s b dng ngay lp tc.

200 Division by zero Chng trnh c gng chia mt s cho 0 trong php ton
mod hoc div.
201 Range check error Nu nh hng bin dch l {$R+} th li s c thng
bo khi mt trong cc tnh hung sau xy ra:
* Ch s ca mt mng vt ra ngoi phm vi khai bo
* Gn mt gi tr vt ra ngoi phm vi cho php ca mt
bin.
* Gi tr gn cho tham s ca mt hm hay mt bin vt
ra ngoi phm vi cho php
202 Stack overflow
error
Stack b trn. Nu nh hng bin dch l {$S+} th li s
c thng bo khi khng c ch trng trn stack
b tr b nh cc b ca cc chng trnh con. C th thay
i Stack bng cch dng nh hng bin dch $M.
* Li ny cng c th do vng lp v tn gy ra, hoc do
mt th tc vit trong ngn ng assembler khng duy tr
tnh trng stack.
203 Heap overflow error Li ny do cc th tc New hoc GetMem bo li nu
khng cn ch trng trong heap cp pht mt vng
nh theo yu cu.
204 Invalid pointer
operation
Li ny do cc th tc Dispose hoc FreeMem gy ra nu
nh con tr l Nil hoc tr ti mt v tr nm ngoi heap.
205 Floating point
overflow
Php tnh vi du chm ng to ra kt qu l mt s qu
ln .
207 Invalid floating
point operation
Mt tham s thc trong cc hm Trunc hoc Round khng
th chuyn i thnh mt s nguyn trong phm vi s
nguyn di LongInt (-2147483648 - 2147483647).
* Tham s ca hm Sqrt mang gi tr m.
* Tham s ca hm Ln l zero hoc m.
* S trn 8087 xy ra. (xem trong chng 14. Using
the 80x87 trong cun Language gude.)
208 Overlay manager
not installed
Trnh qun l overlay cha c ci t. Li c th l do
khng gi OverInit hoc li gi OverInit khng chy.
209 Overlay file read
error
Li xy ra khi trnh qun l overlay c gng c mt
overlay t file overlay.

Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 205

Mc lc

Li m u 2
Chng 1: Chng trnh con - Th tc v hm 2
1. Khi nim v chng trnh con 4
2. Tham s trong chng trnh con 5
3. Truyn tham s cho chng trnh con 8
4. Bin ton cc v bin a phng 9
5. Cch thc b tr b nh 11
6. Tnh quy ca chng trnh con 12
7. Li gi chng trnh con 13
8. Khai bo trc bng Forward 16
Bi tp ng dng chng 1 19
Chng 2: Cc kiu d liu c cu trc 20
1. D liu kiu bn ghi 21
2. D liu kiu tp 37
3. D liu kiu tp hp 58
Bi tp ng dng chng 2 67

Chng 3: n v chng trnh v th vin chun 69
1. Khi nim n v chng trnh 70
2. Th vin chun 70
3. Cc Unit khc 71
4. Xy dng cc Unit 72
5. Tham chiu n cc Unit 78
6. Trnh tin ch Tpumover 81
8. Mt s Unit chun 83
Bi tp ng dng chng 3 94

Chng 4: Con tr v cu trc ng 95
1. Khi nim 96
2. Kiu d liu con tr - Bin con tr 96
3. Cc th tc v hm tc ng trn con tr 92
4. Truy nhp d liu 94
5. Mng con tr v con tr mng 96
6. Cp pht ng 99
7. Danh sch lin kt v hng i 105
8. Cy nh phn 117
Bi tp ng dng chng 4

Chng 5: Gii thut quy 126
1. Khi nim quy 126
2. Thit k gii thut quy - Kh quy 130
3. Hiu lc bi ton quy 130
Bi tp ng dng chng 5
Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 206


Chng 6: ho 132
1. Khi nim chung 132
2. Mt s th tc c bn v hnh 134
3. Thit lp mu ho 134
4. Vit ch trong ch ho 135
5. Cc v d 137
6. X l nh Bitmap 144
7. th hm s 149
Bi tp ng dng chng 6 152

Ph lc 1
Bng m ASCII 161

Ph lc 2
Tm tt cc th tc v hm ca Turbo Pascal 7.0 166

Ph lc 3
nh hng bin dch 191

Ph lc 4
Thng bo li 180
1. Li bin dch 180
2. Li lin quan n h iu hnh 188
3. Li vo ra 188
4. Cc li lin quan n phn cng 189
5. Li trnh bin dch 190

Mc lc 205

Ti liu tham kho 207















Trng i hc Nng nghip 1 - Gio trnh Lp trnh nng cao ..............................................................- 207


Ti liu tham kho

1. Dng Xun Thnh, Tin hc i cng, Nxb Thng k 2003
2. Dng Xun Thnh, Gio trnh ngn ng lp trnh Pascal, Nxb Thng k 2004
3. xun Li, Cu trc d liu v gii thut, Nxb Khoa hc v K thut - 1998
4. Nguyn T Thnh, Lp trnh nng cao trn ngn ng Pascal,
Nxb i hc quc gia 2001
5. Larry Nyhoff - Sanford Leeostima, Lp trnh nng cao bng Pascal vi cc cu trc
d liu, Nxb nng 1998
6. Quch Tun Ngc, Bi tp ngn ng lp trnh Pascal, Nxb Thng k 2001

You might also like