Professional Documents
Culture Documents
Giao Trinh Ngon Ngu Lap Trinh
Giao Trinh Ngon Ngu Lap Trinh
NGUYN VN LINH
NGN NG LP TRNH
c bin son trong khun kh d n ASVIET002CNTT
Tng cng hiu qu o to v nng lc t o to ca sinh vin
khoa Cng ngh Thng tin - i hc Cn th
I HC CN TH - 12/2003
Ngn ng lp trnh
Mc lc
CHNG 0:
TNG QUAN .................................................................................................i
0.1
MC CH YU CU...............................................................................................i
0.2
I TNG S DNG ............................................................................................i
0.3
NI DUNG CT LI.................................................................................................i
0.4
KIN THC TIN QUYT......................................................................................ii
0.5
DANH MC TI LIU THAM KHO ...................................................................ii
CHNG 1:
M U ........................................................................................................ 1
1.1
TNG QUAN ............................................................................................................ 1
1.2
KHI NIM V NGN NG LP TRNH ............................................................ 1
1.3
VAI TR CA NGN NG LP TRNH .............................................................. 2
1.4
LI CH CA VIC NGHIN CU NNLT ............................................................ 3
1.5
CC TIU CHUN NH GI MT NGN NG LP TRNH TT ............... 4
1.6
CU HI N TP .................................................................................................... 7
CHNG 2:
KIU D LIU..............................................................................................8
2.1
TNG QUAN ............................................................................................................ 8
2.2
I TNG D LIU............................................................................................. 8
2.3
BIN V HNG .....................................................................................................10
2.4
KIU D LIU........................................................................................................10
2.5
S KHAI BO ........................................................................................................ 13
2.6
KIM TRA KIU V BIN I KIU................................................................. 14
2.7
CHUYN I KIU............................................................................................... 17
2.8
GN V KHI TO .............................................................................................. 17
2.9
CU HI N TP .................................................................................................. 20
CHNG 3:
KIU D LIU S CP............................................................................. 22
3.1
TNG QUAN .......................................................................................................... 22
3.2
NH NGHA KIU D LIU S CP................................................................ 22
3.3
S C T CC KIU D LIU S CP ......................................................... 22
3.4
CI T CC KIU D LIU S CP .............................................................. 23
3.5
KIU D LIU S ................................................................................................. 24
3.6
KIU LIT K......................................................................................................... 27
3.7
KIU LOGIC ........................................................................................................... 28
3.8
KIU K T ........................................................................................................... 29
3.9
CU HI N TP .................................................................................................. 29
CHNG 4:
KIU D LIU C CU TRC................................................................30
4.1
TNG QUAN .......................................................................................................... 30
4.2
NH NGHA KIU D LIU C CU TRC ...................................................30
4.3
S C T KIU CU TRC D LIU ............................................................ 30
4.4
S CI T CC CU TRC D LIU ............................................................ 32
4.5
VCT..................................................................................................................... 34
4.6
MNG NHIU CHIU ........................................................................................... 36
4.7
MU TIN .................................................................................................................39
4.8
MU TIN C CU TRC THAY I ................................................................. 41
4.9
CHUI K T: ....................................................................................................... 45
4.10 CU TRC D LIU C KCH THC THAY I ........................................ 47
4.11 CON TR................................................................................................................. 48
4.12 TP HP.................................................................................................................. 50
4.13 TP TIN ................................................................................................................... 52
4.14 CU HI N TP .................................................................................................. 54
CHNG 5:
KIU DO NGI DNG NH NGHA .................................................. 58
5.1
TNG QUAN .......................................................................................................... 58
5.2
S PHT TRIN CA KHI NIM KIU D LIU ......................................... 58
Ngn ng lp trnh
Mc lc
5.3
TRU TNG HA .............................................................................................. 58
5.4
NH NGHA KIU................................................................................................ 60
5.5
CU HI N TP .................................................................................................. 62
CHNG 6:
CHNG TRNH CON .............................................................................. 63
6.1
TNG QUAN .......................................................................................................... 63
6.2
NH NGHA CHNG TRNH CON ................................................................. 63
6.3
C CH GI CHNG TRNH CON .................................................................. 65
6.4
CHNG TRNH CON CHUNG ........................................................................... 68
6.5
TRUYN THAM S CHO CHNG TRNH CON............................................. 68
6.6
CU HI N TP ................................................................................................. 70
CHNG 7:
IU KHIN TUN T............................................................................. 71
7.1
TNG QUAN .......................................................................................................... 71
7.2
KHI NIM IU KHIN TUN T .................................................................. 71
7.3
IU KHIN TUN T TRONG BIU THC ................................................... 71
7.4
IU KHIN TUN T GIA CC LNH ........................................................ 75
7.5
S NGOI L V X L NGOI L ................................................................. 78
7.6
CU HI N TP .................................................................................................. 80
CHNG 8:
LP TRNH HM ....................................................................................... 81
8.1
TNG QUAN .......................................................................................................... 81
8.2
NGN NG LP TRNH HM............................................................................. 81
8.3
NGN NG LISP ................................................................................................... 83
CHNG 9:
LP TRNH LOGIC .................................................................................... 95
9.1
TNG QUAN .......................................................................................................... 95
9.2
GII THIU V LP TRNH LOGIC ................................................................... 95
9.3
NGN NG PROLOG............................................................................................ 96
Ngn ng lp trnh
Tng quan
TNG QUAN
MC CH YU CU
Mc ch ca mn hc Ngn ng lp trnh l cung cp cho sinh vin mt khi lng
kin thc tng i hon chnh v nguyn l ca ngn ng lp trnh. Cng vi mn
hc Tin hc l thuyt, Ngn ng lp trnh s l mn hc tin quyt hc mn Trnh
bin dch. Sau khi hc xong mn hc ny, sinh vin cn:
- Nm c cc khi nim v i tng d liu v kiu d liu. Cc kha
cnh cn nghin cu khi c t v ci t mt kiu d liu. Vn kim tra
kiu v chuyn i kiu cng cn c quan tm.
- Nm c cc kiu d liu s cp v c cu trc. Vi mi kiu d liu cn
nm nh ngha, c t v cch ci t kiu d liu.
- Nm c khi nim tru tng ho trong lp trnh th hin trn hai kha
cnh l tru tng ho d liu bng cch s dng cc kiu d liu t nh
ngha v tru tng ho chng trnh bng cch chia chng trnh thnh
cc chng trnh con. Vn truyn tham s cho chng trnh con cng cn
c lu tm.
- Nm c khi nim iu khin tun t, nguyn tc iu khin tun t trong
biu thc v gia cc cu lnh.
I TNG S DNG
Mn hc ngn ng lp trnh c dng ging dy cho cc sinh vin nm th 4
chuyn ngnh Tin hc.
NI DUNG CT LI
Trong khun kh 45 tit, gio trnh c cu trc thnh 9 chng
Chng 1: M u. Chng ny trnh by khi nim v ngn ng lp trnh, li ch
ca vic nghin cu ngn ng lp trnh v cc tiu chun nh gi mt ngn ng
lp trnh tt.
Chng 2: Kiu d liu. Chng ny trnh by cc khi nim v i tng d liu
v kiu d liu; cc phng php kim tra kiu v chuyn i kiu; Php gn tr cho
bin v s khi to bin.
Chng 3: Kiu d liu s cp. Chng ny trnh by khi nim v kiu d liu s
cp, s c t v nguyn tc ci t mt kiu d liu s cp ni chung. Phn ch yu
ca chng trnh by mt s kiu d liu s cp ph bin nh cc kiu s, kiu min
con, kiu lit k, kiu k t v kiu logic.
Chng 4: Kiu d liu c cu trc. Chng ny trnh by khi nim v kiu d
liu c cu trc, s c t cc thuc tnh, c t php ton, c bit l php ton la
chn mt phn t; cc phng php lu tr mt cu trc d liu trong b nh v
phng php la chn phn t. Ni dung ch yu ca chng trnh by cc cu trc
c th nh mng, mu tin, chui k t, tp hp
Chng 5: Kiu d liu t nh ngha. Chng ny trnh by v s tru tng ho,
nh ngha kiu d liu v s tng ng ca cc kiu d liu c nh ngh.
Ngn ng lp trnh
Tng quan
ii
Ngn ng lp trnh
Chng I: M u
CHNG 1: M U
1.1
TNG QUAN
1.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v phn loi cc ngn ng lp trnh.
- Vai tr ca ngn ng lp trnh trong cng ngh phn mm.
- Li ch ca vic nghin cu ngn ng lp trnh.
- Cc tiu chun nh gi ngn ng lp trnh.
1.1.2 Ni dung ct li
- Khi nim v ngn ng lp trnh.
- Vai tr ca ngn ng lp trnh.
- Li ch ca vic nghin cu ngn ng lp trnh.
- Cc tiu chun nh gi mt ngn ng lp trnh tt.
1.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn
1.2
Ngn ng lp trnh
Chng I: M u
(vit ta ting Anh) ch php ton cn thc hin v phn tn bin ch a ch cha ton
hng ca php ton .
my thc hin c mt chng trnh vit bng hp ng th chng trnh phi
c dch sang ngn ng my. Cng c thc hin vic dch c gi l Assembler.
Ngn ng cp cao (High level language): L ngn ng c to ra v pht trin
nhm phn nh cch thc ngi lp trnh ngh v lm. Ngn ng cp cao rt gn vi
ngn ng con ngi (Anh ng) nhng chnh xc nh ngn ng ton hc. Nh ngn
ng cp cao m lnh vc lp trnh tr nn ph bin, rt nhiu ngi c th vit c
chng trnh, v nh th m cc phn mm pht trin nh v bo, phc v nhiu lnh
vc ca cuc sng. Cng vi s pht trin ca cc th h my tnh, ngn ng lp trnh
cp cao cng c pht trin rt a dng v phong ph, vic lp trnh cho my tnh v
th m cng c nhiu khuynh hng khc nhau: lp trnh cu trc, lp trnh hng i
tng, lp trnh logic, lp trnh hm... Mt chng trnh vit bng ngn ng cp cao
c gi l chng trnh ngun (source programs). my tnh "hiu" v thc hin
c cc lnh trong chng trnh ngun th phi c mt chng trnh dch dch
chng trnh ngun (vit bng ngn ng cp cao) thnh chng trnh ch.
Trong khun kh ti liu ny, thut ng ngn ng lp trnh dng ch ngn ng lp
trnh cp cao.
1.3
Chp nhn: Do cc chuyn vin tin hc cng vi khch hng tin hnh nhm
xc nhn h thng chng trnh bo m cc yu cu ca ngi s dng.
Ngn ng lp trnh
Chng I: M u
Trc khi nghin cu v NNLT, chng ta cn tho lun xem v sao cc sinh vin tin
hc v cc nh lp trnh chuyn nghip cn phi nm cc khi nim tng qut v
NNLT. Vic nghin cu tt NNLT s t c cc li ch nh sau:
1.4.1 Cho php la chn mt NNLT ph hp vi d n thc t
Hin nay c rt nhiu d n cng ngh thng tin ng dng vo nhiu lnh vc khc
nhau ca cuc sng. Do tnh cht ca tng d n m phn mm c th c ci t
bng cc NNLT khc nhau. Vi mt vn kin thc rng v NNLT, nhng ngi lm
d n c th la chn nhanh chng mt NNLT ph hp vi n thc t. Chng hn
c th la chn ngn ng lp trnh Java cho cc d n lp trnh truyn thng, hay
hng lp trnh logic cho cc d n v tr tu nhn to.
1.4.2 S dng mt cch c hiu qu cc cng c ca ngn ng
Cc ngn ng ni chung u cung cp nhng cng c c bit to ra cc tin ch
cho lp trnh vin, nhng khi s dng chng khng ng n c th s gy ra nhng
sai lm ln. Mt v d in hnh l php quy (recursion) - mt cng c lp trnh c
bit c hiu lc trong nhiu ngn ng. Khi s dng quy mt cch ng n th c
th ci t mt gii thut p v c hiu qu. Nhng trong trng hp khc n c
th gy ra mt s lng ph thi gian chy my rt ln cho mt gii thut n gin.
iu ny c th trnh c nu nh lp trnh vin c mt s hiu bit su sc v ngn
ng lp trnh v cc ci t bn trong n.
1.4.3 Lm tng vn kinh nghim khi xy dng cc chng trnh
Nu ngi lp trnh c s nghin cu mt cch rng ri nhiu ngn ng m mt
trong chng c ci t sn nhng cng c no th anh ta c th t thit lp nhng
cng c tng t khi phi vit chng trnh bi mt ngn ng m trong cc cng
c nh th cha c ci t.
1.4.4 To s d dng hc mt ngn ng mi
Mc d c nhiu NNLT khc nhau nhng chng u c nhng nguyn tc chung ca
NNLT. Rt nhiu ngn ng c chung c php (sai khc nhau cht t v cch vit), c
chung cc kiu d liu (sai khc nhau cht t v tn gi). Vic nm vng cc nguyn l
c bn ca NNLT s l mt iu kin thun li ln tip cn mt cch nhanh chng
vi mt ngn ng lp trnh c th mi. Thc t cho thy rng vi nhng ngi nm
vng NNLT, khi gp mt ngn ng lp trnh c th mi, h c th va nghin cu
ngn ng mi ny va p dng lp trnh gii quyt mt bi ton theo yu cu.
3
Ngn ng lp trnh
Chng I: M u
i=1;
IF i>10 THEN GOTO 60;
PRINT i ;
i=i+1;
GOTO 20;
PRINT In xong;
FOR i:=1 TO 10 DO
Writeln(i);
Writeln(In xong);
3.- Kiu d liu v cu trc d liu. Xem xt kiu d liu v cu trc d liu ca mt
ngn ng cng gp phn nh gi mt ngn ng c d c hay khng. Chng hn
trong cc ngn ng khng c kiu d liu logic th phi s dng kiu s thay th v
do m chng trnh tr nn kh c. V d ta hay s dng bin found trong cc
chng trnh tm kim mt phn t x trong mt mng a gm n phn t. Nu ngn ng
s dng c kiu logic th ta c th gn cho found gi tr TRUE hoc FALSE biu
din trng thi tm thy phn t cn tm hay khng, ngc li i vi cc ngn ng
khng c kiu logic th ta phi dng kiu s v gn cho found gi tr 1 hoc 0. Ta hy
so snh hai on chng trnh sau xem on chng trnh no d hiu hn.
4
Ngn ng lp trnh
Chng I: M u
found := 0;
i := 1;
While (i<=n)and (found=0) do
IF a[i]=x THEN found := 1
ELSE i := i+1;
found := FALSE;
i := 1;
While(i<=n)and(NOT found) do
IF a[i]=x THEN found:= TRUE
ELSE i:=i+1;
Ngn ng lp trnh
Chng I: M u
1.5.3 tin cy
tin cy ca mt ngn ng lp trnh l kh nng ca ngn ng h tr ngi lp
trnh to ra cc chng trnh ng n. tin cy c th hin bi cc c trng sau:
1.- Kim tra kiu. L kim tra li v kiu ca chng trnh trong giai on dch hoc
trong khi thc hin. Kim tra kiu l mt yu t quan trng m bo tin cy ca
ngn ng. Kim tra kiu s bo cho ngi lp trnh bit cc li v kiu v yu cu h
c cc sa cha cn thit c mt chng trnh ng.
2.- X l ngoi l (Exception Handing). L mt cng c cho php chng trnh pht
hin cc li trong thi gian thc hin, to kh nng sa cha chng v sau tip
tc thc hin m khng phi dng chng trnh.
3.- S lm tn (Aliasing): Khi c hai hay nhiu tn cng lin kt ti mt nh ta gi
l s lm tn. Chng hn cc bin con tr trong ngn ng Pascal cng tr n mt
nh. S lm tn c th lm gim tin cy do ngi lp trnh khng kim sot c
gi tr c lu tr trong nh. Hy xt v d sau trong Pascal
Var p, q: ^integer;
Begin
New(p);
p^ := 50;
q:= p; {C q v p cng tr n mt nh}
writeln(p^, v , q^);
q^ := 20;
writeln(p^, v , q^);
end;
Ngn ng lp trnh
1.6
Chng I: M u
Ngn ng lp trnh
TNG QUAN
2.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v i tng d liu, bin, hng.
- Khi nim v kiu d liu.
- Cc phng php kim tra kiu v bin i kiu.
2.1.2 Ni dung ct li
- Cc khi nim v i tng d liu, kiu d liu.
- S khai bo cc i tng d liu trong chng trnh.
- Kim tra kiu, bin i kiu d liu.
- Vn gn gi tr v khi to bin.
2.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn
2.2
I TNG D LIU
Ngn ng lp trnh
Ngn ng lp trnh
BIN V HNG
2.3.1 Bin
Bin l mt TDL c ngi lp trnh nh ngha v t tn mt cch tng minh
trong chng trnh. Gi tr ca bin c th b thay i trong thi gian tn ti ca n.
Tn bin c dng xc nh v tham kho ti bin. Trong cc NNLT, tn bin
thng c quy nh di dng mt dy cc ch ci, du gch di v cc ch s,
bt u bng mt ch ci v c chiu di hu hn.
2.3.2 Hng
Hng l mt TDL c tn v gi tr ca hng khng thay i trong thi gian tn ti
ca n.
Hng trc kin (literal constant) l mt hng m tn ca n l s m t gi tr ca n
(chng hn "27" l s m t s thp phn ca TDL gi tr 27). Ch s khc bit
gia 2 gi tr 27. Mt ci l mt s nguyn c biu din thnh mt dy cc bit trong
b nh trong qu trnh thc hin chng trnh v ci tn "27" l mt chui 2 k t "2"
v "7" m t mt s nguyn nh n c vit trong chng trnh.
2.4
KIU D LIU
10
Ngn ng lp trnh
11
Ngn ng lp trnh
Ngn ng lp trnh
S KHAI BO
Ngn ng lp trnh
Ngn ng lp trnh c chia lm hai loi: ngn ng khai bo, trong cc TDL
phi c khai bo trc khi s dng v ngn ng khng khai bo, trong TDL
c th s dng m khng cn phi khai bo. Vi ngn ng khai bo, TDL sau khi
khai bo phi s dng ng nh n c khai bo, trong khi i vi ngn ng
khng khai bo, mt TDL c th s dng mt cch tu thch. y l mt trong
nhng l do lm cho ngn ng khng khai bo tr nn mm do hn.
2.5.2 Mc ch ca s khai bo
Vic khai bo c cc mc ch quan trng sau:
Chn mt t chc lu tr tt nht cho TDL. Chng hn trong ngn ng Pascal
lu tr ngy trong thng ta c th khai bo bin ngay c kiu l integer c
lu tr trong b nh bi 2 byte. Tuy nhin trong mt thng ch c ti a 31
ngy nn ta c th khai bo bin ngay c kiu min con 1..31 c lu tr trong
b nh ch vi 1 byte.
Qun l b nh: S khai bo cho php xc nh thi gian tn ti ca TDL m
cc chng trnh qun l b nh s dng cp pht v gii phng b nh cho
TDL.
Cc php ton chung. Hu ht cc ngn ng u dng cc k hiu c bit nh
"+" ch mt php ton no ph thuc vo kiu d liu ca i s. V d
trong Pascal, "A+B" c ngha l "php cng cc s nguyn" nu A v B thuc
kiu Integer, "php cng cc s thc" nu A v B thuc kiu real v l "php
hp" nu A v B thuc kiu tp hp. Cc php ton nh th c gi l cc
php ton chung bi v n khng ch r mt php ton nht nh no. S khai
bo cho php b dch xc nh mt php ton c th c ch nh bi k hiu
php ton chung. V d trong Pascal, t s khai bo hai bin A v B, trnh bin
dch s xc nh c php ton c th trong ba php ton, theo nu A, B l
cc bin integer th "A+B" l php cng hai s nguyn, nu A, B l hai bin
real th "A+B" l php cng hai s thc Ngc li trong SNOBOL4 v khng
c khai bo kiu cho bin nn s xc nh php "+" no thc hin phi c
lm ti thi im m mt php "+" b bt gp trong qu trnh thc hin chng
trnh.
Kim tra kiu. Mc ch quan trng nht ca vic khai bo l chng cho php
kim tra kiu ca bin. V tnh cht quan trng ca vic kim tra kiu nn
chng ta s xem xt n trong mc sau.
2.6
Ngn ng lp trnh
Kim tra kiu c th c tin hnh trong lc chy chng trnh (kim tra kiu ng)
hoc trong lc bin dch chng trnh (kim tra kiu tnh).
2.6.2 Kim tra kiu ng
Khi nim:
Kim tra kiu ng l kim tra kiu c thc hin trong khi thc hin chng trnh.
Thng thng kim tra kiu ng c thc hin mt cch tc th trc khi thc hin
mt php ton.
Phng php thc hin:
kim tra kiu ng ngi ta phi lu tr thng tin v kiu ca mi mt TDL cng
vi TDL . Trc khi thc hin mt php ton thng tin v kiu ca mi mt i s
c kim tra. Nu kiu ca cc i s l ng th php ton s c thc hin v kiu
ca kt qu s c ghi li dng kim tra cho cc php ton sau, ngc li s c
mt thng bo li v kiu .
Ngn ng s dng:
Kim tra kiu ng c s dng trong cc ngn ng khng khai bo nh
SNOBOL4, LISP, APL. Trong cc ngn ng ny khng c s khai bo kiu cho bin.
Kiu d liu ca cc bin A v B trong biu thc "A+B" c th thay i trong qu
trnh thc hin chng trnh. Trong nhng trng hp nh vy, kiu ca A v B phi
c kim tra ng ti mi ln php cng c gi thc hin. Trong cc ngn ng
khng khai bo, cc bin i khi c gi l khng nh kiu v chng khng c kiu
c nh.
u im:
u im ch yu ca kim tra kiu ng l tnh mm do trong khi vit chng trnh:
khng yu cu khai bo kiu v kiu ca TDL c th thay i trong qu trnh thc
hin chng trnh. Ngi lp trnh khng phi lo lng v kiu d liu.
Nhc im:
Tuy nhin kim tra kiu ng cng c mt s yu im nh sau:
C kh nng b st li v kiu. Bi v vic kim tra ng ch kim tra ti thi
im thc hin php ton do cc php ton nm trong nhnh chng trnh
khng c thc hin th s khng c kim tra. Bt k mt nhnh cha c
kim tra no u c th cha cc i s c li v kiu v do cc li ny c
th xut hin ti thi im sau . V d ta c mt on chng trnh sau c
vit trong mt ngn ng kim tra kiu ng:
Nhp s a t bn phm;
Nhp s b t bn phm;
Nu a > b
Th x := a + b
Ngc li x := a + titi;
Nu khi thc hin on chng trnh ny, ngi s dng lun lun nhp s a
ln hn s b th iu kin a>b lun lun ng nn khng bao gi chng trnh
15
Ngn ng lp trnh
16
Ngn ng lp trnh
CHUYN I KIU
Trong qu trnh kim tra kiu, nu c s khng tng thch gia kiu thc ca i s
v kiu ang c monng i ca php ton y th c hai la chn c th:
S khng tng thch kiu b bo li hoc
Mt s chuyn i kiu t ng c thi hnh i kiu ca i s thc t
thnh kiu ng vi yu cu.
Chuyn i kiu l mt php ton c nh ngha nh sau:
S chuyn i: Kiu1 -> Kiu2 ngha l s chuyn i ly TDL ca mt kiu v sn
sinh ra mt TDL "tng ng" ca mt kiu khc. Hu ht cc ngn ng u cung
cp hai phng php chuyn i kiu:
Trang b mt tp hp cc hm c xy dng m ngi lp trnh c th gi
trong chng trnh to ra s chuyn i kiu. V d Pascal trang b hm
ROUND i mt TDL s thc thnh mt i tng d liu nguyn vi gi
tr bng phn nguyn ca s thc.
Nh l mt s chuyn i t ng (cn gi l p kiu) do ngn ng thc hin
trong mt s trng hp khng tng thch kiu no . V d trong Pascal cc
i s ca php ton s hc "+" c ln s thc v s nguyn hoc khi gn mt
s nguyn cho mt bin s thc th s nguyn phi c i mt cch t ng
thnh kiu thc.
i vi kim tra kiu ng th s chuyn i kiu t ng c din ra ti im m s
khng tng thch kiu c tm thy trong qu trnh thc hin chng trnh. i vi
s kim tra kiu tnh th mt m ph s c xen vo trong chng trnh ch dng
gi ti hm bin i kiu ti im thch hp trong qu trnh thc hin.
Chuyn i kiu t ng gip ngi lp trnh khi mi lo lng v s sai kiu v trnh
vic gi ti mt s lng ln cc php bin i kiu tng minh trong chng trnh.
Tuy nhin chng ta nn trnh vic chuyn i kiu bng cch vit cc php ton ng
kiu. Chng hn trong lp trnh thay v vit lnh x := 1 (vi x l bin s thc) ta nn
vit x := 1.0, vi lnh trc th khi thc hin phi c mt s chuyn i kiu t ng
cn vi lnh sau th khng cn nn thi gian thc hin s nhanh hn.
2.8
GN V KHI TO
2.8.1 Php gn
Gn tr cho bin l s lu tr gi tr d liu vo trong nh ca bin .
Gn tr l mt php ton c bn trong cc NNLT. N dng thay i s lin kt ca
gi tr vi TDL.
17
Ngn ng lp trnh
18
Ngn ng lp trnh
float x;
float y;
public:
point() {x=0.0 ; y=0.0;} // Phng thc xy dng mc nhin
point (float a, float b) {x=a; y=b;} // Phng thc xy dng bnh thng
point & operator= (const point & p ) // nh ngha ton t gn
{
x = p.x; y = p.y; // Gn d liu
return * this;
}
}; // term
S khc nhau cui cng ca php gn l cch thc tin hnh gn tr. Xt lnh gn
ca Pascal "A := B", Pascal cng nh mt s ngn ng khc, iu ny c ngha l:
"Gn bn sao ca gi tr ca bin B cho bin A". By gi ta li xt lnh gn "A = B"
ca SNOBOL4. Trong SNOBOL4 th n c ngha l: "To mt bin tn A tham chiu
ti TDL m B tham chiu". Trong SNOBOL4 c A v B cng tr ti mt TDL.
Pascal A := B (Sao chp TDL khi gn)
Trc
17.2
A:
8.4
B:
SNOBOL4
A=B
A:
Sau
8.4
B:
8.4
Trc khi gn
A:
B:
17.2
8.4
Sau khi gn
A:
8.4
B:
19
Ngn ng lp trnh
V tnh cht nghim trng nh ni trn ca bin cha c khi to, cc ngn ng
lp trnh c th s dng cc gii php sau khc phc:
1.- Nu bin cha c kh to th s c gi tr NULL: Khi mt bin mi c to
ra, nh cp pht cho n phi cha mt dy cc bit biu din cho mt gi tr NULL.
Ty thuc vo kiu ca bin m gi tr NULL ny s c mt gi tr c th, v d nu l
bin s th NULL l 0, nu l bin chui k t th NULL l chui rng, nu bin l
logic th NULL l FALSE...
2.- Khi to bin ngay sau khi n va c to ra l mt cch lp trnh tt v trong
mt s ngn ng mi u cung cp phng tin lm iu ny mt cch d dng.
Trong ngn ng Pascal mt bin c khi to ng thi vi vic khai bo c gi l
bin c gi tr u hay cn gi l hng nh kiu.
V d:
const i:integer=10;
a: ARRAY[1..3,1..2] Of Integer = ((11, 12), (21, 22), (31, 32));
var j:integer;
begin
writeln(i); i:= i+1; writeln(i);
for i:=1 to 3 do begin
for j:=1 to 2 do write(a[i,j]:5);
writeln;
end; end.
2.9
CU HI N TP
20
Ngn ng lp trnh
21
Ngn ng lp trnh
TNG QUAN
3.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v kiu d liu s cp.
- c t v phng php ci t kiu d liu s cp trong cc ngn ng lp
trnh.
- Mt s kiu d liu s cp c th nh: kiu s, k t, logic
3.1.2 Ni dung ct li
- Kin thc tng quan v kiu d liu s cp.
- Mt vi kiu d liu s cp: kiu s, lit k, logic, k t.
3.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn, kin thc chng 2.
3.2
S C T CC KIU D LIU S CP
22
Ngn ng lp trnh
CI T CC KIU D LIU S CP
23
Ngn ng lp trnh
ABS(x) =
1.- Nhn gi tr x t b nh
2.- Nu x>=0 th b qua ch th k tip
3.- t x = -x
4.- Lu x vo b nh
Trong mi mt dng m lnh c thc hin bi mt php ton trong phn cng.
3.5
KIU D LIU S
Ngn ng lp trnh
Kiu d liu nguyn hu ht c ci t mt cch trc tip bng cch dng s biu
din b nh c xc nh bi phn cng v tp hp cc php tnh s hc, cc php
ton quan h nguyn thu trong phn cng cho cc s nguyn. Thng thng s biu
din ny s dng mt t trong b nh hoc mt dy cc bytes lu tr mt s
nguyn. Chng hn ngn ng Pascal s dng biu din s nguyn bi 1 t (word)
trong phn cng ca my tnh biu din cho mt s integer.
3.5.2 Min con ca s nguyn
S c t
25
Ngn ng lp trnh
Tp hp cc gi tr thc du chm ng c xc nh l mt dy s c th t t mt
s m nh nht ti mt s ln nht c xc nh trong phn cng ca my tnh,
nhng cc gi tr khng c phn b ri rc u trong gii hn ny.
Cc php tnh s hc, cc php ton quan h, php gn i vi s thc cng ging nh
i vi s nguyn. Mt s php ton khc cng c cc ngn ng trang b nh l cc
hm, chng hn:
SIN : Real -> Real
(Hm SIN)
(Hm COSIN)
(Hm ly cn bc hai)
S biu din b nh cho kiu d liu thc du chm ng da trn c s biu din
phn cng trong mt nh c chia thnh mt phn nh tr (mantissa) v mt s
m (exponent).
Cc php tnh s hc v cc php ton quan h trn kiu s thc c h tr bi phn
cng. Cc php ton khc phi c ngn ng ci t nh l cc chng trnh con.
26
Ngn ng lp trnh
3.6
KIU LIT K
3.6.1 t vn
Trong lp trnh, c mt iu ph bin l mt bin c th ly mt hoc mt s nh cc
gi tr. Chng hn bin NGAY_TRONG_TUAN ch ly 7 gi tr biu din cho ch
nht, th hai, th ba,...th by. Tng t bin GIOI_TINH ch c hai gi tr
biu din l "nam" v "n". Trong cc ngn ng nh FORTRAN hay COBOL mt
bin nh vy phi c kiu s nguyn v cc gi tr c biu din bi cc s nguyn
chng hn "ch nht" c biu din bi s 1, "th hai" c biu din bi s 2,...
"nam" c biu din bi s 0 v "n" c biu din bi s 1.
Chng trnh s dng cc gi tr ny nh l cc s nguyn v ngi lp trnh phi nh
s tng ng gia cc gi tr nguyn vi "ngha" ca chng trong ng dng. Qu thc
y l mt iu bt tin v d gy ra sai st.
Nhiu ngn ng mi nh Pascal hay Ada cho php ngi lp trnh t t ra mt kiu
d liu bng cch lit k ra mt danh sch cc gi tr ca kiu . Kiu ny gi l kiu
lit k.
3.6.2 S c t
Ngi lp trnh nh ngha kiu lit k bng cch lit k ra mt danh sch cc tn trc
kin thng qua s khai bo. Cc tn trc kin trong danh sch l cc gi tr ca kiu v
th t ca chng cng c xc nh nh th t chng xut hin trong danh sch.
Chng hn, ta c khai bo bin trong Pascal:
VAR
NGAY_TRONG_TUAN : (Chu_nhat, Hai, Ba, Tu, Nam, Sau, Bay);
V c nhiu bin c cng mt kiu lit k c dng trong mt chng trnh nn
ngi ta thng nh ngha mt lit k nh l mt kiu c tn, sau s dng n
xc nh kiu cho nhiu bin nh trong Pascal:
TYPE
NGAY = (Chu_nhat, Hai, Ba, Tu, Nam, Sau, Bay);
sau khai bo bin:
VAR
NGAY_TRONG_TUAN, NGAY_LAM_VIEC: NGAY;
Trong s khai bo trn, cc tn trc kin nh Chu_nhat, Hai, Ba, chnh l cc gi tr
ca kiu v cc gi tr ny c sp th t nh chng c ghi ra, tc l Chu_nhat
< Hai < Ba < < Bay.
Ch rng kiu NGAY c nh ngha th c th c dng nh mt tn kiu
nguyn thu (Integer chng hn) v cc hng trc kin nh Chu_nhat, Hai, Ba, Tu,..
cng c s dng nh l cc hng trc kin nguyn thu (chng hn "27"). V th ta
c th vit:
IF NGAY_TRONG_TUAN = Hai THEN ...
Cc php ton c bn trong kiu lit k l cc php ton quan h (bng, nh hn, ln
hn...), php gn tr, php ton cho gi tr ng sau v gi tr ng trc mt gi tr
trong dy cc hng trc kin ca lit k.
27
Ngn ng lp trnh
3.6.3 S ci t
Biu din b nh cho mt TDL kiu lit k thng l khng phc tp. Mi gi tr
trong lit k c biu din bng mt s nguyn 0, 1, 2,... V d kiu NGAY trn ch
cn s dng 7 gi tr t 0 n 6, trong 0 biu din cho Chu_nhat, 1 biu din cho
Hai, 2 biu din cho Ba,...
S ci t cc php ton c bn cng khng phc tp. Cc php quan h c ci t
bng cch s dng cc php ton quan h di phn cng cho s nguyn nh "=", "<",
">",... Php ton ly gi tr ng sau mt gi tr c ci t bng cch ly s nguyn
biu din cho gi tr cng thm 1 v c s kim tra thy c kt qu khng
vt qu gii hn cho php. Chng hn xc nh gi tr sau Hai, ta ly 1 (biu din
cho Hai) cng vi 1 c 2, m 2 biu din cho Ba, nn sau Hai l Ba, nhng sau Bay
th khng c gi tr no v tng ca 6 (biu din cho Bay) vi 1 c 7, vt qu gii
hn cho php ca kiu. Tng t cho php ton ly gi tr ng trc ca mt gi tr.
3.6.4 Li ch ca vic s dng kiu lit k
Kiu lit k c a vo trong ngn ng lp trnh nhm gii quyt vn c
nu ra trong phn t vn . T ta c th thy r vic s dng kiu lit k lm cho
chng trnh sng sa, trc quan, ngi lp trnh khng cn phi nh ngha ca gi
tr s v do vy chng trnh s c chnh xc cao hn. Ni cch khc, kiu lit k
lm tng tnh d c, tnh d vit v tin cy ca ngn ng.
3.7
KIU LOGIC
Kiu logic (bool, boolean hoc logical) l kiu d liu ph bin trong hu ht cc ngn
ng.
3.7.1 S c t
Kiu d liu logic gm cc TDL c mt trong hai gi tr ng hoc sai. Trong Pascal
v Ada, kiu d liu logic c xem mt cch n gin nh l mt lit k c nh
ngha bi ngn ng. BOOLEAN = (FALSE, TRUE) trong xc nh cc tn
"FALSE" v "TRUE" cho cc gi tr ca kiu v xc nh th t FALSE < TRUE. Cc
php ton ph bin trn kiu logic gm c:
AND: Boolean X Boolean -> Boolean
OR:
28
Ngn ng lp trnh
2.- S dng ton b n v nh ghi gi tr zero (tt c cc bit bng 0) biu din
cho FALSE cn gi tr khc zero biu din cho TRUE.
3.8
KIU K T
CU HI N TP
29
Ngn ng lp trnh
TNG QUAN
4.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v kiu d liu c cu trc.
- c t v phng php ci t kiu d liu c cu trc.
- Cc c t, phng php t chc lu tr, ci t cc php ton ca mt s
kiu d liu c cu trc nh: vecto, mng nhiu chiu, mu tin, chui k t
4.1.2 Ni dung ct li
- Kiu d liu c cu trc.
- Cc c t, phng php lu tr, hnh thc truy xut, ci t cc php ton
ca mt s kiu d liu c cu trc.
4.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn, kin thc chng 2.
4.2
30
Ngn ng lp trnh
Kiu ca mi mt phn t
Mi mt phn t ca CTDL c mt kiu d liu no , ta gi l kiu phn t. Kiu
phn t c th l mt kiu d liu s cp hoc mt CTDL. Cc phn t trong cng mt
CTDL c th c kiu phn t ging nhau hoc khc nhau.
Mt CTDL c gi l ng nht nu tt c cc phn t ca n u c cng mt
kiu.
V d mng, chui k t, tp hp v tp tin l cc CTDL ng nht .
Mt CTDL c gi l khng ng nht nu cc phn t ca n c kiu khc nhau.
V d mu tin l CTDL khng ng nht.
Tn dng cho cc phn t c la chn
i vi CTDL c kch thc thay i nh chui k t hoc ngn xp, i khi ngi ta
quy nh thuc tnh kch thc ti a ca cu trc gii hn s lng cc phn t ca
cu trc.
T chc cu trc
Php ton la chn mt phn t l php ton truy nhp n mt phn t ca CTDL v
lm cho n c th c x l bi mt php ton khc.
C hai loi la chn:
La chn ngu nhin (hay cn gi l la chn trc tip) l s la chn mt phn t
ty ca cu trc d liu c truy nhp thng qua mt ci tn.
V d la chn mt phn t no ca mng, ta ch ra ch s ca phn t , la
chn mt phn t ca mu tin ta s dng tn ca phn t .
31
Ngn ng lp trnh
L cc php ton cho php thm vo CTDL hoc loi b khi CTDL mt s phn t.
Cc php ton ny s lm thay i s lng cc phn t trong mt CTDL. Vic thm
vo hay loi b mt phn t thng phi ch nh mt v tr no .
To / hy CTDL
S CI T CC CU TRC D LIU
Biu din lin kt l s biu din, trong CTDL c lu tr trong nhiu khi nh
ti cc v tr khc nhau trong b nh, mi khi lin kt vi khi khc thng qua mt
con tr gi l con tr lin kt.
Phng php ny thng c s dng cho cc CTDL c kch thc thay i. Chng
hn c th dng biu din lin kt biu din cho danh sch, ngn xp,
32
Ngn ng lp trnh
B m t
B m t
Phn t
Phn t
Phn t
Phn t
Phn t
Phn t
Biu din lin kt
Php ton la chn mt phn t l php ton c bn nht trong cc php ton trn
CTDL. Nh trn trnh by, c hai cch la chn l la chn ngu nhin v la chn
tun t v hai cch biu din b nh l biu din tun t v biu din lin kt. V vy
y chng ta s xt cch thc hin mi mt phng php la chn vi mi mt
phng php biu din b nh.
i vi biu din tun t
Nh trn trnh by, trong cch biu din tun t, mt khi nh lin tc s c
cp pht lu tr tan b CTDL. Trong , v tr u tin ca khi nh c gi l
a ch c s. Khong cch t a ch c s n v tr ca phn t cn la chn c
gi l di ca phn t.
Cch thc truy xut, c cho bi tn hoc ch s ca phn t (chng hn ch s ca
mt phn t ca mng), s xc nh cch tnh di ca phn t nh th no.
la chn ngu nhin mt phn t cn phi xc nh v tr thc ca phn t (tc l
a ch ca nh lu tr phn t ) theo cng thc:
V tr thc ca phn t = a ch c s + di ca phn t.
La chn tun t mt dy cc phn t ca cu trc c th theo cc bc:
- chn phn t u tin ta dng cch tnh a ch c s cng vi di nh ni
trn.
33
Ngn ng lp trnh
- i vi cc phn t tip theo trong dy, cng kch thc ca phn t hin hnh vi v
tr ca phn t hin hnh c v tr ca phn t k tip.
i vi biu din lin kt
VCT
34
Ngn ng lp trnh
35
Ngn ng lp trnh
B nh cho cc
phn t ca vct
Vct A
LB
UB
Kiu phn t
E
A[LB]
A[LB+1]
...
Kiu d liu
Cn di ca tp ch s
Cn trn ca tp ch s
Kiu d liu ca phn t
Kch thc mi phn t
A[UB]
Khi nh lu tr mt vct c hai phn: b m t v b nh dnh cho cc phn
t ca vct. Trong b m t lu tr kiu d liu ca cu trc (vct A), cn di ca
tp ch s (LB - Lower Bound), cn trn ca tp ch s (UB - Upper Bound), kiu d
liu ca phn t v kch thc mi phn t (E). B nh dnh cho cc phn t ca
vct lu tr lin tip cc phn t, t phn t u tin (A[LB]) cho n phn t cui
cng (A[UB]). Do cc phn t c cng mt kiu nn cc nh dnh cho cc phn t
c kch thc bng nahu.
a ch ca nh u tin trong khi gi l a ch c s.
Gii thut thc hin cc php ton
Php ton la chn mt phn t c thc hin bng cch tnh v tr ca phn t
cn la chn theo cng thc:
V tr ca phn t th i = + D + (i - LB) * E
Trong i l ch s ca phn t cn la chn, l a ch c s ca khi nh (a
ch word hoc byte u tin ca khi nh dnh cho vct) D l kch thc ca b m
t, LB l cn di ca tp ch s v E l kch thc ca mi mt i tng d liu
thnh phn (s word hoc byte cn thit lu tr mt phn t).
Nu ch s l mt gi tr ca kiu lit k ch khng phi s nguyn th hiu i-LB phi
c tnh ton mt cch thch hp (chng hn s dng hiu ca hai s th t tng
ng ca i v LB trong lit k).
Php gn mt vct cho mt vct khc c cng thuc tnh c thc hin bng cch
sao chp ni dung trong khi nh biu din vct th nht sang khi nh biu din
vct th hai.
Cc php ton trn ton b vct c thc hin bng cch s dng cc vng lp x l
tun t cc phn t ca vct.
4.6
36
Ngn ng lp trnh
4.6.1 S c t v c php
c t thuc tnh
Mng nhiu chiu tng t nh vct nhng ch c mt thuc tnh khc vct l mi
mt chiu phi c mt tp ch s tng ng.
Chng hn khai bo cho mt mng hai chiu c th c vit di dng
ARRAY[LB1..UB1, LB2..UB2] OF <Kiu phn t>
Trong tp ch s 1 c cc gi tr t LB1 n UB1, tp ch s 2 c cc gi tr t LB2
n UB2.
Nh vy s lng cc phn t ca mng hai chiu s l (UB1-LB1+1)*(UB2-LB2+1)
V d s khai bo ca Pascal:
M= array [1..3, -1..2] of Integer;
S khai bo ny cho ta thy mng M c hai chiu, chiu th nht c xc nh bi
tp ch s 1..3 v chiu th hai c xc nh bi tp ch s -1..2. C th xem y l
mt ma trn c 3 dng v 4 ct, nh vy s c 12 phn t, mi phn t c th lu tr
mt s integer.
i vi cc mng c s chiu nhiu hn hai th cch lm cng tng t nh mng hai
chiu.
c t php ton
37
Ngn ng lp trnh
M[1,-1] M[1,0]
M[1,1]
M[1,2]
Ma trn M
Kiu d liu
M[2,-1] M[2,0]
M[2,1]
M[2,2]
LB1 (= 1)
Cn di ca tp ch s th nht
M[3,-1] M[3,0]
M[3,1]
M[3,2]
UB1 (= 3)
Cn trn ca tp ch s th nht
LB2 (= -1)
Cn di ca tp ch s th hai
UB2 (= 2)
Cn trn ca tp ch s th hai
B m t
M[1,-1]
M[1,0]
B nh cho
M[1,1]
Cc phn t
M[1,2]
M[2,-1]
Dng th nht
Dng th hai
M[2,0]
...
...........
M[3,2]
M[1,-1] M[1,0]
M[1,1]
M[1,2]
Ma trn M
Kiu d liu
M[2,-1] M[2,0]
M[2,1]
M[2,2]
LB1 (= 1)
Cn di ca tp ch s th nht
M[3,-1] M[3,0]
M[3,1]
M[3,2]
UB1 (= 3)
Cn trn ca tp ch s th nht
LB2 (= -1)
Cn di ca tp ch s th hai
UB2 (= 2)
Cn trn ca tp ch s th hai
B m t
M[1,-1]
M[2,-1]
B nh cho
M[3,-1]
Cc phn t
M[1,0]
M[2,0]
Ct th nht
Ct th hai
M[3,0]
...
M[3,2]
38
...........
Ngn ng lp trnh
thc hin php ton la chn phn t, ta s dng cng thc tnh v tr ca phn t
trong b nh.
Vi cch lu tr theo trt t dng ca ma trn M, tnh v tr ca M[i,j], u tin ta
xc nh s dng cn nhy qua: (i-LB1) nhn vi di ca mi dng xc nh v
tr bt u ca dng th i v sau tm v tr th J trong dng ny nh i vi 1 vct.
Nh vy, v tr ca phn t M[i,j] c tnh bi:
V tr ca M [i,j] = + D + (i-LB1) x S + (j-LB2) x E
l a ch c s.
D l ln ca b m t.
S l ln ca mi dng = (UB2 - LB2 +1) x E.
LB1 l cn di ca ch s th nht.
LB2,UB2 tng ng l cn di v cn trn ca ch s th hai.
Tng t ta c th thnh lp cng thc tnh v tr ca phn t M[i,j] trong trng hp
ma trn M c t chc lu tr theo trt t ct.
Trong :
MU TIN
Cc thuc tnh ca mt mu tin phi c ch r trong php khai bo, chng bao gm:
1. S lng cc phn t.
2. Kiu d liu ca cc phn t (Cc phn t c th c kiu khc nhau).
3. Mi phn t c cho bi tn phn t (tn trng).
C php khai bo mu tin ca Pascal:
Nhan_vien: RECORD
Ma: Integer; {M nhn vin}
Ho_ten: String[25];
Tuoi: Integer; {Tui}
Luong: Real; {H s lng}
END
Vic khai bo ny c t mt mu tin c 4 phn t ca cc kiu Integer, Real v String.
Mi phn t c mt tn: Ma, Ho_ten, Tuoi v Luong. chn mt phn t ca mu
tin ta s dng tn ca phn t (trng) , chng hn trong Pascal, Nhan_vien.Luong
l truy xut ti phn t Luong ca mu tin Nhan_vien.
39
Ngn ng lp trnh
c t php ton
Ma
Ho_ten
Tuoi
Luong
40
Ngn ng lp trnh
4.8
4.8.1 c t v khai bo
Trc ht ta xt v d sau:
Gi s trong mt x nghip c hai loi cng nhn l cng nhn trong bin ch v cng
nhn hp ng. i vi cng nhn trong bin ch th lng s c tnh bng s ngy
cng * mc lng ti thiu * h s /20, nhng ngy ngh bo him x hi, h c tr
lng bo him x hi. Ngc li cng nhn hp ng ch c tr lng bng s
ngy cng * n gi cng nht v h khng c tr lng bo him x hi.
Ta thy, hai loi cng nhn ny c nhng thng tin chung l h tn, s ngy cng, tin
lng v loi cng nhn (bin ch hay hp ng). Mi loi cng nhn li c cc thng
tin ring. i vi cng nhn trong bin ch, ta cn thm cc thng tin: h s lng v
s ngy ngh bo him x hi. i vi cng nhn hp ng, ta cn thm thng tin v
n gi cng nht.
Nu s dng mu tin bnh thng lu tr thng tin v hai loi cng nhn ny, ta cn
tt c 7 trng lu tr 4 thng tin chung v 3 thng tin ring. Khi nh cn cp
pht phi lu tr c 7 trng nhng vic s dng khi nh li b d, do i vi
cng nhn bin ch ta ch cn 6 trng, i vi cng nhn hp ng ta ch cn 5
trng!
c t thuc tnh
41
Ngn ng lp trnh
END;
42
Ngn ng lp trnh
readln(loaicn);
If Upcase(loaicn) ='A' then loai := bien_che else loai := hop_dong;
write('So ngay cong: '); readln(ngay_cong);
if loai = bien_che then begin
write('He so: '); readln(he_so);
write('So ngay nghi bao hiem: '); readln(so_ngay_nghi_BHXH);
end else begin
write('Don gia hop dong: '); readln(don_gia);
end;
end; { with Ho_so[i] }
end; {nhap}
{Tnh lng cho tng cng nhn, theo cng thc ca tng loi cng nhn}
Procedure Tinh_luong (var ho_so: danh_sach_cong_nhan; n: integer);
Var
i : integer; luong_binh_quan: real;
begin
for i:=1 to n do with ho_so[i] do begin
if loai = bien_che then begin {tnh lng ca cng nhn bin ch}
luong_binh_quan := he_so * luong_toi_thieu/20;
luong :=
ngay_cong * luong_binh_quan +
so_ngay_nghi_BHXH * luong_binh_quan*0.80;
{ with Ho_so[i] }
end; {Tinh_luong }
Procedure In_luong (ho_so: danh_sach_cong_nhan; n: integer);
Var
i : integer;
begin
for i:=1 to n do with ho_so[i] do begin
Write(ho_ten:25);
If loai = bien_che then write('Bien che':10)
else write('Hop dong':10);
write(ngay_cong:5:1);
if loai = bien_che then begin
write(he_so:5:1);
write(so_ngay_nghi_BHXH:5:1);
end else
write(don_gia:10:2);
writeln(luong:10:2);
43
Ngn ng lp trnh
Biu din tun t s c s dng biu din cho mt mu tin c cu trc thay i.
Thng qua vic dch, tng b nh cn lu cc phn t ca mi mt phn ng c
xc nh v b nh c cp pht lu tr mu tin vi phn ng ln nht. Chng
hn vi mu tin cong_nhan ta c m hnh lu tr nh trong hnh v sau:
Ho_ten
Ho_ten
Ngay_cong
Ngay_cong
Luong
Luong
Loai
He_so
Loai
Gia_cong_nhat
Nghi_bhxh
Khng s dng
Cng nhn hp ng
44
Ngn ng lp trnh
4.9
CHUI K T:
45
Ngn ng lp trnh
Ngn ng lp trnh
12
di khai
bo
8
di
thc
N
Cc d khng
s dng
di thc ca chui
Gii thut thc hin cc php ton
Thng thng phn cng h tr cho vic biu din chui c di c nh nhng i
vi cc biu din khc cho chui th phi c m phng bi phn mm. Cc php
ton ghp, chn chui con v so mu phi m phng bi phn mm.
4.10 CU TRC D LIU C KCH THC THAY I
Ngn ng lp trnh
48
Ngn ng lp trnh
4.11.2 S c t
c t thuc tnh
Ngn ng lp trnh
NEW(p);
{Cp pht nh cho vct v tr a ch ca nh ny cho
bin con tr p (hay cn ni p tr ti khi nh ny)}
p^[5] := 20; {Truy xut n phn t th 5 ca vct}
writeln(p^[5]);
Dispose(p); {Gii phng nh cp cho vct}
End.
4.11.3 S ci t
C hai phng php biu din b nh c s dng biu din cho mt gi tr con
tr:
a ch tuyt i
4.12.1 c t
c t thuc tnh
Ngn ng lp trnh
Biu din b nh
Tp hp c biu din bi mt chui cc bit. Cch tip cn ny ph hp cho mt
khng gian nh. Chng hn ta c mt khng gian gm n phn t c nh s th t
e1, e2, ... en. Mt tp hp cc phn t c chn t khng gian ny c biu din bi
mt vct c n bit, trong nu bit th i c gi tr 1 th phn t ei thuc vo tp hp,
ngc li bit th i c gi tr 0 th ei khng thuc tp hp.
Gii thut thc hin cc php ton
Vi cch biu din ny, vic thm mt phn t vo trong tp hp c thc hin bng
cch cho bit tng ng gi tr bng 1. Vic xa mt phn t trong tp hp c thc
hin bng cch cho bit tng ng gi tr bng 0. Php kim tra mt phn t c thuc
tp hp hay khng c thc hin bng cch kim tra bit tng ng c gi tr l 1 hay
0. Php hp ca hai tp hp tng ng vi php ton logic OR ca hai vct bit. Php
giao ca hai tp hp tng ng vi php ton logic AND ca hai vct bit. Hiu ca
hai tp hp tng ng vi php ton logic AND ca vct bit th nht vi phn b
ca vct bit th hai. Cc php ton logic trn cc vct bit u c h tr bi phn
cng.
V d Ta c mt khng gian bao gm 5 phn t 1,2,3,4,5. Khi
Tp hp A = {1,2,4,5} c biu din bi vct (1,1,0,1,1)
Tp hp B = {2,3,4} c biu din bi vct (0,1,1,1,0)
Do A U B s l tp {1,2,3,4,5} bi v (1,1,0,1,1) OR (0,1,1,1,0) = (1,1,1,1,1)
A I B s l tp hp {2,4} bi v (1,1,0,1,1) AND (0,1,1,1,0) = (0,1,0,1,0)
A\B s l tp hp {1,5} bi v phn b ca (0,1,1,1,0) l (1,0,0,0,1) v
(1,1,0,1,1) AND (1,0,0,0,1) = (1,0,0,0,1)
u im
D dng ci t cc php ton trn tp hp vi tc thc hin nhanh nh s dng cc
php ton ca phn cng.
Nhc im
Khng th biu din cho tp hp m cc phn t ca n c th ly t mt khng gian
ln, c s lng cc phn t bt k.
Bng bm
Biu din b nh
Phng php ny thch hp cho cc khng gian ln. Theo mi tp hp c biu
din bi mt bng bm (bng bm m). Mi phn t ca tp hp c lu tr trong
51
Ngn ng lp trnh
52
Ngn ng lp trnh
Ngn ng lp trnh
Bin nh
Chuyn d
liu bng
READ/WRITE
FIT
(gia b nh
m v bin
nh)
B nh m
(buffer)
(gia buffer v a)
B nh
ngoi
4.13.2 Tp tin vn bn
Tp tin vn bn l mt tp tin ca cc k t. y l mt loi tp tin rt thng dng v
n c s dng mt cch d dng trong tt c cc ngn ng lp trnh v cc cng c
khc (Cc loi tp tin khc khng c c c im ny). Tp tin vn bn cng l mt
tp tin tun t nn cc thao tc trn n cng tng t nh trn tp tin tun t. Ngoi ra
cn c cc php ton c bit khc cho php chuyn i d liu khc thnh k t v
ngc li khi c hoc ghi trn tp tin vn bn.
4.13.3 Tp tin truy xut trc tip
Tp tin truy xut trc tip l mt tp tin c t chc sao cho bt k mt phn t no
cng c truy xut mt cch ngu nhin. lm c iu mi mt phn t ca
n phi c mt kha chng hn kha ca mi phn t l s th t ca n trong tp tin.
truy xut phn t bt k, trc ht con tr ca tp tin phi c di chuyn ti phn
t c kha c ch nh, sau php ton READ hoc WRITE mi c thc hin.
Php ton WRITE c th thay i ni dung c trong mt phn t tn ti.
4.14 CU HI N TP
54
Ngn ng lp trnh
55
Ngn ng lp trnh
56
Ngn ng lp trnh
57
Ngn ng lp trnh
TNG QUAN
5.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v tru tng ha, kiu d liu do ngi lp trnh nh ngha.
- Mc ch ca vic nh ngha kiu d liu.
- Phn bit cc hnh thc xc nh s tng ng gia cc kiu d liu
5.1.2 Ni dung ct li
- Tru tng ho
- Kiu d liu do ngi dng nh ngha.
- Xc nh s tng ng gia cc kiu d liu
5.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn
5.2
TRU TNG HA
Ngn ng lp trnh
Program Quan_ly;
Prcedure nhap_du_lieu;
{
Chng trnh con nhp d liu
}
Prcedure xu_ly_du_lieu;
{
Chng trnh con x l d liu
}
Prcedure xu_ly_du_lieu;
{
Chng trnh con xut d liu
}
Begin
end.
end.
Chng trnh khng c chng trnh con
i vi phng php th nht, ta thy ton b chng trnh c vit trong chng
trnh chnh, iu ny lm cho chng trnh chnh rt rm r, kh c hiu, kh kim
sot, kh sa li,...
i vi phng php th hai, trong chng trnh chnh ta ch thy tn cc chng
trnh con (nhap_du_lieu, xu_ly_du_lieu, xuat_du_lieu) v thng qua cc tn ny ta bit
r chng trnh chnh lm nhng vic g cn bn thn cc vic y c lm nh th
no th ta khng cn bit.
u im ca tru tng ho qu trnh
Vic phn chia chng trnh thnh cc chng trnh con c cc u im ni bt nh
sau:
- chng trnh chnh, ci tng th c lm ni bt, cc chi tit b che du
nn chng trnh sng sa, d c hiu.
59
Ngn ng lp trnh
Tru tng ho d liu l vic to ra kiu d liu tru tng. Kiu d liu tru tng
l mt tp hp cc TDL v tp hp cc php ton, thao tc trn cc TDL .
Ngy nay, khi ta ni kiu d liu thc cht l kiu d liu tru tng.
Kiu d liu tru tng c th c nh ngha bi ngn ng hoc do ngi lp trnh
nh ngha.
V d v kiu d liu tru tng do ngn ng nh ngha:
Kiu integer trong Pascal hay kiu int trong C l mt kiu d liu tru tng do ngn
ng nh ngha. Trong tp cc TDL l tp cc s nguyn t -32768 n 32767;
tp hp cc php ton bao gm cc php ton mt ngi (+, -), cc php ton hai ngi
(+, -, *, DIV, MOD), cc php ton quan h (<, <=, =, <>, >=, >).
V d v kiu d liu tru tng do ngi lp trnh nh ngha:
Trong mn hc cu trc d liu, chng ta bit mt lot cc kiu d liu tru tng
do ngi lp trnh nh ngha nh danh sch, ngn xp, hng i, cy,...
Chng hn kiu d liu tru tng danh sch l mt dy cc phn t vi tp hp cc
php ton nh to danh sch rng, kim tra danh sch rng, xen mt phn t vo danh
sch, xo mt phn t khi danh sch, ...
Sau y ta s nghin cu k hn v kiu d liu tru tng do ngi dng nh ngha.
5.4
NH NGHA KIU
Tn ca kiu.
Tp hp cc php ton (cc chng trnh con) thao tc trn cc i tng d liu
ca kiu.
60
Ngn ng lp trnh
Chng ta thy rng kiu do ngi dng nh ngha chnh l mt kiu d liu tru
tng.
5.4.2 Tnh tng ng ca cc kiu nh ngha
Kim tra kiu dn ti s so snh gia kiu d liu ca i s thc c cho ca mt
php ton v kiu d liu ca i s m php ton cn n. Nu kiu ging nhau th
i s c chp nhn v php ton c tin hnh, nu kiu khc nhau, th mt li
c xem xt hoc mt s cng bc chuyn i kiu c dng i kiu ca i
s thc thnh kiu thch hp.
Vn y l cn phi xc nh hai kiu nh th no th c coi l "ging nhau"
hay tng ng. Xt v d sau y:
TYPE
Ngn ng lp trnh
CU HI N TP
62
Ngn ng lp trnh
TNG QUAN
6.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v chng trnh con.
- C ch hot ng khi chng trnh con c gi.
- Cc cch truyn tham s cho chng trnh con.
6.1.2 Ni dung ct li
- C ch hot ng ca chng trnh con.
- Cc loi tham s ca chng trnh con.
- Cc cch truyn tham s cho chng trnh con.
6.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn
6.2
Chng trnh con l mt php ton tru tng c nh ngha bi ngi lp trnh.
Chng trnh con c cc c tnh nh sau:
-
Chng trnh gi tm ngng vic thc hin trong qu trnh thc hin chng trnh con.
-
iu khin lun c tr v chng trnh gi khi s thc hin chng trnh con kt
thc.
Khi ni n chng trnh con, chng ta quan tm n hai kha cnh: s nh ngha
chng trnh con v li gi thc hin chng trnh con.
nh ngha chng trnh con l mt on chng trnh ngun c vit ra bi ngi
lp trnh.
6.2.1 c t chng trnh con
S c t chng trnh con bao gm:
-
Ngn ng lp trnh
Function Ten_ham(Danh sch cc tham s cng vi kiu d liu tng ng): Kiu
kt qu tr v
V d Function FN(x:real; y:integer) : real
c t ny xc nh hm FN : REAL x INTEGER -> REAL
Nu chng trnh con tr v nhiu hn mt kt qu hoc khng c kt qu tr v trong
tn chng trnh con thng c gi l th tc (procedure hoc subroutine). C php
in hnh c t th tc c quy nh trong ngn ng lp trnh Pascal:
Procedure Ten_thu_tuc(Danh sch cc tham scng vi kiu d liu tng ng)
V d Procedure SUB(X:real; Y:Integer; Var Z:Real; Var U:boolean);
Trong s c t ny, tham s c tn ng sau VAR biu th mt kt qu hoc mt
tham s c th b thay i. C php ca s c t ny trong Ada l:
Procedure SUB(X: IN Real; Y: IN Integer; Z: IN OUT Real; U: OUT Boolean)
Th tc ny khai bo mt chng trnh con vi s xc nh:
SUB : Real x Integer x Real -> Real x Boolean
Cc t IN, OUT v IN OUT phn bit ba trng hp sau y: IN ch nh mt tham s
khng th b thay i bi cng trnh con, IN OUT ch nh mt tham s c th b thay
i v OUT ch nh mt kt qu.
Mc d chng trnh con biu din mt hm ton hc nhng n cng c cc vn
tng t nh i vi cc php ton nguyn thu:
- Chng trnh con c th c cc tham s n trong dng bin khng a phng m n
tham chiu.
- Chng trnh con c th c kt qu n (hiu ng l) c tr v thng qua s thay
i cc bin khng a phng hoc thng qua vic thay i cc tham s IN-OUT ca
n.
- Chng trnh con c th nhy cm vi tin s (t sa i), v vy kt qa ca n
khng ch ph thuc vo tham s c cho ti ln gi m cn ph thuc vo ton
b lch s cc ln gi trc . Nhy cm vi tin s c th do d liu a phng vn
cn gi li gia cc ln gi ca chng trnh con hoc thng qua s thay i m ring
ca n (t ph bin hn).
6.2.2 Ci t chng trnh con
Cc php ton nguyn thu c ci t bng cch dng cu trc d liu v cc php
ton c cung cp bi my tnh o bn di ngn ng lp trnh. Chng trnh con
biu din mt php ton c xy dng bi ngi lp trnh v do chng trnh con
c ci t bng cch dng cu trc d liu v cc php ton c cung cp bi
chnh bn thn ngn ng lp trnh . S ci t c xc nh bi thn chng trnh
con, bao gm c vic khai bo d liu cc b xc nh cu trc d liu c dng cho
chng trnh con v cc lnh xc nh hnh ng s lm khi chng trnh con thc
hin.
S khai bo v cc lnh thng c bao gi, ngi s dng chng trnh con khng
th truy xut c ti d liu cc b v cc lnh bn trong chng trnh con. Ngi s
64
Ngn ng lp trnh
Ngn ng lp trnh
VAR
m : ARRAY[1..max] OF REAL;
n : INTEGER;
BEGIN
n := MAX;
x := 2 * x + m[5];
......
END;
66
Ngn ng lp trnh
M u
Khi m c th thc hin
on m ca FN
Cc hng
im tr v
Kt qu ca hm
Cc tham s
FN
x
y
m
:
:
:
n
Cc bin cc b
Kch hat
Kch hat
Kch hat
u tin
th hai
cui cng
Mu tin kch
hat ca FN
Mu tin kch
hat ca FN
...
Mu tin kch
hat ca FN
Kch thc v cu trc ca mu tin kch hot ca chng trnh con thng thng c
xc nh trong qu trnh dch, l trnh bin dch (compile) c th xc nh mu tin
kch hot ln nh th no v v tr ca mi mt phn t trong . truy xut n cc
phn t c th s dng cng thc tnh a ch c s cng di nh trnh by i
vi mu tin bnh thng.
67
Ngn ng lp trnh
6.4
68
Ngn ng lp trnh
- Phng php thc hin: Ti thi im gi, con tr ca tham s thc t c sao
chp cho tham s hnh thc. Trong qu trnh thc hin chng trnh con, mi thao tc
trn tham s hnh thc l s thao tc trn nh ca tham s thc t.
- Khi chng trnh con kt thc, mi thay i gi tr ca tham s hnh thc u lm
gi tr ca tham s thc t thay i theo.
Truyn bng gi tr-kt qu (transmission by value-result)
69
Ngn ng lp trnh
Truyn bng
gi tr-kt qu
Truyn bng
kt qu
10
20
10
10
10
20
20
20
6.6
CU HI N TP
70
Ngn ng lp trnh
TNG QUAN
7.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v iu khin tun t.
- Cc th t thc hin chng trnh trong biu thc, trong cu lnh..
- Khi nim v ngoi l, x l ngoi l.
7.1.2 Ni dung ct li
- iu khin tun t trong biu thc.
- iu khin tun t trong cu lnh.
- Ngoi l v x l ngoi l.
7.1.3 Kin thc c bn cn thit
Kin thc v cu trc d liu v k nng lp trnh cn bn
7.2
7.3.1 t vn
2
Xt cng thc nghim ca phng trnh bc x = b + b 4ac hai
2a
Cng thc n gin ny bao gm t nht 15 php ton khc nhau. M ho trong hp
ng hoc ngn ng my, c th i hi t nht 15 lnh. Hn th, ngi lp trnh phi
quy nh b nh cho 5 n 10 kt qu trung gian s pht sinh. Ngi lp trnh cng s
phi quan tm n vic ti u nh cc php ton s c thc hin theo th t nh th
no b nh tm l nh nht ...
71
Ngn ng lp trnh
SQRT
*
B
*
2
*
4
Ngn ng lp trnh
Theo k hiu Prefix, php ton vit trc, sau l cc ton hng theo th t t tri
sang phi. Nu mt ton hng li l mt php ton th cng theo quy tc tng t. C
ba loi k hiu prix l ordinary, Polish, v Cambridge Polish.
K hiu ordinary prefix s dng cc du ngoc bao quanh cc ton hng v du
phy phn bit cc ton hng. V d cu trc cy trong hnh trn s tr thnh:
/(+M(B),SQRT(-(^(B,),*(*(4,A),C)))),*(2,A))
Mt bin th ca k hiu ny c dng trong ngn ng LISP i khi c gi l
Cambridge Polish. Theo k hiu Cambridge Polish th cc du ngoc bn tri ng sau
mt ton t c chuyn ra trc ton t v du phy ngn cch cc ton hng b
xa i. Cu trc cy trn tr thnh: (/(+(M B)(SQRT(-(^ B 2)(*(* 4 A)C)))) (* 2 A))
Bin th th hai c gi l k hiu Polish, cho php b hn cc du ngoc. Nu
chng ta gi s rng s lng cc ton hng ca mi mt php ton l bit v c
nh th cc du ngoc l khng cn thit. Cu trc cy trn s tr thnh: / + M B
SQRT - ^ B 2 * * 4 A C * 2 A
Bi v nh ton hc Ba lan Lukasiewiez pht minh ra k hiu khng du ngoc ny
nn thut ng "Polish" c dng cho k hiu ny v cc bin th ca n.
Thc t hin nhin l cc biu thc kiu ny rt kh gii. Trong thc t, chng ta
khng th gii biu thc dng Polish. Cc dng ordinary prefix v Cambridge Polish
i hi qu nhiu du ngoc v d nhin l cc k hiu ny khng gn gi vi nhng
k hiu tr thnh thi quen ca chng ta. Tuy nhin k hiu ordinary prefix l mt
k hiu ton hc chun cho hu ht cc php ton khc cc php ton s hc v logic,
chng hn f(x,y,z) c vit theo k hiu prefix. iu quan trng hn l k hiu prefix
c dng biu din mt php ton vi s lng ton hng bt k v do ni
chung ch cn hc mt quy tc vit cc biu thc bt k.
K hiu hu t (postfix)
K hiu postfix tng t nh k hiu Prefix ngoi tr k hiu php ton ng sau
danh sch cc ton hng. V d ((A,B)+,(C,A)-)* Hoc A B + C A - *
Postfix khng phi l s biu din ph bin cho biu thc trong ngn ng lp trnh
nhng n c tm quan trng nh l c s ca s biu din ti thi gian thc hin ca
biu thc.
K hiu trung t (infix)
K hiu trung t thch hp vi php ton hai ngi tc l php ton c hai ton hng.
Trong k hiu trung t, k hiu php ton c vit gia hai ton hng. V k hiu
trung t dng cho cc php tnh s hc c bn, php ton quan h v cc php ton
logic trong ton hoc thng thng nn n cng c chn dng mt cch rng ri
trong ngn ng lp trnh cho cc php ton v trong mt s trng hp cn c
m rng cho cc php ton khc. Mc d k hiu trung t c dng mt cch ph
bin, nhng vic dng n trong ngn ng lp trnh cng gy ra mt s vn nht
nh:
73
Ngn ng lp trnh
*
C
74
Ngn ng lp trnh
7.3.5 Biu din trong thi gian thc hin ca biu thc
Nhiu s biu din thi gian thc ca biu thc c dng trong ci t ngn ng. Sau
y l mt s s la chn c dng:
1/ Dy m my. K thut ph bin nht l dch cc biu thc thnh dng m my. Th
t cc lnh phn nh cu trc iu khin tun t ca bin thc ban u. Biu din m
my cho php dng trnh thng dch ca phn cng nn thc hin rt nhanh.
2/ Cu trc cy. Biu thc c th c thc hin mt cch trc tip trong biu din cu
trc cy t nhin ca chng, s dng trnh thng dch mm. y l k thut c bn
c dng trong LISP ni m ton b chng trnh c biu din nh l mt cu trc
cy trong qu trnh thc hin.
3/ Dng frefix hoc Postfix. Biu thc trong dng prefix hoc postfix c th c thc
hin bng gii thut thng dch m n qut biu thc t tri qua phi. Biu din postfix
c mt li ch c bit y, l th t ca cc k hiu trong biu din postfix tng
ng vi th t trong cc php ton khc nhau phi c thc hin. Biu din prefix
l dng c th thc hin ca chng trnh trong SNOBOL4.
Cc chin lc nh gia biu thc s c trnh by trong l thuyt chng trnh dch.
7.4
7.4.1 Cc lnh c bn
Lnh c bn l lnh m trong khng cha cc lnh khc. Cc lnh c bn bao gm
lnh gn, li gi chng trnh con, cc lnh nhp, xut, lnh nhy goto. Trong mt
lnh c bn c th cha cc biu thc m cu trc iu khin c trnh by phn
trn.
Cc cu trc trong chng trnh thng c l: hp thnh, la chn v lp li. Cc ngn
ng khc nhau ci t cc cu trc ny mt ch khc nhau.
7.4.2 iu khin tun t dng nhn lnh v lnh GOTO
C ch ban u ca iu khin tun t trong hu ht cc ngn ng l ghi nhn lnh v
chuyn iu khin ti lnh c nhn t ch ny sang ch khc trong chng trnh. Vic
chuyn iu khin thng c thc hin bng lnh GOTO. C hai dng ca lnh
GOTO l:
1/ GOTO khng iu kin. Trong mt chui cc lnh, mt lnh GOTO khng iu
kin nh GOTO NEXT chuyn iu khin ti lnh c nhn l NEXT. Lnh ng sau
GOTO s khng c thc hin.
2/ GOTO c iu kin. Trong mt chui lnh, mt lnh GOTO c iu kin nh IF A
= 0 then GOTO NEXT chuyn iu khin ti lnh c nhn l NEXT ch khi iu kin
sau IF ng.
S dng hai dng GOTO ny, chng ta d dng biu din cc dng iu khin c bn
nh sau
75
Ngn ng lp trnh
Lnh hp thnh
Lnh la chn
S0
S0
GOTO L1
S0
L2: S2
GOTO L3
L1: S1
GOTO L2
Lnh lp li
L1: IF A=0 THEN
GOTO L2
S1
S1
GOTO L2
GOTO L1
L1: S2
L2: S2
L2: S3
L3 : S3
Chui lnh thc hin
S0 S1 S2 S3
S0 S1 S3
S0 S2
Hoc S0 S2 S3
Hoc S0 S1 S2
Hoc S0 S1 S1 S2
Hoc S0 S1 S1 S1 S2
Lnh GOTO c thun tin l d dng, v c hiu qu trong thc hin v n phn nh
cu trc c bn ca my tnh quy c (conventional computers), trong mi mt t
lnh hoc byte lnh u c a ch, v trong phn cng c cc lnh nhy c xy
dng chuyn iu kkhin n a ch c ch nh. Lnh GOTO biu th mt cu
trc iu khin t nhin ngi lp trnh chuyn ngn ng cp cao sang hp ng.
Hu ht cc ngn ng c u c c lnh GOTO c bn v nhiu dng ci tin t nn
mng cho vic dng nhn nh l d liu. Trong cc ngn ng mi nh Pascal iu
khin tun t trn c s lnh GOTO t quan trong hn mc d vn cn lnh .
Trong mt s ngn ng mi, lnh GOTO b loi b hon ton. V s dng nhn v
lnh GOTO th chng trnh tr nn rt kh c v khng c cu trc tng th v th
t cc lnh trong vn bn chng trnh ngun khng tng ng vi th t cc lnh khi
thc hin.
7.4.3 Cc lnh cu trc
Mt lnh c cu trc l mt lnh cha cc lnh khc. Cc lnh thnh phn ca mt
lnh c cu trc c th l mt lnh c bn hoc mt lnh c cu trc. Hu ht ngn
ng cung cp mt tp hp cc lnh c cu trc biu th cc dng iu khin c bn (
hp thnh, la chn v lp li) m khng cn dng lnh GOTO.
Lnh hp thnh (Compound Statements)
76
Ngn ng lp trnh
Lnh 2;
.......
Lnh n
End
Cu trc lnh hp thnh cho php mt tp hp cc lnh c tru tng ha thnh mt
lnh n.
Lnh hp thnh c ci t trong my tnh o bng cch thit lp mt khi cc m
lnh c th thc hin c biu din cho mi mt lnh ca chui lnh trong b nh.
Th t m chng xut hin trong b nh xc nh th t trong chng c thc
hin.
Lnh iu kin (Conditional Statements)
Lnh iu kin l mt lnh biu th s la chn ca hai hoc nhiu lnh. Vic l chn
c iu khin bng cch kim tra mt s iu kin thng c vit trong dng biu
thc ca cc php ton quan h v logic. Cc lnh iu kin ph bin l lnh IF v
lnh CASE.
Lnh IF c c th ha thnh cc dng IF mt nhnh, IF hai nhnh v IF a nhnh.
Chn thc hin mt lnh c biu th l IF mt nhnh: IF <iu kin> THEN
<Lnh> ENDIF
Chn mt trong hai dng IF hai nhnh: IF <iu kin> THEN <Lnh1> ELSE
<Lnh2> ENDIF
Chn mt trong nhiu dng cc IF ni tip nhau hoc dng IF a nhnh:
IF <iu kin1> THEN <Lnh1>
ELSIF<iu kin2> THEN <Lnh2>
.
.
.
ELSIF <iu kinN> THEN <LnhN>
ELSE <LnhN+1> ENDIF
Lnh CASE
iu kin trong lnh If a nhnh thng phi lp li vic kim tra gi tr ca mt bin,
v d:
IF TAG = 0 THEN
<Lnh 0>
ELSIF TAG = 1 THEN
<Lnh 1>
ELSIF TAG = 2 THEN
<Lnh 2>
ELSE
<Lnh 3>
ENDIF
Cu trc ph bin ny c biu din mt cch sc tch hn bng lnh CASE
CASE TAG OF
0: <Lnh 0>
77
Ngn ng lp trnh
1: <Lnh 1>
2: <Lnh 2>
OTHERS: <Lnh3>
ENDCASE
Ci t lnh iu kin
Lnh IF c ci t bng cch dng lnh r nhnh v lnh nhy c iu kin hoc
khng c iu kin trong phn cng. Kt qu tng t nh m t trong phn 7.3.2.
Lnh lp (Interation Statements)
S NGOI L V X L NGOI L
Ngn ng lp trnh
......
average = sum/total;
...
return ;
when zero_divide {
average = 0;
printf( error: cannot compute average, total is zero\n);
}
......
} /** function example **/
7.5.3 xut mt ngoi l
Mt ngoi l c th b xut bng php ton nguyn thu c nh ngha bi ngn
ng chng hn php cng, php nhn c th xut ngoi l OVERFLOW. Ngoi ra,
mt ngoi l c th b xut mt cch tng minh bi ngi lp trnh bng cch
dng mt lnh c cung cp cho mc ch . Chng hn trong Ada: raise
BAD_DATA_VALUE;
Lnh ny c th c thc hin trong mt chng trnh con sau khi xc nh mt bin
ring hoc tp tin nhp cha gi tr khng ng.
7.5.4 Lan truyn mt ngoi l (Propagating an exception)
Thng thng, khi xy dng chng trnh th v tr m mt ngoi l xut hin khng
phi l v tr tt nht x l n. Khi mt ngoi l c x l trong mt chng trnh
con khc ch khng phi trong chng trnh con m n c xut th ngoi l
c gi l c truyn (propagated) t im m ti n c xut n im m
n c x l.
Quy tc xc nh vic x l mt ngoi l c th thng c gi l chui ng
(dynamic chain) ca cc kch hot chng trnh con hng ti chng trnh con m n
xut ngoi l. Khi mt ngoi l P c xut trong chng trnh con C, th P c
x l bi mt x l c nh ngha trong C nu c mt ci x l nh th. Nu khng
c th C kt thc. Nu chng trnh con B gi C th ngoi l c truyn n B v mt
ln na c xut ti im trong B ni m B gi C. Nu B khng cung cp mt x
l cho P th B b kt thc v ngoi l li c truyn ti chng trnh gi B vn vn...
Nu cc chng trnh con v bn thn chng trnh chnh khng c x l cho P th
ton b chng trnh kt thc v x l chun c nh ngha bi ngn ng s c
gi ti.
Mt hiu qu quan trng ca quy tc ny i vi vic truyn cc ngoi l l n cho
php mt chng trnh con k tha (remain) nh l mt php ton tru tng c
nh ngha bi ngi lp trnh ngay c trong vic x l ngoi l. Mt php ton
nguyn thu c th bt ng ngt qu trnh bnh thng ca n v xut mt ngoi l.
Tng t, thng qua vic thc hin lnh RAISE, mt chng trnh con c th bt ng
ngt qu trnh bnh thng ca n v xut mt ngoi l. n chng trnh gi th
79
Ngn ng lp trnh
hiu qu ca xut ngoi l ca chng trnh con cng ging nh hiu qu xut
ca php ton nguyn thy, nu chng trnh con t n khng c mt x l ngoi l.
Nu ngoi l c x l trong chng trnh con th chng trnh con tr v mt cch
bnh thng v chng trnh gi n khng bao gi bit c rng mt ngoi l
c xut.
7.5.5 Sau khi mt ngoi l c x l
Sau khi mt x l hon thnh vic x l mt ngoi l v x l kt thc th c
mt vn t ra l quyn iu khin c chuyn ti ch no? iu khin nn c
chuyn ti ch m ngoi l c xut? iu khin nn chuyn v lnh trong
chng trnh con cha x l ni m ngoi l c xut sau khi c truyn ti?
Chng trnh con cha x l t kt thc mt cch bnh thng v n xut hin ti
chng trnh gi nh l khng c g xy ra. y l nhng la chn khi thit k ngn
ng.
7.6
CU HI N TP
1. Th no l iu khin tun t?
2. Xt v mt cu trc th c nhng loi iu khin tun t no?
3. Xt v mt thit k ngn ng th c nhng loi iu khin tun t no?
4. Trong biu din trung t mt biu thc, khc phc tnh trng mt biu thc
c th c nhiu cy biu thc (tnh trng mp m), ngi ta thng s dng cc
quy tc g?
80
Ngn ng lp trnh
CHNG 8: LP TRNH HM
8.1
TNG QUAN
8.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v lp trnh hm.
- K thut lp trnh qui.
- Cc cu trc c bn ca ngn ng LISP
8.1.2 Ni dung ct li
- Lp trnh hm.
- Cn bn v ngn ng lp trnh LISP.
8.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn.
8.2
NGN NG LP TRNH HM
Ngn ng lp trnh
Ngn ng lp trnh
NGN NG LISP
()
(a 5 c)
Ngn ng lp trnh
Biu thc
Biu thc l mt nguyn t hoc mt danh sch. Biu thc lun c mt gi tr m vic
nh tr n theo nguyn tc sau:
Nu biu thc l mt s, th gi tr ca biu thc l gi tr ca s .
V d:
> 25
= 25
Nu biu thc l mt k hiu th gi tr ca biu thc c th l
-
V du:
> (setq a 3) ; Gn s 3 cho bin c tn a
=3
> a ; hi gi tr ca k hiu a
=3
Nu biu thc l mt danh sch c dng (E0 E1 ... En) th gi tr ca biu thc c
xc nh theo cch sau y:
-
V d
> (+ 5 3 6)
= 14
> ( + 4 (+ 3 5))
= 12
-
V d:
> (+ 1 2)
= (+ 1 2)
84
Ngn ng lp trnh
8.3.3 Cc hm
Mt chng trnh ca LISP l mt hm hoc mt hm hp. Cc hm c th do LISP
nh ngha trc hoc do lp trnh vin t nh ngha.
Mt s hm nh ngha trc
Ngn ng lp trnh
=T
(EQUAL o1 o2) so snh xem i tng bt k o1 v o2 c ging nhau hay
khng?
V d:
>(equal (a b c) (a b c))
=T
>(equal (a b c) ( b a c))
= NIL
>(equal a a)
=T
Cc hm thao tc trn danh sch: CAR, CDR, CONS v LIST
-
V du:
> (CAR '(1 2 3))
=1
> (CAR 3)
Error: bad argument type - 3
>(CAR nil)
= NIL
> (CAR '((a b) 1 2 3))
= (A B)
-
V d:
>(cdr '(1 2 3))
= (2 3)
>(cdr 3)
Error: bad argument type - 3
>(cdr nil)
= NIL
>(cdr '(1))
= NIL
>(CAR (CDR (a b c)))
=B
86
Ngn ng lp trnh
-
V du:
(CADR (a b c))
=B
-
V du:
>(CONS 3 '(1 2 3))
= (3 1 2 3)
>(CONS 3 nil)
= (3)
>(CONS '(a b) '(1 2 3))
= ((A B) 1 2 3)
-
(LIST E1 E2 ... En) nhn vo n biu thc E1, E2, ..., En, tr v danh sch bao
gm n phn t V1, V2, ..., Vn, trong Vi l gi tr ca biu thc Ei (i=1..n) .
V du:
>(list 1 2)
= (1 2)
>(list 'a 'b)
= (A B)
>(list 'a 'b (+ 2 3 5))
= (A B 10)
Cc v t kim tra
-
V du:
>(atom 'a)
=T
>(numberp 4)
=T
87
Ngn ng lp trnh
>(symbolp 'a)
=T
>(listp '(1 2))
=T
>(symbolp NIL)
=T
>(listp NIL)
=T
>(null NIL)
=T
>(null (a b))
= NIL
>(null 10)
= NIL
Cc hm logic AND, OR v NOT
-
(AND E1 E2... En) nhn vo n biu thc E1, E2,... En. Hm AND nh tr cc
biu thc E1 E2... En t tri sang phi. Nu gp mt biu thc l NIL th
dng v tr v kt qu l NIL. Nu tt c cc biu thc u khc NIL th tr
v gi tr ca biu thc En.
V d:
>(AND (> 3 2) (= 3 2) (+ 3 2))
= NIL
>(AND (> 3 2) (- 3 2) (+ 3 2))
=5
-
V du:
>(OR (= 3 2) (+ 2 1) (list 1 2))
=3
>(OR (= 2 1) (Cdr (a) ) (listp 3 ))
= NIL
-
88
Ngn ng lp trnh
Cc hm iu khin
-
C php nh ngha hm l:
(defun <tn hm> <danh sch cc tham s hnh thc>
<biu thc>
)
V d 1: nh ngha hm ly bnh phng ca s a
(defun binh_phuong (a)
(* a a)
)
Sau khi np hm ny cho LISP, ta c th s dng nh cc hm c nh ngha
trc.
>(binh_phuong 5)
= 25
>(binh_phuong (+ 5 2))
= 49
V d 2: nh ngha hm DIV chia s a cho s b, ly phn nguyn.
89
Ngn ng lp trnh
90
Ngn ng lp trnh
) ; cond
)
Trong chng trnh trn, (null L) l trng hp dng th nht; (= i 1) l trng hp
dng th hai; (cdr L) l yu t dn n trng hp dng th nht v (1- i) yu t
dn n trng hp dng th hai.
8.3.5 Cc hm nhp xut
(LOAD <Tn tp tin>)
Np mt tp tin vo cho LISP v tr v T nu vic np thnh cng, ngc li tr v
NIL. Tn tp tin l mt chui k t c th bao gm c ng dn n ni lu tr tp tin
. Tn tp tin theo quy tc ca DOS, ngha l ch c ti a 8 k t trong phn tn v
3 k t phn m rng v khng cha cc k t c bit.
Ta c th s dng LOAD np mt tp tin chng trnh ca LISP trc khi gi thc
hin cc hm c nh ngha trong tp tin .
V d:
>(Load D:\btlisp\bai1.lsp)
(READ)
c d liu t bn phm cho n khi g phm Enter, tr v kt qu l d liu c
nhp t bn phm.
(PRINT E)
In ra mn hnh gi tr ca biu thc E, xung dng v tr v gi tr ca E.
(PRINC E)
In ra mn hnh gi tr ca biu thc E (khng xung dng) v tr v gi tr ca E.
(TERPRI)
a con tr xung dng v tr v NIL.
8.3.6 Bin ton cc v bin cc b
Bin ton cc
91
Ngn ng lp trnh
=6
Bin cc b
C th chng ta c th vit:
(LET ( (var E1)..)
.
(SETQ var E2)
92
Ngn ng lp trnh
)
)
Sau khi thc hin chng trnh ny, th cc bin ton cc a, b v c vn cn.
Phng php 2: dng cc bin cc b d, e, f
(defun giai_ptb2 ()
(let ((d 0) (e 0) (f 0))
(print Chng trnh gii phng trnh bc hai)
(princ Nhp h s a: ) (setq d (read))
(princ Nhp h s b: ) (setq e (read))
(princ Nhp h s c: ) (setq f (read))
(ptb2 d e f)
)
)
Sau khi thc hin chng trnh ny, th cc bin cc b d, e v f c gii phng.
8.3.7 Hng dn s dng LISP
S dng XLISP
93
Ngn ng lp trnh
94
Ngn ng lp trnh
TNG QUAN
9.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v lp trnh logic.
- Cc nguyn tc trong lp trnh logic.
- Vit chng trnh n gin bng ngn ng Prolog.
9.1.2 Ni dung ct li
- Lp trnh logic.
- Cn bn v ngn ng lp trnh Prolog.
9.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn
9.2
95
Ngn ng lp trnh
NGN NG PROLOG
Ngn ng lp trnh
Ngn ng lp trnh
so_nguyen_to(integer)
Trong v d trn ta khai bo hai v t. Trong v t so_huu (ten, do_vat) ch mt
ngi c tn l ten s s hu mt do_vat no . Cn v t so_nguyen_to(integer)
xt xem mt s integer no c phi l s nguyn t hay khng.
Phn Clauses
98
Ngn ng lp trnh
Tiu chun kt bn
kho, thng minh, p
kho, thng minh, giu
p, kho, thng minh
p, thng minh, tt
p, kho
tt, thng minh, kho
Tiu chun kt bn l hai ngi khc phi, ngi ny hi cc tiu chun ca ngi
kia v ngc li. Hy vit chng trnh tm ra cc cp c th kt bn vi nhau.
domains
ten, g_tinh = symbol
predicates
gioi_tinh(ten, g_tinh)
dep(ten)
tot(ten)
giau(ten)
thong_minh(ten)
99
Ngn ng lp trnh
khoe(ten)
thich(ten,ten)
ket_ban(ten,ten)
clauses
gioi_tinh(lan,nu).
gioi_tinh(hong,nu).
gioi_tinh(thuy,nu).
gioi_tinh(anh,nam).
gioi_tinh(binh,nam).
gioi_tinh(hung,nam).
dep(lan).
dep(hong).
dep(binh).
khoe(thuy).
khoe(lan).
khoe(binh).
khoe(anh).
khoe(hung).
tot(lan).
tot(thuy).
thong_minh(hong).
thong_minh(anh).
thong_minh(hung).
thong_minh(binh).
giau(hong).
giau(thuy).
giau(hung).
thich(lan,X):-khoe(X), dep(X), thong_minh(X).
thich(hong,X):-khoe(X), thong_minh(X), giau(X).
thich(thuy,X):-khoe(X), dep(X), thong_minh(X).
thich(ann,X):-dep(X), tot(X), thong_minh(X).
thich(binh,X):-dep(X), khoe(X).
thich(hung,X):-khoe(X), tot(X), thong_minh(X).
ket_ban(X,Y):- gioi_tinh(X,M),
gioi_tinh(Y,N),
M<>N,
thich(X,Y),
thich(Y,X).
100
Ngn ng lp trnh
101
Ngn ng lp trnh
c. ! hay cn gi l nht ct, goal ngoi lun cho ta mi kt qu, mun nhn ch
mt kt qu t goal ngoi, ta dng k hiu !.
9.3.6 Cc kiu d liu
Trong prolog c kiu d liu chun v kiu do ngi lp trnh nh ngha.
Kiu d liu chun
L kiu d liu do prolog nh ngha sn. Prolog cung cp cc kiu d liu chun l:
char, integer, real, string v symbol.
a. Char: L kiu k t. Hng k t phi nm gia hai du nhy n.
V d: a, #.
b. Integer: L kiu s nguyn, tp gi tr bao gm cc s nguyn t -32768 n
32767.
c. Real: L kiu s thc, tp gi tr bao gm cc s thc thuc hai on: on
cc s m t -10307 n -10-307 v on s dng t 10-307 n 10307.
d. String: L kiu chui k t. Hng chui k t phi nm gia hai du nhy
kp.
V d: Turbo prolog 2.0
e. Symbol: L mt kiu s cp, c hnh thc ging chui k t. Hng symbol
c hai dng: Dy cc ch, s v du gch di vit lin tip, k t u phi
vit thng (chng hn: telephone_number); Dy cc k t gia mt cp
hai nhy kp (ging nh chi k t)
f. Mt s php ton ca cc kiu
Php ton s hc
Php ton
ngha
+
Cng hai s
-
Tr hai s
Integer, real
Nhn hai s
Integer, real
Chia hai s
Integer, real
Integer
Integer
Kiu kt qu
ging kiu i
s
ging kiu i
s
ging kiu i
s
ging kiu i
s
Integer
Integer
Kiu ca i s
Kt qu
Mod
Div
Kiu ca i s
Integer, real
ngha
<
Nh hn
Yes hoc No
<=
Nh hn hay bng
Yes hoc No
Bng
Yes hoc No
102
Ngn ng lp trnh
>
Ln hn
Yes hoc No
>=
Ln hn hay bng
Yes hoc No
Khc
Yes hoc No
Cc v t nh cc hm ton hc
V t
ngha
Sin(X)
Tan(X)
Arctan(X)
Exp(X)
Ln(X)
Log(X)
SQRT(X)
ROUND(X)
Kiu ca
i s
Tnh sin ca X
real
Tnh tang ca X
real
Tnh arctang ca X
real
X
Tnh e
real
Tnh logarit c s e ca X
real
Tnh Logarit c s 10 ca real
X
Tnh cn bc hai ca X
real
Cho ta s nguyn l s X real
c lm trn, du l du
ca X
TRUNC(X)
Kiu kt
qu
real
real
real
real
real
real
real
integer
real
integer
real
real
real
real
real
integer
V d
round(2.3)=2
round(2.5)=3
round(-2.5)=-2
round(-2.6)=-3
trunc(2.5)=2
trunc(-2.6)=-2
a. Kiu mu tin:
C php: <tn kiu mu tin> = tn mu tin (danh sch cc kiu phn t)
V d:
Domains
ten, tac_gia, nha_xb, dia_chi = string
nam, thang, so_luong = integer
dien_tich = real
nam_xb = nxb(thang, nam)
do_vat = sach(tac_gia, ten, nha_xb, nam_xb); xe(ten, so_luong); nha(dia_chi,
dien_tich)
predicates
so_huu(ten,do_vat)
clauses
so_huu(Nguyen Van A, sach(Do Xuan Loi, Cau truc DL, Khoa hoc Ky
thuat, nxb(8,1985))).
103
Ngn ng lp trnh
[1,2,3]
Cu trc ca danh sch bao gm hai phn: Phn u l phn t u tin ca danh sch
v phn ui l mt danh sch ca cc phn t cn li.
Danh sch c vit theo dng [X|Y] th X l phn t u v Y l danh sch ui.
Chng hn trong danh sch [1,2,3] th u l s nguyn 1 v ui l danh sch [2,3].
Trong danh sch cng c th dng bin t do, chng hn ta c th vit [_|Y] ch mt
danh sch c u l mt phn t no v c ui l danh sch Y.
9.3.7 Cc hm xut nhp chun
Xut ra mn hnh
Nhp vo t bn phm
Ngn ng lp trnh
Ngn ng lp trnh
insert(integer,list,list)
sort(list,list)
clauses
insert(E,[],[E]).
insert(E,[A|B],[E,A|B]):insert(E,[A|B],[A|C]):sort([],[]).
sort([X|R1],L):-
E<=A.
E>A,insert(E,B,C).
sort(R1,R),
insert(X,R,L).
106