You are on page 1of 133

i hc quc gia H Ni

Ch bin: H S m

GIO TRNH TIN HC C S


QUYN 4
LP TRNH TNH TON KHOA HC K THUT
VI NGN NG FORTRAN
Bin son: Phm Vn Hun

NH XUT BN I HC QUC GIA H NI

Li gii thiu
Quyn 4 Lp trnh tnh ton khoa hc k thut vi ngn ng lp trnh
Fortran trong b gio trnh Tin hc c s nhm gii thiu cho sinh vin
ln u tin hc lp trnh nhng khi nim c bn v lp trnh my tnh, tm
tt nhng yu t c bn v cc lnh thng dng ca mt ngn ng lp trnh
bc cao l Fortran, c im s dng chng trong khi lp trnh gii cc bi
ton thuc loi tnh ton khoa hc k thut, x l s liu thng gp trong qu
trnh hc tp v nghin cu ca sinh vin cc ngnh khoa hc t nhin v cng
ngh.
Mc tiu cui cng ca sch l gip sinh vin lm quen vi cc phng
php xy dng cc chng trnh my tnh, thut gii cc bi ton thng dng
ca ton hc tnh ton, thng k ton hc v x l s liu, rn luyn k nng
lp trnh gii nhng bi ton x l v phn tch s liu, tnh ton ng dng
mc ban u trong thi gian hc tp v nghin cu trng i hc.
Nhng th d v h thng bi tp t luyn trong sch ny c ngha minh
ha, hng sinh vin ti vn dng cc lnh ca Fortran vit ra nhng
chng trnh ng dng nho nh c tnh c th, bc u lm quen vi nhng
c th x l d liu quan trc trong chuyn mn ngnh o to ca mnh.
Nhng c im khc ca ni dung tnh ton khoa hc k thut ng dng lp
trnh nh qun l c s d liu, cc phng php thng k hin i, cc
phng php gii s tr nhng bi ton ca vt l, ha hc, sinh hc, c hc
cht lng, ng lc kh quyn, i dng... cha c cp y do khun
kh kin thc chuyn mn ca ngi hc v bn thn ngi bin son sch.
V l ti liu hc tp v lp trnh c s, ni dung ngn ng trong sch ny
cng khng bao qut ht nhng yu t trong th gii rng ln ca Fortran.
Nn bt u bng nhng g n gin nhng c vic. Mt khi ngi hc bt
u bit lp trnh, thy c ng dng my tnh c ch trong hc tp v nghin
cu ca mnh, s ny sinh nhu cu tm hiu v khai thc Fortran trong rt
nhiu ti liu tra cu v sch chuyn kho khc hoc h thng tr gip sn c
ca Fortran.
Trong sch ny, mi chng c cu to nh mt bi hc. Mi chuyn
t, khi nim xut hin ln u u c in nghing, cc cu lnh c in ch
hoa m v bao trong hp gip ngi c thun tin tra cu khi cha thuc
chnh t cu lnh.
Nhng th d minh ha c chn lc sao cho n gin, nhng cng c
2

tnh in hnh, gip ngi c lin tng n nhng lp bi ton khc c th


cng s dng cch gii. Chng trnh th d lun nht qun p dng tng
phn chia nhim v ln thnh cc vic nh hn thc hin tng vic mt,
dn ti kt qu cui cng. Vi cch trnh by ny, hy vng ngi hc s thy
lp trnh khng cn l ci g tru tng, rc ri, kh hiu, m n t nhin nh
ta vn gii quyt bi ton khng bng my tnh.
Nhng tm tt kinh nghim g ri v li khuyn v rn luyn phong cch
lp trnh mi bi hc c th rt c ch cho ngi hc. V y l li khuyn
u tin cho ngi mi hc lp trnh: Hy lun tng tng xem mnh s phi
gii bi ton t ra bng tay nh th no trc khi bt u ngh cch vit ra
cc dng lnh ca chng trnh my tnh. Trc khi vit mt chng trnh
my tnh, d l chng n gin, hy hnh dung gii bi ton bng mt thut
gii no c th, phc ha ra mt gi trnh (pseudocode) hoc mt lu
(flow chart) tng ng.
Tc gi

Mc lc
M u.................................................................................................................................... 6
Cu hi v bi tp phn m u ....................................................................................... 12
Chng 1 Cc kiu d liu c bn v cc php ton trong Fortran ................................. 13
1.1 D liu v cch biu din d liu .............................................................................. 13
1.2 Hng v bin.............................................................................................................. 14
1.2.1 Tn bin v tn hng........................................................................................... 14
1.2.2 M t (khai bo) kiu d liu ca bin v hng ................................................. 15
1.3 Bin c ch s (mng)................................................................................................ 18
1.3.1 Khi nim mng ................................................................................................. 18
1.3.2 M t mng......................................................................................................... 19
1.4 Cc hm chun .......................................................................................................... 20
1.5 Lnh gn v cc ton t s hc.................................................................................. 21
1.5.1 Lnh gn ............................................................................................................. 21
1.5.2 Cc php tnh s hc n gin............................................................................ 22
1.5.3 c lng biu thc s hc ............................................................................... 22
1.5.4 Khi nim v ct v cc php tnh hn hp........................................................ 23
1.5.5 Khi nim v s qu b v s qu ln (underflow, overflow) ............................ 24
Cu hi v bi tp chng 1 ............................................................................................. 24
Chng 2 - Nhp v xut d liu n gin ......................................................................... 26
2.1 Cc lnh xut v nhp d liu ................................................................................... 26
2.2 Cc c t trong lnh FORMAT................................................................................ 28
Cu hi v bi tp chng 2 ............................................................................................. 31
Chng 3 Cc cu trc iu khin ................................................................................... 33
3.1 Khi nim v cu trc iu khin .............................................................................. 33
3.2 Cc loi cu trc iu khin c bn........................................................................... 33
3.2.1 Th d ng dng thut gii cu trc.................................................................... 34
3.2.2 Cu trc IF v cc lnh tng ng ..................................................................... 36
3.2.3 Cu trc lp v lnh DO ..................................................................................... 50
Cu hi v bi tp chng 3 ............................................................................................. 57
Chng 4 File d liu v t chc file d liu................................................................... 62
4.1 Khi nim v file d liu v t chc lu tr d liu ................................................ 62
4.2 Cc lnh nhp, xut d liu vi file........................................................................... 63
4.3 K thut c cc file d liu...................................................................................... 65
4.3.1 S dng ghi c ch nh.................................................................................. 66
4.3.2 Dng k hiu kt thc d liu ............................................................................ 67
4.3.3 S dng ty chn END....................................................................................... 68
4.4 To lp cc file d liu .............................................................................................. 69
4.5 K thut tr gip tm li chng trnh ...................................................................... 70
Cu hi v bi tp chng 4 ............................................................................................. 71
Chng 5 D liu kiu mng ........................................................................................... 73
5.1 Mng mt chiu......................................................................................................... 73
5.2 Lnh DATA............................................................................................................... 75

5.3 Mng hai chiu .......................................................................................................... 76


5.4 Mng nhiu chiu ...................................................................................................... 78
5.5 Nhng iu cn ch khi s dng cc mng............................................................ 82
Cu hi v bi tp chng 5 ............................................................................................. 83
Chng 6 Chng trnh con loi hm .............................................................................. 85
6.1 Cc hm chng trnh con......................................................................................... 86
6.1.1 Hm lnh ............................................................................................................ 86
6.1.2 Hm chng trnh con ........................................................................................ 87
6.2 quy ....................................................................................................................... 92
6.3 Ch dn g ri v phong cch vit chng trnh c hm con.................................... 93
Cu hi v bi tp chng 6 ............................................................................................. 93
Chng 7 Chng trnh con loi th tc .......................................................................... 95
7.1 Khai bo v gi chng trnh con th tc ................................................................. 95
7.2 Nhng th d ng dng chng trnh con th tc ..................................................... 96
7.3 Nhng ch dn g ri khi s dng cc th tc......................................................... 101
Cu hi v bi tp chng 7 ........................................................................................... 101
Chng 8 Kiu d liu vn bn...................................................................................... 103
8.1 Tp cc k t ca Fortran ........................................................................................ 103
8.2 Cc dng khai bo bin k t .................................................................................. 103
8.3 Nhp, xut d liu k t .......................................................................................... 104
8.4 Nhng thao tc vi d liu k t............................................................................. 105
8.4.1 Gn cc gi tr k t ......................................................................................... 105
8.4.2 So snh cc gi tr k t.................................................................................... 105
8.4.3 Trch ra xu con................................................................................................ 106
8.4.4 Kt hp cc xu k t....................................................................................... 107
8.4.5 Nhng hm chun x l xu k t ................................................................... 108
Cu hi v bi tp chng 8 ........................................................................................... 111
Chng 9 Mt s c im b sung v file.................................................................... 113
9.1 Cc file ni ti (Internal Files)................................................................................. 113
9.2 Cc file truy nhp tun t (Sequential Files)........................................................... 114
8.3 Cc file truy cp trc tip (Direct-Access Files) ..................................................... 116
9.4 Lnh truy vn INQUIRE ......................................................................................... 117
Cu hi v bi tp chng 9 ........................................................................................... 119
Ti liu tham kho .......................................................................................................... 122
Ph lc 1: Bng cc hm chun ca FORTRAN........................................................... 123
Ph lc 2: Phng php Gauss gii h phng trnh i s tuyn tnh........................ 125
Ph lc 3: Phng php bnh phng nh nht trong phn tch hi quy ..................... 129
Ph lc 4: S ng dng phng php hi quy nhiu bin ...................................... 131

M u
Khi nim v lp chng trnh v thc hin chng trnh. Khi ngi
dng mun my tnh lm mt vic g , th d gii mt bi ton, x l cc
thng tin a ra thng tin khc, th phi vit ra mt chng trnh my
tnh thc hin. Tt c nhng g ta vit ra theo mt quy cch nht nh my
tnh tun t thc hin c, dn n kt qu mong mun, chnh l mt chng
trnh my tnh.
Ngi lp trnh thng vit cc chng trnh my tnh bng ngn ng
bc cao vi nhng cu lnh ging nh nhng cu ting Anh, d hc v s
dng. Ngn ng lp trnh Fortran cng thuc loi . Mi mt bc ta mun
my tnh thc hin phi c vit ra thnh mt cu lnh theo mt c php
ngn ng c th (language syntax) ca Fortran, gi l chng trnh ngun,
hay m ngun. M ngun c th son bng mt phn mm son tho bt k.
a s cc phin bn ca phn mm Fortran hin nay cng cung cp cho chng
ta cng c son m ngun chng trnh mt cch thun tin, d s dng.
Tuy nhin, chng trnh ta vit ra nh vy phi c mt chng trnh
chuyn dng b bin dch (compiler) dch thnh ngn ng my th my tnh
mi hiu v thc hin c. Khi compiler dch cc dng lnh ta vit, n t
ng tm cc li m ta mc phi khi vit cc dng lnh, tc cc li v chnh t,
c php, cc k hiu... Loi li ny gi l li dch, hay li c php (syntax
error). Nu chng trnh vit ra c li dch, b bin dch s thng bo
ngi vit chng trnh sa. Sau khi sa ht li, ta chy li chng trnh
bt u t bc dch. Mt khi dch xong, mt chng trnh son tho lin kt
(linkage editor program) s thc hin vic hon tt sn sng cho bc thc
hin. Chnh l bc ny, cc lnh ta vit c thc hin trong my tnh. Li
chng trnh cng c th xut hin trong bc ny, gi l li trong khi chy
chng trnh (run-time error) hay li lgic. Nhng li ny khng lin quan ti
c php ca lnh, m lin quan ti lgic ca cc lnh, ch l ra khi my tnh
thc thi cu lnh. Th d, lnh
X=A/ B

l mt cu lnh ng v cch vit, n bo my tnh ly gi tr ca bin A chia


cho gi tr ca bin B v gn kt qu php chia vo bin X . Tuy nhin, gi s
nu B bng khng, php tnh chia cho s khng l php tnh sai, khng c
ngha v ta c thng bo li chy chng trnh. Cc li lgic khng phi
bao gi cng c thng bo. Th d, nu trong cu lnh no thay v chia
mt s cho 0.10 ta vit nhm thnh nhn vi 0.10, khi chy chng trnh s
6

khng c li no c thng bo, nhng p s bi ton, tc kt qu m ta


mong i, s l sai.
Khi nim v thut gii. Ni mt cch n gin, thut gii (algorithm)
l cch gii mt bi ton, cch thc hin mt vic dn ti li gii, kt qu.
Cc bi ton khoa hc k thut thng c gii bng nhng phng php ca
ton hc tnh ton bit. Th d, khi lp trnh gii h phng trnh i s
tuyn tnh, ta c th s dng phng php loi bin ca Gauss. Nhiu nhim
v x l khc c gii quyt bng suy lun lgic, quy tc, kinh nghim thc
t thng ngy. Th d, mun xc nh mt nm c phi l nm nhun khng,
ta p dng quy tc quen thuc: nu nm l nm u th k, th s hiu nm
b i hai ch s sau cng phi chia ht cho 4, nu nm khng phi l nm
u th k, th s hiu nm phi chia ht cho 4. Thut gii c ta m t tm
tt bng mt s li ngn gn hay cc k hiu ch dn c gi l gi trnh
(pseudocode).
Vit chng trnh my tnh chnh l vit ra nhng lnh tng ng cho
my tnh tun t lm nhng vic nh gi trnh m t thut gii m ta chn.
Mt bi ton c th c nhiu thut gii. Thut gii ng v ti u th chng
trnh tnh hoc x l ng v nhanh t p s. Mt chng trnh my tnh
tt l chng trnh tnh hoc x l ng, nhanh v m ngun phi ngn gn,
d hiu.
Quy trnh gii bi ton trn my tnh. Nhn chung cng vic gii mt
bi ton bng my tnh gm nm bc sau:
1) Pht biu bi ton mt cch r rng; 2) M t thng tin nhp vo v
xut ra; 3) Gii bi ton bng tay i vi tp d liu n gin; 4) Pht trin
cch gii bi ton thnh dng tng qut v 5) Kim tra p s vi nhiu tp d
liu khc nhau.
By gi ta minh ha nm bc trn qua th d bi ton tnh gi tr trung
bnh ca mt tp s liu thc nghim.
Bc 1: Ta pht biu bi ton mt cch r rng nh sau: Tnh tr s
trung bnh ca tp cc gi tr s liu thc nghim.
Bc 2: Ch ra c th s liu vo v ra l g, hnh thc ra sao. Nu c t
ghi mt s gi tr ca s liu, i hi nhp vo my qua bn phm, khi no ht
s liu th g gi tr 0.0 bo ht, sau mi tnh tr s trung bnh v in ra tr
s trung bnh . Vy th phi m t bc 2 nh sau: u vo l chui cc
gi tr s thc khc khng. u ra l gi tr trung bnh, s l mt s thc c
in trn mn hnh. Gi s nu u vo l mt s s liu nh trn, nhng
c ghi vo mt file trong cng, quy cch ghi cng c nhng c im
nht nh, th bc m t vo v ra s hon ton khc v cch gii cng s
khc. Khi ta phi m t r cch thc s liu ghi trong file. Th d, ta c th
m t d liu u vo v u ra nh sau: D liu u vo l mt chui s thc
c ghi trong file vn bn c tn l SOLIEU.DAT vi quy cch ghi nh sau:
dng trn cng ghi mt s nguyn ch s phn t ca chui, cc dng tip sau
7

ln lt ghi cc s thc, mi s trn mt dng.


Bc 3: Dng my tnh tay tnh th vi mt tp n gin gm nm s
liu: th d:
Th t

Gi tr

1
2
3
4
5
Trung bnh =

23.43
37.43
34.91
28.37
30.62
30.95

Tp s liu ny v kt qu tnh tay s c dng kim tra bc 5.


Bc 4: Trong bc ny ta khi qut li nhng thao tc cn lm bc
3. Tun t nhng thao tc ny dn n gii c bi ton chnh l thut
gii. Ta s m t tun t t u n cui qu trnh gii. Chia qu trnh thnh
mt s khi v lit k nhng khi ra. Sau ny chng trnh my tnh s
tun t thc hin cc khi chia . Trong mi khi ta li chi tit ha thm ra
n mc c th chuyn thnh nhng lnh my tnh. Vy y p dng hai
phng php: phn khi v chi tit ha tng khi. Vi bi ton ang xt, vi
trng hp d liu u vo cn nhp t bn phm, ta chia thnh ba khi:
- Nhp cc gi tr v ly tng ca chng.
- Chia tng cho s gi tr.
- In tr s trung bnh.
C th ha tng khi s dn ti gi trnh ca chng trnh nh sau:
1) Cho tng ca cc gi tr bng khng.
2) Cho s s liu vo bng khng.
3) Nhp vo tng gi tr v kim tra chng no gi tr nhp vo cn khc
s 0.0 th:
- Cng thm gi tr vo tng.
- Cng thm 1 vo s s liu.
4) Chia tng cho s s liu c gi tr trung bnh.
5) In gi tr trung bnh.
V thut gii c m t kh chi tit, ta chuyn thut gii thnh
chng trnh nh sau:
PROGRAM Tgttb
INTEGER dem
REAL x, tong, tb
tong = 0.0
dem = 0
5 READ *, x

IF (x .NE. 0.0) THEN


tong = tong + x
dem = dem + 1
GOTO 5
ENDIF
tb = tong / REAL (dem)
PRINT 6, tb
6 FORMAT (1X, TRUNG BINH BANG , F6.2)
STOP
END

Bc 5: Trong bc ny ta th chy chng trnh vit vi tp s liu


c th bng cch tnh tay mc 3. u ra trn mn hnh my tnh phi
nh sau:
TRUNG BINH BANG 30.95

Ngoi ra, ta c th chy th vi mt s tp s liu khc nhau tin chc


vo tnh ng n lgic v hon ho ca chng trnh xy dng.
Ngn ng lp trnh Fortran. Fortran l mt trong nhng ngn ng lp
trnh bc cao xut hin sm nht, cng vi s ra i ca cc my tnh v cng
vic tnh ton khoa hc k thut bng my tnh ca cc k s. Ngn ng ny
dn dn hon thin vi nhiu yu t iu khin v phng tin nhp xut
thng tin, chng trnh dch cho cc h thng my tnh khc nhau. Fortran77
l ngn ng c American National Standards Institute (ANSI) tiu chun
ha v hon chnh v c International Standards Organisation (ISO) chp
nhn. Fortran 77, gi l Fortran chun, l mt trong nhng ngn ng lp trnh
bc cao vi y nhng tnh nng u vit ca nhiu ngn ng lp trnh khc
ngy nay. N c s dng rng ri l nh c cc chng trnh dch cho hu
ht cc kiu my tnh trn th gii. Ngoi ra, Fortran c u im kt hp c
o cc tnh nng u vit khc nhau ca cc ngn ng lp trnh. N x l d
liu k t tt nh d liu s v d liu lgic, c h thng hm t sinh v hm
th vin phong ph, n c cc phng tin thao tc file v thit b xut nhp
mnh, nn thch hp vi nhiu lp chng trnh ng dng.
i vi ngi lp trnh tnh ton khoa hc k thut, ch ring kh nng
gn nh v tn v kch thc ca cc mng d liu l mt u im ng k.
Mt s im yu ca Fortran chun nh: gii hn 6 k t trong cc tn
quy c, quy cch vit dng lnh, yu cu s dng nhn lnh, quy tc chnh t
kh t do, nhiu h thng gi tr ngm nh, lm cho h thng kim tra li lp
trnh kh hn. Th d, Fortran khng i hi khai bo trc kiu d liu cho
tng bin, do , nu ngi lp trnh mc li chnh t trong mt tn bin th
chng trnh dch s xem nh ngi lp trnh s dng hai bin trong khi d
nh s dng mt bin. Li c th nghim trng, nhng khng d pht hin.
Cu trc d liu v cu trc iu khin ca Fortran chun hi ngho nn.
Fortran 90 khc phc nhng nhc im mt cch ng k.
9

Cc chng trnh Fortran hon chnh. Chng trnh Tgttb mc trc


c th l mt th d v mt chng trnh hon chnh. Nh vy, ta thy mt
chng trnh hon chnh bt u bng lnh PROGRAM ch s bt u ca
chng trnh. Dng tng qut ca lnh ny nh sau:
PROGRAM Tn chng trnh
trong tn chng trnh l mt xu k t gm t mt n su k t, bt u
bng ch ci v ch cha cc ch ci la tinh v ch s. Kt thc chng trnh
l hai lnh:
STOP
END
Lnh PROGRAM v lnh STOP l cc lnh ty chn, c th khng nht
thit phi c. Nu ta khng vit ra, chng c th c chng trnh dch t
thm vo. Phn thn chng trnh gm tt c cc lnh khc nhm thc hin
bi ton c gii v chia thnh hai nhm: nhm cc lnh thc hin
(executable statement) v nhm cc lnh khng thc hin (non-executable
statement) hay gi l cc lnh m t, lnh khai bo. Nhm cc lnh m t phi
nm pha trn ca thn chng trnh.
Nh vy cc chng trnh Fortran c th c cu trc tng qut nh sau:
PROGRAM Tn chng trnh
Cc lnh khng thc hin (Non-executable statements)
Cc lnh thc hin (Executable statements)
STOP
END
Trong chng trnh tnh gi tr trung bnh ca chui s thc th d trn,
ta thy sau t kha PROGRAM l tn chng trnh - l cm ch Tgttb.
Nhm cc lnh khng thc hin (nhng lnh m t) gm 2 lnh:
INTEGER dem
REAL x, tong, tb
cn nhm lnh thc hin gm cc lnh tip sau hai lnh trn:
tong = 0.0
dem = 0
5 READ *, x
IF (x .NE. 0.0) THEN
tong = tong + x
dem = dem + 1
GOTO 5
ENDIF
tb = tong / REAL (dem)
PRINT 6, tb
6 FORMAT (1X, TRUNG BINH BANG , F6.2)
10

Nhng lnh thc hin thng l nhng lnh gn, lnh tnh ton cc php
tnh, lnh chuyn iu khin, c, ghi s liu v mt s lnh khc. Cui cng
chng trnh c lnh STOP v END.
Trong thc t c th c nhng chng trnh ln hn rt nhiu, gm hng
nghn dng lnh v c cu trc phc tp. Nhng ta vn thy n c phn u,
phn thn v phn cui, trong phn thn chng trnh cng ch c hai nhm
lnh ging nh trong chng trnh n gin trn y.
Quy cch son tho mt chng trnh Fortran. Cc chng trnh
Fortran c son tho nh mt b son tho (editor) hoc phn mm son
tho vn bn no . Cc lnh ca mt chng trnh c vit thnh nhng
dng ni tip nhau, mi lnh trn mt dng mi. Trn mn hnh son tho
chun, ngi ta quy c cc ct t 1 n 5 (hnh 0.1) dng ghi s hiu lnh
hay gi l nhn lnh, ct 6 chuyn dng ghi k t ni dng lnh, ni dung
cc dng lnh ch c ghi trn cc ct t 7 n 72. Tt c cc thng tin vit
t sau ct 72 tr i b b qua.

Cc ct
1-5

Ct
6

Cc ct
7-72
Lnh Fortran
K t ni dng

Nhn lnh

Hnh 0.1 Quy cch vit lnh Fortran trn mn hnh son tho

Nhn lnh l mt s nguyn dng, khc khng, dng ch s hiu ca


dng lnh. Ch nhng dng lnh no cn c chuyn iu khin ti bi
nhng dng lnh khc mi nht thit phi c nhn lnh. Trong mt n v
chng trnh, nhn khng c trng nhau. Du ni dng lnh c th l bt c
k t no ngoi k t trng v s khng; thng ngi ta hay dng du * hoc
du + ch rng dng hin ti l phn ni tip ca lnh dng trn . Trong
cc dng lnh c th c nhng k t trng d c. Trong chng trnh son
tho c th c nhng dng ghi ch (comment lines); nhng dng ny khng
thuc ni dung chng trnh, khng c dch khi dch chng trnh, m ch
c tc dng gi nh cho ngi lp trnh khi theo di kim tra chng trnh.
Tt c cc dng ghi ch phi bt u bng mt ch ci, thng ngi ta dng
ch C (ch ci u tin ca t comment), ng ct th nht ca cc ct
dng ghi nhn. Trong sch ny s lun s dng ch ci C nh du dng
ghi ch trong cc chng trnh. Cc b son tho sau ny cho php dng mt
s k t khng phi ch ci t vo ct th nht nh du dng ghi ch v
du chm than (!) v tr bt k nh du nhng g ghi trn dng sau du
ny l thuc v li ghi ch.
Xy dng mt chng trnh my tnh ni chung l mt cng vic kh v
i hi tnh cn thn, t m. Kinh nghim cho thy rng ngay c i vi ngi
11

lp trnh thnh tho, khi vit mt chng trnh d n gin vn c th mc li,


trong c c nhng li khng ng ti. Do , mt s sch dy ngn ng
lp trnh, ngi ta khuyn ngi hc ngay t u ch luyn thi quen, hay
phong cch (style) son tho chng trnh. Mt chng trnh p l chng
trnh tnh, x l ng v nhanh ci m ta cn tnh, cn x l, nhng n gin,
d hiu v sng sa v cch trnh by. Trong ti liu ny dn dn cng s c
nhng ch dn, nhng li khuyn quan trng cho ngi hc rn luyn phong
cch son chng trnh. Chu kh rn luyn nhng thi quen tt cng gp
phn gip ngi lp trnh vt v khi kim tra chng trnh v tin xa trong
thc hnh lp trnh.

Cu hi v bi tp phn m u
1. Nu dng ch ci C lm du ni dng lnh th c c khng?
2. Cc nhn trong chng trnh c cn c gi tr tng dn khng?
3. Mt chng trnh ch gm mi mt lnh END c phi l mt chng
trnh Fortran hon chnh khng?
4. Nu cc bc gii bi ton chn theo bng im thi ly 3 sinh vin c
im thi cao nht. Vit gi trnh cho bi ton .

12

Chng 1 Cc kiu d liu c bn v cc php


ton trong Fortran
1.1 D liu v cch biu din d liu
Fortran c th thao tc vi su loi (kiu) d liu c bn thng gp
trong thc t l: cc s nguyn, s thc, s phc, s thc chnh xc gp i,
cc gi tr lgic v d liu vn bn. Bng 1.1 cho bit kh nng biu din cc
loi d liu v chnh xc trong my tnh.
Bng 1.1 Kh nng x l d liu ca Fortran
D liu
Nguyn
Nguyn ngn
Thc n

Thc CX i
Lgic
Phc
K t

Loi
Integer, Integer*4 (4 byte)
Integer*2 (2 byte)
Real, Real*4 (4 byte)
Real*8; Double precision
(8 byte)
Logical (1 bit)
Complex; Complex*8
(4 byte thc, 4 byte o)
Character

Phm vi gi tr
2147 483 648 2147 483 647
32768 32767

S ch s
c ngha

10 38 10 38

Chnh xc
Chnh xc
7

10 308 10 308

15

false; true
Phn thc: 10 38 10 38
Phn o: 10 38 10 38
S k t bt k

Chnh xc
7
Chnh xc

Trong chng ny ta s lm quen vi cch biu din cc d liu kiu s


nguyn, s thc, gi tr lgic v vn bn (k t).
S nguyn l lit cc s thp phn vi du +, hoc khng c du. Cc
s nguyn c biu din di dng I . Th d:
0; 6; 400; +1234.
Trong Fortran c hai dng biu din gi tr s thc. Di dng F gi tr
s thc gm phn nguyn v phn thp phn, cch nhau bi du chm. S
thc c th c du +, hoc khng c du. Nu phn nguyn hoc phn thp
phn bng khng, c th khng cn vit ra phn . Du chm thp phn nht
thit phi c mt. Th d:
2.583; 14.3; 0.8; 12.; .7; 14.
Dng E biu din gi tr s thc thnh hai phn: phn hng thc nm
trong khong t 0,1 n 1,0 v phn bc. Bc bt u bng ch E , tip sau l
hng nguyn gm khng qu hai ch s thp phn, c th c du hoc khng
13

du. Th d s 25000 c th vit di dng E l 0.25E05. S ch s c ngha


ca phn hng thc v hng nguyn cng ty thuc loi s thc khai bo.
Hng vi chnh xc gp i (dng D ) c th vit nh s vi du chm
thp phn, cha t 8 n 16 ch s c ngha, hoc nh s dng m vi ch D
thay v E , trong phn hng thc c th cha ti 16 ch s c ngha. Th d:
2.71828182; 0.27182818D+1
Gi tr s phc biu din bng mt cp hng thc trong du ngoc n v
cch nhau bi du phy. Th d (2.1, 0.5E2) biu din s phc 2,1 + 50 i .
Hai s trong du ngoc ng vi cc phn thc v phn o phi cng
chnh xc biu din.
Cc gi tr d liu vn bn dng biu din cc on vn bn nh tn
cc i lng, cc khi nim, th d cm ch Toc do, Temperature, Bao
cao so 1... Ngi ta cn gi d liu vn bn l d liu k t, xu k t, d
liu ch.
Cc ch s 1, 2, ..., 9, 0 khi dng vi t cch l biu din cc gi tr s
tng ng th chng cng l nhng d liu kiu vn bn.
D liu lgic dng ch kh nng c hay khng ca mt s kin, ng
hay sai ca mt biu thc quan h. Ngi ta dng hai gi tr lgic l .TRUE.
v .FALSE. ch hai trng thi i lp nhau trong nhng th d trn v ngn
ng Fortran c th x l vi nhng gi tr lgic, tc thc hin nhng php tnh
i vi cc gi tr lgic nh trong ton hc c th thc hin.
S d my tnh lm c nhng vic nh chng ta thy l v n c th x
l thng tin, so snh, tnh ton c vi nhng kiu d liu ny v a ra
nhng kt lun, thng bo... Tt c nhng thng tin chng ta gp trong i
sng thc t u c th c biu din bng nhng d liu kiu ny hoc kiu
khc.
Trn y l nhng kiu d liu c bn ca ngn ng lp trnh Fortran.
Sau ny v cc chng khc, chng ta s thy cn c nhng kiu d liu
khc c t chc da trn nhng kiu d liu c bn va trnh by.

1.2 Hng v bin


My tnh x l d liu hay thc hin nhng tnh ton vi nhng i
lng. Tt c nhng i lng phi c lu gi trong my tnh. Nhng
i lng khng i trong sut qu trnh thc hin ca chng trnh gi l cc
hng, cn nhng i lng c th nhn nhng gi tr khc nhau gi l cc
bin. Vi mi hng hoc bin, trong b nh my tnh ginh ra mt a ch
lu gi tr. Tn chnh l k hiu quy c ca a ch .

1.2.1 Tn bin v tn hng


Tn trong Fortran chun c biu din bng tp hp t 1 n 6 cc ch
14

ci trong bng ch ci la tinh (26 ch ci) hoc cc ch s 0, 1, ..., 9, nhng


phi bt u bng ch ci.
Trong mt chng trnh cc tn khng c trng nhau. Trong cc phin
bn Fortran hin nay, dng lm tn khng phn bit ch ci hoa v ch ci
thng. Ngoi ra, cn mt vi k t khc cng c th dng cu to tn.
Phin bn Fortran 90 cho php t tn vi s k t nhiu hn 6 v trong tn c
th c mt s k t khc na. Tuy nhin, sinh vin nn tp thi quen t tn
gn gng theo Fortran chun, bi v tp hp 6 k t rt chng ta m
t cc bi ton, k c nhng bi ton ln v phc tp.
Th d, cc tn sau y
x ; a ; x1 ; b2t5 ; sohang ; sum l hp l, cn cc tn sau y l sai:
1ngay ; he so ; b*t
v trong tn th nht k t u tin l ch s, trong tn th hai c k t du
cch, trong tn th ba c k t (*) khng phi l nhng k t dng t tn.
Quy tc t tn bin trn y cng p dng i vi tn chng trnh, tn
hng, tn cc chng trnh con v tn file. (Ring vi tn file c th c thm
phn m rng gm khng qu ba ch ci hoc ch s ngn vi phn tn chnh
bi du chm).

1.2.2 M t (khai bo) kiu d liu ca bin v hng


Kiu d liu ca bin tng ng vi kiu d liu m n biu din. Cc
bin nguyn biu din cc d liu s nguyn, cc bin thc - s thc... Trong
chng trnh phi ch r cc bin c s dng biu din d liu kiu no
(nguyn, thc, lgic, phc, vn bn, s thc chnh xc thng hay chnh
xc gp i...).
Mi bin ch lu gi c nhng gi tr ng kiu ca n. Mt bin
m t kiu l s nguyn th khng th dng lu gi tr s thc hay gi tr
lgic.
Cch m t n ch dng i vi cc bin nguyn v thc: dng tn bin
nguyn bt u bng mt trong su ch ci i, j, k, l, m, n, cn tn bin thc bt
u bng mt trong nhng ch ci ngoi su ch ci trn. Ni chung, ngi
mi hc lp trnh khng bao gi nn dng cch m t n.
Cch m t hin dng cc lnh m t hin nh INTEGER, REAL,
CHARACTER, LOGICAL, DOUBLE PRECISION, COMPLEX... ch kiu
d liu m cc bin biu din. Di y l quy tc vit nhng lnh m t kiu
d liu: tun t nguyn, thc, lgic, phc, thc chnh xc gp i v k t
vn bn:
INTEGER Danh sch cc bin nguyn
REAL Danh sch cc bin thc
LOGICAL Danh sch cc bin lgic
15

COMPLEX Danh sch cc bin phc


DOUBLE PRECISION Danh sch cc bin chnh xc i
CHARACTER Danh sch cc bin k t
Trong danh sch cc bin s lit k cc tn bin, nu c hn mt bin th
cc bin phi cch nhau bi du phy. Th d:
INTEGER i, tt, dem
REAL x1, apsuat, max, time, delta
COMPLEX p1, p2, soph
ch rng cc bin i, tt, dem biu din cc gi tr s nguyn, cc bin x1, apsuat,
max, time, delta biu din cc gi tr s thc, cn ba bin p1, p2, soph - s
phc.
Nhng gi tr c gi nguyn nht qun trong sut chng trnh (tc
cc hng s) thng c gn vo cc a ch nh thng qua tn trong lnh
khai bo hng c dng:
PARAMETER (Ten1 = biu thc 1, Tn 2 = biu thc 2, ...)
Th d, trong chng trnh nu ta nhiu ln dng n gi tr s
= 3,141593 th ta c th gn gi tr 3,141593 cho mt tn hng l pi bng lnh
PARAMETER (pi = 3.141593)
Lnh sau y
PARAMETER (hsmsd = 0.0026, ro = 1.0028)
khai bo hai hng s: hsmsd v ro, hsmsd c gn gi tr bng 0,0026, cn ro
c gn gi tr 1,0028.
Trong chng trnh tt c nhng lnh khai bo (m t) va gii thiu trn
y thuc loi cc lnh khng thc hin v chng phi nm u chng
trnh, trc tt c cc lnh thc hin.
Khi nim v tn, kiu d liu ca bin, ca hng l nhng khi nim c
bn, quan trng trong ngn ng lp trnh.
u mc ny ni mt tn thc cht l k hiu quy c ca mt a
ch trong b nh ca my tnh lu gi tr. Lnh khai bo bin mi ch t
tn cho mt a ch trong b nh v quy nh trong a ch c th lu gi
d liu kiu g. Cn c th trong nh c cha gi tr cha hay cha gi
tr bng bao nhiu th ty thuc vo cc lnh thc hin trong chng trnh,
ti tng on ca chng trnh. iu ny ging nh ta quy c nh ra mt
ngn trong t vn phng chuyn gi cc cng vn, cn trong ngn y c
cng vn hay khng, hoc c my cng vn th ty thuc lc ny hay lc khc.
Di y nu mt th d minh ha ngha ca vic t tn bin v m t
kiu (d liu) ca bin, ng thi theo di gi tr ca bin ti tng thi im
ca chng trnh. Gi s ta vit mt chng trnh tnh din tch s ca hnh
tam gic khi gi tr di y b bng 5,0 cm, chiu cao h bng 3,2 cm, in kt
qu tnh ln mn hnh. Chng trnh sau y s thc hin nhng vic :
16

REAL day, cao


day = 5.0
cao = 3.2
day = 0.5 * day * cao
PRINT *, DIEN TICH TAM GIAC BANG, day
END

! (1)
! (2)
! (3)
! (4)
! (5)
! (6)

Trong chng trnh ny c su lnh. Lnh (1) khai bo hai bin tn l day
v cao d nh lu gi tr s thc tng ng ca y b v chiu cao h ca
tam gic. Lnh (2) gn gi tr b = 5,0 (cm) cho bin day. Lnh (3) gn gi tr
h = 3,2 (cm) cho bin cao. Lnh (4) tnh gi tr ca biu thc 0,5 b h , tc
din tch s ca tam gic, bng 8 (cm2) v gn cho bin day. Lnh (5) in ln
mn hnh dng ch DIEN TICH TAM GIAC BANG v sau l gi tr ca
bin day. Lnh (6) l lnh kt thc chng trnh. Sinh vin mi hc lp trnh
thng c th khng hiu lnh th nm, khi thy in din tch hnh tam gic m
li in gi tr ca bin day. Trong u h quen ngh khai bo day c ngha day
l di cnh y tam gic. Nhng nu hiu c rng lnh (1) khai bo
REAL day, cao thc ra mi ch d nh dng hai tn day v cao lu cc s
thc, khng cn bit s thc bng bao nhiu. chng trnh trn, khi lnh
(2) thc hin xong th trong bin day (trong nh c tn l day) mi thc s
c s 5,0, tc di y tam gic. Nhng khi chng trnh chy xong lnh (4)
th trong bin day l s 8,0 ch khng phi l s 5,0 na. V khi thc hin
xong lnh (5) th trn mn hnh s in ng gi tr din tch tam gic. Nm
vng c iu ny c ngha l hiu c ngha ca bin, tn bin v
tun t lm vic ca chng trnh, tc cc gi tr c lu trong my tnh nh
th no trong khi chng trnh chy.
Di y l hai li khuyn u tin c l quan trng nht i vi sinh
vin mi hc lp trnh:
1) Sau khi tm hiu xong bi ton cn gii, phi cn nhc tng i lng
trong bi ton c kiu d liu l s nguyn, s thc, k t vn bn... t tn
v khai bo kiu cho ng. Kinh nghim cho thy rng sinh vin no vit c
nhng lnh khai bo cc tn bin ng, va , sng sa trong phn khai bo
u chng trnh th thng l sau vit c chng trnh ng. Cn
nhng sinh vin khng bit t tn cho cc bin, va bt tay vo son tho
chng trnh loay hoay vi lnh m file d liu, tnh ci ny ci kia, th
thng l khng hiu g v khng bao gi lm c bi tp.
2) Nn tun th cch t tn ca Fortran chun. Ta c quyn chn nhng
ch ci, ch s no to thnh tn l ty , song nn t tn c tnh gi nh
n nhng i lng tng ng trong bi tp. Th d, vi bi ton va ni ti
trong mc ny ta c ba i lng l: di cnh y, ng cao v din tch
tam gic. Nn khai bo tn ba bin tng ng bng ba t tt ca ting Vit vi
lnh sau:
REAL day, cao, dtich
17

hoc bng ba t tt ca ting Anh vi lnh:


REAL base, height, sqre
hoc bng ba ch ci ng nh trong u bi tp vi lnh:
REAL b, h, s
u l nhng li khai bo ng, d hiu, trong li khai bo trn cng c l
l tt nht, li khai bo sau cng th hi qu ngn gn. Cn vi cng mc ch
khai bo m dng lnh sau y th mc d khng sai, nhng hon ton khng
nn, rt d gy nhm ln, mt mi trong khi kim tra chng trnh:
REAL x, ic, dt

1.3 Bin c ch s (mng)


1.3.1 Khi nim mng
Mng l tp hp c sp xp ca cc i lng c k hiu bng mt tn
duy nht. Cc thnh phn ca tp hp gi l nhng phn t mng. Mi phn
t c xc nh theo tn ca mng v v tr ca phn t trong mng, tc tr
s ca cc ch s. Tn mng c t tun theo quy tc nh tn bin, tn hng.
Cc ch s nm trong du ngoc n v nu c hn mt ch s th cc ch s
phi cch nhau bi du phy.
Th d: a(1), a(2), a(3) tng ng vi cch vit thng thng cho cc
bin a1 , a2 , a3 trong ton hc. Vy y ta t cho tp hp c 3 gi tr ny
mt tn chung l a, nhng ch gi tr th nht ta thm ch s 1 vo tn
a(1), ch gi tr th hai ta thm ch s 2 - a(2) v ch gi tr th ba ta
thm ch s 3 - a(3).
Tng t, cc phn t ca ma trn hai chiu trong i s
a11 a12

a21 a22

a13

a23

c vit trong Fortran l a(1,1), a(1,2), a(1,3), a(2,1), a(2,2), a(2,3) (ch s
th nht - s hiu dng, ch s th hai - s hiu ct).
Thm mt th d na v mng. Mt nm c 12 thng, mi thng c mt
tn, th d trong ting Vit: Thng Ging, Thng Hai, ..., Thng Mi hai,
trong ting Anh: January, February, ..., December. Ta hon ton c th gp 12
tn ting Anh ca cc thng trong nm vo thnh mt mng c tn chung l
emonth. Vy mng emonth s l mng c 12 gi tr (12 phn t), mi phn t
l mt t ch tn mt thng. Khi ni n January tc l ni ti gi tr th nht
ca mng emonth, ta vit emonth (1), ni n December l ni ti gi tr th
12 ca mng emonth, ta vit emonth (12).
Trong Fortran cho php dng cc mng ti a 7 ch s. Chiu ca mng
ng vi s ch s, cn kch thc ca mng ng vi s phn t cha trong
mng.
18

Ch s ca mng c th c xc nh bng cc hng hoc bin nguyn


dng vi tr s ln hn 0. Cng c th ch s xc nh bng biu thc s hc
bt k. Nu dng biu thc kiu thc, th sau khi tnh gi tr ca biu thc, gi
tr s thc c chuyn thnh s nguyn, tc ct b phn thp phn.
Trong mc 1.1 chng ta ni v cc kiu d liu c bn. Mi mt bin
kiu d liu c bn trong mt thi im chy chng trnh ch lu (cha)
c mt gi tr. By gi ta thy mng l mt th d v kiu d liu mi cu
to t cc kiu c bn - mt bin mng trong mt thi im c th lu c
nhiu gi tr s nguyn, s thc, chui k t... Nhng cn lu rng tt c cc
phn t ca mng, tc tt c cc gi tr ca mng phi c cng kiu d liu.
Th d vi mng emonth va xt, ta khng th a mt gi tr k t January
vo phn t emonth(1) v s thc 1.27 vo emonth(2).
Mng l mt yu t rt quan trng trong Fortran. Sau ny ta s thy s
dng mng trong ngn ng lp trnh c th gip vit nhng on chng trnh
rt ngn gn, trong sng. c bit trong cc vng lp, ch bng vi dng lnh
c th khin my tnh thc hin nhiu triu php tnh s hc.

1.3.2 M t mng
M t mng thc hin ngay u chng trnh v cha thng tin v tn,
chiu v kch thc mng vi ton t DIMENSION:
DIMENSION a (n1 , n2 , ..., nl ), mat (m1 , m2 , ..., mk )
trong a, mat tn cc mng; n1, n2 ,..., nl , m1 , m2 ,..., mk cc gii hn trn ca cc
ch s ch ra bng cc hng nguyn dng (gii hn di lun bng 1 v
khng cn ch nh trong m t).
Theo m t ny, my tnh s ginh trong b nh nhng vng a ch
lu tt c cc phn t ca cc mng. Cc phn t ca mng nhiu chiu c
lu lin tip nhau sao cho ch s th nht bin i trc nht, ch s cui cng
bin i sau cng.
C th m t mng bng cc lnh m t kiu hin nh i vi cc bin
thng thng, th d:
REAL max , l (7) , a (20 , 21)
Trong lnh m t ny bin max c khai bo l bin s thc, c th gi
l bin n, cn mng l (bin c ch s) l mng mt chiu vi 7 phn t s
thc, mng a l mng hai chiu (hai ch s) vi gii hn trn ca ch s th
nht l 20, ca ch s th hai l 21, n gm 420 phn t.
V cc gii hn ch s (kch thc mng) phi c ch nh trc phn
khai bo bng cc hng nguyn dng, khng th l cc bin, nn trong thc
tin lp trnh phi ch cn nhc chn cc gii hn ch s sao cho chng
khng qu ln lm tn b nh, nhng cng phi va biu din ht cc
phn t c th c ca mng. Th d, cn biu din mt bng s cc gi tr nhit
trung bnh tng thng trong 100 nm th ta khai bo mng tem (100,12) l
19

hp l. Nu d nh gii h phng trnh i s tuyn tnh khng qu 20


phng trnh, ta nn khai bo cc mng REAL a(20, 21), x(20) l va
biu din ma trn cc h s ai , j (k c cc h s t do) v cc nghim xi . Vi
mng emonth va nhc trong mc ny th lnh khai bo sau:
CHARACTER*9 emonth (12)
l hon ton hp l v mt nm ch c 12 thng v tn thng di nht (vi
ting Anh) l September gm 9 ch ci.

1.4 Cc hm chun
Mt s php tnh nh ly cn bc hai ca mt s, tnh tr tuyt i ca
mt s, tnh hm sin ca mt gc... thng gp trong nhiu thut ton, nn
chng c xy dng sn thnh cc hm gi l cc hm ring c ca Fortran
(intrinsic functions) hay cn gi l cc hm chun.
Bng 1.2 lit k mt s hm chun ca Fortran thng dng trong sch
ny.
Bng 1.2 Mt s hm chun ca Fortran
Tn hm v i s
SQRT (x)
ABS (x)
SIN (x)
COS (x)
TAN (x)
EXP (x)
LOG (x)
LOG10 (x)
INT (x)
REAL (i)
MOD (i, j)

Gi tr hm
x
Cn bc hai ca x
x
Tr tuyt i ca x
sin ( x) x tnh bng raian
cos ( x) x tnh bng raian
tg ( x) x tnh bng raian

e x e nng ln lu tha x
ln ( x) Logarit t nhin ca x
lg ( x) Logarit c s 10 ca x
Chuyn phn nguyn ca s thc x thnh s nguyn
Gi tr thc ca i (chuyn mt gi tr nguyn thnh gi tr thc)
Ly phn d nguyn ca php chia hai s nguyn i / j

Mi hm chun c mt tn ca n. Tn ca hm c tip ni vi u
vo, gi l i s ca hm, nm trong cp du ngoc n. Cc i s ca cc
hm chun c th nhn gi tr t cc hng, bin, hay biu thc tnh ra gi tr
ca hm. Nu mt hm c nhiu i s th cc i s c vit cch nhau
bng du phy. Khi cho cc gi tr c th vo cc i s th hm tnh ra mt
gi tr ca hm. V vy cc hm thng dng tnh mt gi tr no gn
vo mt bin khc, ngi ta ni l gi hm ra tnh. Hm khng bao gi c
mt bn tri du = ca lnh gn.
Th d, nhng lnh sau y gi cc hm tnh mt s gi tr:
s = SIN (0.5)
tg = TAN (s)
20

c = COS (angle * 3.141593 / 180.0)


Trong lnh th nht ta gi gi tr hng 0,5 (raian) cho i s ca hm
SIN n tnh ra gi tr sin ca gc 0,5 v gn gi tr cho bin s. Trong
lnh th hai, ta gi gi tr ca bin s vo i s ca hm TAN tnh ra
tang. Cn trong lnh th ba, ta gi mt biu thc vo i s ca hm COS
n tnh ra gi tr c sin ca mt gc c ln bng gi tr ca biu thc .
Trong trng hp ny, my tnh trc ht phi tnh (c lng) gi tr ca
biu thc i s, sau mi tnh c sin theo gi tr nhn c.
Thy rng mt hm biu din mt gi tr. Gi tr ny c th c dng
trong cc tnh ton khc hoc lu a ch nh khc. Mt hm chun cng c
th lm i s ca mt hm chun khc:
xlg = LOG (ABS (x))
Trong Fortran c mt s hm chun cho ra gi tr vi kiu cng kiu vi
i s ca mnh, chng c gi l cc hm t sinh (generic function). Th d
hm ABS (x), nu i s x l s nguyn th gi tr hm ABS(x) cng l s
nguyn, nu x l s thc - ABS(x) cng l s thc. Mt s hm ch nh kiu
ca u vo v u ra. Th d hm IABS l hm i hi i s nguyn v cho
ra gi tr tuyt i l s nguyn. Danh sch y hn v cc hm chun ca
Fortran c dn trong ph lc 1.
Khi dng mt hm chun no phi c k li m t xem n tnh ra gi
tr g, iu kin ca cc i s ra sao. Th d, cc hm lng gic phi dng
i s l raian, nu ta cho gi tr i s l th kt qu tnh s sai.

1.5 Lnh gn v cc ton t s hc


1.5.1 Lnh gn
Cc tnh ton trong Fortran c th ch nh bng lnh gn vi dng tng
qut nh sau:
Tn bin = Biu thc
Bn tri du lnh gn (du =) l tn mt bin. Biu thc bn phi c th
l mt hng, mt bin, mt biu thc s hc gm cc ton t s hc (bng 1.3)
thc hin gia cc ton hng l cc hng, bin v hm chun hay mt biu
thc lgic. Khi thc hin lnh gn, trc ht my c lng (tnh) gi tr ca
biu thc bn phi, ri gn gi tr cho bin bn tri, tc lu gi tr tnh c
ca biu thc bn phi vo a ch nh c tn bin bn tri. Kiu d liu ca
bin v ca biu thc phi ph hp.
Th d cc lnh gn:
pi = 3.141593
s = pi * bkinh ** 2
i = i +1
21

Lnh th nht gn hng s 3,141593 cho bin c tn l pi. Lnh th hai gn


gi tr ca biu thc pi (bkinh) 2 cho bin c tn l s. Lnh th ba ly gi tr
hin ti ca bin i cng thm mt n v v li gn cho chnh bin i.
trn ni, kiu d liu ca bin v ca biu thc phi ph hp.
Trng hp bin bn tri l bin thc, cn biu thc bn phi l gi tr nguyn
th my tnh s chuyn gi tr nguyn thnh gi tr thc (s thc vi phn
thp phn bng khng) ri mi gn cho bin. Khi bin bn tri l bin nguyn,
biu thc bn phi c gi tr thc, th my tnh ct b phn thp phn ca gi
tr thc, i s thc nhn c thnh s nguyn ri mi gn n cho bin
nguyn. Cc trng hp gn sai khc chng trnh dch s bo li.
Khng nn quan nim lnh gn nh du bng trong ton hc.

1.5.2 Cc php tnh s hc n gin


Cc php tnh s hc hay cn gi l cc ton t s hc gm c cc php
tnh cng, tr, nhn, chia v nng ln ly tha c k hiu bng cc ton t
trong Fortran nh trong bng 1.3.
Gi l nhng php tnh s hc bi v cc ton hng ca cc php tnh l
nhng gi tr s, th d s nguyn, s thc, s phc. Sau ny chng ta s thy
my tnh c th tnh ton vi nhng gi tr kiu khc nh gi tr lgic, gi tr
vn bn...
Bng 1.3 Cc php tnh s hc
Php tnh
Cng
Tr
Nhn
Chia
Ly tha

Dng i s

Trong Fortran

a+b
a b
ab
a
b
a3

a+b
ab
a*b
a/b
a ** 3

1.5.3 c lng biu thc s hc


Khi tnh gi tr ca biu thc s hc, nu biu thc gm nhiu php
tnh n, th my s tnh ton tng php tnh n nhn cc kt qu trung
gian, sau tnh gi tr cui cng ca biu thc gi l c lng. Mc u tin
khi c lng gi tr ca mt biu thc s hc gm nhiu php tnh n nu
trong bng 1.4.
Nu du m ng trc tn bin u tin trong biu thc, th n c
tnh vi cng mc u tin nh php tr. Th d: a**2 bng (a**2), a*b
bng (a*b) v a+b bng (a)+b.
Khi cc php tnh cng mc u tin th tt c cc php tnh c thc
hin t tri sang phi, th d:
22

b c + d c c lng bng (b c) + d.
Ring php nng ln ly tha th thc hin t phi sang tri:
a ** b ** c c c lng bng a ** (b ** c)
Th d: 2 * *3 * *2 bng 29 hay 512 ch khng phi l (2 * *3) * *2 = 82 = 64 .
Bng 1.4 Mc u tin cc php tnh s hc
u tin
1
2
3
4

Php tnh
Du ngoc
Nng ln ly tha
Nhn v chia
Cng v tr

1.5.4 Khi nim v ct v cc php tnh hn hp


Khi mt php tnh s hc thc hin vi hai s thc th a ra kt qu l
gi tr thc. Th d, khi tnh chu vi hnh trn vi ng knh dkinh l s thc,
ta c th dng mt trong hai lnh sau:
chuvi = pi * dkinh
chuvi = 3.141593 * dkinh
Php tnh s hc gia hai s nguyn cho ra kt qu l s nguyn. Th d,
cho hai s nguyn i v j, trong i nh hn hoc bng j, tnh s s nguyn
interv nm trong khong [i, j] c th thc hin bng lnh:
interv = j i + 1
Gi s side biu din gi tr thc v length biu din gi tr nguyn. By
gi xt lnh:
length = side * 3.5
Php tnh nhn gia hai gi tr thc s cho kt qu s thc. Tuy nhin, gi
tr thc c lu vo bin nguyn. Khi my tnh s b qua phn thp phn
v ch lu phn nguyn ca s thc; kiu lm trn ny gi l ct, n khc vi
lm trn ton hc cho kt qu l s nguyn gn nht vi gi tr ca s thc.
Khi cc php tnh s hc thc hin gia cc bin c kiu khc nhau (hn
hp) thng cho kt qu rt bt ng. Ta xt th d tnh th tch v ca hnh cu
bn knh thc r. Nu dng lnh:
v = (4/3) * 3.141593 * R ** 3
ta s thu c kt qu sai do php chia hai s nguyn 4/3 cho gi tr trung gian
bng 1, khng phi 1,333333. Do , lnh ng tnh v s l:
v = (4./3.) * 3.141593 * r ** 3
V cc php tnh hn hp i khi cho kt qu bt ng, ta nn c gng
trnh dng nhng biu thc s hc c php tnh hn hp.
23

1.5.5 Khi nim v s qu b v s qu ln (underflow, overflow)


V cc gi tr ln nht v b nht c th lu trong mt bin ty thuc vo
kh nng ca Fortran hoc chnh h my tnh, mt php tnh c th a ra kt
qu qu ln hoc qu b. Xt cc th d sau:
1)
x = 0.25E20
2)
a = 0.25E20
y = 0.10E30
b = 0.10E+20
z=x*y
c=a/b
Kt qu s ca php nhn trong th d 1 bng 0.25E49, r rng l c th
qu ln, khng lu gi c trong my tnh vi bc cc i l 38, cn kt qu
s ca php chia trong th d 2 bng 0.25E49 s qu b. Trong nhng trng
hp ny cc lnh Fortran hon ton ng, nhng li s pht sinh khi chy
chng trnh. Cc li do bc qu ln hoc qu b thng b gy bi nhng li
nhng on trc ca chng trnh, th d mt bin cha c gn gi tr
ng li c mt trong biu thc s hc.

Cu hi v bi tp chng 1
1. Hy biu din thnh dng F v dng E nhng s thc sau:
a) 3,14 b) 3,141593 c) 0,0026 d) 2,5 10 3 e) 14,0 f) 28,34
g) 6,023 1023 .

2. Xc nh nhng tn sai trong cc tn sau y:


a) averg b) ptbachai c) real d) 2log e) gptb2 f) hs-a1 g) x1 h) thang*1
i) month2
3. Vit thnh dng Fortran nhng biu thc tnh ton sau y:
4
3

a) Th tch v ca hnh cu theo cng thc V = R3 ( R bn knh).


b) Hai nghim x1 v x2 ca phng trnh bc hai x1, 2 =

b b 2 4ac
2a

( a, b, c cc h s ca phng trnh).
1
2

c) Gi tr hm y = sin 2 x cos(2 x 1 2) (khi x cho bng ).


1
d) Gi tr hm mt phn b Gauss f ( x) = e
2

x2
2

e) Thm mt n v vo bin nguyn i v lu vo bin i


f) Khong cch dist gia hai im A v B nu bit cc ta tng ng
ca hai im l ( xa , ya ), ( xb , yb ) .
4. c lng gi tr ca cc biu thc Fortran sau y:
4 / 3 * 3.141593 * (3 / 2) ** 3
24

SQRT (i + i / 2) (nu i = 1)
SIN ((30 / 180) * pi) (nu pi = 3.141593)
COS (60 / 180 * 3.141593)
5. Hy c chnh xc bng ngn ng Fortran nhng lnh vit di y:
a) i = i + k +1
b) ss = 0.5 * SIN (a * 3.1416 / 180.)
c) err = ABS (x1 - x2)
6. Hai on chng trnh sau nhm tnh tr s trung bnh A ca ba s
nguyn i1 = 1, i2 = 2, i3 = 3 v in kt qu ln mn hnh. Hy th xem kt qu c
ng khng. Nu thy sai th ch ra ti sao v khc phc bng cch no?
a)
i1 = 1
i2 = 2
i3 = 3
PRINT 4 , (i1 + i2 + i3) / 3
4 FORMAT (1X, A = , F4.1)
b)
i1 = 1
i2 = 2
i3 = 3
PRINT 2, 1 / 3 * (i1 + i2 + i3)
2 FORMAT (3X, F4.1)
7. Gi s cc cung a l (tm cung) c nh s hiu theo qui c nh
sau: 1 - bc; 2 - ng bc; 3 - ng; 4 - ng nam; 5 - nam; 6 - ty nam; 7 ty; 8 - ty bc. Hng gi quan trc c bng 165o. Hy vit biu thc
Fortran tnh s hiu cung ca hng gi .
8. Hy khai bo mt bin mng biu din tn vit tt gm ba ch ci
ting Anh ca tt c cc ngy trong tun.
9. Hy khai bo mt mng s thc vi kch thc va biu din
bng s liu p sut trn vng bin ng gii hn t kinh tuyn 99oE n kinh
tuyn 121oE, t v tuyn 1oN n v tuyn 25oN vi phn gii 15 pht theo
cc hng kinh tuyn v v tuyn.

25

Chng 2 - Nhp v xut d liu n gin


2.1 Cc lnh xut v nhp d liu
My tnh c th nhp d liu t cc ngun, cc thit b khc nhau. Tng
t, ta cng c th hng s xut d liu ra cc thit b khc nhau. Trong
chng ny, ta xt cch nhp d liu t bn phm v xut d liu ra mn hnh
hoc my in. Vic xut v nhp d liu c dng cc file d liu s c xt
trong chng 5.
Lnh xut d liu nh hng ra mn hnh:
PRINT * , Danh sch mc in
Lnh nhp d liu t bn phm:
READ * , Danh sch bin
Danh sch mc in trong lnh in c th l mt hng, mt bin, mt biu
thc. Nu trong danh sch mc in c t hai mc tr ln, th cc mc phi cch
nhau bi du phy. Trong danh sch bin ca lnh nhp (c) d liu, nu c
hn mt bin cn c d liu, th cc bin phi c lit k cch nhau bi
du phy. Cc mc c in ra trn mt dng mn hnh theo th t c lit k
trong danh sch. Nu trong danh sch khng c mt mc in no, th my tnh
ch n gin l xung mt dng trn mn hnh. Th d, xt on chng trnh
sau y:
goc = 30.0
PRINT * , Khi X = , goc , 1/2 SinX = , 0.5 * SIN (g *
* 3.141593 / 180.)
Ghi ch: Trong lnh PRINT va ri c mt du ni dng. y dng
du hoa th bn trong hnh ch nht nh * phn bit vi du hoa th bnh
thng l k hiu ca php tnh nhn. T nay v sau trong sch ny nhng
dng lnh no c du ni dng s quy c dng k hiu ny. Cn khi son
chng trnh trn mn hnh my tnh, th nh ni trong mc 1.5, chng 1,
ch cn vit du hoa th vo v tr th 6 ca dng lnh.
Ta thy trong danh sch cc mc in ca lnh PRINT c 4 mc lit k theo
th t l:
1) Cm ch Khi X =
2) Bin c tn l goc lu gi tr 30
3) Cm ch 1/2 SinX =
26

4) Biu thc 0.5 * SIN (goc * 3.141593 / 180.0)


biu th na sin ca gc 30 i thnh raian.
Nh vy, mc in th nht v th ba l nhng hng vn bn, mc in th 2
l gi tr ca bin s thc goc v mc in th t l mt biu thc s thc. Trc
khi in mc th t, my tnh phi c lng gi tr ca biu thc ny (bng
0,25), ri sau mi in gi tr ln mn hnh. Kt qu trn mn hnh:
Khi X =

30.00000

1/2 SinX =

0.2500000

Hy ch rng vi lnh PRINT * trn y cc mc in l nhng cm d


liu vn bn c in ra ng nh ta nhn thy trong dng lnh, tng k t mt,
k c du trng. Cc gi tr ca bin v biu thc thc c in ra sau mt
khong trng v s nhng ch s c ngha sau du chm thp phn khc nhau.
Nu gi tr ca cc bin l nhng s kh nh hoc kh ln, th my s in ra
nhng gi tr di dng biu din E hoc D (xem mc 1.1). Kiu in d liu
nh trn gi l in khng nh dng hay in khng c format.
Ch rng, trong READ *, sau du phy l danh sch cc bin, khi thc
hin lnh ny, my tnh ch ta g t bn phm nhng gi tr (cc k t vn
bn, s nguyn, s thc...) tng xng v kiu vi danh sch bin, mi gi tr
cch nhau mt du phy hay t nht mt du trng, ring nhng k t vn bn
phi nm trong cp du nhy trn ( ). Kt thc danh sch cc gi tr phi g
phm Enter (). My tnh s tun t gn nhng gi tr nhn t bn phm vo
cc bin tng ng trong danh sch bin ca lnh READ. Nu ta g cha
s gi tr theo danh sch bin, th my ch ta g cho n khi cc gi tr mi
kt thc thc hin lnh READ. Nu kiu d liu g vo sai so vi kiu d liu
ca bin, th lp tc chng trnh ngng thc hin v bo li chy chng
trnh. Th d lnh
READ * , i , nam , temp , ghichu
i hi ta g vo t bn phm mt s nguyn cho bin i, mt s nguyn na
cho bin nam v mt s thc cho bin temp, mt xu k t cho bin vn bn
ghichu, mun nhp ng yu cu ta c th g vo bn phm nh sau:
1 1982 25.36 SL quan trac hay 1,1982,25.36, SL quan trac
Lnh in c quy cch (c nh dng):
PRINT k , Danh sch mc in
Cng ging nh lnh in khng nh dng, danh sch cc mc in ch ra
nhng hng, bin hay cc biu thc cn in theo th t lit k. Tham s k
nguyn dng ch ti nhn ca lnh FORMAT m t quy cch in thng tin ra
mn hnh nh v tr in, khong cch gia cc mc in, s ch s thp phn cn
in i vi gi tr s thc... Dng tng qut ca lnh FORMAT nh sau:
k FORMAT (Danh sch c t)
trong k l nhn ca dng lnh FORMAT. Danh sch c t nm trong cp
27

du ngoc n bo cho my tnh bit v cch dn dng theo chiu thng ng


v b tr cc k t trong dng thng tin in ra. Nu in ra trn giy my in, th
ty chn dn dng bo cho my in iu khin ko giy in sang u trang
mi, xung dng mi, xung hai dng mi hay in ngay trn dng hin thi...
My tnh s thit lp mi dng in bn trong b nh trc khi thc s in dng
ln giy. Vng b nh bn trong gi l vng m (buffer). Nhng k t
u tin trong vng buffer gi l k t iu khin ko giy ca my in c
nhng ngha nh sau:
1
Du trng
0
+

Sang trang mi
Xung mt dng
Xung hai dng
Khng xung dng

Cch vit gp lnh in c quy cch v lnh FORMAT: Cp lnh in c quy


cch:
PRINT k , Danh sch mc in
k FORMAT (Danh sch c t)
c th vit gp li thnh mt dng lnh nh sau:
PRINT (Danh sch c t), Danh sch mc in
Ta thy trong cch vit ny, tham s k ca lnh PRINT c thay bng
cp du nhy trn , trong ton b danh sch c t k c cp du ngoc
lnh FORMAT c th vo. Cch vit ny cng p dng vi lch READ.
By gi ta lm quen vi nhng c t n gin. Trong chng 4 s cn
tr li vn nh dng phc tp hn khi lm vic vi cc file d liu.

2.2 Cc c t trong lnh FORMAT


1) Cc c t vn bn thng dng xut d liu l nhng k t, cc
on vn bn, hay dng in tiu cc bo co. c t vn bn cho php a
cc k t trc tip vo buffer. Cc k t phi nm trong cp du nhy trn hay
du ngoc kp. Th d:
PRINT 4
4 FORMAT (1 , KET QUA THI NGHIEM)
Ta cng c th dng c t w H, trong w s v tr xut d liu
vn bn. Th d
PRINT 5 , y
5 FORMAT (16H TICH PHAN BANG , F9.3)
2) c t nX s chn n du trng vo bn ghi, thng dng cn gia
cc tiu bo co, th d:
28

PRINT 35
35 FORMAT (1 , 25X , THI NGHIEM SO 1)
3) c t Aw dng cho cc hng v bin k t, cc thng tin vn bn, ty
chn w bo cho my tnh s v tr ginh cho mt bin k t (vn bn) cn in.
Mc vn bn in ra cn l bn phi.
4) c t Iw dng cho s nguyn, trong w s v tr dng in gi tr
s nguyn.
5) c t Fw.d dng biu din dng thp phn ca s thc, w tng s
v tr dnh cho s thc k c du chm thp phn, d s ch s thp phn sau
du chm. Trong hai c t I w v F w. d cc s in ra c cn l bn phi. Nu
c t thiu v tr biu din gi tr, th gi tr s s khng c in ra, m ti
cc v tr in s xut hin cc du sao (*) bo hiu cho ta bit rng c t ca
lnh FORMAT khng ph hp, thiu v tr so vi gi tr ca i lng cn in.
6) c t Ew.d dng ghi ra di dng ly tha nhng gi tr rt ln hoc
rt nh v khi ta cha hnh dung r v ln ca i lng.
Thng thng hai lnh PRINT v FORMAT i km gn nhau. Th d:
PRINT 5 , i, nam, temp, ghichu
5 FORMAT (1X, I3, I8, F10.2, 1X, A20)
Sau lnh READ v cc gi tr c g vo t bn phm ni trong mc
2.1, th kt qu cp lnh in ny trn mn hnh s nh sau:
1

1982

25.36 SL quan trac

7) Cc c t Aw, Iw, Fw.d v Ew.d cng dng vi lnh c s liu.


8) i vi cc gi tr lgic trong Fortran dng c t Lw, trong w s
v tr ginh cho d liu. Th d theo lnh
16 FORMAT (L5)
nu ti mt trong 5 v tr ginh cho bin c ch T, th gi tr .TRUE. s c
gn vo bin lgic trong lnh c. Khi xut, ch ci T hoc F (tng ng vi
.TRUE. hoc .FALSE. s in ra ti v tr th 5, tc v tr cui cng bn phi
trong 5 v tr.
9) Chng ta c th s dng mt s c im b sung trong cch vit cc
c t ca lnh FORMAT nhm nng cao cht lng bn ghi, theo ng
nh biu din ca mnh hay lm cho lnh FORMAT trng ngn gn. C th
dng nhng cch di y:
Cch vit lp li cc c t: Th d nhng cp lnh sau y hon ton
tng ng:
10 FORMAT (3X, I2, 3X, I2)
10 FORMAT (2 (3X, I2))
29

20 FORMAT (1X, F4.1, F4.1, 1X, I3, 1X, I3, 1X, I3)
20 FORMAT (1X, 2F4.1, 3 (1X, I3))
Dng du gch cho (/) trong lnh FORMAT ch kt thc dng in trc
khi bt u cc c t sau n. Th d, khi cn in dng tiu ca mt bng s
cng vi nhng tiu ct, chng ta c th dng:
PRINT 5
5 FORMAT (1X, KET QUA QUAN TRAC // 2X, Gio, 3X,
* Toc do, 3X, Huong)
Sau khi in xong on vn bn KET QUA QUAN TRAC, du gch cho
th nht ch dn cho my kt thc dng, xung dng mi, du gch cho th
hai ch dn b qua ngay dng ny khng in, pht sinh ra mt dng trng trc
khi in cc tiu ct dng th ba nh ta thy di y:
KET QUA QUAN TRAC
G io

T oc do

H uong

Dng c t bng T, TR, TL cn l tri cc tiu ct mt bng s.


Th d cc cp lnh cng nhn sau y s l tng ng vi nhau:
600 FORMAT (F6.1, 15X, I7)
600 FORMAT (F6.1, T22, I7)
lnh th hai: sau khi ghi ra s thc vi 6 v tr, nhy ngay ti v tr 22 bt
u ghi s nguyn.
85 FORMAT (1X, 25X, Do cao, 5X, Huong)
85 FORMAT (T27, Do cao, TR5, Huong)
lnh th hai trong cp lnh ny: nhy ngay ti v tr th 27 ghi tiu
Do cao, sau do c c t TR5 xut pht t v tr hin thi s nhy sang
phi 5 v tr ghi tiu Huong.
c t \ c tc dng ngn khng xung dng trong mt lnh in hoc c.
C th dng c t ny trong trng hp mun vit mt li nhc yu cu
ngi dng nhp thng tin t bn phm nhng sau khi vit li nhc th khng
xung dng, con nhy ng trn cng dng ngay sau li nhc ch ngi dng
nhp thng tin t bn phm theo yu cu ca lnh c. Th d, nhm lnh sau
y s lm chc nng :
PRINT 7
7 FORMAT (1X, Ten file so lieu: , \)
READ (*, (A50) ) name
V s lng cc c t: Khi s cc c t trong lnh FORMAT nhiu
hn s mc trong danh sch mc in ca PRINT, th d:
PRINT 1, tocdo, khoang
1 FORMAT (4 F 5.2)
30

my s chn ly s ti a cc c t cn dng, s c t cn li b b qua.


Trong trng hp ny lnh in c 2 mc in - 2 gi tr s thc, nhng lnh
FORMAT c 4 c t s thc, nh vy s c t l tha. My s chn ly hai
c t v in bnh thng nh chng ta mong mun.
Khi s c t t hn s mc in, th d trong lnh in sau:
PRINT 20 , tem, vol
20 FORMAT (1X, F6.2)
Trong trng hp ny my cn cc mc in v c t cho n ht danh
sch c t, sau c th xy ra hai kh nng:
1) In lun buffer hin ti v bt u mt buffer mi.
2) Quay tr li u danh sch c t cho n khi gp du ngoc n tri
v li cn tng cp mc in, c t cho cc mc in cn li.
Trong lnh in trn gi tr ca bin tem c cn theo c t F6.2. V
khng c c t cho bin vol nn my lm nh sau:
1) In gi tr ca tem sau mt v tr trng.
2) Khi quay tr li v pha u ca danh sch cc c t (du ngoc tri)
v cn F6.2 cho gi tr vol. Sau ta t ti u ca danh sch v du trng
in vol. Do tem v vol c in trn hai dng ring bit.
Trong Fortran 90 cho php cc tham s rng c t, s ln lp ca c
t c th l bin. Th d FORMAT (<m>F<n>.<k>).

Cu hi v bi tp chng 2
1. Vit on chng trnh c gi tr vo hai bin thc a v b, i gi tr
ca hai bin cho nhau.
2. iu g s xy ra khi thc hin chng trnh sau v ta g vo bn phm
ln lt s 1, du phy, s 10 v du chm ri g phm Enter.
PRINT * , Cho cac gia tri cua hai so nguyen i1, i2 !
READ * , idau, icuoi
PRINT 4 , idau, icuoi
4 FORMAT (1X, i1 = , I5, i2 = , I5)
END
3. M t nhng g s in ln mn hnh khi thc hin cc lnh di y:
REAL x
x = 27.632
PRINT 5 , x
5 FORMAT (1X, X = , F7.1, degrees)
4. M t nhng g s in ra my in khi thc hin nhng lnh di y:
31

a = 3.184
PRINT 1
1 FORMAT (1X, 0)
PRINT 2
2 FORMAT (+ , - = , F5.2)
5. M t nhng g s in ln mn hnh khi thc hin cc lnh di y:
REAL dist , vel
dist = 28732.5
vel = 2.6
PRINT 10, dist , vel
10 FORMAT (1X, DISTANCE = , E10.3, 5X, VELOCITY = , F5.2)
6. Vit on chng trnh nhp vo t bn phm tn 5 mn thi ca hc k
cng vi im thi tng mn ca mnh. Tnh im trung bnh v in ln mn
hnh thnh mt bng c hnh thc nh sau:
BANG DIEM THI HOC KY
TT
TEN MON HOC
DIEM
------------------------------------------------1
Tn mn th 1
8
2
Tn mn th 2
7
3
Tn mn th 3
8
4
Tn mn th 4
7
5
Tn mn th 5
9
------------------------------------------------Diem trung binh hoc ky
7.8

32

Chng 3 Cc cu trc iu khin


3.1 Khi nim v cu trc iu khin
Trong cc chng trc ta xt mt vi chng trnh n gin. Thy
rng nhng chng trnh ny thc s rt n gin, ch gm mt vi lnh thc
hin tun t l dn n kt qu bi ton cn gii. Trong chng ny, s gii
thiu nhng lnh ca Fortran cho php ta iu khin c th t cc bc
cn thc hin. S iu khin c thc hin thng qua nhng lnh cho php ta
chn nhng nhnh khc nhau trong chng trnh v nhng lnh cho php ta
lp li nhng phn no ca chng trnh. Nhng lnh nh vy gi l nhng
lnh iu khin.
Trong phn m u s lc ni v quy trnh nm bc gii bi ton.
i vi nhng bi ton phc tp v cch gii th bc 4 l bc kh khn
nht. Ngi lp trnh phi m t tun t cc cng on t u n cui qu
trnh gii, chia qu trnh ny thnh mt s khi v lit k nhng khi ra
sau ny chng trnh my tnh s tun t thc hin. Trong mi khi ngi lp
trnh li phi chi tit ha thm n mc c th chuyn thnh nhng lnh my
tnh. Cch chia khi v chi tit ha tng khi nh vy c th gi l phng
php chia v chinh phc. Kt qu cui cng ca chia khi v chi tit ha tng
khi chnh l thut gii.
Nhng hnh thc biu din trc quan thut gii sao cho d dng
chuyn thnh chng trnh l gi trnh v lu . Mt ngi lp trnh c th
chn hnh thc ny hoc hnh thc kia. Theo cch gi trnh, mi cu trc ca
thut gii c quy c bi mt ch gii ngn gn gn ging vi ngn ng
vit ca chng ta; cn trong cch biu din lu , mi cu trc c m t
bng mt biu tng hnh hc.
Thy rng, ni chung nhng thao tc c bn trong mt thut gii thng
l nhng tnh ton, nhp, xut d liu v so snh. Ni chung mt chng trnh
my tnh d n gin hay phc tp n u cng ch gm nhng thao tc c
bn . Mt s thao tc (hay lnh) c th nhm li vi nhau to thnh mt
khi hay mt khi cu trc. Nhng ch gii gi trnh v nhng biu tng lu
chnh l th hin nhng thao tc c bn (xem bng 3.1).

3.2 Cc loi cu trc iu khin c bn


Cc bc trong mt thut gii c th phn chia thnh ba dng cu trc
33

tng qut - l cu trc tun t, la chn v lp. Cu trc tun t l chui


cc bc thc hin mt cch k tip nhau. Cu trc la chn (cn gi l cu
trc r nhnh) cho php so snh hai gi tr, sau ty kt qu so snh m nh
ra mt chui cc bc khc nhau phi thc hin. Cu trc lp c dng khi
qu trnh gii cn lp li mt s thao tc cho n khi tha mn mt iu kin.
Trong thut gii phc tp hn mt cht c th thy cc cu trc c bn ny
lng vo nhau, trong cu trc lp c nhng on gm nhng thao tc tun t
c thc hin, c nhng on xut hin s r nhnh ty theo mt iu kin
so snh no .
Bng 3.1 Cc thao tc c bn v quy c tng ng trong gi trnh v lu
Dng thao tc
Tnh ton

Ch gii gi trnh

Biu tng lu

TB TONG / N

TB = TONG / N

Nhp d liu

c A, B

Xut d liu

In A, B

c A, B

In A, B

So snh

Nu A > B

Bt u thut gii

Tn bi ton

A>B?

Bt u

Kt thc thut gii

Kt thc

3.2.1 Th d ng dng thut gii cu trc


By gi ta tm hiu phng php xy dng thut gii theo k thut chia
khi v chi tit ha tng khi, phn tch cu trc thut gii thng qua mt th
d c th v bi ton phn tch cc s liu thc nghim.
1) Pht biu bi ton: Xc nh gi tr ln nht, nh nht v bin cc
gi tr ca tp s liu quan trc.
2) M t d liu vo v ra: D liu vo l mt chui cc s liu quan trc.
u ra l tr cc i, cc tiu v bin cc gi tr.
34

3) Tnh th vi tp s liu quan trc sau:


Chui s liu th: 40.56; 55.92; 66.31; 58.35; 62.88; 41.99; 49.70; 53.21
Thc hin tm tr cc i nh sau: Trc ht so snh s th nht ca
chui vi s th hai xc nh s ln hn, coi l cc i tm thi. By gi
xt s th ba v so snh n vi cc i tm thi. Nu cc i tm thi ln hn,
ta xt ti s th t; nhng nu s th ba ln hn cc i tm thi, ta thay th
s vo cc i tm thi. Tip tc qu trnh ny vi ton b chui s liu s
dn ti kt qu l cc i tm thi chnh l tr cc i trong c chui. Mt qu
trnh tng t s cho php tm cc tiu. Vi tp s liu ang xt, kt qu l:
Gi tr cc i = 66.31
Gi tr cc tiu = 40.56
Tnh bin bng hiu gia cc i v cc tiu = 66.31 40.56 = 25.73
4) Xy dng thut gii: Khi qut li cc bc thc hin bc (3) ta c
th chia bi ton thnh ba khi:
- c s liu v xc nh cc tr cc i v cc tiu
- Tnh hiu gia cc i v cc tiu nhn bin
- In cc i, cc tiu v bin
Vi th d ny, ta chi tit ha cch gii bng gi trnh. R rng khi th
nht i hi phi chi tit ha nhiu hn na, v n va bao gm c vic chn
tr cc i, cc tiu xut pht, va bao gm c qu trnh lp (lp c s liu
v lp cp nht cc tr khi cn). Cc i v cc tiu xut pht thng c
gn bng gi tr ca quan trc th nht, do ta c mt s liu u tin
gn cho chng. Sau ta c s th hai v i vo vng lp. Chng no s
khng phi l zero, ta cp nht tr cc i v cc tiu nu cn thit. By gi
ta m t nhng bc chi tit ny bng gi trnh nh sau:
Gi trnh:

c s
Cc i S
Cc tiu S
c s
Chng no s khng bng zero th
Nu s > Cc i th
Cc i S
Nu s < Cc tiu th
Cc tiu S
c s
Bin Cc i Cc tiu
In GIA TRI CUC DAI = , Cc i
In GIA TRI CUC TIEU = , Cc tiu
In BIEN DO GIA TRI = , Bin

y l mt thut gii n gin. Ch c mt khi th nht cn chi tit ha.


Thy rng khi thut gii chi tit ha ti mc nh vy, th vic chuyn thnh
35

chng trnh Fortran s khng cn l vn kh khn. Trong cc mc tip


sau, ta s nghin cu cc lnh Fortran chuyn tr gip cho vic thit k cc
cu trc iu khin ca bi ton ny v nhiu bi ton tng t.

3.2.2 Cu trc IF v cc lnh tng ng


a) Biu thc lgic
Biu thc l gich c to bi cc ton t quan h:
.EQ. bng
.NE. khng bng
.LT. nh hn
.LE. nh hn hoc bng
.GT. ln hn
.GE. ln hn hoc bng
ni hai bin s hoc biu thc s hc hai bn.
Ty theo quan h gia hai bin s m biu thc lgic c mt trong hai
gi tr lgic: ng (.TRUE.) hoc sai (.FALSE.).
Th d, xt biu thc A .EQ. B trong A v B l cc bin s thc. Nu
gi tr ca A bng gi tr ca B th biu thc lgic s c gi tr l ng
.TRUE.. Nu khng th biu thc c gi tr l sai .FALSE.. Tng t, nu X
bng 4,5 th biu thc X .GT. X - 3.0 c gi tr bng ng .TRUE..
Ta c th ni hai biu thc lgic bng mt trong cc ton t lgic .OR.
v .AND. thnh mt biu thc lgic kt hp.
Khi hai biu thc lgic ni vi nhau bi .OR. th biu thc lgic kt hp
s c gi tr l ng nu mt hoc c hai biu thc c gi tr l ng. Ta c th
gi .OR. l ton t cng lgic.
Khi hai biu thc ni vi nhau bi .AND. th biu thc kt hp c gi tr
ng ch khi c hai biu thc c gi tr l ng. Ta c th gi ton t .AND. l
ton t nhn lgic.
Ton t .NOT. c th ng trc biu thc lgic v i gi tr ca n
thnh gi tr ngc li. Th d, nu A. GT. B l ng (gi tr bng .TRUE.) th
.NOT. A. GT. B l sai (.FALSE.).
Mt biu thc lgic c th cha nhiu ton t lgic, th d nh trong biu
thc sau:
.NOT. (A .LT. 15.4) .OR. KT .EQ. ISUM
Quyn u tin t cao nht xung thp nht l
.NOT., .AND. v .OR.
Trong biu thc trn, biu thc A .LT. 15.4 s c c lng trc tin,
sau gi tr ca n (.TRUE. hoc .FALSE.) c i ngc li. Gi tr ny
s c xt cng vi gi tr ca KT .EQ. ISUM. Th d, nu A l 5.0, KT l 5
v ISUM l 5, th biu thc bn tri ca ton t .OR. c gi tr sai .FALSE.,
biu thc bn phi c gi tr ng .TRUE. v ton b biu thc s c gi tr l
ng .TRUE..
Gi tr ca biu thc lgic c th c gn cho bin lgic bng lnh gn
36

ging nh lnh gn dng vi cc bin s v biu thc s, th d:


LOGICAL done, ok
done = .FALSE.
ok = done .AND. i .GT. 24
Khi so snh hai biu thc lgic hay hai bin lgic c tng ng nhau
hay khng, trong Fortran khng dng cc ton t quan h nh khi so snh hai
biu thc s, m dng cc ton t lgic .EQV. v .NEQV..
Bng 3.2 Tm tt quy tc c lng ca cc php ton lgic
A

.NOT. A

A.AND.B

A.OR.B

A.EQV.B

A.NEQV.B

FALSE

FALSE

True

FALSE

FALSE

True

FALSE

FALSE

TRUE

TRUE

FALSE

TRUE

FALSE

TRUE

TRUE

FALSE

FALSE

FALSE

TRUE

FALSE

TRUE

TRUE

TRUE

FALSE

TRUE

TRUE

TRUE

FALSE

Khi cc ton t s hc, quan h v lgic cng c mt trong mt biu thc


th cc ton t s hc thc hin trc tin; sau cc ton t quan h dng
pht sinh cc gi tr TRUE hoc FALSE; v cc gi tr ny c nh gi
bng cc ton t lgic theo th t u tin .NOT., .AND., v .OR.. Cc quan h
.EQV. v .NEQV. c thc hin sau cng.
b) Cc lnh IF lgic
Cc lnh IF lgic c th c mt s dng s dng. Dng th nht gi l
Logical IF vit nh sau:
IF (Biu thc lgic) Lnh thc hin
Theo lnh ny, nu biu thc lgic trong cp du ngoc n c gi tr
.TRUE. th thc hin lnh nm trn cng dng vi biu thc lgic, nu biu
thc lgic c gi tr .FALSE. th khng thc hin lnh cng dng m chuyn
ngay ti lnh tip theo pha di trong chng trnh. Ch rng lnh thc
hin ghi sau biu thc lgic c th l mt trong nhng lnh tnh ton (gn),
xut, nhp d liu..., nhng khng th l mt lnh IF khc. Biu thc lgic
bao gi cng phi t trong cp du ngoc n. Th d, nhng lnh IF sau y
l nhng lnh ng:
IF (A. GT. 0.0) SUM = SUM + A
IF (TIME .GT. 1.5) READ *, DIST
Dng th hai gi l Block IF: Nu biu thc lgic c gi tr .TRUE. my
thc hin cc lnh t lnh 1 n lnh n , sau chuyn ti lnh tip sau
ENDIF. Nu biu thc lgic c gi tr .FALSE., iu khin chuyn ngay
xung lnh ng sau END IF:
37

IF (Biu thc lgic) THEN


lnh 1
...
lnh n
END IF

Dng th ba gi l dng IF ELSE: Khi biu thc lgic c gi tr


.TRUE. cc lnh t 1 n n c thc hin, nu biu thc lgic c gi tr
.FALSE. cc lnh t n + 1 n m c thc hin:
IF (Biu thc lgic) THEN
lnh 1
...
lnh n
ELSE
lnh n+1
...
lnh m
END IF

Dng th t gi l IF ELSE IF: Nu biu thc lgic 1 c gi tr .TRUE.


th lot cc lnh t 1 n m c thc hin; nu biu thc lgic 1 c tr
.FALSE., biu thc lgic 2 c tr .TRUE. th lot lnh t m + 1 n n thc
hin; nu cc biu thc lgic 1 v 2 cng bng .FALSE. v biu thc lgic 3
bng .TRUE. th cc lnh t n + 1 ti p thc hin. Nu khng mt biu thc
lgic no c gi tr .TRUE. th ch c cc lnh t p + 1 ti q c thc hin:
IF (Biu thc lgic 1) THEN
lnh 1
...
lnh m
ELSE IF (Biu thc lgic 2) THEN
lnh m+1
...
lnh n
ELSE IF (Bbiu thc lgic 3) THEN
lnh n+1
...
lnh p
ELSE
lnh p+1
...
lnh q
END IF

Trong thc t ta c th cu to s nhnh ELSE IF nhiu hn hoc t hn,


ch khng nht thit ch l hai nhnh nh vit trn y.
Th d 1: S dng cc lnh IF lgic iu khin r nhnh. Lp
chng trnh gii h phng trnh bc hai ax 2 + bx + c = 0 (cc h s a, b, c nhp
t bn phm, a 0 ).
Ta c th c th ha thut gii ca bi ton ny bng lu nh trn hnh
38

3.1. T vit m ngun ca chng trnh Fortran nh di y.


Bt u

In Nhap HS
c a, b, c

Tnh

In -b / (2a)

=0

<0

S
=

In V nghim

a = 2a

In (-b + ) / a
In (-b - ) / a

Kt thc

Hnh 3.1 Lu thut gii bi ton ca th d 1


PRINT * , HE SO A BANG
READ * , a
PRINT * , HE SO B BANG
READ * , b
PRINT * , HE SO C BANG
READ * , c
delt = b**2 4.*a*c
IF (delt .LT. 0.) THEN
PRINT * , PHUONG TRINH VO NGHIEM
ELSE IF (delt .EQ. 0.) THEN
PRINT 5 , b / (2.0 *a)
5
FORMAT (1X, NGHIEM KEP BANG , F10.2)
ELSE
delt = SQRT (delt)
a = 2. * a
PRINT 7 , (b + delt) / a , (b delt) / a
7
FORMAT (1X, HAI NGHIEM: X1 = , F10.2, 5X, X2 = , F10.2)
END IF
END

c) Lnh IF s hc
Lnh IF s hc cho php thc hin r nhnh chng trnh thnh ba nhnh
ty thuc vo gi tr ca biu thc s hc, dng tng qut ca lnh ny vit
nh sau:
IF (Biu thc s hc) n1 , n 2 , n3
39

trong n1 , n 2 , n3 nhn ca cc lnh thc hin. Nu biu thc s hc c gi


tr m th iu khin c chuyn ti lnh c nhn l n1 , bng khng nhn
n 2 , v dng nhn n 3 .
Th d, theo lnh
IF (I 10) 4, 8, 7
nu I < 10 iu khin chuyn n lnh c nhn l 4, nu I = 10 chuyn n
nhn 8 v nu I > 10 chuyn n nhn 7.
Trong lnh
IF (X 3.5) 3, 6, 6
khi X 3,5 iu khin chuyn ti lnh c nhn l 6, khi X < 3,5 iu khin
chuyn ti lnh c nhn l 3.
Th d 2: Dng lnh IF s hc thit k vng lp. Vit chng trnh
tnh v in gi tr hm
3

f ( x) = e x cos (t x + 1) ,

trong x bin thin t 1 n 3 vi bc 0,1 v t = 0,1 .


Lu gii bi ton ny tham kho trn hnh 3.2.
Bt u

T = 0.1
X = 1.0

Tnh F

In X, F

X = X + 0.1
S

X>3

Kt thc

Hnh 3.2 Lu thut gii bi ton ca th d 2


t = 0.1
x = 1.0
12 f = EXP ( x ** 3) * COS (t * x + 1)
WRITE (6 , 9) x , f
9 FORMAT (F5.2, E12.2)

40

x = x + 0.1
IF (x 3.0) 12 , 12 , 4
4 STOP
END

d) Lnh chuyn iu khin v iu kin GO TO


Lnh ny c dng
GO TO n
trong n nhn ca lnh m iu kin cn chuyn ti.
Lnh cn chuyn ti nht thit phi c nhn. Ngoi ra, trong chng trnh
khng th c nhng lnh c cng nhn nh nhau. Lnh GO TO c th chuyn
iu khin ti bt k lnh thc hin no ng trc hoc ng sau lnh GO
TO. Th d:
GO TO 5
...
5 x = x + 1.0

i=i+1
x (i) = y (i)
GO TO 7

Th d 3: Vit chng trnh nhp n phn t ca mng mt chiu X, sp


xp li cc phn t mng theo th t tng dn v in ra mn hnh.
REAL x (20), tg
INTEGER n, i, j, k
n = 10
PRINT * , NHAP CAC PHAN TU MANG
i=0
7 i=i+1
PRINT *, PHAN TU , i
READ *, x (i)
IF (i .LT. n) GOTO 7
C Sp xp mng X theo th t tng dn
i=1
2 k=i
j=i+1
1 IF (x (j) .LT. x (k)) k = j
j=j+1
IF (j .LE. n) GOTO 1
tg = x(i)
x(i) = x(k)
x(k) = tg
i=i+1
IF (i. LT. n) GOTO 2
C Ln lt in cc gi tr ca mng X sp xp
i=1
3 PRINT 8 , x(i)

41

8 FORMAT (F12.2)
i=i+1
IF (i .LE. n) GOTO 3
END

e) Lnh GO TO tnh ton


Lnh GO TO tnh ton dng thc hin chuyn iu khin ti mt
trong s nhng lnh c nhn c lit k trong lnh GOTO ty thuc vo gi
tr ca mt bin trong lnh. Dng tng qut ca lnh nh sau:
GO TO ( n1 , n2 , ..., nm ) , i
trong n1 , n2 , ..., nm cc nhn ca nhng lnh thc hin, i bin nguyn
khng ch s. Theo lnh ny, iu khin c chuyn ti mt trong cc lnh
n1 , n2 , ..., nm ty thuc vo gi tr ca i , c th khi i = 1 iu khin s chuyn ti
lnh c nhn n1 , khi i = 2 nhn n2 , ..., khi i = m nhn nm . Nu gi tr ca i
nm ngoi khong 1 i m th iu khin chuyn xung lnh ng sau lnh
GO TO thc hin.
Th d, theo lnh
GO TO (17 , 2 , 115 , 19) , ka
khi ka = 1 iu khin chuyn ti lnh c nhn l 17, khi ka = 2 iu khin
chuyn ti lnh c nhn l 2, khi ka = 3 iu khin chuyn ti lnh c nhn l
115 v khi ka = 4 iu khin chuyn ti lnh c nhn l 19.
Th d 4: ng dng lnh GOTO tnh ton. Vit chng trnh tnh gi tr
ca a thc Lejandre vi x = 0,4 theo cng thc

Pl ( x) =

1
khi l = 0
khi l = 1
x
1
2
(3x 1) khi l = 2
2
1
(5 x 3 3x) khi l = 3
2

REAL x, p
INTEGER l, i
x = 0.4
l=0
28 i = l + 1
GO TO (12, 17, 21, 6) , i
12 p = 1.0
GO TO 24
17 p = x
21
6
24

GO TO 24
p = 0.5 * (3.0 * x ** 2 1.0)
GO TO 24
p = 0.5 * (5.0 * x ** 3 3.0 * x)
WRITE (* , 8) l , p

42

8
30

FORMAT (I3 , F12.5)


l=l+1
IF (l 3) 28 , 28 , 30
STOP
END

Th d 5: Sp xp danh sch. Vit chng trnh nhp h tn v im ba


mn hc ca nhm gm n sinh vin. Tnh im trung bnh cng ba mn hc.
In bng c tiu v cc ct th t, h tn, im ba mn v im trung bnh,
ghi ch xp loi theo im trung bnh: trung bnh < 6.0 , kh 6 8,9 , gii > 9,0 .
Danh sch xp theo th t t cao xung thp da theo im trung bnh.
PARAMETER (n = 50)
INTEGER i , j , k , d1 (n) , d2 (n) , d3 (n), id
REAL d , tb (n)
CHARACTER * 20 ten (n) , tentg
C Nhp h tn, im thi v tnh im trung bnh
i=0
7 i=i+1
PRINT * , NHAP SINH VIEN , i
READ (* , (A20)) ten(i)
READ * , d1 (i) , d2 (i) , d3 (i)
tb (i) = (d1 (i) + d2 (i) + d3 (i)) / 3.0
IF (i .LT. n) GO TO 7
C Sp xp danh sch theo th t im trung bnh gim dn
i=1
2 k=i
j=i+1
1 IF (tb(j) .GT. tb(k)) k = j
j=j+1
IF (j .LE. n) GO TO 1
tentg = ten (i)
ten (i) = ten (k)
ten (k) = tentg
id = d1 (i)
d1 (i) = d1 (k)
d1 (k) = id
id = d2 (i)
d2 (i) = d2 (k)
d2 (k) = id
id = d3 (i)
d3 (i) = d3 (k)
d3 (k) = id
d = tb (i)
tb (i) = tb (k)
tb (k) = d
i=i+1
IF (i .LT. n) GO TO 2
C In tiu danh sch ln mn hnh
PRINT 100
100 FORMAT (21X , BANG DIEM // , 1X , TT , 7X,

43

* HO TEN ,9X , D1 D2 D3 TB XEP LOAI /)


C In tng sinh vin theo danh sch
60 FORMAT (1X, I2, 1X, A20, I3, I3, I3, F5.1, 1X, GIOI)
50 FORMAT (1X, I2, 1X, A20, I3, I3, I3, F5.1, 1X, KHA)
40 FORMAT (1X, I2, 1X, A20, I3, I3, I3, F5.1, 1X, TRUNG BINH)
i=1
3 IF (tb (i) .LT. 9.0) THEN
IF (tb (i) .LT. 6.0) THEN
PRINT 40 , i , ten (i) , d1 (i) , d2 (i) , d3 (i) , tb (i)
ELSE
PRINT 50 , i , ten (i) , d1 (i) , d2 (i) , d3 (i) , tb (i)
END IF
ELSE
PRINT 60 , i , ten (i) , d1 (i) , d2 (i) , d3 (i) , tb (i)
END IF
i=i+1
IF (i. LE. n) GO TO 3
STOP
END

Th d 6: Vit chng trnh tnh tch phn xc nh:


b

I = x 2 sin x
a

theo cng thc hnh thang vi sai s = 0,0001; a, b cho trc.


bc xp x u, ta chp nhn s hnh thang con n = 1, tch phn bng
S1 = 0,5 ( y a + yb ) (b a ) ,
vi ya , yb cc gi tr ca hm di du tch phn tun t ti x = a v x = b .
Bc xp x sau tng s hnh thang con n thm 1 v tch phn bng (hnh
3.3):
n

S 2 = 0,5 ( yi + yi +1 ) ( xi +1 xi )
i

Tip tc tng n cho n khi S1 S 2 < .


y = f (x)

y2
y1
x1 = a

x2

xn = b

Hnh 3.3 Minh ha s


tnh gn ng tch phn
xc nh theo phng
php hnh thang

epsil = 0.0001
a = 0.0
b = 3.141593

44

s1 = 0.5 * (a ** 2 * SIN (a) + b ** 2 * SIN (b)) * (ba)


sohinh = 2.0
7 dx = (ba) / sohinh
hinh = 1.0
x1 = a
y1 = x1 ** 2 * SIN (x1)
s2 = 0.0
5 x2 = x1 + dx
y2 = x2 ** 2 * SIN (x2)
s2 = s2 + 0.5*(y1 + y2) * dx
IF (hinh .LT. sohinh) THEN
hinh = hinh + 1.0
x1 = x2
y1 = y2
GOTO 5
END IF
IF (ABS (s2s1) .GT. epsil) THEN
sohinh = sohinh + 1.0
s1 = s2
GOTO 7
END IF
PRINT 3 , s2
3 FORMAT (1X , TICH PHAN BANG, F15.4)
END

Th d 7: Vng lp tnh tng chui. Bnh phng ca sin ca gc x


tnh theo cng thc chui nh sau:
sin 2 x = x 2

23 x 4 25 x 6
(1) n+1 2 2 n 1 x 2 n
+
... =
.
4!
6!
( 2n ) !
n =1

Hy vit chng trnh c vo mt gc x bng , i ra raian, tnh v


in ra bng so snh kt qu tnh sin 2 x theo cng thc ny vi nhng s s hng
chui n l t 1 n 15. Thy rng s hng u khi n = 1 l x 2 , mi s hng tip
sau bng s hng trc nhn vi

2 x2
.
n ( 2n 1)

Trong th d ny, ta ng dng phng php chia khi bi ton v chi tit
ha tng khi nh trnh by trong mc 3.2.1 xy dng thut gii v din
t thut gii bng lu , sau dn chng trnh Fortran.
Thy rng bi ton c th chia thnh ba khi sau:
Khi 1: Nhp gi tr gc x .
Khi 2: In tiu ca bng kt qu.
Khi 3: Tnh gi tr sin 2 x theo cng thc chui v in ra kt qu kho st
vi s s hng chui t 1 n 15.
By gi ta phn tch chi tit tng khi dn ra lu thc hin trong
mi khi.
Thy rng khi 1 c th chi tit ha thnh ba bc con: V cng thc khai
45

trin chui trn y hi t nhanh i vi nhng gc x nh, do nu x nm


trong khong:
90 < x 180 ta thay bng gc 180 x ,
nu x nm trong khong:
180 < x 270 ta thay bng gc x 180 ,
nu x nm trong khong:
270 < x 360 ta thay bng gc x 360 .
Sau i x thnh raian (hnh 3.4).

Read

X > 90

Khi 1

T
X > 270
T

X = X 360

T
X =X 180

X = 180 X

X >180

X = X*3.1415 / 180

Hnh 3.4 Lu khi 1 (th d 7)

Ta thy khi 2 ch gm hai vic tun t l in dng tiu ca bng kho


st, in cc tiu u bng (hnh 3.5).

Khi 2

In tiu bng

In tiu ct

Hnh 3.5 Lu khi 2 (th d 7)

Khi 3 l phc tp nht cn c chi tit ha mt cch ti a. Ta thy


46

khi ny gm cc bc c th sau:
Gn 0 cho bin S (gi tr khi to ca sin 2 x cn tnh).
Gn 1 cho N (bt u xt s hng th nht).
Gn x 2 cho bin THEM (gi tr ca s hng th nht).
Chng no N 15 thc hin tun t 4 bc sau:
Cng s hng (THEM) vo bin S.
Nu N l in gi tr N , S , sin 2 x (tnh theo hm chun).
Tng thm 1 n v cho N .
2 X2
Tnh li bin THEM bng cch nhn chnh n vi
.
N ( 2 N 1)

Gi trnh ny tng ng vi lu khi trn hnh 3.6.


Khi 3

S=0
N=1
THEM = X 2

S = S + THEM

N l

In N, S, sin 2 X

N=N+1
THEM = THEM *2 * X 2 / (N* (2N1)

N>15

Hnh 3.6 Lu khi 3 (th d 7)

Nh vy, ta chi tit ha tt c cc bc trong ba khi di dng cc


lu . Cng vic cn li n gin l gn c hc ba lu li ta c lu
chung ca ton thut ton. T d dng chuyn sang chng trnh Fortran
di y:
PRINT * , HAY CHO MOT GOC BANG DO
READ *, x
IF (x .GT. 90.0) THEN
IF (x .GT. 270.0) THEN
x = x 360.0
ELSE IF (x .GT. 180.0) THEN
x = x 180.0

47

2
*

5
4

ELSE
x = 180.0 x
END IF
END IF
x = x * 3.141593 / 180.0
PRINT 2
FORMAT (1X, 35H KHAO SAT CONG THUC BINH
PHUONG SIN // , 1X , 2H N, 17H THEO CONG THUC, 17H THEO HAM CHUAN)
s = 0.
n=1
them = x ** 2
s = s + them
IF (MOD (n , 2) .EQ. 1) PRINT 4 , n , s , SIN (x) ** 2
FORMAT (1X , I2 , 2F17.7)
n=n+1
them = them * 2.0 * x**2 / (n * (2 * n 1))
IF (n .LE. 15) GO TO 5
END

Th d 8: Ni suy tuyn tnh chui s liu quan trc. Gi s c nhng


s liu quan trc v nhit nc bin ti cc tng su im c ta
120oK-20oVB c cho trong bng 3.3. Lp chng trnh nhp nhng s
liu ny v ni suy gi tr nhit cho mt su bt k nhp t bn phm,
thng bo ln mn hnh kt qu ni suy di dng nh sau:
DO SAU = .... M
NHIET DO = ..... DO C
Bng 3.3 Phn b nhit nc bin (oC) theo su (m)
su
Nhit
su
Nhit
su
Nhit

10

20

30

40

50

60

24,31 24,26 24,20 24,18 24,13 24,05 23,98 23,89


70

80

90

100

120

140

160

180

23,87 23,57 23,14 22,74 21,31 20,03 18,49 17,58


200

220

240

260

280

300

350

400

16,66 15,61 14,73 13,97 13,47 12,93 11,40 10,18

su

500

600

700

800

900

1000

1200

1400

Nhit

9,39

8,56

8,49

7,83

7,27

6,71

6,16

5,44

Phn tch bi ton ny, ta thy c th chia n thnh ba khi: 1) Nhp t


bn phm mt gi tr su ti cn ni suy nhit ; 2) Nhp cc cp gi tr
su v nhit ; 3) Ni suy gi tr nhit ti su cn tm v in kt qu
ln mn hnh.
Khi th nht rt n gin v quen thuc. thc hin khi th hai ta t
chc mt vng lp tun t nhp su v nhit ti cc im nt (xem
lu ca khi 2 trn hnh 3.7).
By gi ta c th ha thm khi th 3 v sau dn chng trnh Fortran
hon chnh ca bi ton ny.
48

N = 32
K=1

Khi 2

c H (K)
c T (K)

K=K+1

Hnh 3.7 Lu khi 2 (th d 8) nhp chui su v nhit

K>N

Nh thy, cc gi tr quan trc nhit c cho ch ti 32 su gi


l 32 im nt. Mun ni suy gi tr nhit ti su bt k ta cn tm xem
su nm gia hai nt no. Gi su cn ni suy nhit l h0 . Gi s
su ny nm gia cc su nt hi v hi+1 , tc tha mn bt ng thc kp:
hi h0 hi +1 ,

Khi 3

trong i c th bin thin t 1 n 31. Nh vy, tm i , ta phi gi s i = 1


v kim tra bt ng thc kp trn y. Nu bt ng thc khng tha mn, th
ta tng i ln mt n v v tip tc cho ti khi bt ng thc tha mn.
I=1

H (I +1) H0 H (I)
T
F

I=I+1

T0 = T(I) + (T(I +1)-T(I)) (H0 - H(I)) / (H(I +1)-H(I))

In H0, T0

Hnh 3.8 Lu khi 3 (th d 8) - ni suy gi tr nhit v in kt qu

Khi tm c i , gi tr t0 cn ni suy c th tnh theo cng thc ni suy


tuyn tnh nh sau:
t 0 = ti +

(ti +1 ti ) (h0 hi )
.
hi +1 hi

Tt c nhng iu va phn tch c th hin trn lu khi hnh


3.8. Di y l chng trnh ca bi ton
49

C
C
5

C
4
2
1
3
6

INTEGER n, i, k
REAL h0, t0, h (35), t (35)
In li nhc v nhp su cn ni suy nhit
PRINT * , NHAP DO SAU XAC DINH NHIET DO
READ *, h0
In li nhc v nhp 32 cp gi tr su v nhit
n = 32
k=1
PRINT *, NHAP DO SAU VA NHIET DO TANG , k
READ *, h(k), t(k)
k = k +1
IF (k .GT. n) GOTO 4
GOTO 5
Ni suy gi tr nhit ti su H0
i=n-1
IF (h0 .GT. h(n)) GOTO 1
i=1
IF (h0 .GE. h (i) .AND. h0 .LE. h (i+1)) GOTO 1
i=i+1
GOTO 2
t0 = t(i) + (t(i+1) - t (i)) * (h0-h(i)) / (h(i+1) - h(i))
PRINT 3, h0
PRINT 6, t0
FORMAT (1X, DO SAU = , F6.1, M)
FORMAT (1X,NHIET DO = , F5.1, DO C)
END

Qua th d mc 3.2.1 v nhng th d c th y ta thy vic p dng


quy trnh 5 bc gii bi ton v chin lc chia khi v chi tit ha tng khi
pht trin thut gii l mt cng c lp trnh rt hiu qu. Bi ton d ln,
c cu trc phc tp cng tr nn sng t, trc quan.
T thi im ny sinh vin cn rn luyn cho mnh thi quen p dng
phng php trn ngay c vi nhng bi tp n gin cng nh vi nhng bi
ton tng i phc tp khi thit k thut gii. Cn chn cng c gi trnh hay
lu l ty thch.

3.2.3 Cu trc lp v lnh DO


Trong mc 3.2.2 xt s iu khin c thc hin thng qua nhng
lnh cho php chng trnh chn nhng nhnh khc nhau thc hin. ng
thi, ta cng mt s ln s dng kt hp lnh IF lgic v lnh chuyn iu
khin v iu kin GOTO t chc nhng vng lp dng:
n IF (Biu thc lgic) THEN

Lnh 1
Lnh 2
...
Lnh m
GOTO n
END IF

50

Cu trc ny gi l vng lp c iu kin (While Loop): Khi v chng


no biu thc lgic trong lnh IF c gi tr .TRUE. th nhm lnh t lnh 1
n lnh m ln lt thc hin, nhng lnh GOTO cui lun lun chuyn
iu khin ln nhn n v hnh thnh vng lp. Vng lp ny c nhng c
im sau:
1) Trng hp biu thc lgic c gi tr .FALSE. ngay t u, th qu
trnh lp s khng xy ra;
2) Trong nhm lnh t lnh 1 n lnh m bn trong vng lp nht thit
phi c mt lnh no lm thay i gi tr ca biu thc lgic thnh
.FALSE., vy s ln lp ph thuc vo gi tr khi u ca biu thc lgic v
s bin i gi tr ca n bn trong chnh vng lp.
Trong mc ny ta xt mt cu trc lp khc m iu kin v s ln lp
c xc nh ngay t khi bt u qu trnh lp vi vic s dng vng lp DO
(DO Loop). Trong chng tip sau s xt mt tnh nng quan trng ca vng
lp DO, gi l vng lp n, t chc nhp, xut cc bin c ch s rt hay
gp trong thc tin.
a) C php ca lnh DO v vng lp DO
Dng tng qut ca lnh DO nh sau:
DO n ind = ini , lim , inc
trong hng n bng nhn ca lnh kt thc ca vng lp, ind l mt bin
s c dng nh l ch s m vng lp, ini gi tr u gn cho ch s m,
lim gi tr cui dng xc nh khi no vng lp DO kt thc v inc gia
s, gi tr c cng vo ch s m mi ln vng lp thc hin.
Nhng gi tr u, gi tr cui v gia s gi l cc tham s ca vng lp.
Nu trong lnh DO khng ghi gia s th ngm nh l 1. Khi gi tr ca ch s
m ln hn gi tr cui th iu khin c chuyn cho lnh ng sau lnh
kt thc vng lp. Lnh kt thc vng lp thng dng l lnh CONTINUE,
c dng tng qut l
n CONTINUE
trong nhn n ph hp vi nhn m lnh DO trn ch nh.
Vy dng tng qut ca vng lp DO c th vit nh sau:
DO n ind = ini , lim , inc
Lnh 1
...
Lnh m
n CONTINUE

Ta ly th d gii bi ton tnh tng ca 50 s nguyn dng u tin

51

50

i = 1 + 2 + . . . + 49 + 50
i =1

minh ha vng lp DO v so snh vi vng lp While xt trc y:


Vng lp DO

Vng lp While

sum = 0.0
DO 10 num = 1, 50
sum = sum + num
10 CONTINUE

sum = 0.0
num = 1
IF
(num .LE. 50) THEN
10
sum = sum + num
num = num + 1
GO TO 10
END IF

Trong vng lp DO ch s m num c khi xng bng 1. Vng tip


tc lp cho n khi gi tr ca num ln hn 50. V tham s th ba b qua nn
num t ng tng ln 1 cui mi ln lp. Ta thy rng vng lp DO vit
ngn gn hn vng lp While, nhng c hai tnh cng mt gi tr ca bin
sum. Tuy nhin, trong vng lp While mi ln lp biu thc lgic lun phi
c c lng li v mi ln bin num c thay bi gi tr mi.. Trong khi
vng lp DO s ln lp c tnh trc trong lnh DO. l s khc
nhau c bn ca hai loi vng lp.
Ngi ta cng c th dng c php sau y cho vng lp DO:
DO ind = ini, lim , inc
Lnh 1
...
Lnh m
END DO

b) Nhng quy tc cu trc v thc hin vng lp DO


1) Ch s m phi l mt bin s, bin c th l kiu nguyn hoc
thc, nhng khng th l bin c ch s.
2) Cc tham s ca vng DO c th l hng, bin hay biu thc nguyn
hoc thc. Gia s c th l s dng, s m, nhng khng th bng khng.
3) Vng DO c th dng bt k lnh thc hin no khng phi l mt
lnh chuyn iu khin, lnh IF hay mt lnh DO khc lm lnh cui vng
lp. Lnh CONTINUE l mt lnh thc hin chuyn dng lm lnh cui vng;
mc d c th dng nhng lnh khc, nhng ni chung nn dng lnh
CONTINUE ch cui vng lp mt cch tng minh.
4) S kim tra kt thc lp thc hin ngay u vng lp. Nu gi tr u
ca ch s m ln hn gi tr cui v gia s l s dng th s lp khng din
ra, cc lnh bn trong vng lp b b qua v iu khin chuyn ti lnh ng
sau lnh cui cng ca vng lp.
5) Khng c thay i gi tr ca ch s m bng mt lnh no khc
52

bn trong vng DO trong khi thc hin vng lp.


6) Khi vng lp bt u thc hin th nhng thay i cc gi tr ca
cc tham s khng c nh hng g ti s lp.
7) Nu gia s l m, s lp s kt thc khi gi tr ch s m nh hn gi
tr cui. Nu gia s dng, s lp kt thc khi ch s m ln hn gi tr cui.
8) Ta c th thot ra khi vng DO trc khi n kt thc lp. Khi gi
tr ca ch s m s bng gi tr ngay trc khi thot. (Nhng ni chung
khng nn lm iu ny. Nu ta mun thot ra khi vng lp trc khi n kt
thc mt cch t nhin, th ta cu trc li vng lp theo kiu vng lp While
gi tnh cu trc ca chng trnh).
9) Bao gi cng i vo vng lp thng qua lnh DO vng lp c
khi xng mt cch ng n. Khng bao gi c dng lnh GO TO
chuyn iu khin t bn ngoi vo bn trong vng DO.
10) S ln lp c th tnh bng cng thc:
lim -ini
inc

+ 1

trong du ngoc vung ch s ct b thp phn ca thng s. Nu gi tr


ny m th s lp khng xy ra.
Th d 9: Lp bng gi tr ca a thc 3 t 2 + 4,5 trn on t t 1 n 10
vi bc t = 1 .
PRINT * , POLYNOMIAL MODEL
PRINT *
PRINT * , TIME POLYNOMIAL
DO 15 i = 1, 10
POLY = 3. * REAL (i) ** 2 + 4.5
PRINT 10 , i , poly
10
FORMAT (1X, I2, 8X, F6.2)
15 CONTINUE
END

Th d 10: Tm phn t cc i ca chui s b1 , b2 , ..., b10 . Ta gii bi ton


ny theo thut gii biu din bi gi trnh sau:
1) vi i t 1 n 10
nhp bi
2) bmax b1
3) vi i t 2 n 10
nu bi > bmax th bmax bi
4) in bmax

T gi trnh ny d dng chuyn thnh chng trnh Fortran di y:


REAL B(10)
DO 2 I = 1, 10
READ *, B (I)
2 CONTINUE

53

BMAX = B (1)
DO 3 I = 2, 10
IF (BMAX .LT. B (I)) BMAX = B (I)
3 CONTINUE
PRINT *, B MAX = , BMAX
END

Th d 11: T chc vng lp vi bc s thp phn. In bng gi tr hm


y = sin ( x) ti x = 0; 0,1; 0,2; ...; 1. Ta a ra mt bin nguyn I sao cho bin ny
s nhn cc gi tr 1, 2, ..., 11 tng ng vi x = 0; 0,1; 0,2; ...; 1. Khi
x = 0,1 (i 1) .
DO 17 i = 1, 11
x = 0.1 * (i 1)
y = SIN (x)
PRINT 10 , x, y
10
FORMAT (20X, F4.2, 10X, E10.3)
17 CONTINUE
END

Hy lu rng y ta trnh s dng vng lp DO vi cc tham s


thc nh:
DO 15 x = 0.0 , 1.0 , 0.1

phng nga hin tng ct trong my tnh. Gi s rng gi tr 0.1 c lu


nh mt gi tr hi nh hn 0.1 trong h my tnh ang dng, mi ln thm
0.1 cho ch s m, my c th thm t hn theo d nh. Ngoi ra, trong
trng hp ny ta c th thc hin lp qu mt mt ln theo d nh v gi tr
gii hn cui cng c th khng chnh xc bng 1.0.
c) Vng DO lng vo nhau
Vng DO c th c lng trong mt vng DO khc, cng ging nh cu
trc IF lng trong cu trc IF khc. Khi t chc cc vng DO lng hy tun
th nhng quy tc sau y:
1) Vng DO lng bn trong khng th dng chnh ch s m cng vi
vng DO ngoi cha n.
2) Vng DO trong phi kt thc bn trong vng DO ngoi.
3) Cc vng DO c lp nhau c th dng cng ch s m, thm ch khi
chng cng nm trong mt vng DO ngoi.
4) Khi mt vng DO lng bn trong mt vng DO khc, th vng DO
trong thc hin trn vn tng ln lp vng DO ngoi.
5) Mc d cc vng DO lng c th dng cng mt dng lnh cui
CONTINUE, nhng ta nn kt thc mi vng bng mt lnh CONTINUE
ring bit lm sng r chng trnh.
Di y dn mt s th d v cc vng DO ng v cc vng DO sai:
- Nhng vng DO ng:
54

DO 15 i = 1, 5
DO 10 j = 1, 8
DO 5 k = 2, 10, 2
...
5
CONTINUE
10
CONTINUE
15 CONTINUE

DO 15 i = 1, 5
DO 10 k = 1, 8
...
10
CONTINUE
DO 5 k = 2, 10, 2
...
5
CONTINUE
15 CONTINUE

- Nhng vng DO sai:


DO 15 i = 1, 5
DO 10 j = 1, 8
DO 5 k = 2, 10, 2
...
10
CONTINUE
...
5
CONTINUE
15 CONTINUE

DO 20 j = 1, 5
DO 10 j = 1, 8
...
10
CONTINUE
DO 15 k = 2, 10, 2
DO 15 k = 2, 10, 2
...
15
CONTINUE
20 CONTINUE

Th d 12: T chc vng DO lng nhau. Vit chng trnh nhp 15 phn
t ca mng s thc X, sp xp li cc phn t mng theo th t gim dn v
in ln mn hnh cc mng c v mi thnh hai ct s.

2
7
5

REAL x(15), y(15)


n = 15
DO 3 i =1, n
READ * , x (i)
y (i) = x (i)
CONTINUE
DO 2 i = 1, n1
k=i
DO 4 j = i + 1, n
IF (y (k) .LT. y (j)) k = j
CONTINUE
IF (k .NE. i) THEN
tg = y (i)
y (i) = y (k)
y (k) = tg
END IF
CONTINUE
DO 7 i = 1, n
PRINT 5 , x (i), y (i)
CONTINUE
FORMAT (1X, 2F10.2)
END

Trong th d ny, ta thy c mt ba vng DO c lp nhau:


DO 3 i =1, n

(dng th 3)

55

DO 2 i =1, n1 (dng th 7)
DO 7 i = 1, n (dng th 18)

do , chng c th dng cng mt ch s m l bin i. Bn trong vng DO


th hai, ta thy xut hin mt vng DO th t:
DO 4 j = i + 1, n (dng th 9),

vng DO ny l vng DO lng, n phi c ch s m ring v ta dng lnh


kt thc n l lnh
4 CONTINUE

nhn mnh s phn bit vi vng DO ngoi c lng kt thc l


2 CONTINUE

Th d 13: Tnh giai tha. Khi s nguyn N khng m, biu thc N ! gi


l giai tha ca N . Cc gi tr ca giai tha c tnh theo quy lut:
0 != 1
1 != 1
2 != 1 2 = 2
3 != 1 2 3 = 6
...
Gi tr ca giai tha ca s nguyn N cng cn c c lng bng cng

thc Stirling c dng:


N

N
N ! = 2 N ,
e

trong e = 2,718282 . Vit chng trnh in cc gi tr giai tha ca cc s


nguyn t 0 n 10 theo cch tnh chnh xc v theo cng thc c lng ca
Stirling.
PRINT 4
4
FORMAT (1X, GIAI THUA CUA CAC SO TU 0 DEN 10
* //1X, T3, N, T12, N!, T16, STIRLINGS FORMULA /)
fac = 1.
DO 7 i = 0, 10
IF (i .GT. 1) fac = fac * i
PRINT 5, i, fac, SQRT (2.*3.141593*i)*(i / 2.718282)** i
5 FORMAT (1X, I2, F10.0, F20.0)
7 CONTINUE
END

Trong chng trnh ny, v giai tha c tnh lin tc vi cc s t 0


n 10, nn giai tha ca mt s sau c tnh bng tch ca s nhn vi
giai tha ca s trc n. Hy ch cch dng du gch cho to xung
dng khi in tiu : hai du gch cho u ch nh cho lnh PRINT in xong
dng ch GIAI THUA CUA CAC SO TU 0 DEN 10 th xung dng hai ln, sau
56

khi in dng tiu ct, du gch cho th ba gy xung dng mt ln


chun b in d liu theo dng lnh in trong vng lp DO. Cc c t T3, T12,
T16 trong dng lnh 4 FORMAT ch nh xut ch N v tr 3, N! v tr 12
v 13, ch STIRLINGS FORMULA bt u v tr th 16 ca dng tiu
ct. Kt qu xut ra ca chng trnh ny s c dng di y:
GIA TRI GIAI THUA CAC SO TU 0 DEN 10
N
N! STIRLINGS FORMULA
0
1.
1
1.
2
2.
3
6.
4
24.
5
120.
6
720.
7
5040.
8
40320.
9 362880.
10 3628800.

0.
1.
2.
6.
24.
118.
710.
4980.
39902.
359537.
3598694.

Cu hi v bi tp chng 3
1. Hy th hin bng gi trnh hoc lu thut ton sp xp cc phn t
ca mng mt chiu theo th t gim dn.
2. Cho cc gi tr:
a = 2.2

b = 1.2

i =1

done = .TRUE.

Xc nh gi tr ca cc biu thc lgic sau y:


1)
a .LT. b
2)
a b .GE. 6.5
3)
i .NE. 5
4)
a + b .GE. b
5)
i .LE. i 5 6)
.NOT. (a .EQ. 2 * b)
7)
(a .LT. 10.0) .AND. (b .GT. 5.0)
8)
(ABS (i) .GT. 2) .OR. done
9)
a .LT. b .NEQV. done
3. Vit chng trnh tnh gi tr ca

theo cng thc

x 2 khi x 0;
y= 3
x khi x > 0,

vi x cho trc.
4. Vit chng trnh c t bn phm mt tr s nhit Celsius, lit k
trn mn hnh ba phng n chuyn i: sang Fahrenheit, Kelvin v
Rankin. Theo ngi dng ch nh phng n chuyn i m in ra nhit
cho v kt qu chuyn i km cc k hiu nhit tng ng. Cc cng thc
chuyn i nh sau:
57

TF = TR 459,67 o R
9
TF = TC + 32 o F
5
9
TR = TK
5
15

5. Vit chng trnh tnh tch phn I = y ( x)dx vi hm y (x) cho di


1

dng bng cc gi tr thc nghim nh trong bng 3.4.


Bng 3.4
x
y

x
y

1,0 2,1 3,0 3,9 4,8 6,2 7,1 7,8


3,3 4,7 7,3 8,7 11,3 12,7 15,3 16,7
9,4 10,1 11,3 12,1 13,5 13,9 15,0
19,3 20,7 23,3 24,7 27,3 28,7 31,3

6. Vit chng trnh cho php c vo t bn phm mt tr s ca x v


xc nh tr s ca hm y bng cch ni suy tuyn tnh theo bng gi tr thc
nghim (th d bng 3.4).
7. H s nht phn t ( g cm 1 s 1 ) ca nc bin ph thuc vo nhit
t () v mui S (%o) theo bng 3.5. Vit chng trnh ni suy tuyn tnh
bng ny cho mt cp tr s bt k ca t o v S .
Bng 3.5
mui

10

15

20

25

30

0
5
10
15
20
25
30
35

17,94
18,06
18,18
18,30
18,41
18,53
18,64
18,83

15,19
15,28
15,39
15,53
15,66
15,79
15,93
16,07

13,10
13,20
13,28
13,41
13,57
13,73
13,84
14,00

11,45
11,54
11,68
11,77
11,90
12,03
12,12
12,23

10,09
10,18
10,27
10,40
10,47
10,58
10,68
10,82

8,95
9,08
9,18
9,26
9,35
9,48
9,58
9,67

8,00
8,09
8,17
8,27
8,34
8,43
8,52
8,59

8. Vit chng trnh tnh s theo cng thc khai trin chui sau y
vi sai s khng qu 0,0001:

= 1

1 1 1 1
+ + ....
3 5 7 9

9. Vit chng trnh cho php lin tc nhp t bn phm hai s nguyn
bt k, tm v in ln mn hnh c s chung ln nht ca nhng s di
dng thng bo:
USCLN CUA CAC SO: 36 VA 24 BANG 12

v kt thc khi no ngi dng nhp vo hai s bng nhau hoc mt trong hai
s bng 1.
10. Lp lu thut gii gii gn ng phng trnh x = f ( x) bng
58

phng php lp Siedel. Xp x ban u x0 v sai s cho php c cho


trc. Nu tm c nghim vi chnh xc cho th in gi tr nghim km
theo s bc lp, cn nu sau 100 ln lp m cha nhn c nghim th
thng bo ln mn hnh dng ch KHONG TIM DUOC NGHIEM. (Gi : Theo
phng php lp Seidel, ngi ta th gi tr x0 ty chn vo biu thc f (x)
v phi ca phng trnh x = f (x) tnh ra gi tr x1 gi l xp x bc 1, sau
kim tra nu khc nhau gia x1 v x0 ln hn sai s cho php th gi tr
x1 li c th vo v phi v tip tc tnh x2 (xp x bc 2)..., qu trnh ny
tip din cho n khi chnh lch gia hai bc xp x lin nhau khng ln hn
th ngi ta chp nhn gi tr xp x cui cng lm nghim ca phng trnh
x = f (x) .
11. Tnh s ln lp trong cc trng hp dng lnh DO sau y. Gi thit
rng cc ch s m l nhng bin nguyn:
1)
3)
5)

DO 5 i = 1, 8
DO 10 k = 15, 3, 1
DO 10 time = 50, 250, 25

2) DO 10 count = -4, 4
4) DO 10 time = 5, 15, 3
6) DO 10 ind = 72, 432, 4

12. Xc nh gi tr ca bin nguyn IDEM sau khi nhng vng DO di


y thc hin xong. Gi s bin ny c gn gi tr khng trc mi vng
lp.
1)

DO 5 i = 1, 8
idem = idem + 1
5 CONTINUE

2)

3)

DO 5 num = 8, 0, 1
idem = idem + 2
5 CONTINUE

4)

DO 5 idex = 0, 7
idem = idem 2
5 CONTINUE
DO 5 m = 5, 5
idem = idem + (1) **m
5 CONTINUE

13. Mt hn c nm vi tc ban u v v nghing mt gc so


vi mt t. Nu b qua lc cn ma st vi khng kh th khong cch d theo
chiu ngang k t v tr ban u v cao h (tnh bng mt) ca n ti thi
gian t (giy) biu th bng cc phng trnh sau:
d = v t cos ,
1
h = v t sin g t 2 ,
2

trong g gia tc trng lc ( 9,8 m/s 2 ). Vit chng trnh c vn tc ban


u v gc v sau in bng cc khong cch v cao ca hn vi thi
gian cch nhau 0,25 giy cho ti khi cao tr thnh gi tr m, tc lc hn
ri xung mt t.
14. Hy t chc li cc vng lp trong th d 13 bng cch s dng kt
hp lnh IF lgic v lnh chuyn iu khin v iu kin GOTO. Phn tch s
59

khc nhau ca hai cch t chc vng lp.


15. Gi s cc gi tr quan trc hai i lng x v y c cho nh trong
bng 3.4. Hy vit chng trnh tnh cc c trng thng k: trung bnh mx , m y ,
phng sai Dx , D y , lch bnh phng trung bnh x , y , h s tng quan r
gia hai i lng v lp phng trnh hi quy dng:
y = a x+b,

trong :
a=

y
r,
x

mx =

xi
i =1

Dx =

my =

yi
i =1

b = m y a mx ,

x
i =1

n 1
n

Dy =

2
i

y
i =1

2
i

n 1

n
mx2 ,
n 1

x = Dx

n
m y2 ,
n 1

x = Dx

x y
i =1

r = n 1

n
mx m y
n 1
.

x y

16. Vit chng trnh tnh tr gn ng ca tch phn


b

I = x 2 sin xdx
a

theo cng thc hnh thang vi sai s khng ln hn 0,0001, xc nh s hnh


thang cn chia t sai s . Chng trnh cho php nhp t bn phm cc
cn tch phn v in kt qu ln mn hnh thnh cc dng nh sau (th d nu
a = 0,5 v b = 1,5 ):
A = 0.5
B = 1.5
SO HINH THANG = 16
TICH PHAN BANG = 0.9604

17. Vit chng trnh cho php nhp t bn phm mt gc a tnh bng
, i gc thnh raian v tnh gi tr gn ng ca cos a vi chnh xc
ti 0,0001 theo cng thc khai trin sau y:
a2 a4 a6
+

+ ...
2! 4! 6!
In kt qu ln mn hnh thnh mt dng nh sau (th d):
A = 60.000 (DO) cos A = 0.5000 cos A theo hm chun = 0.5000
cos a = 1

18. Vit chng trnh cho php nhp t bn phm hai s nguyn (nh hn
10) tun t ch s dng v s ct ca mt ma trn. Sau tnh cc phn t ca
60

ma trn sao cho mi phn t l mt s nguyn gm hai ch s, ch s u ch


s th t dng v ch s sau ch s th t ct. In ma trn ln gia mn hnh
di dng bng s thng dng, thng ct, th d:
11
21
31
41
51
61

12
22
32
42
52
62

13
23
33
43
53
63

14
24
34
44
54
64

61

Chng 4 File d liu v t chc file d liu


4.1 Khi nim v file d liu v t chc lu tr d liu
cc chng trc, trong qu trnh thc hin chng trnh, khi no cn
ta s dng lnh READ nhp thng tin vo qua bn phm cho chng
trnh x l. Th d: khi chy chng trnh gii phng trnh bc hai trong th
d 1, ta phi nhp ba h s a, b, c . Vi mt lng thng tin khng nhiu, th d
mt vi gi tr s hay mt vi k t vn bn, th hnh thc giao tip ny gia
ngi v my l bnh thng. Nhng khi lm vic vi nhiu s liu, s l bt
tin nu phi nhp d liu bng tay nh vy mi ln chy chng trnh. Th
d, trong bi ton xt th d 8 ta phi nhp t bn phm hai chui gi tr
su v nhit gm vi chc s liu cc tng khc nhau (64 s) ch
ni suy mt gi tr nhit . Ngoi ra, nu trong khi chy chng trnh m ta
g nhm s liu th phi chy li chng trnh t u v ng nhin phi
nhp li s liu mt ln na. Cng vic t ra rt mt mi v khng ti u.
V vy, ngi ta thng nhp d liu vo my mt ln v lu trong my
(a cng, a mm...) di dng cc tp (file). Trong trng hp ny ngi s
dng my phi dng mt phn mm son tho no nhp d liu vo my
v lu li di dng cc file. Ngoi ra, d liu (thng l nhng gi tr s)
cng c th do mt thit b quan trc c b phn ghi lu vo a t, bng t,
cng my tnh theo mt quy cch no sau ny my tnh c th c c.
D liu cng c th l kt qu tnh ton, x l ca mt chng trnh my tnh,
sau c ghi li thnh file ngi s dng my xem nh l kt qu tnh
ton phn tch, nhn xt, sau ny c th in ra giy nh l mt bn bo co,
hay mt chng trnh khc c v tip tc x l, ch bin.
Trong chng ny, chng ta s nghin cu nhng lnh ca Fortran thao
tc vi d liu, tm hiu nhng c im ca chng hnh thnh k thut t
chc lu d liu trong my tnh.
File d liu l file trong my tnh cha nhng thng tin c quan h vi
nhau theo mt ngha no m mt chng trnh c th c, hay truy cp
c nu ta mun chng trnh x l t ng nhng thng tin .
Chng trnh my tnh truy cp n cc file theo tn ca chng. Tn file
c t tun theo quy tc tn nh i vi cc bin. Ngoi ra tn file cn c
th c mt phn m rng, cn gi l ui file, gm t hp khng qu ba ch
ci hoc ch s. Phn m rng ny ng sau phn tn chnh ca file v ngn
cch bng du chm.
62

Trong thc hnh ngi ta thng t tn file bng tp hp mt s ch ci


v ch s c ngha gi cho ngi dng d nh l file cha nhng d liu
g. Th d, nu chng ta c nhng s liu quan trc v nhit khng kh ca
mt s thng mun lu trong mt s file th c th nn t tn cc file l
NHIET.1, NHIET.2 v.v... y ng mun dng cm ch NHIET ch
cc file lu tr s liu v nhit , cn phn ui ca tn file nhm ch s
liu thuc v thng 1, thng 2... Cc file trong my tnh li c th c ghi vo
nhng th mc c tn khc nhau. Trong mi th mc li c th gm mt s
th mc con cng c tn ca chng, hnh thnh mt cy th mc. Mt nhm
file c quan h tng i vi nhau theo ngha no c th ghi chung vo mt
th mc, mt s file khc th c th ghi trong nhng th mc khc. Kinh
nghim cho thy rng vic t chc cc file trong my tnh mt cch c h
thng, khoa hc s gim nh v nng cao hiu qu cng vic ca ngi s
dng my tnh.
Xt v phng din lu tr d liu lu di th ngi ta thng c gng
ghi trong file sao cho phong ph thng tin, p ng vic x l nhiu mc ch.
Th d, vi file cha nhng s liu cc tham s kh tng thu vn mt trm
quan trc no , th ngoi nhng gi tr s ca cc tham s , nn c thm
nhng thng tin v tn trm, ta trm, thi k quan trc, c th ghi tn cc
tham s quan trc mt cch tng minh...
Ty theo c im v kh nng x l ca chng trnh hay phn mm m
ngi ta ghi cc d liu trong file sao cho gn, d c, d chuyn i t nh
dng (format) ny sang nh dng khc, tc xu th chun ha nh dng d
liu nhiu chng trnh, nhiu phn mm c th c c.
Trong chng ny chng ta hc cch lm vic vi nhng file d liu s,
lm th no c thng tin t file d liu hin tn ti v lm th no to
ra file d liu mi trong chng trnh Fortran m chng ta vit.

4.2 Cc lnh nhp, xut d liu vi file


s dng cc file vi chng trnh ca mnh, chng ta phi dng
nhng lnh mi thao tc vi file v nhng ty chn mi ca mt s lnh
nghin cu trong cc chng trc. Nhng lnh ny truy cp n tn file m
ta gn khi to lp file. Nu ta to lp mt file d liu bng phn mm son
tho, ta gn tn cho file khi nhp d liu. Nu ta to ra mt file bng mt
chng trnh, ta phi dng mt lnh trong chng trnh cp cho file mt tn
nht nh.
Nu mt file chun b c dng trong chng trnh, file phi c
m ra trc khi c mt thao tc no vi n. Lnh m file OPEN bo cho
chng trnh mt s thng tin cn thit v file nh tn file, file m ra
c hay ghi d liu. Ngoi ra lnh OPEN gn file c m vi mt s hiu
file khi no chng trnh truy cp file th n s dng s hiu . Dng tng
63

qut ca lnh OPEN m ta s dng trong chng ny nh sau:


OPEN (UNIT = Biu thc nguyn, FILE = Tn file, STATUS = Vn bn)
trong Biu thc nguyn ch nh mt s hiu thit b c gn cho file, Tn
file ch nh mt tn m ta gn cho file khi to lp ra n v Vn bn
STATUS bo cho chng trnh bit file m ra c hay ghi, file tn
ti hay chun b to ra. Nu l file c, ta ch nh
STATUS = 'OLD'
nu file m ra xut, ta ch nh
STATUS = 'NEW'
cn
STATUS = 'UNKNOWN'
cho php m file mi hoc ghi ln file tn ti.
Lnh OPEN phi ng trn nhng lnh READ hoc WRITE s dng file.
c file d liu, ta s dng lnh READ m rng di dng:
READ (S hiu thit b , *) Danh sch bin
ghi thng tin vo file d liu ta s dng lnh WRITE. Ging nh lnh
PRINT, lnh WRITE c th s dng xut thng tin ra di dng danh sch
lit k v di dng ghi khng nh dng hoc c nh dng:
WRITE (S hiu thit b , *) Danh sch mc in
WRITE (S hiu thit b , n ) Danh sch mc in
trong n l nhn ca lnh FORMAT tng ng. Trong tt c cc dng tng
qut trn y s hiu thit b ph hp vi s hiu thit b gn trong lnh
OPEN. Du sao * ng sau s hiu thit b ch rng ta ang s dng cch nhp
v xut khng nh dng.
Cc my tnh c th c mt s thit b nhp hoc xut i km. Mi thit
b c gn mt s hiu. Th d, nu my in lazer c gn s hiu 8 th lnh
in sau y s ghi gi tr ca cc bin X v Y ra my in laser
WRITE (8 , *) x, y
a s cc h my tnh gn thit b nhp chun (bn phm) bng s 5 v
thit b xut chun (mn hnh) bng s 6; nhng thit b ny c dng
ngm nh vi cc lnh READ * hay PRINT *. Do khng nn dng nhng
s hiu thit b gn trc ny cho cc file d liu. Ta c th dng bt k
nhng s hiu khc trong cc s nguyn t 1 n 15 ch n v file.
Sau khi kt thc c hoc ghi file, cc file t ng ng li trc khi
chng trnh kt thc. Cng c nhng trng hp ta mun ch tm ng hay
tch mt file khi chng trnh ca mnh, v iu ny nn lm. Ta s dng
lnh ng file c dng tng qut nh sau:
64

CLOSE (UNIT = Biu thc nguyn)


Nhng lnh m, ng file, xut nhp thng tin vi file trn y cn c
nhiu ty chn b sung khc na, s c nhc ti nhng ni thch hp
trong cc mc v cc chng sau.
Di y tm tt mt s quy tc quan trng cn nh khi c d liu t
cc file:
1. Mi lnh READ s bt u c vi mt dng d liu mi, gi l mt
bn ghi (record). Nu cn tha cc gi tr dng trc, th nhng gi tr b
b qua khng c.
2. Nu mt dng khng cha cc gi tr so vi danh sch bin cn c
trong lnh READ, th cc dng d liu sau s t ng c c cho n
khi gi tr cho cc bin lit k trong lnh READ.
3. Mt lnh READ khng cn phi c tt c cc gi tr trn dng d liu
hin thi. Nhng n phi c tt c nhng gi tr trn dng trc gi tr m
ta mun n c. Th d nu mt file c 5 gi tr ghi trn mt dng v ta cn
cc gi tr th ba v th t, ta phi c qua cc gi tr th nht v th hai
t ti cc gi tr th ba v th t, nhng ta khng cn phi c gi tr th
nm.
s dng ng lnh READ, ta cn bit cc gi tr c ghi trong file
nh th no. Th d, gi s rng mi dng ca file d liu cha hai s tun t
biu th thi gian TIME v s o nhit TEMP v ba dng u tin ghi nh
sau:
0.0 28.3
(dng 1)
0.1 29.1
(dng 2)
0.2 29.5
(dng 3)
th lnh sau y s c c ng mt cp gi tr thi gian v nhit t file
d liu
READ (10, *) TIME, TEMP
Nhng s l sai nu ta dng hai lnh sau
READ (10, *) TIME
READ (10, *) TEMP
Thc hin hai lnh ny s c hai dng ca file d liu: gi tr ca bin
TIME s bng 0.0 v gi tr ca bin TEMP s bng 0.1. Trong trng hp
ny chng trnh vn lm vic bnh thng nhng kt qu x l s sai. Th d
ny minh ha s quan trng ca vic kim tra chng trnh ca chng ta i
vi d liu bit, trc khi s dng n vi file d liu khc.

4.3 K thut c cc file d liu


c cc d liu t file d liu, trc ht ta phi bit mt s thng tin
65

v file. Ngoi tn file, ta phi bit d liu g c lu trong file v c th ghi


nh th no: c bao nhiu s ghi trn mt dng v cc n v o ca mi gi
tr. Ta cng phi bit trong file c thng tin g c bit c ch phn nh
c s dng ghi trong file, hay xc nh khi no ta c ht dng ghi
cui cng. Thng tin ny quan trng, v nu ta thc hin mt lnh READ sau
khi tt c cc dng ghi trong file c c ht ri th s b li thc hin
chng trnh. Ta c th trnh li bng cch s dng thng tin v file
quyt nh xem loi vng lp no nn dng khi c file. Th d, nu ta bit c
200 dng ghi trong file th ng nhin c th dng vng lp DO thc hin
200 ln c v tnh ton vi s liu c c. Nhiu khi ta khng bit trc c
bao nhiu dng ghi trong file, nhng ta bit dng ghi cui cng cha nhng
gi tr c bit lm cho chng trnh ca chng ta c th kim tra c. Th
d, nu mt file cha cc s liu v thi gian v s o nhit di dng hai
ct, th c hai ct dng cui cng nn cha hai s 999 k hiu rng y
l dng cui cng ca file. Trong trng hp ny ta c th lp vng lp While
c cc dng s liu v iu kin kt thc vng lp ny l hai gi tr thi
gian v nhit u bng 999. C trng hp ta khng bit c bao nhiu
dng ghi v cui file cng khng c cc gi tr c bit nhn bit. Khi
ta phi nh n cc ty chn (options) ca lnh READ.

4.3.1 S dng ghi c ch nh


Nu ta bit chc s dng ghi, c th dng vng lp DO x l file. Khi
to lp file, ngay dng ghi u, ta nn ghi mt s thng tin chuyn dng v
file, trong c s dng ghi (s s liu) trong file. V sau, mi ln b sung s
liu vo file d liu, ta cn sa li dng ghi ny. Khi x l file, ta c s ny
vo mt bin. Sau dng vng lp DO vi bin lm gii hn cui ca
vng lp c ht s liu trong file.
Th d 14: Cch c file c thng tin v s dng s liu dng u file.
Gi s file c tn l SOLIEU.DAT cha cc gi tr trung bnh ngy ca nhit
, m khng kh v p sut kh quyn ti mt trm quan trc trong nhiu
ngy. Mi dng ca file ghi tun t ba i lng trn cho mt ngy. Ring
dng th nht ghi tng s s liu (s ngy). on chng trnh c s liu t
file ny v tnh gi tr trung bnh ca ba i lng c th nh sau:
INTEGER n, k
REAL nd, da, as, ndtb, datb, astb
OPEN (UNIT = 2, FILE = 'SOLIEU.DAT', STATUS = 'OLD')
READ (2 ,*) n
IF (n .LT. 1) THEN
PRINT *, ' TRONG FILE KHONG CO SO LIEU '
ELSE
ndtb = 0.0
datb = 0.0
astb = 0.0
DO 15 k = 1, n

66

15

25

READ (2, *) nd, da, as


ndtb = ndtb + nd
datb = datb + da
astb = astb + as
CONTINUE
ndtb = ndtb / n
datb = datb / n
astb = astb / n
PRINT 25 , n, ndtb, datb, astb
END IF
FORMAT (1X, 'SO NGAY = ' , I5 , ' ND =' , F6.2 , ' DA =' , F6.2 , ' AS =' , F7.1)
CLOSE (2)
END

Trong th d ny, s s liu c c t dng th nht ca file v gn


vo bin N . Lnh IF kim tra nu N < 1 th thng bo khng c s liu; nu c
s liu th c ht tt c s liu v tnh cc gi tr trung bnh. V ta thy bin
N c dng lm tham s gii hn cui ca lnh DO.

4.3.2 Dng k hiu kt thc d liu


Nhng gi tr c bit dng nh du s kt thc ca file d liu gi l
k hiu kt thc (Trailer hay Flags). Khi to lp file, ta thm mt s con s
c bit trong dng ghi cui cng. V sau, nu ta thm hoc xa i mt s s
liu trong file, s khng phi sa li s ghi tng s s liu. Tuy nhin, nu
dng phng php ny nh du ht file, th phi cn thn sao cho chng
trnh ca chng ta khng c a nhng gi tr c bit vo x l nh cc
gi tr bnh thng khc. C th chng ta phi ghi ch v iu ny dng u
file. Ngoi ra, nu dng s liu bnh thng cha bao nhiu gi tr th dng k
hiu kt thc cng nn c chng gi tr c bit m bo cho lnh c
khng mc li chy chng trnh. Ngi ta thng chn cc gi tr c bit
sao cho chng khc hn vi nhng gi tr bnh thng, d nhn ra khi xem
bng mt cc s liu trong file, th d nh s nguyn ln nht 32767, mt tp
hp cc s chn nh 99999. Ta cng c th dng cch ny nh du nhng
gi tr khuyt trong cc chui s liu (Flags - c hiu bo ht file hoc khuyt
s liu).
Th d 15: Cch c file c dng s liu nh du ht file cui file v
c hiu bo khuyt s liu. Gi s file d liu vi ni dung nh trong th d
14, nhng c to ra theo cch nh du kt thc d liu bng dng gm ba
cm s 99999. Ngoi ra, trong cc dng s liu bnh thng c nhng gi tr
khuyt, khng quan trc, c nh du bng con s 32767. Chng trnh sau
y cho php c v tnh ton ng cc tr s trung bnh ca ba i lng:
INTEGER n1, n2, n3
REAL nd, da, as, ndtb, datb, astb
OPEN (UNIT = 2, FILE = 'SOLIEU.DAT', STATUS = 'OLD')
n1 = 0
n2 = 0

67

n3 = 0
ndtb = 0.0
datb = 0.0
astb = 0.0
60 READ (2, *) nd, da, as
IF (nd.NE. 99999 .OR. da .NE. 99999 .OR. as .NE. 99999) THEN
IF (nd .NE. 32767.) THEN
ndtb = ndtb + nd
n1 = n1 + 1
END IF
IF (da .NE. 32767.) THEN
datb = datb + da
n2 = n2 + 1
END IF
IF (as .NE. 32767.) THEN
astb = astb + as
n3 = n3 + 1
END IF
GOTO 60
END IF
CLOSE (2)
IF (n1 .EQ. 0 .AND. n2 .EQ. 0 .AND. n3 .EQ. 0) THEN
PRINT * , ' TRONG FILE KHONG CO SO LIEU '
ELSE
IF (n1 .GT. 0) PRINT * , ' NHIET DO TRUNG BINH = ', ndtb / n1
IF (n2 .GT. 0) PRINT * , ' DO AM TRUNG BINH = ', datb / n2
IF (N3 .GT. 0) PRINT * , ' AP SUAT TRUNG BINH = ', astb / n3
END IF
END

4.3.3 S dng ty chn END


Trng hp khng bit s dng d liu trong file v khng c dng
thng tin v du hiu kt thc d liu trong file, ta phi s dng mt k thut
khc. Lnh READ trong Fortran c mt ty chn gip kim tra s kt thc ca
file v r nhnh sang mt lnh c ch nh nu pht hin ht file. Lnh
READ vi ty chn ny c dng sau:
READ (S hiu file , * , END = n ) Danh sch bin
Khi no cn d liu trong file lnh ny thc hin ging nh lnh
READ (S hiu file , *) Danh sch bin
Tuy nhin, nu dng d liu cui cng c xong v ta thc hin lnh
READ vi ty chn END th thay v phm li thc hin lnh, iu khin c
chuyn ti lnh c nhn n trong ty chn END. Nu lnh READ thc hin
mt ln na sau khi t n cui file, th li chy chng trnh s xut hin.
Lnh READ vi ty chn END thc s l mt dng c bit ca vng lp
iu kin While:
68

5 READ (10, *, END = 15) temp


sum = sum + temp
n = n +1
GOTO 5
15 PRINT * , sum

Dng c bit ny ca vng lp iu kin ch nn thc hin khi no ta


khng bit s dng d liu v khng c dng k hiu bo ht d liu. Vic
chn k thut hp l c d liu t file ph thuc vo thng tin trong file
d liu.
Th d 16: S dng ty chn END. Vi file d liu ni dung nh trong
th d 14, gi s khng c dng u tin thng bo v di chui d liu, ta
thc hin chng trnh tnh cc tr s trung bnh nh sau:
INTEGER n, k
REAL nd, da, as, ndtb, datb, astb
OPEN (UNIT = 2, FILE = 'SOLIEU.DAT', STATUS = 'OLD')
ndtb = 0.0
datb = 0.0
astb = 0.0
n=0
C Nu c ht s liu ty chn END = 15 s chuyn n lnh 15
5 READ (2, *, END = 15) nd, da, as
ndtb = ndtb + nd
datb = datb + da
astb = astb + as
n=n+1
GOTO 5
15 CLOSE (2)
IF (n .EQ. 0) THEN
PRINT *, ' TRONG FILE KHONG CO DU LIEU'
ELSE
ndtb = ndtb / n
datb = datb / n
astb = astb / n
PRINT 25 , n, ndtb, datb, astb
END IF
25 FORMAT (1X, ' SO NGAY = ', I5 , ' ND =' , F6.2 , ' DA =' , F6.2 , ' AS =' , F7.1)
END

4.4 To lp cc file d liu


to mi file d liu, chng ta s dng cc lnh OPEN v WRITE.
Tuy nhin, trc khi ta bt u vit cc lnh Fortran, cn cn nhc xem sau
ny c file d liu s s dng k thut no trong ba k thut m t trong
mc 4.3.
Khi to lp file vi dng k hiu bo ht d liu phi cn thn la chn
gi tr dng lm k hiu. Phi tin chc rng gi tr c chn lm gi tr bo
69

ht d liu khng th no nhm vi gi tr d liu thc s. C th chng ta


phi c ghi ch u file mi ngi dng file c bit.
Nu ta quyt nh to file vi thng tin bo tng s dng d liu trn u
file, th phi ch cp nht dng u file mi khi b sung hoc ct bt s
dng d liu. Nu s dng d liu khng ng, th hoc chng trnh c s
c s dng d liu t hn s dng thc c, hoc chng trnh c c nhiu
dng hn trong file thc c v dn n li trong khi chy chng trnh.
So snh ba phng n t chc thng tin d liu trn, ta thy v phng
din ti u chng trnh th cch dng s bo s dng d liu u file l tt
hn c, v khi c c tng s dng s liu ta c th c ht d liu bng
vng lp DO, trong khi hai phng n sau chng trnh lun lun phi kim
tra biu thc lgic trong khi c lp. Ngoi ra rt c th c nhng nhim v x
l khng cn c ht file, m ch cn c s lng s liu ca file dng u.

4.5 K thut tr gip tm li chng trnh


Tht v ngha nu mt chng trnh x l d liu m li c sai d liu
trong file. M iu ny khng phi l khng bao gi xy ra. Trng hp s
dng d liu thc t trong file c t hn s vng lp c d liu th chng
trnh s bo li chy chng trnh. Khi chng ta buc phi xem li chng
trnh hoc xem li file d liu v d dng pht hin li u. Tuy nhin c
nhng trng hp li chy chng trnh khng pht sinh, nhng kt qu
chng trnh cho ra sai. Nu kt qu sai v l, r rng th chng ta cng bit
v tm nguyn nhn chng trnh hay file d liu. ng s nht l nhng
trng hp c nhm d liu, c hi thiu d liu. Khi chng trnh
lm vic bnh thng, kt qu t ra chp nhn c, nhng thc cht l sai
hoc khng chnh xc. Do , trong lp trnh phi rt thn trng vi file d
liu.
Khi tm li mt chng trnh lm vic vi cc file d liu, iu rt quan
trng l kim tra xem cc lnh nhp, xut d liu c lm vic ng n, chnh
xc khng.
Trong thc t cc file d liu c th do bn thn ngi lp trnh xy
dng, cng c th ngi lp trnh nhn c trong qu trnh trao i d liu
vi ng nghip ca mnh. Trong nhng trng hp , trc khi vit nhng
lnh c file d liu phi nghin cu k cu trc ca file, c k ti liu m t
file, phi tin chc tuyt i nhng thng tin trong file l nhng thng tin g,
cch thc ghi trong ra sao th mi c file ng v chnh xc. c bit
ln u tin lm vic vi mt loi file phi kim tra k lng kt qu c file.
Hy nn nh rng trong s nhng yu t ca Fortran th vn lm vic
vi file c th xem l vn kh nht v l th nht.
Vi cc file d liu nhp, ta nn th chng trnh vi mt file d liu
nh, sao cho ta c th in ln mn hnh tng dng d liu khi chng trnh c
70

vo. Hy kim tra xem chng trnh c b qua dng d liu, hoc mt gi tr
no khng. Nu file d liu c ghi s dng d liu, th hy in s ra sau khi
c.
Vi cc file d liu xut, sau khi to lp ra n, hy m ra xem li ni
dung file. Nn xem cu trc file c nh ta d nh khng, nhng gi tr c
ng l nm nhng ch n cn nm khng. Ngoi ra cn phi kim tra file
u ra trong nhiu phng n chy chng trnh. Rt c th trong mt trng
hp ta thy mi chuyn u n, nhng n trng hp khc th tnh hnh
khng phi nh vy. Ch c kim tra k th mi trnh c nhng li tim n
kh nhn bit trong chng trnh.

Cu hi v bi tp chng 4
1. File d liu LAB1 cha nhnng thng tin v thi gian v nhit trn
mi dng nh sau:
0.0
0.5
1.0
1.5
2.0
2.5

26.5
28.7
29.1
29.2
29.4
29.7

(dng 1)
(dng 2)
(dng 3)
(dng 4)
(dng 5)
(dng 6)

Hy cho bit gi tr ca cc bin sau khi mi nhm lnh di y thc


hin. Gi s rng trc khi thc hin mi nhm lnh , th file d liu
c m v cha tng c mt lnh READ no c thc hin:
1) READ (1, *) TIM, TEM
2) READ (1, *) TIM1, TEM1, TIM2, TEM2
3) READ (1, *) TIM
4) READ (1, *) TIM1, TEM1
READ (1, *) TEM
READ (1, *) TIM2, TEM2
5) READ (1, *) TIM1
6) READ (1, *) TIM1, TIM2
READ (1, *) TEM1
READ (1, *) TEM1, TEM2
READ (1, *) TIM2
READ (1, *) TEM2

2. File d liu c tn CONDAO.TEM c ni dung ghi nh sau: Dng th


nht - tiu bo rng y l s liu v bin thin nhit khng kh ti trm
Cn o. Dng th hai tun t ghi cc tham s: s nm quan trc, thng, nm
bt u v thng, nm kt thc quan trc. Dng th ba gm 12 ct ghi cc
thng trong nm. Cc dng tip sau tun t ghi nhng gi tr nhit ng vi
tng thng thnh 12 ct, trong nhng thng khuyt s liu c ghi bng
s 9.9:
OSCILLATION OF TEMPERATURE OF THE AIR AT STATION CONDAO
12 1 1979 12 1990

71

1
25.2
25.0
24.6
24.5
25.3
24.7
25.4
24.5
25.2
25.8
25.3
25.6

2
25.7
25.6
25.0
25.2
25.7
25.1
26.4
24.8
25.2
26.6
24.7
26.0

3
27.3
27.2
26.9
-9.9
26.6
25.9
27.0
25.6
27.0
27.1
25.9
27.2

4
28.7
28.5
28.6
-9.9
28.2
27.9
27.3
28.1
28.9
28.3
27.2
29.0

5
29.0
28.6
28.1
28.3
29.1
27.8
27.7
28.8
28.5
28.1
27.6
28.5

6
27.7
27.6
28.0
27.8
28.2
27.2
28.3
28.2
28.0
28.0
27.9
28.3

7
27.2
27.8
28.0
27.2
28.0
27.2
27.5
27.8
28.6
27.3
27.7
28.2

8
27.5
27.0
27.9
27.2
27.5
27.8
28.0
27.6
27.7
27.6
27.3
27.8

9
27.2
27.4
26.9
27.4
26.9
26.3
26.8
26.8
27.3
27.2
27.4
27.6

10
-9.9
26.7
27.0
26.7
27.2
26.5
26.5
26.8
26.9
27.0
26.6
27.4

11
26.8
26.8
26.3
27.4
25.9
26.9
26.9
26.4
27.2
26.1
26.7
26.6

12
25.3
25.8
25.0
26.1
25.5
25.8
25.7
25.5
25.9
24.8
25.4
25.8

Hy lp on chng trnh c file ny v in li ln mn hnh ton b d


liu gc cng bin trnh nm trung bnh ca nhit khng kh dng cui
cng.
3. Lp on chng trnh c file d liu vi ni dung nh trong bi tp
2 v ghi li thnh file cng tn, p dng k thut dng dng k hiu nh du
kt thc d liu trong mc 4.3.2.
4. Trong file tn l DATA1, mi dng ghi thi gian tnh bng giy v
nhit tnh bng C. Dng cui cng l dng bo ht d liu cha gi tr
999.9 cho c thi gian v nhit . Hy c file d liu ny v sp xp gi tr
nhit theo th t gim dn. In chui nhit sp xp thnh dng 10 gi
tr mt dng. Gi s trong file c khng qu 200 dng d liu.
5. Trong file tn l DATA2, mi dng ghi thi gian tnh bng giy v
nhit tnh bng C. Khng c dng tiu v khng c dng bo ht d
liu. Hy c file d liu ny v in ra s gi tr nhit , gi tr nhit trung
bnh v s gi tr nhit ln hn trung bnh. Gi s trong file c khng qu
200 dng d liu.
6. Vit chng trnh sa li file CONDAO.TEM trong bi tp 2 sao cho
mi dng s liu c ch nm quan trc tng ng u dng, gi tr nhit
trung bnh nm cui dng v gi tr nhit trung bnh nhiu nm ca tng
thng dng di cng.
7. Vit chng trnh tm nghim gn ng vi sai s cho php 0,0001 ca
phng trnh e x

1 x
e + 3,7 x = 0 trong khong [0, 2] theo phng php lp
3

v in thng bo kt qu ln mn hnh vi 4 ch s thp phn.


8. Vit chng trnh nhp mt s t nhin n nh hn 21, mt s thc x
bt k nh hn 1. Xc nh tng:
sin x sin x + sin 2 x sin x + sin 2 x + sin 3x
sin x + sin 2 x + ... + sin nx
+
+
+ ... +
cos x cos x + cos 2 x cos x + cos 2 x + cos 3x
cos x + cos 2 x + ... + cos nx

72

Chng 5 D liu kiu mng


Trong chng 1, mc 1.3 xt cch khai bo kiu bin c ch s v khi
nim mng trong Fortran, nu mt s c im v lu gi i vi cc bin c
ch s hay gi l bin mng.
Chng ny s cung cp thm phng php lu gi v x l nhng
nhm gi tr m khng cn cung cp tn mt cch tng minh cho tng gi tr
. Trong thc t, ta thng x l mt nhm cc gi tr t nhiu lin h hoc
hon ton khng lin h vi nhau. Trong trng hp ny, nu s dng bin
mng, c nhm d liu s c mt tn chung, nhng nhng gi tr ring bit c
ch s ring duy nht. K thut ny cho php ta phn tch d liu s dng cc
vng lp mt cch thun tin. Trong cc mc di y s b sung thm nhng
cu trc, nhng lnh ca Fortran cho php thao tc thun li vi cc bin
mng, k thut c d liu t file gn vo cc bin mng v.v...
Mng l yu t quan trng v mnh m nht ca Fortran. Nu so snh vi
mt s ngn ng lp trnh khc, th d nh Pascal, ta thy trong Fortran cho
php khai bo nhng mng d liu rt ln v thao tc rt mm do. Nhiu khi
kh nng khai bo mng d liu ln lm cho thut gii ca chng trnh x l
tr nn n gin. Ngoi ra, s dng mng ng n v thnh tho s gip
chng ta vit nhng chng trnh hoc nhng on chng trnh rt ngn gn.

5.1 Mng mt chiu


Trong lp trnh, mng mt chiu thng dng biu din mt dng
hoc mt ct d liu.
V phng din ngn ng, mt mng l mt nhm a ch lu gi trong
b nh my tnh c cng tn. Tng thnh phn ca mng c gi l phn t
mng v c phn bit vi phn t khc bi tn chung km theo ch s trong
cp du ngoc. Nhng ch s c biu din bng nhng s nguyn lin tip
nhau, thng l bt u (ch s u) bng s nguyn 1. Nhng trng hp
dng ch s u khc 1 thng lin quan ti tnh thun tin thao tc cc cng
thc ton hc hoc phng din thc tin. Th d mun biu din cc h s a
ca phng trnh hi quy nhiu bin lin h gia i lng y v cc i lng
x1 , x 2 , ..., x m

y = a 0 + a1 x1 + a 2 x 2 + ... + a m x m

ta c th dng mng mt chiu vi tn A ch tt c cc h s, k c h s t


73

do, ca phng trnh hi quy ny v khai bo nh sau:


REAL a (0 : 20)

Trong trng hp ny phn t th nht A(0) ca mng A biu din h s


a0 . Nh vy rt thun tin trong khi s dng cc cng thc ca i s.
Nu ta c tp hp s liu v lng ma nm trong th k ny ti mt
trm kh tng no , ta c th dng mng
REAL RAIN (1900 : 2000)

Trong trng hp ny, nu mun truy cp lng ma nm 1985, ta ch


nh phn t mng RAIN (1985).
c d liu vo mt mng mt chiu t bn phm hoc t file d liu,
ta s dng lnh READ. Nu mun c ton b mng, ta dng tn mng khng
c cc ch s. Ta cng c th ch nh nhng phn t c th trong lnh READ,
th d
READ *, b
READ *, b(1), b(2), b(3)

Cn ch rng, trong th d ny, nu mng B theo khai bo cha 3 phn


t th hai lnh READ trn tng ng nhau. Nhng nu mng B cha 8 phn
t th c s khc nhau quan trng gia hai lnh READ trn y, l v: lnh th
nht c vo ton b 8 phn t ca mng B, trong khi lnh th hai ch c cc
gi tr ca ba phn t u tin.
Cc gi tr ca bin mng cn c th c vi vng lp DO n. Th d,
nu mun c 5 phn t u tin ca mng B ta s dng lnh READ nh sau
READ *, (b (i) , i = 1 , 5)

Trong lnh ny, chng ta thy khng c mt t kha DO, ch c ch s I


ca bin mng B bin thin t 1 ti 5 vi gia s bng 1. Nh vy vi mt lnh
READ my c c lin tc 5 phn t ca mng B.
Th d 17: Mt tp hp 50 s liu lng ma nm c lu trong file d
liu, mi s liu mt dng. Gi s n v file l 9. Vit nhm lnh c nhng
s liu ny vo mng LMUA.
Cch 1: Dng lnh READ c tng s, nhng vng lp thc hin 50 ln
v c ton b mng:
REAL lmua (50)
DO 10 i = 1 , 50
READ (9, *) lmua (i)
10 CONTINUE

Cch 2: Dng lnh READ khng cha ch s, n s c ton b mng,


tc c lin 50 phn t:
REAL lmua (50)
READ (9, *) lmua

Cch 3: Lnh READ cha vng lp n:


74

REAL lmua (50)


READ (9, *) (lmua (i), i = 1, 50)

5.2 Lnh DATA


Lnh DATA l lnh c t, thuc loi lnh khng thc hin. N dng
khi to gi tr ban u cho cc bin n v cc mng. Dng tng qut ca
lnh DATA nh sau
DATA Danh sch tn bin / Danh sch hng /
Theo lnh ny, cc gi tr d liu trong danh sch hng nm trong hai
du gch cho c gn cho cc bin trong danh sch tn bin theo tun t.
Kiu ca cc gi tr d liu cng nn ph hp kiu ca cc bin, sao cho my
tnh khng phi chuyn i. Cc lnh DATA phi t trc cc lnh thc
hin, tc gn u chng trnh, ngay sau nhng lnh m t kiu nh lnh
REAL, INTEGER, LOGICAL, DIMENSION...
Th d, lnh
DATA a , b, c , i / 0.0 , 32.75 , 2.5 , 10 /

s khi to gi tr 0,0 cho bin A, 32,75 cho bin B, 2,5 cho bin C v 10 cho
bin I.
Ch rng lnh DATA ch khi to gi tr u chng trnh. Lnh
DATA khng th s dng trong vng lp ti to gi tr cc bin. Nu cn
ti to cc bin, ta phi s dng cc lnh gn.
Nu cc gi tr lp li trong danh sch hng, ta c th dng cch vit lnh
DATA ngn gn. Th d, nu mun khi to gi tr 1 cho cc bin I, J, K v
gi tr 0,5 cho cc bin X, Y, Z, th hai lnh sau y tng ng nhau:
DATA i, j, k, x, y, z / 1, 1, 1, 0.5, 0.5, 0.5 /
DATA i, j, k, x, y, x / 3*1, 3*0.5 /

Lnh DATA c th s dng khi to mt hoc mt s phn t ca


mng. Th d, cc lnh sau khi to tt cc cc phn t ca mng J v TIME:
INTEGER j (5)
REAL time (4)
DATA j, time / 5*0, 1.0, 2.0, 3.0, 4.0 /

Nhm lnh
REAL hour (5)
DATA hour (1) / 10.0 /

ch khi to mt gi tr ca phn t u tin ca mng HOUR, cc phn t t


th 2 n 5 ca n cha bit.
C th s dng vng DO n trong lnh DATA. Th d:

INTEGER y (100)
DATA (y (i), i = 1, 50) / 50*0 /

75

khi to gi tr 0 cho 50 phn t u ca mng Y, 50 phn t cn li cha


c khi to.

5.3 Mng hai chiu


Cc lnh m t mng hai chiu ging nh vi mng mt chiu, khc bit
duy nht l dng hai tham s kch thc mng. Mi phn t mng c truy
cp bi tn mng vi hai ch s nm trong cp du ngoc.
Trong thc t lp trnh ngi ta thng biu din cc ma trn, cc bng
d liu gm mt s ct, mi ct c mt s dng gi tr thnh mng hai chiu.
Th d, ma trn cc h s ng trc cc n ca h phng trnh i s
tuyn tnh ai , j (i = 1..10, j = 1..10) thng biu din bng mng hai chiu A vi
lnh m t nh sau
REAL a(10, 10)
Cc gi tr quan trc tng gi v mc nc bin trong vng mt thng c
th biu din thnh mt bng s liu gm 31 dng, 24 ct. Cc dng tun t
ng vi cc ngy trong thng. Cc ct tun t ng vi 24 gi trong mt ngy.
Trong Fortran, bng s liu ny c th biu din bng mng hai chiu
REAL slev (31, 24)

theo cch ny, khi thao tc vi mc nc ti mt ngy, gi c th no ,


ngi ta ch cn ch nh phn t SLEV (I, J), vi ch s th nht I ch ngy,
ch s th hai J ch gi trong ngy . Khi cn tnh mc nc trung bnh ngy,
th d ca ngy th nht trong thng, ngi ta ch cn cng tt c cc phn t
vi ch s I = 1:
SLEV (1, 1) + SLV (1, 2) + ... + SLEV (1, 24)

S dng cc mng rt tin li khi lp chng trnh phn tch, tnh ton
vi nhng ma trn, nhng tp s liu ln.
Th d 18: Lp ma trn n v (ma trn vung vi cc phn t trn
ng cho chnh bng 1, cn tt c cc phn t khc bng 0). Th d ma trn
kch thc n = 3 , tc c 3 dng v 3 ct, s l
1 0 0
0 1 0 .

0 0 1

on chng trnh Fortran thc hin vic ny s nh sau:


INTEGER idmat(3,3)
DO i = 1, 3
DO j = 1, 3
IF (i .EQ. j) THEN
idmat (i, j) = 1
ELSE
idmat (i, j) = 0
ENDIF

76

END DO
END DO

Th d 19: c cc gi tr mng hai chiu t file d liu. Gi s c cc


s liu v lu lng nc trung bnh nm ca mt s con sng. Nhng s liu
ny ghi trong file SONG.LLG. Dng trn cng ca file ghi hai s nguyn tun
t ch s nm quan trc v s con sng. Sau c n dng, mi dng s liu
tun t ng vi mt nm, trong mi dng c m gi tr, mi gi tr ng vi mt
con sng. Ta dng mng hai chiu biu din tp s liu ny, ch s th nht
ca mng ch th t nm, ch s th hai ch th t con sng. on chng
trnh sau y cho php c s liu t file, tnh lu lng trung bnh ca tt c
cc sng v in kt qu ln mn hnh.
REAL sll (100, 15), tb (15)
OPEN (1, FILE = 'SONG.LLG', STATUS = 'OLD')
READ (1, *) n, m
DO i = 1 , n
READ (1, *) (sll (i , j) , j = 1 , m)
ENDDO
CLOSE (1)
DO j = 1, m
tb (j) = 0.0
DO i = 1, n
tb (j) = tb (j) + sll (i, j)
ENDDO
ENDDO
PRINT 4, (tb (j) , j = 1 , m)
4 FORMAT (1X, 15F8.0)

Hy lu cch c s liu lng ma trong chng trnh ny. Nh


m t cch ghi s liu trong file, lng ma c ghi thnh n dng, mi dng
ng vi mt nm, trn mi dng li c m gi tr lng ma ng vi m con
sng. Mun c lin tc s liu trong n nm ta dng hai vng DO lng
nhau:
DO i = 1 , n
READ (1, *) (sll (i , j) , j = 1 , m)
END DO

trong vng DO bn trong l vng DO n vi ch s J chy t 1 n M.


Bng vng lp n ny ta c c m gi tr s thc ng vi m sng trn
cng mt dng.
Mt cch tng qut, y l cch c thng dng nht bng mt lnh
c c th nhn lin tip tt c cc phn t trn mt hng ca ma trn.
Nu ta dng hai vng lp thng thng:
DO i = 1, n
DO j = 1, m
READ (1, *) sll (i, j)
END DO

77

END DO

th s phm sai lm, bi v hai vng DO ny tng ng vi n m lnh


READ, v nh ta bit, mi ln lnh READ thc hin xong th u c file
s xung dng mi. Nh vy my s c n m dng trong khi trong file ch c
n dng s liu.
Ta pht trin cch dng vng DO n cho trng hp trn cng mt dng
trong file c hai i lng. Th d, cng l file s liu nh m t trong th
d 19, nhng trn mi dng ngoi m gi tr lu lng cn c m gi tr c
ng vi m con sng. Trong trng hp ny ta khai bo thm mt bin DD
(100, 15) v lnh c c lu lng v c s l:
DO i = 1 , n
READ (1, *) (sll (i , j), j = 1 , m) , (dd (i , j), j = 1, m)
END DO

Trng hp u mi dng c ghi nm quan trc, ta s dng


DO i = 1 , n
READ (1, *) nam (i), (sll (i, j) , j = 1, m) , (dd (i , j) , j = 1, m)
END DO

5.4 Mng nhiu chiu


Fortran cho php s dng cc mng vi s chiu ti a bng 7. Chng ta
c th hnh dung mng ba chiu ging nh hnh hp ch nht to bi nhiu
hnh lp phng con. Cc phn t ca mng ba chiu ging nh nhng hnh
lp phng con, xp thnh mt s lp, mi lp c mt s hng v mi hng
c mt s hnh lp phng. T ta biu din v tr ca mt phn t no
nh l v tr ca hnh lp phng con: th t ca n trong mt hng bng ch
s I, th t hng bng ch s J v th t lp - ch s K.
Th d, mng ba chiu c th nh ngha bng lnh:
REAL t (3, 4, 4)
Nu s dng tn mng ba chiu khng c ch s, ta x l mng vi ch s
th nht bin thin trc nht, sau n ch s th hai bin thin v ch s
th ba bin thin sau cng. Th d vi mng T, hai lnh c sau y l tng
ng:
READ*, t
READ*, (((t(i, j, k), i =1, 3), j=1, 4), k=1, 4)

Tng t ta hnh dung mng bn chiu nh l mt chui cc mng ba


chiu...
Trong kh tng thy vn mng ba chiu thng c dng biu din
nhng s liu quan trc trong khng gian ba chiu. Th d, ta c th biu din
trng p sut nc bin ti cc im nt kinh, v tuyn ca mt min hnh
ch nht trn mt bin v mt s tng su. Trong trng hp ny c th quy
c ch s th nht ca mng i bin thin theo trc x hng sang pha ng,
78

ch s th hai j bin thin theo trc y hng ln bc, cn ch s th ba k bin


thin theo trc z hng thng ng t mt xung y bin ch gi tr p
sut ng vi kinh , v v mt tng su no trong bin (hnh 5.1).
Trong kh tng hc, hai ch s u hon ton tng t, cn ch s th ba ca
mng ba chiu bin thin theo trc z hng thng ng t mt t ln trn, c
th dng ch quan trc ti mt tng cao.

Hnh 5.1 Biu din mng ba chiu trong bin

Theo quy c th mng hai chiu l mt trng hp ring ca mng


ba chiu dng biu th trng yu t kh tng thy vn no trn mt
min phng hnh ch nht, th d trng kh p mt t, trng nhit nc
mt bin... Mng bn chiu c th dng biu din nhng trng ba chiu
va m t trn nhng ti nhiu thi im t khc nhau.
Trong thy vn, ch s th nht ca mng ba chiu thng dng biu
din yu t quan trc ti cc su khc nhau ca mt mt ct, dc theo sng
ta c c th c nhiu mt ct c biu din bng bin thin ca ch s th hai,
yu t quan trc li c th bin i theo thi gian v c ch nh bng ch s
th ba. Nu xt nhiu sng cng mt lc, ta cn n mng bn chiu.
Chnh l trong kh tng, hi dng hc chng ta c bit ti nhng
m hnh d bo thi tit hay hon lu v nhit mui i dng thng s
dng cc trng ba chiu ban u v pht sinh ra nhng trng bn chiu vi
kch thc khng l (do phn gii khng gian cao v bc thi gian m
phng, d bo nh) phi lu tr v qun l trong my tnh.
Cc mng c s chiu ln hn bn c th l kh hnh dung trc quan
hn. Tuy nhin, nu chng ta quy c r rng, nht qun cc ch s th nht,
th hai... tng ng vi bin s no trong thc t v nm vng quy tc bin
thin ch s ca mng th vn c th truy cp, thao tc ng vi mt phn t
bt k ca mng trong chng trnh.
Th d 20: Tnh tn sut thi gian ma. S liu gi tr ngy ca cc yu
79

t kh tng thy vn ti trm Hn Du c lu trong file HONDAU.MAT


c quy cch ghi nh sau: Dng trn cng ghi tn trm. Dng th 2 c hai s
nguyn vit cch nhau ln lt ch tng s ngy quan trc v s yu t c
quan trc. Dng th ba c 6 s nguyn vit cch nhau ln lt ch ngy, thng,
nm u v ngy, thng, nm cui quan trc. Dng th 4 l tiu ct lit k
tn tt c cc yu t c quan trc, mi tn c ghi vi rng 8 v tr. Cc
dng tip theo ln lt ghi gi tr ca cc yu t, mi dng mt ngy. Gi s
lng ma ngy ghi ct s 6. Vit chng trnh c v tnh xem trong sut
thi gian quan trc c bao nhiu ln ma ko di 1 ngy, bao nhiu ln ma
ko di 2 ngy lin, bao nhiu ln ma ko di 3 ngy lin...

100

300

15
16

REAL x (5000)
INTEGER ts (5000)
OPEN (1, FILE = 'HONDAU.MAT', STATUS = 'OLD')
READ (1, *)
READ (1, *) n
READ (1, *)
READ (1, *)
DO i = 1, n
READ (1, *) (x (i), j = 1, 6)
END DO
CLOSE (1)
ts = 0
i=1
IF (i .GT. n) GOTO 15
IF (x (i) .EQ. 0.0) THEN
i=i+1
GOTO 100
ELSE
j=1
IF (i .EQ. n .OR. x(i + 1) .EQ. 0.0) THEN
ts (j) = ts (j) + 1
i=i+1
GOTO 100
ELSE
j=j+1
i=i+1
GOTO 300
END IF
END IF
i=n
IF (ts (i) .EQ. 0) THEN
i=i-1
GOTO 16
ELSE
DO n = 1, i
PRINT (2I5), n, ts (n)
END DO
END IF

80

END

Th d 21: Tnh ma trn tng quan ca tp s liu quan trc cc yu


t kh tng thy vn. Vi file s liu trong th d 20, vit chng trnh c
cc thng tin cn thit trong file v in ma trn tng quan ca cc yu t quan
trc ln mn hnh.
Ta thy, mt cch t nhin mi chui gi tr ngy ca mt yu t quan
trc c th c biu din thnh mng mt chiu, ch s mng s bin thin
theo th t ngy quan trc. Tuy nhin, ta c th gp tt c cc mng mt chiu
thnh mt mng hai chiu vi ch s th hai bin thin theo th t yu t quan
trc: 1, 2, ... Bng cch dng mng hai chiu X (5000, 15) nh trong chng
trnh di y s rt thun tin cho vic s dng cc vng lp DO vi tham s
m ca vng DO ng thi l ch s ca mng.
REAL x (5000, 15), mx (15), dx (15) , r (15, 15)
OPEN (1, FILE = 'HONDAU.MAT', STATUS = 'OLD')
READ (1, *)
READ (1, *) n, m
READ (1, *)
READ (1, *)
DO i = 1, n
READ (1, *) (x (i, j), j = 1, m)
END DO
CLOSE (1)
C Tnh trung bnh v lch qun phng ca M yu t
DO i = 1, m
mx (i) = x (1, i)
dx (i) = x (1, i) * x (1, i)
DO j = 2, n
mx (i) = mx (i) + x (j, i)
dx (i) = dx (i) + x (j, i) * x (j, i)
END DO
mx (i) = mx (i) / n
dx (i) = SQRT (dx (i) / n - mx (i) * mx (i))
END DO
C Tnh ma trn tng quan
DO i = 1, m 1
DO j = i + 1, m
r (i, j) = 0.0
DO k = 1, n
r (i, j) = r (i, j) + x (k, i) * x (k, j)
END DO
r (i, j) = r (i, j) / n - mx (i) * mx (j)
r (i, j) = r (i, j) / (dx (i) * dx (j))
END DO
END DO
DO i = 1, m
r (i, i) = 1.0
END DO
DO i = 1, m

81

PRINT 4, (r (k, i), k = 1, i - 1), (r (i, j), j = i, m)


END DO
4 FORMAT (<m>F6.2)
END

5.5 Nhng iu cn ch khi s dng cc mng


Trong cc mc trc ca chng ny ta hc s dng mt mng - mt
nhm cc a ch lu gi cc gi tr c mt tn chung, nhng phn bit vi
nhau bi mt hoc mt s ch s. Mng l mt yu t mnh m nht trong
Fortran, v n cho php lu gi mt tp hp d liu ln d x l trong
chng trnh.
Mc d vi tin li c bn nh trn, cc mng cng thng c th gy ra
nhng li mi. Mt khi bn d nh s dng mng m t d liu, hy t hi
ta c cn s dng d liu ny nhiu ln khng v d liu ny c cn phi
lu trc khi ta s dng n khng. Nu cu tr li cho cc cu hi trn l
khng, nn hn ch dng mng, m dng cc bin n.
Mt khi mng l cn thit, nhng chng trnh lm vic sai, trc ht
hy kim tra nhng iu sau y:
- Kch thc mng: M t mng phi ch ra s phn t ti a d nh lu
gi trong mng. Mc d chng ta khng nht thit phi dng ht tt c cc
phn t ca mng, nhng chng ta khng c s dng nhiu phn t hn so
vi s phn t m t phn khai bo ca chng trnh. Vy vi mi bi
ton c th nu cn s dng mng, hy hnh dung trc kch thc ti a ca
mi chiu ca mng khai bo cho ng, c th hi d ra mt t, nhng d
nhiu qu s tn b nh, cn khai bo thiu th khi chy chng trnh s pht
sinh li lgic.
- Ch s mng: Hy kim tra tng ch s, c bit nhng ch s l biu
thc s hc, tin chc rng n l s nguyn nm trong gii hn ng n,
khng vt ra ngoi khong bin thin ca ch s. Nu ch s mng vt ra
ngoi gii hn cho php th hy xem cc bin trong biu thc s hc tnh ch
s c b nhm khng. C th dng lnh in ln mn hnh theo di din bin
ca ch s.
- Vng lp DO: Nu bn dng ch s mng lm tham s m ca vng
lp DO, hy tin chc rng bn s dng ng tn bin trong chng trnh
ca bn. Th d, nu trong mt vng lp DO vi mng ba chiu bn nh cho
ch s th ba ca mng (K) bin thin, hy kim tra xem bn c dng I thay v
K khng. Li thng gp l ch s o ngc: Hy t hi ch ny cn B (K,
L) hay B (L, K)? Hy c thc v t tn cho ch s. Tp qun chung l s
dng bin I cho ch s th nht, J - th hai v K - th ba; nh vy rt tin li
khi s dng cc vng lp lng nhau v ch s m ca vng lp DO ng thi
l ch s mng.
82

Cu hi v bi tp chng 5
1. File d liu vi n v file 9 cha 28 s liu lng ma ngy trong bn
tun l lin tip, ghi thnh 4 dng, mi tun mt dng. Nhm lnh sau
REAL dmua (28)
DO i = 1, 28
READ (9, *) dmua (i)
END DO

c c ng cc s liu lng ma ng vi tng ngy khng. Nu khng


ng, ch ra phng n c ng.
2. Vit chng trnh cho php c t bn phm ba s nguyn, kim tra
xem ba s nguyn c th ch ngy, thng, nm hp l khng. Kt qu kim
tra ghi thnh dng thng bo thch hp ln mn hnh.
3. Vit chng trnh c mt chui Y gm 20 gi tr thc t file EXPER,
trong mi gi tr ghi trn mt dng. Lp mt chui Z gm 20 gi tr tha
mn cc iu kin:
Z 1 = Y1; Z 20 = Y20 ; Z i =

Yi 1 + Yi + Yi +1
(i = 2..19)
3

In chui xut pht v chui mi cnh nhau thnh bng hai ct.
4. Vit chng trnh dc file RAIN cha bng d liu lng ma gm 12
dng (mi dng tng ng mt thng) v 5 ct (mi ct tng ng mt nm
trong cc nm 1978-1982). Xc nh v in bng thng tin sau y:
LUONG MUA TRUNG BINH
1978 - XXX.XX
1979 - XXX.XX
1980 - XXX.XX
1981 - XXX.XX
1982 - XXX.XX
LUONG MUA CUC DAI
THANG XX NAM XXXX
LUONG MUA CUC TIEU
THANG XX NAM XXXX

5. File d liu tn l SCS1.TEM ghi s liu v trng nhit nc bin


trung bnh thng 1 vng bin ng c quy cch ghi nh sau:
- Dng th nht gm tun t cc tham s: kinh tuyn bin pha ty, kinh
tuyn bin pha ng, v tuyn bin pha nam, v tuyn bin pha bc (cc s
thc) ca vng, bc li theo phng ty ng, bc li theo phng bc
nam (o bng pht, cc s nguyn) ca li.
- Dng th hai ghi kch thc ca ma trn s liu (cc s nguyn) theo
dng (phng bc nam), theo ct (phng ty ng), theo chiu su t mt
bin xung di v mt s nguyn 32767 ch gi tr khuyt ca s liu nhit
.
- Phn cn li gm: mt s nguyn ch tng su quan trc (mt) ghi mt
83

dng; sau l mng s liu nhit ng vi tng ghi thnh cc dng t


bc xung nam, cc ct t ty sang ng (cc s thc khng dnh nhau). Tip
tc nh vy cho n tng su di cng.
Hy vit chng trnh c d liu, chn ra mt profil nhit cho im
bt k thuc min tnh. Kt qu ghi ln mn hnh nh sau:
KINH DO XXX.XX
VI DO XX.XX
TANG (m)
NHIET DO
XXXX
XX.XX
XXXX
XX.XX
.....

6. Cho file d liu SCS1.TEM m t trong bi tp 5. Hy vit chng


trnh c d liu v tnh cc gi tr nhit trung bnh ca tng tng quan trc
v gi tr nhit trung bnh ton bin k t tng mt cho ti tng quan trc
di cng.
7. Cho file d liu SCS1.TEM m t trong bi tp 5. Hy vit chng
trnh c d liu v in ra file SECT17.TEM mt bng s liu nhit nc
ca mt ct dc v tuyn 17N vi quy cch nh sau:
- Dng trn cng l tiu :
"Phn b nhit nc trn mt ct dc v tuyn 17".
- Dng th hai lit k cc kinh t ty sang ng.
- Cc dng tip di ghi su tng quan trc mi u dng tng
ng, sau l cc gi tr nhit nc (ly n hai ch s thp phn) ghi
thng ct vi nhng kinh tng ng lit k dng th hai. Nhng gi tr
khuyt (32767) ghi bng s 99.99 hoc nm du hoa th (*****).

84

Chng 6 Chng trnh con loi hm


Khi xy dng chng trnh gii mt bi ton tng i phc tp, ta s
thy chng trnh thng di v kh c. Nhiu khi cng mt s thao tc nh
nhau c thc hin lp li mt s ch trong mt chng trnh cng lm cho
chng trnh tr thnh di hn. Nhng vn ny c th khc phc bng cch
s dng nhng chng trnh con (subprogram) - l mt nhm cc lnh c
vit tch ring ra v sau s c gi thc hin khi cn trong chng trnh.
Trong Fortran c hai loi chng trnh con: chng trnh con loi hm
(function) v chng trnh con loi th tc (subroutine). Trong mc 1.4
gii thiu v thnh thong chng ta s dng mt vi hm chun hay hm
ring ca Fortran. Th d, khi tnh sin ca mt gc ta dng hm SIN, khi cn
gi tr tuyt i ca mt i lng ta dng hm ABS... Nhng hm ny thc
cht cng l nhng chng trnh con, nhng chng c xy dng sn
(hm chun) v nm trong b bin dch, chng ta ch vic gi trc tip trong
chng trnh khi cn.
Mt hm tnh ra mt gi tr, th d cn bc hai ca mt s hay gi tr
trung bnh ca mt mng. Fortran c rt nhiu hm chun (xem danh sch cc
hm chun trong ph lc 1).
Ta nhc li nhng c im chnh ca cc hm chun:
1) Tn hm v cc gi tr u vo (cc i s) cng th hin mt gi tr.
2) Mt hm khng th c s dng v tri ca du = trong mt lnh
gn.
3) Tn ca hm chun xc nh kiu d liu ca u ra ca hm. Th d,
nu tn bt u bng mt trong cc ch ci t I n N th gi tr hm l s
nguyn.
4) Cc i s ca hm thng cng kiu nh hm, tr mt s ngoi l
(xem ph lc 1).
5) Cc i s ca mt hm phi nm trong cp du ngoc n.
6) Cc i s ca mt hm c th l cc hng, bin, biu thc hay cc
hm khc.
7) Cc hm t sinh (generic function) chp nhn nhiu kiu i s v tr
li gi tr hm cng kiu vi i s. (Th d hm ABS(X) nu i s X l s
nguyn th gi tr hm ABS(X) cho ra gi tr tuyt i l s nguyn, nu X
thc th gi tr hm s l thc.)
85

6.1 Cc hm chng trnh con


Trong thc t lp trnh gii cc bi ton khoa hc k thut nhiu khi i
hi nhng hm cha c trong danh sch cc hm chun ca Fortran. Nu tnh
ton hay lp li thng xuyn v i hi mt s bc, ta nn thc hin nh l
mt hm thay v mi ln cn li phi vit ra cc lnh tnh ton. Fortran cho
php chng ta t xy dng nhng hm ca ring mnh theo hai cch: hm lnh
(statement function) v hm chng trnh con (function subprogram). Nu
tnh ton c th vit bng mt lnh gn duy nht, th ta s dng hm lnh;
ngc li, nu phi thc hin nhiu tnh ton hay thao tc mi dn ti mt gi
tr kt qu, th ta dng hm chng trnh con.

6.1.1 Hm lnh
Dng tng qut ca hm lnh l
Tn hm (Danh sch i s) = Biu thc

Nhng quy tc phi tun th khi vit v dng hm lnh:


1) Hm lnh c nh ngha u chng trnh, cng vi cc lnh khai
bo kiu d liu.
2) nh ngha hm lnh gm tn ca hm, sau n cc i s nm
trong cp du ngoc n v bn tri ca du bng; biu thc tnh gi tr hm
v bn phi ca du bng.
3) Tn hm c th khai bo trong lnh khai bo kiu; nu khng th kiu
ca hm s c xc nh theo cch nh kiu n.
Th d 22: Din tch ca tam gic c th tnh theo hai cnh v gc xen
gia chng:
Din tch = 0,5 cnh 1 cnh 2 sin (gc) .

Vit chng trnh c di ba cnh ca mt tam gic v cc gc i


din mi cnh. Tnh v in din tch ca tam gic theo ba phng n: trong mi
phng n s dng mt cp cnh v gc tng ng.
Trong bi tp ny ta phi tnh din tch tam gic ba ln, do c th dng
hm lnh tnh din tch tam gic. Chng trnh c th nh sau:
PROGRAM Dttg
REAL ca, cb, cc, a, b, c, dt, dt1, dt2, dt3, c1, c2, goc
Dt (c1, c2, goc) = 0.5 * c1 * c2 * SIN (goc)
PRINT *, ' Nhap ba canh tam giac theo thu tu sau:'
PRINT *, ' Canh A Canh B Canh C'
READ *, ca, cb, cc
PRINT *, ' Nhap ba goc (radian) theo thu tu sau:'
PRINT *, ' Doi dien: canh A canh B canh C'
READ *, a, b, c
dt1 = Dt (cb, cc, a)
dt2 = Dt (cc, ca, b)

86

dt3 = Dt (ca, cb, c)


PRINT *
PRINT *, 'Cac dien tich tinh theo ba phuong an la:'
PRINT 5, dt1, dt2, dt3
5 FORMAT (1X, 3F7.2)
END

Nhn xt rng trong chng trnh ny hm tnh din tch tam gic c
nh ngha u chng trnh bi tn DT v ba i s hnh thc C1, C2, GOC
v gi tr ca hm c tnh ch bng mt lnh gn (dng lnh th ba). Trong
chng trnh, cc dng lnh th 1012 ta gi hm ba ln, mi ln ta chuyn
cc bin khc nhau vo v tr ca cc i s hnh thc. Kiu d liu ca hm
DT c m t tng minh ti lnh m t REAL u chng trnh. Trong
chng trnh chnh cc gc c cho bng raian. Nu cc gc nhp vo c
cho bng v khng cn chuyn i thnh raian trc khi gi hm DT
tnh cc din tch, ta c th nh ngha li hm DT nh sau:
Dt(c1, c2, goc) = 0.5*c1*c2*SIN (goc * 3.14159 / 180.0)

6.1.2 Hm chng trnh con


Hm loi ny khc vi hm lnh ch n c tnh khng phi bng mt
lnh gn duy nht m bng mt s lnh. Hm chng trnh con bt u vi
lnh khng thc hin c t hm bng mt tn v mt danh sch i s nh
sau
FUNCTION Tn hm (danh sch i s)
Sau cc lnh m t v tnh ton, lnh RETURN chuyn iu khin v
chng trnh chnh v lnh END bo cho chng trnh dch s kt thc ca
chng trnh con. Tn hm c chn theo quy tc nh tn hng, tn bin ca
Fortran. Tn hm c ngha m t n kiu gi tr ca hm nu trong chng
trnh chnh cha khai bo tng minh. Trong danh sch i s nu c t hai
i s tr ln th cc i s cch nhau bi du phy. Tn cc i s cng c
ngha m t n kiu d liu ca i s. Tuy nhin, nn m t tng minh cc
i s ca hm trong phn khai bo cc bin ca hm. Trong phn khai bo
ny, ngoi cc i s cn c th khai bo cc bin khc c dng ch trong
ni b hm chng trnh con. Vy hnh dng tng qut ca mt hm chung
trnh con nh sau:
FUNCTION Tn (i s 1, i s 2, ...)
Cc lnh m t cc i s, cc bin cc b
Cc lnh thc hin
RETURN
END

Cc hm chng trnh con c vit tch ra khi chng trnh chnh v


nm sau lnh END ca chng trnh chnh. Trong chng trnh chnh, khi cn
ti hm con ngi ta thng dng lnh gn gn gi tr tnh c bi hm
87

con vo mt bin hoc dng trc tip tn hm con trong cc biu thc. Nhng
gi tr ca cc i s thc t gi vo cc i s hnh thc phi ph hp v kiu
v ng tun t nh trong danh sch i s. Ta xt th d v xy dng hm
con v cch dng n trong chng trnh chnh qua th d 24 di y.
Th d 23: Cc m hnh s thng tnh ra cc gi tr ca cc thnh phn
kinh hng Vk v v hng Vv ca tc gi nhng im khc nhau. T
nhng cp gi tr thnh phn kinh hng v v hng cn tnh ra tc V v
hng gi d . Tc gi tnh bng cng thc
V = Vk2 + Vv2 ,

cn hng gi (gc gia vect gi v hng bc) tnh theo cng thc
khi

180 khi

d =
180 + khi
360 khi

trong =

180

arctg

Vv 0, Vk > 0
Vv 0, Vk < 0
Vv < 0, Vk < 0
Vv < 0, Vk > 0

Vv
.
Vk

Gi s cc gi tr ca cc thnh phn kinh hng v v hng ca tc


gi lu trong file GIOKV.KQ1 thnh hai ct, dng u tin ca file ghi s
dng d liu c trong file. Vit chng trnh c file GIOKV.KQ1 v ghi kt
qu tnh tc v hng gi vo file mi GIO.KQ2 thnh 4 ct dng sau:
TT
XX
XX
...

Vk

Vv

XX.X
XX.X

XX.X
XX.X

m/s
XXX
XXX

HUONG
XXX
XXX

Khi lp chng trnh gii quyt nhim v ny, ta nhn thy cn tnh m
un ca tc gi v hng gi nhiu ln. Vy c th s dng cc hm, ngoi
ra, tnh tc gi c th dng loi hm lnh, tnh hng gi dng hm
chng trnh con. Chng trnh c th nh sau:

REAL giok (200), giov (200), v, h, tocdo, huong


INTEGER i, n
M t hm lnh tnh m un tc gi
Tocdo (vk, vv) = SQRT (vk*vk+vv*vv)
OPEN (1, FILE = 'GIO.KQ1', STATUS = 'OLD')
READ(1,*) n
DO i = 1, n
READ(1,*) giok (i), giov (i)
END DO
CLOSE (1)
OPEN (1, FILE = 'GIO.KQ2', STATUS = 'UNKNOWN')
WRITE (1, 4) TT, VK, VV, M/S, HUONG
FORMAT(1X, I3, 4F7.1)
DO i = 1, n

88

5
C

v = Tocdo (giok (i), giov (i))


h = Huong (giov (i), giok (i))
WRITE (1, 5) i, giok (i), giov (i), v, h
FORMAT (1X, I3, 4F7.1)
END DO
END
Hm chng trnh con
FUNCTION Huong (vv, vk)
REAL vv, vk, hg
IF (vk .EQ. 0.0) THEN
IF (vv .GE. 0.0) THEN
hg = 90.0
ELSE
hg = 270.0
ENDIF
ELSE
g = ATAN (ABS (vv / vk)) / 3.14159 * 180.0
IF (vk .GT. 0.0) THEN
IF (vv .GE. 0.0) THEN
hg = g
ELSE
hg = 360.0 g
ENDIF
ELSE
IF (vv .GE. 0.0) THEN
hg = 180.0 g
ELSE
hg = 180.0 + g
ENDIF
ENDIF
ENDIF
Huong = hg
RETURN
END

Trong th d ny, ta thy vic tnh m un tc v hng c thc


hin nhiu ln. Do t chc tnh chng trong cc hm. V gi tr m un
tnh n gin bng mt biu thc nn dng loi hm lnh, l hm
TOCDO c nh ngha dng lnh th ba ca chng trnh chnh. Vic
tnh hng phi thc hin nh mt s php tnh v thao tc, do dng loi
hm chng trnh con HUONG. Kiu d liu ca hai hm ny c khai bo
tng minh phn khai bo trong chng trnh chnh.
Th d 24: c lng nghim ca a thc bc 4
f ( x) = a0 + a1 x + a2 x 2 + a3 x 3 + a4 x 4

trn khong [5, 5].


gii bi ton ny, ta s dng hai phng php tm nghim ca phng
trnh l phng php tm hp dn v phng php chia i.
89

Trong phng php tm hp dn, min tm nghim c chia thnh


nhng khong nh sao cho thc t c th xem rng trong mt khong no
ch c mt nghim. Xt cc khong t tri sang phi, ta s tm nhng ch
m th ca a thc ct trc x : bng cch tnh cc gi tr ca a thc ti cc
u mt ca khong, nu du ca cc gi tr ca a thc ti cc u mt khc
nhau, th th ct trc x v t nht c mt nghim trong khong . Sau
khong cha nghim li c chia tip thnh cc ph khong nh hn v qu
trnh tm li bt u t u tri cho n khi xc nh c khong cha
nghim. Qu trnh chia khong v tm lp li cho n khi nghim c xc
nh chnh xc.
Phng php chia i bt u vi mt khong c bit l cha mt
nghim. Khc vi phng php tm hp dn chia khong cha nghim thnh
nhiu ph khong trc khi tm, phng php chia i ch chia khong cha
nghim thnh hai na, sau xc nh na no cha nghim. S chia i tip
tc cho n khi tm c nghim vi chnh xc mong mun.
Trong th d ny, ta kt hp hai phng php: phng php tm hp dn
xc nh khong cha nghim. Sau phng php chia i xc nh
nghim vi chnh xc cn thit. Gi s phng php chia i tip tc lp
cho n khi na khong nh hn 0,01 v nghim tm c nu gi tr tuyt i
ca a thc khng ln hn 0,001.
INTEGER i, n
REAL a (0 : 4)
REAL trai, phai, giua, khoang, nghiem
LOGICAL xong
PRINT * , ' NHAP CAC HE SO A0, A1, A2, A3, A4 '
READ*, a
PRINT 5, a
5 FORMAT (/, ' DA THUC:'
* / 1X, 9X, '4', 11X, '3', 11X, '2' / 1X, 4(F7.3, ' X + '), F7.3)
n=0
DO i = 1, 40
trai = 5.0 + REAL (i-1) * 0.25
phai = trai + 0.25
IF (ABS(f (a, trai)) .LT. 0.001) THEN
PRINT 15, trai, f (a, trai)
15
FORMAT (1X, 'NGHIEM = ', F7.3, 3X, 'F(NGHIEM) = ', F7.3)
n=n+1
ELSE IF (f (a, trai) * f (a, phai) .LT. 0.0) THEN
xong = .FALSE.
khoang = phai trai
20
IF (khoang .GT. 0.01 .AND. .NOT. xong) THEN
giua = 0.5 *(trai + phai)
IF (ABS (f (a, giua)) .LT. 0.001) THEN
xong = .TRUE.
ELSE IF (f (a, giua) * f(a, trai) .LT. 0.0) THEN
phai = giua

90

ELSE
trai = giua
END IF
khoang = phai trai
GOTO 20
END IF
IF (khoang .GT. 0.01) THEN
nghiem = giua
ELSE
nghiem = 0.5 *(trai + phai)
END IF
PRINT 15, nghiem, f (a, nghiem)
n=n+1
END IF
END DO
trai = 5.0
IF (ABS (f (a, trai)) .LT. 0.001) THEN
PRINT 15, trai, f (a, trai)
n=n+1
END IF
IF (n .EQ. 0) THEN
PRINT *, ' KHONG NGHIEM TRONG KHOANG [-5,5]'
END IF
END
REAL FUNCTION F (a, x)
REAL a (0 : 4), x
F = a(0) + a(1) * x + a (2) * x**2 + a (3) * x**3 + a (4) * x**4
RETURN
END

Trong chng trnh ny, ta chia min tm nghim [5, 5] thnh 40


khong, mi khong di 0,25 v thc hin vic kim tra t tri sang phi xem
trong nhng khong no c th c nghim bng phng php tm hp dn
bng vng DO. Trong mi khong, nu gi tr a thc u mt tri ca
khong khng khc khng qu 0,001 th nhn nghim bng u mt tri v
chuyn sang xt khong tip sau bn phi. Cn nu gi tr a thc hai u
mt ca khong ang xt khc du, th ta tm nghim theo phng php chia
i. Qu trnh lp lin tip chia i khong thc hin bng vng lp IF
lgic v lnh GOTO v iu kin cho n khi khong tr nn nh hn hoc
bng 0,01 hoc gi tr tuyt i ca a thc gia khong khng ln hn
0,001. Vic tnh gi tr a thc thc hin nhiu ln vi nhng gi tr x khc
nhau nn ta t chc hm F chuyn lm vic ny.
Th d 25: Vit chng trnh c lin tip t bn phm ba s nguyn,
kim tra xem chng c tun t ch ngy thng nm hp l khng v in ra
thng bo ph hp. Chng trnh kt thc khi ta nhp ngy thng nm u l
nhng s khng.
PROGRAM KTngay
INTEGER id, im, iy

91

10

PRINT *, 'HAY NHAP BA SO NGUYEN'


READ *, id, im, iy
IF (id .NE. 0 .AND. im .NE. 0 .AND. iy .NE. 0) THEN
IF (okdate (id, im, iy)) THEN
PRINT*, 'CO THE LA NGAY THANG NAM HOP LY'
ELSE
PRINT*, KHONG THE LA NGAY THANG NAM HOP LY
ENDIF
GOTO 10
ENDIF
END
INTEGER FUNCTION sntt (m, y)
INTEGER m, y
IF (m. EQ. 2) THEN
sntt = 28
IF ((MOD (y,100) .NE. 0 .AND. MOD (y,4) .EQ. 0) .OR.
(MOD (y,100) .EQ. 0 .AND. MOD (y/100, 4) .EQ .0)) sntt = 29
*
ELSE IF (m.EQ.4 .OR. m.EQ.6 .OR. m.EQ.9 .OR. m.EQ.11) THEN
sntt = 30
ELSE
sntt = 31
ENDIF
RETURN
END
LOGICAL FUNCTION okdate (d, m, y)
INTEGER d, m, y, ngay
ngay = sntt (m, y)
okdate = d.GE.1.AND.d.LE.ngay.AND.m.GE.1.AND.m.LE.12
RETURN
END

Trong chng trnh ny dng hai hm con: hm OKDATE v hm


SNTT. Hm OKDATE c ba i s nguyn D, M, Y v a ra gi tr lgic l
.TRUE. nu D, M, Y l nhng s nguyn ch ngy thng hp l. Hm SNTT
c hai i s nguyn v a ra gi tr nguyn l s ngy ca thng ang xt.
Nhn thy rng chng trnh chnh gi hm con OKDATE, v phn mnh hm
con OKDATE trong khi thc hin li gi hm con SNTT.

6.2 quy
Tnh cht quy cho php mt hm chng trnh con c th gi chnh
n. Ta xt cch xy dng mt hm quy qua th d tnh giai tha ca mt s
nguyn.
Th d 26: Vit chng trnh nhp mt s nguyn, in ra giai tha ca s
nguyn .
INTEGER n, ifact
PRINT '(A,\)', 'NHAP SO NGUYEN: '
READ *, n

92

PRINT 4, n, ifact (n)


4 FORMAT (I4, ! = , I10
END
RECURSIVE FUNCTION Ifact (n) RESULT (fav)
INTEGER fav, n
IF (n.LE.1) THEN
fav = 1
ELSE
fav = n * ifact (n - 1)
ENDIF
RETURN
END

6.3 Ch dn g ri v phong cch vit chng trnh c


hm con
Kim tra s lm vic ng n ca hm t xy dng cng ging nh
kim tra chng trnh chnh. Nn th cho hm con nhng gi tr i s khc
nhau xem n c a ra gi tr hm ng n khng. Nu hm con lm vic
khng ng n, hy kim tra nhng im sau:
1) S ph hp v kiu v th t ca i s thc t v i s hnh thc.
2) Khng nh rng trc lnh RETURN hm nhn mt gi tr ng.
3) In kim tra gi tr cc i s trc v sau khi gi hm con.
4) C th dng lnh PRINT trong hm con nh v li trong hm con.
S dng hm lnh v hm chng trnh con s lm chng trnh c tnh
cu trc hn v d c. Trong chng trnh con cng nn c cu trc sng r.
Nu hm di v kh c, hy dng hm con khc trong hm con. Mt khi bn
quyt nh dng hm con, hy cn nhc nhng iu sau y:
1) Chn tn hm con sao cho tn c tnh gi nh.
2) Nn dng tn cc i s hnh thc trong hm con trng vi tn ca cc
i s thc t. Nu hm c dng nhiu ln vi nhng i s thc t khc
nhau, th hy chn tn i s hnh thc hon ton khc trnh s nhm ln
vi cc bin ca chng trnh chnh. C th cch sau y l mt cch nn
c dng: tn cc i s trong hm con t bng cc t ting Anh, cn tn
cc i s thc t - bng cc t tng ng ca ting Vit.

Cu hi v bi tp chng 6
1. Vit chng trnh in gi tr cc biu thc sau:
=

6,9 + y
y2 + 1 + 2 y + 3y2

93

=
=
=

sin y
y + 1 + 2 y2 + 3y4
4

2,3 z + z 4
z 2 + 1 + 2 z + 3z 2
1

sin 2 y + 1 + 2 sin y + 3 sin 2 y

trong chng trnh hy xy dng hm con tn l DENOM vi i s


tnh biu thc

chuyn

x 2 + 1 + 2 x + 3x 2 .

2. Hy ci tin chng trnh tm nghim ca a thc th d 25 sao cho


n cho php ngi dng nhp khong xc nh nghim thay v dng khong
[5, 5].
3. Hy ci tin chng trnh tm nghim ca a thc th d 25 sao cho
n cho php ngi dng nhp kch thc ca ph khong trong phn tm hp
dn.
4. Csin ca mt gc tnh theo cng thc chui
cos x = 1

x2 x4 x6
+
+ ...
2! 4! 6!

trong x tnh bng raian. Hy vit hm chng trnh con COSX vi u


vo l gc tnh bng , tnh ra csin ca gc vi chnh xc 0,000001,
s dng hm con tnh giai tha bi tp 4. Sau vit chng trnh chnh in
bng ba ct: ct th nht ( x ) cha gc t 0 n 360 vi gia s 15; ct th
hai cha csin ca gc tnh theo hm chun COS ca Fortran v ct th ba
cha csin tnh theo hm con COSX.
5. Vit hm chng trnh con MEDIAN (X,N) vi u vo l mng
REAL X(N) sp xp tng hoc gim dn v s gi tr thc t ca mng N,
tr v gi tr ca trung v ca chui x(n) theo nh ngha:
n
- nu n l trung v bng x +1 ,

2
x (n / 2) + x (n / 2 + 1)
- nu n chn trung v bng
.
2

6. Vit hm chng trnh con DAD (D1, M1, Y1, D2, M2, Y2) vi 6 i
s hnh thc kiu s nguyn: D1, M1, Y1, D2, M2, Y2 ln lt ch ngy,
thng, nm ca hai ngy bt k. Hm ny s c gi tr lgic bng .TRUE. nu
ngy D2, M2, Y2 l ngy mun hn ngy D1, M1, Y1, cn nu khng th n
s c gi tr .FALSE.. Sau hy vit mt chng trnh chnh cho php ta
nhp t bn phm mt ngy bt k trong qu kh hoc trong tng lai, xc
nh v in ln mn hnh th trong tun ca ngy . Bit rng ngy 1-1-2001
l ngy th hai.
94

Chng 7 Chng trnh con loi th tc


Trong chng 6 chng ta nghin cu v cc hm chun, cc hm lnh
v cc hm do ngi lp trnh t xy dng. Trong khi mt hm ch gii hn
vic tnh ra mt gi tr, th cc th tc chng trnh con (hay cn gi l th tc
do ngi lp trnh t xy dng) c th tnh ra mt s gi tr, hoc thc hin
mt s thao tc. Trong chng ny ta hc cch vit cc th tc v s dng cc
th tc trong cc bi ton ng dng.

7.1 Khai bo v gi chng trnh con th tc


Nhiu quy tc vit v s dng cc th tc chng trnh con ging nh cc
quy tc i vi cc hm chng trnh con. Di y lit k nhng khc bit
gia cc th tc v cc hm.
1) Mt th tc khng biu din mt gi tr, do tn ca n ch l i
din cho mt on chng trnh, khng ch nh kiu ca d liu u ra.
2) Dng lnh u tin trong mt th tc thng bo tn th tc v danh
sch i s
SUBROUTINE Tn th tc (danh sch i s)
3) Chng trnh chnh gi mt th tc bng lnh CALL c dng tng
qut nh sau:
CALL Tn th tc (danh sch i s)
4) Th tc dng danh sch i s khng ch cho u vo m c cho
nhng gi tr gi ra chng trnh chnh gi n. Cc i s ca th tc c
dng trong lnh CALL l nhng i s thc t, cn cc i s s dng trong
th tc l nhng i s hnh thc. Cc i s trong lnh CALL phi ph hp
v kiu, s lng v th t vi nhng i s trong th tc.
5) Mt th tc c th tnh ra mt gi tr, nhiu gi tr hoc khng gi tr
no c. Mt th tc c th s dng mt gi tr u vo, nhiu gi tr u vo
hoc khng c gi tr u vo.
6) Nhn lnh, tn bin trong th tc c chn c lp vi chng trnh
chnh. Nhng bin dng trong th tc m khng phi l cc i s ca th tc
gi l cc bin cc b, cc gi tr ca chng khng x l c trong chng
trnh chnh.
7) Cn c bit thn trng khi s dng cc mng nhiu chiu trong cc
th tc. Nn ch nh c kch thc khai bo v kch thc s dng thc t vi
95

cc mng hai hoc nhiu chiu.


8) Ging nh cc hm, lnh RETURN cui cc th tc dng chuyn
iu khin tr v chng trnh chnh, lnh END bo kt thc th tc.
9) Trong lu khi cc thao tc c thc hin bn trong th tc c
k hiu bng biu tng ha sau y:

10) Mt th tc c th dng cc hm con khc hoc gi cc th tc khc,


nhng n khng th t gi chnh n. (Trong Fortran 90 cho php dng cc th
tc quy c th t gi chnh mnh.)

7.2 Nhng th d ng dng chng trnh con th tc


Nhng th d di y gip chng ta hc cch vit cc th tc v s dng
n trong chng trnh chnh nh th no.
Th d 27: Chng trnh tnh cc c trng thng k: trung bnh,
phng sai v lch chun ca chui x gm n s liu quan trc. Cc cng
thc sau tnh nh sau:
n

mx =

x
i =1

Dx =

x
i =1

2
i

n 1

n
mx2 ,
n 1

x = Dx .

Ta thy rng mi i lng trn c th tnh c bng mt hm ring


bit. Nhng ta cng c th tnh lun mt lc c ba i lng bng cch t
chc tnh chng trong mt th tc. Chng trnh di y cho php c vo
kch thc n v cc gi tr ca chui x . Sau gi th tc STAT tnh cc
c trng thng k. Cui cng l in ra kt qu.
Thy rng th tc STAT c tt c 5 i s hnh thc, trong hai i s
u vo l mng mt chiu X v kch thc mng N, ba i s u ra l
AVER, VARI v STDV. Khi gi th tc ny trong chng trnh chnh, ta gi
vo cc i s thc t l X, N, TBINH, PSAI v DLC. Kt qu tnh trung
bnh, phng sai v lch chun trong th tc chng trnh con c lu
vo cc bin TBINH, PSAI, DLC ca chng trnh chnh. Hy ch rng: v
th tc chng trnh con l mun c lp, nn tn cc i s ca n c th
trng vi tn ca cc bin trong chng trnh chnh, trong th d ny l i s
X v N. y ta thy, trong chng trnh con, c th nh ngha kch thc
ca mng bng bin N (trong lnh REAL X(N)). Nh rng iu ny ch cho
php trong chng trnh con.
PROGRAM Thke
INTEGER n, i

96

REAL x (99), tbinh, psai, dlc


PRINT *, ' NHAP DO DAI CHUOI (<100)'
READ *, n
PRINT *, ' NHAP CAC GIA TRI CUA X:'
FORMAT (1X, ' X(', I2, '): ')
DO i = 1, n
WRITE (*, 5) i
READ *, x (i)
ENDDO
CALL Stat (x, n, tbinh, psai, dlc)
WRITE(*, 8) tbinh, psai, dlc
FORMAT (1X, ' T. BINH = ', F7.2, ' PH. SAI = ', F7.2, ' DL CHUAN = ', F7.2)
END
SUBROUTINE Stat (x, n, aver, vari, stdv)
REAL x (n), aver, vari, stdv
INTEGER n, i
aver = 0.0
vari = 0.0
DO i = 1, n
aver = aver + x (i)
vari = vari + x (i) * x (i)
END DO
aver = aver / n
n1 = n -1
vari = vari / n1 n * aver * aver / n1
stdv = SQRT (stdv)
RETURN
END

Th d 28: X l ngy thng. Trong thc t x l s liu quan trc, ta


thng hay phi n ngy thng ca s liu. Trong mc ny s xt mt
th d v x l ngy thng: Vit chng trnh nhp vo mt ngy thng nm
bt k, in ra ngy thng nm ca ngy hm sau. Vic xc nh ngy thng nm
ca ngy hm sau so vi ngy thng nm hin ti s c thc hin trong mt
chng trnh con th tc, ta gi tn l th tc HOMSAU. V y kt qu s
cho ra ba gi tr nguyn tun t ch ngy, thng v nm. Chng trnh c th
nh sau:
PROGRAM TGNGAY
INTEGER id, im, iy
PRINT *, 'HAY NHAP NGAY THANG NAM BAT KY'
READ *, id, im, iy
CALL Homsau (id, im, iy)
PRINT 20, id, im, iy
20 FORMAT (1X, 'NGAY HOM SAU LA ', I2, '', I2 , '', I4)
END
SUBROUTINE Homsau (d, m, y)
INTEGER d, m, y
d=d+1
IF (d .GT. sntt (m, y)) THEN

97

d=1
m=m+1
IF (m .GT. 12) THEN
m=1
y=y+1
END IF
END IF
RETURN
END
INTEGER FUNCTION Sntt (m, y)
INTEGER m, y
IF (m .EQ. 2) THEN
sntt = 28
IF ((MOD(y,100) .NE. 0 .AND. MOD(y,4) .EQ. 0) .OR.
(MOD (y,100) .EQ. 0 .AND. MOD (y/100, 4) .EQ .0)) sntt = 29
*
ELSE IF (m.EQ.4.OR.m.EQ.6.OR.m.EQ.9.OR.m.EQ.11) THEN
sntt = 30
ELSE
sntt = 31
ENDIF
RETURN
END

Cc thao tc chuyn thnh hm sau c thc hin trong chng trnh


con loi th tc HOMSAU. Hy ch rng trong th tc con HOMSAU li
gi thc hin mt hm con khc l SNTT tnh s ngy ca thng ang xt.
Hm ny c nhc ti th d 26, y ghi li sinh vin tin theo di.
Di y ta xt mt th d v x l s liu kh tng c lin quan ti
ngy thng.
Th d 29: Tnh cc gi tr trung bnh thng ca mt yu t kh tng
thy vn. Gi s vi file d liu v cc yu t kh tng thy vn m t
trong th d 20.
Nh li rng file HONDAU.MAT c quy cch ghi nh sau: Dng trn
cng ghi tn trm. Dng th 2 c hai s nguyn vit cch nhau ln lt ch
tng s ngy quan trc v s yu t c quan trc. Dng th ba c 6 s
nguyn vit cch nhau ln lt ch ngy, thng, nm u v ngy, thng, nm
cui quan trc. Dng th 4 l tiu ct lit k tn tt c cc yu t c quan
trc, mi tn c ghi vi rng 8 v tr. Cc dng tip theo ln lt ghi gi
tr ca cc yu t, mi dng mt ngy. Cc gi tr ngy ca nhit khng kh
c ghi ct th hai ca file ny. Vit chng trnh tnh gi tr trung bnh
thng ca nhit khng kh trong tt c cc nm quan trc.
y ta thy, mun tnh trung bnh thng ch vic cng tt c cc gi tr
ngy v chia tng cho s ngy ca thng ang xt. Nhng v s ngy trong
mi thng c th khc nhau, nn ta cn c nhng th tc x l ngy thng.
Chng trnh sau y s thc hin kiu x l nh vy.
REAL x, tong, tb (100, 12)

98

INTEGER d1, m1, y1, d2, m2, y2, y, m, i


OPEN (1, FILE = HONDAU.MAT, STATUS = OLD)
READ (1, *)
READ (1, *) n
READ (1, *) d1, m1, y1, d2, m2, y2
READ (1, *)
y = y1
i=1
2 IF (y1 .GT. y2) GOTO 4
READ (1, *) x, x
IF (d1 .EQ. 1) THEN
tong = 0.0
m = sntt (m1, y1)
END IF
tong = tong + x
IF (d1 .EQ. m) THEN
tb (i, m1) = tong / m
IF (m1.EQ.12) i = i + 1
END IF
CALL homsau (d1, m1, y1)
GOTO 2
4 CLOSE (1)
PRINT *, NHIET DO KHONG KHI TRUNG BINH THANG
PRINT (A5, 12I5), NAM, (j, j = 1, 12)
k=1
DO i = Y, Y2
PRINT (A5, 12F5.1), i, (tb (k, j), j =1, 12)
k=k+1
END DO
END

Ta thy trong chng trnh ny s dng hm SNTT v th tc


HOMSAU m chng ta xy dng trong th d 28. Hm SNTT c gi vo
mi ngy u thng tnh s ngy ca thng v gn vo bin M chun b
cho vic tnh trung bnh sau khi gi tr nhit ngy cui cng ca thng c
cng vo bin TONG. Cn th tc HOMSAU c gi lin tc tng ngy
hin hnh ln mt ngy sau khi mt s liu c c.
Qua th d 20 v th d ny, sinh vin cng cn ch ghi nh cch c s
liu kiu b qua mt s ct trong file cha bng s liu c nhiu ct.
Di y l hai th d lin quan ti cc th tc thao tc chui thng c
th rt c ch trong thc tin x l thng k chui s liu kh tng thy vn.
Th d 30: Chn mt gi tr vo danh sch. Trong th d ny, ta vit mt
th tc cho php chn mt gi tr mi vo mt danh sch sp xp. Cc i
s ca th tc gm mng mt chiu X, bin COUNT ch s gi tr d liu thc
t trong mng, bin LIMIT cha kch thc m t ca mng v bin NEW
cha gi tr cn chn vo mng. Trng hp phn t mi c chn vo mng
y, tc gi tr COUNT bng gi tr LIMIT th gi tr cui cng trong mng
s b ct b.
99

SUBROUTINE Insert (limit, new, count, x)


INTEGER limit, new, count, x (limit), j, k
LOGICAL done
done = .FALSE.
j=1
5 IF (j .LE. count .AND. .NOT. done) THEN
IF (x (j) .LT. new) THEN
j=j+1
ELSE
done = .TRUE.
END IF
GOTO 5
END IF
IF (j .GT. count) THEN
IF (count .LT. limit) THEN
count = count + 1
x (count) = new
END IF
ELSE
IF (count .LT. limit) count = count + 1
DO k = count, j+1, 1
x (k) = x (k 1)
END DO
x (j) = new
END IF
RETURN
END

Th d 31: Xa mt gi tr khi danh sch. Trong trng hp ny, ta tm


trong danh sch gi tr bng gi tr nh xa v loi gi tr khi danh sch.
Khc vi th tc chn, trong th tc xa khng cn i s LIMIT v khi xa
mt gi tr khi danh sch th s phn t thc ca mng ch c th nh i,
khng s ch s mng vt qu kch thc m t ca mng.
SUBROUTINE Delete (old, count, x)
INTEGER old, count, x (count), j, k
LOGICAL done
done = .FALSE.
j=1
5 IF (j .LT. count .AND. .NOT. done) THEN
IF (x (j) .LT. old) THEN
j=j+1
ELSE
done = .TRUE.
END IF
GOTO 5
END IF
IF (j .GT. count .OR. x (j) .GT. old) THEN
PRINT *, 'GIA TRI XOA KHONG CO TRONG DANH SACH'
ELSE

100

count = count - 1
DO k = j, count
x (k) = x (k + 1)
END DO
END IF
RETURN
END

7.3 Nhng ch dn g ri khi s dng cc th tc


1) Kim tra xem cc bin, cc biu thc trong danh sch i s lnh
CALL c ph hp v kiu v th t nh trong lnh khai bo th tc khng.
2) Nn khai bo tng minh tt c cc bin trong th tc trnh nh
kiu ngm nh sai.
3) S dng lnh PRINT trong th tc nh v li.
4) Kim tra th tng th tc trc khi gp chng vo chng trnh chnh
cng vi nhng chng trnh con khc.
5) Kim tra tng th tc vi mt s tp d liu pht hin nhng iu
kin c bit gy li.
6) Phong cch lp trnh:
- Khi quyt nh s dng chng trnh con th tc hy chn tn th tc
sao cho n c tnh gi nh.
- Hy s dng tn cc bin trong danh sch i s ca th tc cng tn
vi cc bin l i s thc t trong chng trnh chnh. Trong trng hp th
tc c gi nhiu ln vi nhng i s thc t khc nhau, hy chn tn trong
danh sch i s khc bit trnh nhm vi cc bin trong chng trnh
chnh.
- Trong danh sch i s, nn lit k ring cc i s u vo trc, sau
mi n cc i s u ra.

Cu hi v bi tp chng 7
1. Gi s c mng mt chiu X vi 100 gi tr thc. Hy vit mt th tc
to ra mng Y theo cch mi phn t ca mng Y bng phn t tng ng ca
mng X tr i phn t nh nht.
2. Vit mt th tc nhn mt mng gi tr thc X vi 50 hng v 2 ct v
tr li chnh mng nhng d liu c sp xp li theo chiu tng dn ca
ct th 2.
3. Vit mt th tc nhn mt mng gi tr thc X vi n dng m ct v tr
v mt mng Y cng s dng, s ct nhng d liu c bin i sao cho cc
phn t tng ng ca ct th nht v ct th J c i ch cho nhau.
101

4. Gi s cho trc hai ma trn A ( n dng, m ct) v ma trn B ( m


dng, l ct). Tch AB s l ma trn C ( n dng, l ct) vi cc phn t c
tnh theo cng thc
m

ci , j = ai ,k bk , j (i = 1, ..., n; j = 1, ..., l ) .
k =1

Vit th tc TICHMT (A, B, N, M, L, C) vi cc i s u vo l ma


trn A , ma trn B , cc tham s N, M, L v i s u ra l ma trn C .
5. H phng trnh i s tuyn tnh n n
a11 x1
a21 x1
...
a n1 x1

+
+

a12 x2
a 22 x2

...
a n 2 x2

+
+

...
...

...
...

+
+

a1n xn
a2 n xn

...
a nn xn

=
=

b1
b2

...
bn

c vit di dng ma trn nh sau


Ax=b

trong

A = (aij ) =

a11
a21
...

a12
a22
...

an1

an 2

... a1n
... a2 n
... ...
... ann

; b =

x=

bn

b1
b2
...

x1

x2
... .

xn

Hy vit th tc GAUSS (A, B, N, X) nhn vo cc mng A, B, s n N


ca h v tnh ra mng X theo phng php loi bin ca Gauss. Xem gii
thch v phng php Gauss trong ph lc 2.

102

Chng 8 Kiu d liu vn bn


Ngoi nhng d liu s nh cc s nguyn, s thc, my tnh cn c th
lu gi v x l nhng d liu vn bn nh nhng ch ci, nhng on vn
bn, nhng ch s v mt s k hiu khc. Trong Fortran gi chung nhng d
liu ny l d liu k t. Trong chng ny chng ta xt thm nhng c im
khai bo nhng d liu k t, mt s thao tc vi nhng d liu k t v ng
dng ca chng trong x l thng tin.

8.1 Tp cc k t ca Fortran
Tp k t ca Fortran gm 26 ch ci ting Anh, mi ch s t 0 n 9,
du trng v 12 k hiu sau y:
+ * / = ( ) , . ' $ :
Ngoi ra cn mt s k t khc ty thuc vo nhng h my tnh khc nhau.
Cc hng k t bao gi cng nm trong cp du nhy trn. Trong hng k
t du nhy trn ' c biu th bng hai du nhy trn (khng phi du
ngoc kp). Th d ch LET'S ca ting Anh s c vit l 'LET''S'.
Thng thng ngi ta x l trong my tnh nhng t, nhng dng ch
gm mt s k t ghp li vi nhau. Trong trng hp ngi ta gi l xu
k t. di ca xu k t l s k t c ghp li trong xu k t . Mt
k t cng c th coi l mt xu k t vi di bng 1. Do , ta gi chung
d liu xu k t l d liu k t hay d liu vn bn. Di y l th d v
cc hng k t v di tng ng ca chng:
'CHU NHAT'
'SENSOR 23'
'08:4013:25'
'LE QUY DON'
' '
''''''

8 k t
9 k t
11 k t
10 k t
2 k t
2 k t

8.2 Cc dng khai bo bin k t


Bin k t c khai bo bng lnh m t dng tng qut nh sau:
CHARACTER * n Danh sch bin
103

trong n ch s k t ( di) trong mi xu k t. Th d lnh


CHARACTER * 8 ten, ngay
ch rng TEN v NGAY l nhng bin cha 8 k t mi bin.
Lnh CHARACTER bin th sau y cho php ta khai bo nhng bin
k t vi di khc nhau trn cng mt dng lnh
CHARACTER TITLE * 10, NUOC * 2
Mt mng cha mt s phn t, mi phn t c gi tr l mt xu k t
c khai bo bng mt trong hai cch tng ng nh sau:
CHARACTER*4 name (50)
CHARACTER name (50)*4
Cc xu k t cng c th c dng trong cc chng trnh con. Xu k
t phi c khai bo bng lnh CHARACTER trong c chng trnh chnh
v chng trnh con. Cng nh cc mng d liu s nguyn, s thc, trong
chng trnh con c th khai bo bin k t m khng cn ch nh r di
xu v kch thc mng. Th d:
CHARACTER * (*) bbc
CHARACTER * (*) name (N)

8.3 Nhp, xut d liu k t


Khi xu k t c dng trong lnh xut ton b xu c in ra. Nhng
du trng c t ng chn vo xu tch ring xu k t vi nhng mc
in khc cng dng. Trong lnh nhp, gi tr ca bin k t phi c bao trong
cp du nhy trn. Nu s k t trong cp du nhy nhiu hn so vi di
m t ca bin k t, th nhng k t tha bn phi s b b qua (b ct b);
nu s k t t hn nhng v tr tha bn phi c t ng in bng cc
du trng. in xu k t trong lnh xut c nh dng, c th dng c t A
(ch , c th khng cn ch r s v tr dnh cho mc in). Th d: vi on
chng trnh:
CHARACTER * 20 thu
PRINT *, ' HAY NHAP MOT NGAY TRONG TUAN'
READ *, thu
PRINT 5, thu
5 FORMAT (1X, 'NGAY VUA NHAP LA ', A)
END

th tng tc trn mn hnh s nh sau:

104

Thy rng s k t g vo bin THU ch bng 8, khng di ti 20 nh


khai bo. Nhng khi in ra mn hnh ta khng thy r nhng du trng c t
ng in vo pha bn phi. Nu lnh FORMAT ca lnh in c dng
FORMAT (1X, A, ' LA NGAY VUA NHAP')

th trn mn hnh s thy r nhng du trng nh sau:

8.4 Nhng thao tc vi d liu k t


8.4.1 Gn cc gi tr k t
Nhng gi tr k t c th c gn cho cc bin k t bng lnh gn v
mt hng k t. Nu hng c di nh hn s k t khai bo ca bin, th
cc du trng s t ng c in vo bn phi; nu hng c di ln hn cc k t tha s b b qua. Th d:
CHARACTER * 4 monhoc (3)
monhoc (1) = 'TOAN'
monhoc (2) = 'LY'
monhoc (3) = 'HOA HOC'

Trong nhng lnh trn y ta khai bo mng MONHOC gm 3 phn t,


mi phn t l mt xu di 4 k t. Vy trong MONHOC (1) s lu 'TOAN',
trong MONHOC (2) s lu 'LYbb', trong MONHOC (3) s lu 'HOAb' (ch b
ch du trng). Qua th d ny ta thy tm quan trng ca vic s dng cc xu
c cng di m t ca bin; nu khng cc lnh s x l sai.
Mt bin k t cng c th c gn gi tr ca bin k t khc bng
lnh gn, th d
CHARACTER*4 loai1, loai2
loai1 = 'GIOI'
loai2 = loai1

Sau lnh gn ny, c hai bin LOAI1 v LOAI2 u lu xu k t 'GIOI'.


Lnh DATA cng c th dng khi xng gi tr ca cc bin k t.
Th d sau gn 12 tn thng ting Anh vo mng THANG:
CHARACTER*3 thang (12)
DATA thang / 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
* 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' /

8.4.2 So snh cc gi tr k t
Biu thc lgic trong lnh IF lgic cng c th l mt php so snh cc
105

bin, hng k t. Th d, nu cc bin THANG, CH, TG l nhng bin k t,


cc lnh sau y l nhng lnh ng:
IF (thang .EQ. 'FEB') ngay = 28
IF (ch (i) .GT. ch (i+1)) THEN
tg = ch (i)
ch (i) = ch (i+1)
ch (i+1) = tg
END IF

Khi nh gi mt biu thc lgic vi cc xu k t, trc ht chng


trnh xt di ca hai xu. Nu mt xu ngn hn xu khc, th xu ngn hn
c b sung thm cc du trng bn phi sao cho hai xu tr thnh c cng
di. Vic so snh hai xu k t cng di thc hin t tri sang phi theo
tng k t mt. Hai xu bng nhau nu chng c cng nhng k t trong cng
mt th t. Cc k t c so snh vi nhau theo chui th t so snh
(collating sequence). Chui ny lit k cc k t t thp n cao. Th d, mt
phn ca chui th t so snh i vi cc k t ASCII lit k cc k t di
y:
Chui th t so snh ca cc k t:
______________________________________
b''#$%&()*+,-./
0123456789
:;=?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ
______________________________________

Theo chui ny, nhng so snh sau l ng:


'A1' < 'A2'
'JOHN' < 'JOHNSTON'
'175' < '176'
'THREE' < 'TWO'
'$' < 'DOLLAR'

Nu cc xu k t ch cha cc ch ci, th th t t thp n cao l th


t alphab, c gi l th t t vng (lexicographic ordering).

8.4.3 Trch ra xu con


Xu con l mt phn c trch ra t xu xut pht v gi nguyn th t
ban u. Trong Fortran xu con c vit bng tn ca xu xut pht, km
theo hai biu thc nguyn nm trong cp du ngoc n, cch nhau bi du
hai chm. Biu thc th nht ch v tr u tin xu xut pht m t xu
con c trch ra. Biu thc th hai ch v tr cui cng. Th d, nu xu
'FORTRAN' c lu trong bin LANG, ta c th c nhng xu con nh sau
Bin

Xu con

lang (1 : 1)

'F'

106

lang (1 : 7)
lang (2 : 3)
lang (7 : 7)

'FORTRAN'
'OR'
'N'

1) Ta c th khng vit biu thc th nht trong cp du ngoc n nu


gi tr ca n bng 1 v c th khng vit biu thc th hai nu gi tr ca n
bng di ca xu xut pht. Ta cng c th khng vit c hai biu thc.
Nhng trong c ba trng hp vn phi c du hai chm (:) trong cp du
ngoc. Th d:
lang (:4)
lang (5:)
lang (:)

l 'FORT'
l 'RAN'
l 'FORTRAN'

2) Khi php trch ra xu con s dng cng mt tn bin, cc biu thc


trong cp du ngoc n khng c ph ln nhau. Th d, nu bin LANG
cha xu 'FORMATS', th lnh
lang (7: 7) = lang (6: 6)

s bin gi tr ca LANG thnh 'FORMATT'. Nhng lnh sau y s sai


khng th thc hin c
lang (3: 5) = lang (2: 4)

3) Nhng trng hp nh: cc v tr u hoc cui khng phi l s


nguyn, l s m, v tr u ln hn v tr cui, v tr u hoc v tr cui c gi
tr ln hn di m t ca xu con, vic trch ra xu con s khng th thc
hin ng n.
Th d 32: m s k t trong mt vn bn. Gi s mt bc in di 50
k t. Hy m s t trong bc in . Ta bit rng trong mt vn bn son
ng th cc t cch nhau bng mt du trng, do ta ch cn m s du
trng trong vn bn v s t s bng s du trng cng thm mt. Vi trng
hp ny chng trnh sau s m c ng s t:
CHARACTER*50 messge
INTEGER count, i
count = 0
DO 10 i = 1, 50
IF (messge (i: i) .EQ. ' ') count = count + 1
10 CONTINUE
PRINT 5, count + 1
5 FORMAT (1X, 'BUC DIEN GOM ', I2, ' TU')
END

8.4.4 Kt hp cc xu k t
Kt hp hay cng l thao tc ghp hai hoc mt s xu k t vo thnh
mt xu k t. Thao tc ny thc hin bi hai du gch cho //. Th d mun
c t WORKED ta c th dng php kt hp
'WORK' // 'ED'
Nhm lnh sau y cho php vit ra ngy thng theo quy cch ting Vit,
107

tc thm cc gch cho ngn cch gia cc k hiu ngy, thng v nm:
CHARACTER day*2, month*2, year*4, date*10
READ *, day, month, year
DATE = day // '/' // month // '/' // year
PRINT *, date
END

Theo nhm lnh ny, nu khi thc hin lnh READ ta g t bn phm
05 10 1999 th trn mn hnh s in ra:
05/10/1999.

8.4.5 Nhng hm chun x l xu k t


a) Hm INDEX
Hm ny c hai i s kiu xu k t, a ra mt s nguyn ch v tr ca
xu th hai trong xu th nht. Th d nu ta c bin STR cha mnh 'TO
BE OR NOT TO BE' v dng lnh
k = INDEX (str, 'BE')

th bin K s c gi tr 4 v xu 'BE' xut hin ln u tin trong xu STR v


tr th 4.
b) Hm LEN
Hm LEN c mt i s kiu xu k t, n a ra mt s nguyn ch
di ca xu . Hm ny rt c ch trong nhng chng trnh con chp nhn
cc xu k t di bt k nhng cn bit di thc t trong chng trnh
con.
Th d 33: Cu to tn vit tt ca ngi. Vit chng trnh c t bn
phm h tn y (gm h, ch m v tn) ca mt ngi v in ln mn
hnh dng vit tt. (Th d, nu nhp vo h tn y nh sau:
TRAN CONG MINH,

th dng in ra s l
T. C. MINH.

Chng trnh NAMEED di y cho php ta g t bn phm mt xu


k t gm c h, ch m v tn trn cng mt dng nhng cch nhau bi
mt du trng. Th tc con EXTR cho php tch ring phn h, ch m v
tn da vo v tr cc du trng trong h tn y . Sau th tc EDIT ghp
cc ch ci u tin ca phn h, ch m km theo cc du chm v du
trng vi tn cu to thnh tn vit tt.
PROGRAM Nameed
CHARACTER ho *10, dem *10, ten *20, hoten *25
PRINT *, 'Nhap ho, chu dem, ten cach nhau 1 dau trong'
READ 5, hoten
5 FORMAT (A)

108

CALL Extr (hoten, ho, dem, ten)


CALL Edit (ho, dem, ten, hoten)
PRINT *, hoten
END
SUBROUTINE Extr (xhoten, xho, xdem, xten)
CHARACTER * (*) xho, xten, xdem, xhoten
INTEGER b1, b2
b1 = INDEX (xhoten, ' ')
b2 = b1 + INDEX (xhoten (b1 + 1:) , ' ')
xho = xhoten (:b1-1)
xdem = xhoten (b1+1: b2-1)
xten = xhoten (b2+1:)
RETURN
END
SUBROUTINE Edit (xho, xdem, xten, xhoten)
INTEGER m
CHARACTER *(*) xho, xten, xdem, xhoten
xhoten = xho (1: 1) // '.'
m = INDEX (xhoten, ' ') + 1
xhoten (m: m + 2) = xdem (1: 1) // '. '
xhoten (m + 3:) = xten
RETURN
END

c) Cc hm CHAR v ICHAR
Cc hm ny thao tc vi cc k t trong chui th t so snh dng trong
my tnh. Nu mt my tnh c 256 k t trong chui th t so snh ca n,
th cc k t ny c nh s t 0 n 255. Hm CHAR nhn mt i s
nguyn v a ra mt k t trong chui th t so snh v tr ng vi s
nguyn . Hm ICHAR l hm ngc ca hm CHAR. N nhn i s l
bin mt k t v tr v mt s nguyn ng vi v tr ca k t trong
chui th t so snh.
V cc my tnh khc nhau c cc chui th t so snh khc nhau, nn
cc hm ny c th dng xc nh v tr ca nhng k t trong chui th t
so snh.
Th d, nu bn mun in ra mn hnh tt c cc k t trong chui th t
so snh c dng trong my tnh ca mnh t v tr 0 n 255 c th dng
chng trnh sau:
DO i = 0, 255
PRINT *, i , ' ', CHAR (i)
END DO
END

Chng trnh sau y cho php in ra mn hnh v tr ca cc ch ci in


hoa ting Anh, nhng ch ci thng v nhng ch s t 0 n 9 trong chui
th t so snh trong my tnh bn ang dng:
CHARACTER*70 set
SET (1: 26) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

109

SET (27: 52) = 'abcdefghijklmnopqrstuvwxyz'


SET (53: 62) = '0123456789'
DO i = 1, 62
PRINT *, set (i : i), ICHAR (set (i : i))
END DO
END

Vi cc my tnh thng dng ngy nay, nu chy chng trnh ny, ta s


thy tp cc ch s t 0 n 9 tun t c v tr t 48 n 57, tp cc ch ci
hoa ting Anh t A n Z c v tr t 65 n 90 v tp cc ch ci thng
ting Anh t a n z c v tr t 97 n 122 trong chui th t so snh. Cc
v tr cn li trong chui th t so snh s ng vi nhng k t khc, trong
c nhng k t chuyn dng biu din cc ch ci Hy Lp, cc k t dng
k biu bng... Ta c th khai thc nhng chi tit ny vit nhng th tc
rt c ch nh in biu bng kh p khi xut d liu ln mn hnh, t ng to
cc tn file trong chng trnh... khi cn thit.
d) Cc hm LGE, LGT, LLE, LLT
Nhng hm ny cho php ta so snh cc xu vn bn da trn chui th
t so snh ASCII. Nhng hm ny s c ch nu mt chng trnh c so snh
cc xu hay sp xp k t v c dng trong cc my tnh khc nhau. Nhng
hm ny tr v mt gi tr lgic - .TRUE. hoc .FALSE. ty thuc kt qu so
snh hai i s kiu xu k t. Th d, nu ta c hai bin k t XAU1, XAU2
th LGE (XAU1, XAU2) s cho gi tr .TRUE. nu XAU1 ln hn hoc bng
XAU2 v phng din t vng. Cc hm LGT, LLE v LLT thc hin cc
php so snh ln hn v t vng, nh hn hoc bng v t vng v nh
hn v t vng. Nh rng cc hm ny da trn chui th t so snh ASCII
ch khng phi chui th t so snh ca my tnh.
Trong Fortran 90 cn c cc hm ADJUSTL, ADJUSTR dng dn
mt xu k t v tri hoc v phi bng cch ct b nhng du trng pha
tri hoc pha phi ca xu . Hm TRIM ct b nhng du trng ui
mt xu vn bn v gim di xu cho tng xng.
Th d 34: Sp xp danh sch theo th t alphab. Vit chng trnh
c t bn phm tn v s in thoi ca 20 ngi. In ln mn hnh danh sch
sp xp th t alphab theo tn ngi. Trong th d ny, ta s dng cc hm
so snh i vi bng th t so snh ASCII.
CHARACTER*8 ten (20), tel (20), temp
DO i = 1, 20
PRINT *, 'NHAP TEN NGUOI THU ', i
READ 5, ten(i)
PRINT *, 'SO DIEN THOAI'
READ 5, tel (i)
ENDDO
5 FORMAT (A)
DO i = 1, 19
k=i

110

DO j = i+1, 20
IF (LGT (ten (k), ten (j))) k = j
END DO
temp = ten (k)
ten (k) = ten (i)
ten (i) = temp
temp = tel (k)
tel (k) = tel (i)
tel (i) = temp
PRINT *, ten (i), tel (i)
END DO
PRINT *, ten (20), tel (20)
END

Cu hi v bi tp chng 8
1. Cc bin K v J s c gi tr bng bao nhiu sau khi thc hin nhm
lnh sau y:
CHARACTER*18 strg
INTEGER k, j
str = 'TO BE OR NOT TO BE'
k = INDEX (strg, 'BE')
j = INDEX (str (k + 1:), 'BE') + k

2. Gi s danh mc s in thoi ca nhng ngi quen ca bn lu


trong file TELNUM di dng nhng dng gm tn ngi y v s in
thoi ca mi ngi vi format A30, A8. File khng c dng u bo thng
tin v s dng d liu v cng khng c dng k hiu cui file bo ht d liu.
Hy vit chng trnh c vo t bn phm mt tn ngi no , sau kim
tra xem ngi c trong danh mc in thoi ca bn khng. Nu khng c
th a ra thng bo 'KHONG CO TRONG DANH MUC', nu c th in ra tn
ngi cng vi s in thoi tm c sao cho s in thoi c t trong
cp du ngoc ngay sau tn.
3. File d liu ADDR cha khong 50 tn ngi v a ch. Dng th
nht ca mi ngi cha h tn y (30 k t) gm h, ch m v tn.
Dng th hai cha a ch s nh v ng ph (35 k t), tn thnh ph (15
k t) v s in thoi (15 k t). Mi xu k t c ghi trong cp du nhy
trn. Hy vit chng trnh c d liu v in ra thng tin v tng ngi theo
mu nhn sau y (th d):
HUY, N. Q.
91 NGUYEN THIEN THUAT
NHA TRANG, (058)832536

Mi nhn cch nhau bn dng. Ch sau tn thnh ph l du phy, khng


nn mt du cch no trc du phy .
4. Gi s bn bit rng ngy u nm ca mt nm l ngy th my
trong tun l. Hy vit chng trnh in t lch thng Ging ca nm di
111

dng d nhn.
5. Gi s bn bit ngy u nm ca mt nm no l th my trong
tun l. Hy vit chng trnh in t lch ca mt thng, nm bt k trong
tng lai di dng d nhn. Thng v nm nhp t bn phm.
6. Vit th tc TDBANG (N, TENCOT) trong N l i s nguyn,
TENCOT l mng mt chiu gm N phn t vn bn chuyn dng in ra
mt tiu ct ca bng. Th d nu chng trnh gi th tc ny v chuyn
i s thc t bng 12 v mt mng 12 tn vit tt thng ting Anh JAN,
FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV,
DEC th chng trnh s in ra tt u bng c dng nh di y:
JAN

FEB MAR APR MAY JUN

JUL

AUG SEP

OCT NOV DEC

7. S liu gi tr ngy ca cc yu t kh tng thy vn ti trm quan


trc c lu trong file ASCII c quy cch ghi nh sau: Dng trn cng ghi
tn trm. Dng th 2 c hai s nguyn vit cch nhau ln lt ch tng s ngy
quan trc v s yu t c quan trc. Dng th ba c 6 s nguyn vit cch
nhau ln lt ch ngy, thng, nm u v ngy, thng, nm cui quan trc.
Dng th 4 l tiu ct lit k tn tt c cc yu t c quan trc, mi tn
c ghi vi rng 8 v tr v cn bn phi. Cc dng tip theo ln lt ghi
gi tr ca cc yu t, mi dng mt ngy. Tnh gi tr trung bnh thng ca tt
c cc yu t trong tt c cc nm quan trc. Kt qu ghi vo nhng file mi,
mi yu t mt file, sao cho tn file trng vi tn ca yu t quan trc.

112

Chng 9 Mt s c im b sung v file


9.1 Cc file ni ti (Internal Files)
Khi mt n v file trong cc lnh nhp hoc xut l tn ca mt bin k
t, th lnh s chuyn d liu t mt vng lu gi ni ti trong b nh sang
mt vng khc. Nhng vng lu gi ny c gi l cc file ni ti (internal
file). Th d, ta c th c d liu t mt xu k t thay v c t mt dng d
liu trong file thng thng vi nhng lnh sau y:
CHARACTER*13 data1
INTEGER i, j
REAL x
data1 = '137 65 42.17'
READ (data1, *) i, j, x

Nhng lnh trn y c ngha rng chng ta khai bo mt bin c kiu


vn bn DATA1 vi di 13 k t. Sau gn cho bin ny dng vn bn:
137 65 42.17

l vic bnh thng, chng ta bit t trc n nay. Nhng hy ch


n lnh cui cng. l lnh:
READ (data1, *) i, j, x
Trng lnh ny ging nh mt lnh c d liu bnh thng, ch c khc
l thay v n v file trong cp du ngoc n ta a tn bin DATA1 vo
. Kt qu l sau lnh c ny cc on vn bn biu din nhng ch s 137,
65 v 42.17 c c ra nh l nhng s nguyn, s thc v gn vo cc
bin nguyn I, J v bin thc X trong danh sch cc bin cn c ca lnh
READ mt cch ng n. Sau nhng lnh ny gi tr cc bin s s nh sau:
I s bng 137, J s bng 65 v X bng 42.17.
y l mt c im rt quan trng ca Fortran. Ta s thy ch li ca
c im ny ca file ni ti qua th d sau:
INTEGER ptr
REAL amount
CHARACTER*15 temp
...
...
READ (12, 5) temp
5 FORMAT (A10)
IF (INDEX (temp, '$') .NE. 0) THEN
ptr = INDEX (temp, '$')

113

temp (ptr: ptr) = ' '


END IF
READ (temp, *) amount

Vi on chng trnh ny d liu t trong n v file (12) thng thng


(file ngoi) c c vo bin k t TEMP. Trong trng hp d liu c km
theo du $ bn tri (cch vit du la ng trc v dnh lin s tin ca
ngi M thng lm), th lnh c
READ (12,5) temp

vn khng mc li v kiu d liu. Sau ta x l, thay k t $ bng k t


du trng v c ly gi tr s thc AMOUNT bng lnh c file ni ti
READ (temp, *) amount

Nhn thy rng lnh c d liu t file ni ti hon ton tng t lnh c cc
file thng thng. Thay v s hiu thit b hay s hiu file, ta ghi tn bin (
y l bin TEMP) vo v tr ca thit b hay s hiu file.
By gi ta xt mt th d v s dng file ni chuyn i d liu s
thnh d liu vn bn. Gi s ta mun to ra 12 tn file ln lt l GIO.1,
GIO.2, ..., GIO.12. on chng trnh sau y c th lm c vic :
INTEGER j
CHARACTER*6 tenf (12), tam
DO j = 1, 12
IF (j .LT. 10) THEN
WRITE (tam, (I1)) j
ELSE
WRITE (tam, (I2)) j
END IF
tenf (j) = GIO // . // tam
END DO

9.2 Cc file truy nhp tun t (Sequential Files)


Cc file c s dng trong tt c cc th d t trc ti nay gi l file
truy nhp tun t v mt khi file c to ra, ta khng th cp nht mt bn
ghi n l no trong n. Mun thay i mt bn ghi, ta phi c cc thng tin
trong bn ghi, sa i n v sau ghi vo mt file khc. By gi ta s xt
lnh OPEN phc tp c thm nhng ch nh khc so vi nhng th d trc
y:
OPEN (UNIT = Biu thc nguyn,
*

FILE = Biu thc k t,

ACCESS = Biu thc k t,

STATUS = Biu thc k t,

FORM = Biu thc k t,

IOSTAT = Bin nguyn,

RECL = Biu thc nguyn,

114

BLANK = Biu thc k t,

ERR = Nhn lnh chuyn iu khin)

Biu thc nguyn trong ch nh UNIT, thng l mt hng, c s


dng trong cc lnh READ hoc WRITE ch n v file c dng.
Biu thc k t trong ch nh FILE l tn ca file cn m. Hai ch nh
va ri chng ta quen dng trong cc chng trc.
Biu thc k t trong ch nh ACCESS phi c gi tr bng 'DIRECT''
hoc SEQUENTIAL' dng ch file thuc loi truy cp trc tip hay truy
cp tun t. Nu vng mt ch nh ny th ngm nh l 'SEQUENTIAL' nh
trc y chng ta dng.
Biu thc k t ca ch nh STATUS c th c mt trong nhng gi tr
l NEW' ( ch file mi s to ra bng lnh WRITE), hoc 'OLD' (file ang
tn ti), hoc UNKNOWN (cha r), hoc 'SCRATCH' (file xut, s b xa
khi chng trnh kt thc).
Biu thc k t trong ch nh FORM hoc c gi tr l 'FORMATTED'
hoc l 'UNFORMATTED' hay BINARY. Cc file FORMATTED c th
dng vi c lnh READ v WRITE c nh dng hoc dng vi cc lnh
nhp, xut n gin. Trong file UNFORMATTED d liu c truy cp nh
l cc xu nh phn, khng phi l cc s hay cc k t. Nu ch nh FORM
vng mt th ngm nh s l FORMATTED i vi cc file tun t v
UNFORMATTED i vi cc file trc tip.
IOSTAT c th dng khi phc li khi m file. Nu khng c li khi
m file, bin nguyn s c gi tr 0. Nu c li, th d khng tm thy file vi
tn ch nh, th mt gi tr khc 0 s c lu trong bin. Ngi ta thng
kim tra gi tr ca bin ny quyt nh hnh ng tip theo. Th d
CHARACTER ten *12, temp *70
PRINT *, GO TEN FILE
READ (*, (A12)) ten
OPEN (UNIT=15, FILE = ten, STATUS=OLD, IOSTAT=ierr)
IF (ierr .EQ. 0) THEN
...
...
...
ELSE
PRINT*, LOI MO FILE , ierr
END IF

c t IOSTAT cng c th dng vi cc lnh READ v WRITE.


Ch nh RECL cn cho cc file truy cp trc tip, khng dng vi cc
file truy cp tun t. Biu thc nguyn ca n ch nh di ca mt bn ghi.
Biu thc k t ca ch nh BLANK c th l 'NULL' hoc 'ZERO'.
Nu c t l 'NULL' cc du trng trong cc trng s b b qua, nu l
'ZERO' cc du trng c xem l cc s 0. Ngm nh l 'NULL'.
115

Ch nh ERR l ty chn v c gi tr x l li. Nu li xy ra trong


khi thc hin lnh OPEN hay mt lnh no c cha ch nh ny, th
chng trnh s chuyn iu khin ti lnh c nhn ghi trong ch nh ERR
thay v to ra li thc hin chng trnh. Ch nh ERR cng dng vi cc
lnh READ v WRITE.
Lnh CLOSE l mt lnh thc hin, n ngt mt file ngoi khi
chng trnh. Dng tng qut nh sau:
CLOSE (UNIT = Biu thc nguyn,
*
STATUS = Biu thc k t,
*
IOSTAT = Bin nguyn,
ERR = Nhn lnh chuyn iu khin)
*

Lnh CLOSE v cc ch nh l ty chn. Ch nh STATUS trong lnh


CLOSE c gi tr KEEP c ngha file c gi li, DELETE c ngha file
khng cn na v nn xa i.
Lnh REWIND
REWIND (UNIT = Biu thc nguyn,
*
IOSTAT = Bin nguyn,
*
ERR = Nhn lnh iu khin)

dng chuyn v v tr bn ghi th nht trong file tun t.


Lnh BACKSPACE
BACKSPACE (UNIT = Biu thc nguyn,
IOSTAT = Bin nguyn,
*
*
ERR = Nhn lnh iu khin)

chuyn v tr c ngc li v pha trc mt bn ghi trong file tun t.


Lnh ENDFILE
ENDFILE (UNIT = Biu thc nguyn,
*
IOSTAT = Bin nguyn,
*
ERR = Nhn lnh iu khin)

ghi vo file mt bn ghi ch s kt thc file khi file c to ra.

9.3 Cc file truy cp trc tip (Direct-Access Files)


Cc bn ghi trong cc file truy cp trc tip c truy cp khng theo
cch tun t, m theo th t c ch nh trong chng trnh. Khi mt file
trc tip c m, ch nh ACCESS trong lnh OPEN phi t l DIRECT
v di ca bn ghi phi c cho vi ch nh RECL. Cc lnh READ v
116

WRITE phi cha ch nh REC cung cp s hiu ca bn ghi cn truy


cp.
Dng tng qut ca cc lnh READ hoc WRITE vi file truy cp trc
tip nh sau:
*

READ (S hiu file, nhn lnh FORMAT,


REC = Biu th nguyn) Danh sch bin

WRITE (S hiu file, nhn lnh FORMAT,


*
REC = Biu thc nguyn) Danh sch bin

Biu thc nguyn trong ch nh REC dng ch s hiu bn ghi cn x


l. Cc ch nh ERR v IOSTAT c th c s dng vi cc lnh READ
hoc WRITE trc tip. Ty chn END c th ch dng vi lnh READ. Khi t
chc file truy cp trc tip, ngi ta thng s dng s th t hoc s hiu
phn bit - mt phn ca bn ghi lm s hiu bn ghi. Th d cc s hiu phn
bit ca sinh vin trong mt trng i hc thng bt u bng 00001 ri n
00002... Do thng tin v sinh vin s 00210 c th c lu trong bn ghi
210. i khi c th thc hin mt s tnh ton vi mt trng ca bn ghi
nhn c s hiu ca n.
File truy cp trc tip thng c to ra bng cch ghi thng tin vo
mt cch tun t, vi bn ghi bt u bng 1 v tng ln 1 mi ln c mt bn
ghi mi c vit vo. File ny c th x l theo th t tun t bng cch thay
i s hiu bn ghi t 1 n tng s tt c cc bn ghi. Tuy nhin, u im ca
file trc tip s th hin r khi chng ta mun cp nht thng tin trong mt s
bn ghi ca file. Thay v c tng bn ghi mt cch tun t, tm bn ghi m ta
mun cp nht, ta ch cn ch nh s hiu bn ghi v bn ghi t ng c
x l. Khi cp nht thng tin xong, ta c th ghi thng tin mi vo bn ghi.
Nu trong lnh READ ta ch nh mt s hiu bn ghi m bn ghi khng
tn ti th s xy ra li. khi phc li, ch nh ERR cn phi c mt trong
lnh READ.

9.4 Lnh truy vn INQUIRE


Lnh INQUIRE c hai dng:
INQUIRE (FILE = biu thc k t, danh sch ch nh truy vn)
INQUIRE (UNIT = biu thc nguyn, danh sch ch nh truy vn)

Lnh ny l mt lnh thc hin, n truy vn thng tin v file hay s hiu
file. Bng 9.1 lit k nhng ch nh truy vn. Th d:
INQUIRE (FILE = 'TSDATA', SEQUENTIAL = traloi)
INQUIRE (UNIT = 12, SEQUENTIAL = traloi)

117

Bng 9.1 Cc ch nh truy vn ca lnh INQUIRE


Ch nh truy
vn

Kiu bin

Gi tr truy vn
file FILE

Gi tr truy vn
n v file UNIT

ACCESS =

CHARACTER

'SEQUENTIAL'
'DIRECT'

'SEQUENTIAL'
'DIRECT'

BLANK =

CHARACTER

'NULL'
'ZERO'

DIRECT =

CHARACTER

'YES'
'NO'

'NULL'
'ZERO'
_

ERR =

INTEGER

S hiu lnh x l li

S hiu lnh x l li

EXIST =

LOGICAL

.TRUE.
.FALSE.

.TRUE.
.FALSE.

FORM =

CHARACTER

'FORMATTED'
'UNFORMATTED'

'FORMATTED'
'UNFORMATTED'

FORMATTED =

CHARACTER

'YES'
'NO'
'UNKNOWN'

IOSTAT =

INTEGER

NAME =

CHARACTER

NAMED + =

LOGICAL

M li
Tn file nu file khng
phi l file loi scratch
.TRUE.
.FALSE.

NEXTREC =

INTEGER

NUMBER + =

INTEGER

S hiu bn ghi tip theo


trong file truy cp trc tip
n v file

S hiu bn ghi tip theo


trong file truy cp trc tip

OPEND =

LOGICAL

.TRUE.
.FALSE.

.TRUE.
.FALSE.

RECL =

INTEGER

SEQUENTIAL =

CHARACTER

UNFORMATTED
=

CHARACTER

M li

di bn ghi
'YES'
'NO'
'UNKNOWN'
'YES'
'NO'
'UNKNOWN'

di bn ghi

Th d 35: S tng tc gia ngi dng v chng trnh. Gi s khi


chng trnh yu cu ngi dng g mt tn ca file d liu m ra lm vic
trong chng trnh. Trng hp file khng tn ti, chng trnh s kt thc
bi li thc hin. Nu ta dng lnh INQUIRE, chng trnh c th xc nh
file c tn ti khng v nu khng tn ti, chng trnh nhc ngi dng
g mt tn file khc. Cc lnh sau y thc hin s tng tc ny:
CHARACTER*70 tenfil, tit
LOGICAL xong, ok, co
xong = .FALSE.
ok = .FALSE.
PRINT *, 'NHAP TEN FILE'
READ *, tenfil
5 IF (.NOT. xong) THEN

118

INQUIRE (FILE = tenfil, EXIST = co)


IF (.NOT. co) THEN
PRINT *, 'FILE KHONG TON TAI'
PRINT *, 'NHAP TEN KHAC HOAC GO THOI'
READ *, tenfil
IF (tenfil .EQ. 'THOI') xong = .TRUE.
ELSE
xong = .TRUE.
ok = .TRUE.
ENDIF
GOTO 5
ENDIF
IF (ok) THEN
OPEN (UNIT = 10, FILE = tenfil, STATUS = 'OLD')
...
...
...
END IF
END

Cu hi v bi tp chng 9
1. Vit chng trnh m v in s bn ghi trong cc file DATA1 v
DATA2. Gi s cc file l file tun t v mi bn ghi cha hai gi tr thc
vi format sau:
FORMAT (F6.2, 1X, F6.2)

Nu li xy ra khi m file, hy in thng bo li thay v in s bn ghi.


2. File TEM60.JAN lu trng ba chiu nhit nc bin ng thng
Ging phn gii 1o kinh v c quy cch ghi nh sau: Dng u tin gm 5
s nguyn cch nhau ln lt ch kinh mp tri, kinh mp phi, v
mp trn, v mp di ca min khng gian v s tng su. Dng th hai
ghi su (s nguyn) ca tng trn cng. Sau l bng gi tr nhit (s
thc cch nhau) vi s ct bng s im nt theo kinh tuyn, s dng bng s
im nt theo v tuyn. Cc tng tip theo ghi hon ton tng t. Gi tr nhit
khuyt hoc ri vo vng t lin c ghi bng s 99.99. Vit chng
trnh tnh gi tr nhit nc trung bnh ton bin ng.
3. Vi file s liu ca bi tp 2, vit chng trnh c thng tin trong file
v to cho mi im nt thuc min tnh mt file t tn theo quy tc sau: bt
u bng ch K, sau n cc ch s ch kinh im, sau ch V v cc
ch s ch v im, ui file l .BLN. Trong cc file c quy cch ghi nh
sau, dng trn cng c mt s nguyn ch s tng quan trc thc t ca im,
mt du cch v ch s 1. Sau lit k lin tip gi tr nhit v tng su
ng vi nhit vi du ngc li.
4. Gi s c file d liu lu gi tr quan trc ca mt s yu t kh tng
thy vn ti trm hi vn, c quy cch ghi nh sau:
119

- Dng th nht c hai s nguyn 1 v 2 cch nhau mt du trng.


- Dng th hai ghi tn trm (khng qu 100 k t).
- Dng th ba ghi hai s nguyn ch s dng d liu (khng qu 5000) v
s yu t quan trc (khng qu 12) cch nhau t nht mt du trng.
- Dng th t ln lt ghi tn cc yu t c quan trc, mi tn vi nh
dng A8.
- Dng th 5 ln lt ghi n v o ca tng yu t quan trc, cng vi
nh dng A8.
- Mi dng trong cc dng tip sau ln lt ghi gi tr quan trc ca cc
yu t, mi gi tr ghi vi nh dng F8.2.
Vit chng trnh cho php nhp tn file t bn phm, c d liu v lp
phng trnh hi quy gia bin th nht (bin ph thuc) v bin th hai (bin
c lp). In kt qu ra mn hnh theo quy cch sau: gi s tn bin th nht l
Tw, bin th hai l Ta, phng trnh phi vit c dng:
Tw = 0.915 Ta + 1.237

(Ghi ch: xem cng thc trong ph lc 3).


5. Ci tin chng trnh trong bi tp 4 cho php ngi dng ty ch
nh bin ph thuc v bin c lp t bn phm.
6. Vi file d liu m t trong bi tp 4, lp chng trnh tnh phng
trnh hi quy nhiu bin gia yu t quan trc th nht (bin ph thuc) v cc
yu t quan trc 2, 3, 6, 8, 9. In kt qu ln mn hnh di dng phng trnh
hi quy vi tn cc yu t ghi trong file.
Gi : Xem phng php thit lp phng trnh hi quy tuyn tnh nhiu
bin trong ph lc 4.
7. File HESOA.MAT lu cc gi tr ca cc h s ca h phng trnh
i s tuyn tnh theo quy cch nh sau: Dng th nht c mt s nguyn ch
s phng trnh. Cc dng tip sau ghi cc gi tr cc h s, k c h s t do
ng vi tng phng trnh, mi phng trnh trn mt dng, mi h s ghi vi
nh dng F8.4, th d:
4 1.1161
0.1582
0.1968
0.2368

0.1254
1.1675
0.2071
0.2471

0.1397
0.1768
1.2168
0.2568

0.1490
0.1871
0.2271
1.2671

1.5471
1.6471
1.7471
1.8471

Vit chng trnh c file v gii h phng trnh bng phng php loi
bin Gauss. Kt qu in ra mn hnh gm: vit li h phng trnh, sau cch
ra mt dng ri ghi cc nghim dng cui cng, th d, ng vi ma trn cc
h s nh trn phi c kt qu trn mn hnh nh sau:
1.1161X1 + 0.1254X2 + 0.1397X3 + 0.1490X4 = 1.5471
0.1582X1 + 1.1675X2 + 0.1768X3 + 0.1871X4 = 1.6471

120

0.1968X1 + 0.2071X2 + 1.2168X3 + 0.2271X4 = 1.7471


0.2368X1 + 0.2471X2 + 0.2568X3 + 1.2671X4 = 1.8471
1.04059

0.98697

0.93505

0.88130

Gi : Xem phng php gii h phng trnh i s tuyn tnh theo s


loi bin Gauss trong ph lc 2.
8. File HESOAB.MAT lu cc gi tr ca cc h s ca h phng trnh
i s tuyn tnh theo quy cch nh m t trong bi tp 7. Gi s ma trn
cc h s A = [ai j ] l ma trn i xng, tc aij = a ji (i, j = 1, 2, ..., n) .
Hy vit chng trnh c file cc h s v gii h phng trnh. In kt
qu theo quy cch ca bi tp 7.
Gi : Trng hp ma trn cc h s A l ma trn i xng, nn dng
phng php cn bc hai gii h phng trnh i s tuyn tnh (ph lc 2).

121

Ti liu tham kho


1. Etter D. M. Structured Fortran 77 for engineers and scientists. Fourth edition. The
Benjamin/Cummings Publishing Co., Inc. California, 1993, 616 p.
2. Koffman Elliot B., Friedman Frank L. Fortran with engineering applications. Fifth
Edition. Addison-Wesley Publishing Co. Massachusetts-..., 1993, 664 p.
3. N. V. Kopchenova and I.A. Maron. Computational Mathematics. Worked
examples and problems with elements of theory. Mir Publishers, Moscow, 1975.
4. . . . -. , 1998,
397 c.
5. . . :
IMSL. -, , 2000, 448 c.

122

Ph lc 1: Bng cc hm chun ca Fortran


Trong bng cc hm chun di y, tn ca cc i s s ch kiu d
liu theo quy c sau:
i s
X
CHX
DX
CX
LX
IX
GX

Tn hm

Kiu d liu
thc
xu k t
chnh xc i
phc
lgic
nguyn
t sinh (in m, nghing)

Kiu hm

nh ngha

SQRT(X)

Thc

DSQRT (DX)

chnh xc i

DX

CSQRT (CX)

Phc

CX

ABS (X)

Thc

IABS (IX)

Nguyn

IX

DABS (DX)

chnh xc i

DX

CABS (CX)

Phc

CX

EXP (X)

Thc

eX

DEXP (DX)

chnh xc i

e DX

CEXP (CX)

Phc

e CX

LOG (GX)

Kiu theo GX

log e GX

ALOG (X)

Thc

log e X

DOG (GX)

chnh xc i

log e DX

CLOG (CX)

Phc

log e CX

LOG10 (GX)

Kiu theo GX

log10 GX

ALOG10 (X)

Thc

log10 X

DLOG10 (DX)

chnh xc i

log10 DX

REA L(GX)
FLOAT (IX)
SNGL (DX)

Thc
Thc
Thc

Chuyn GX thnh gi tr thc


Chuyn IX thnh gi tr thc
Chuyn DX thnh chnh xc n

ANINT(X)
DNINT(DX)

Thc
chnh xc i

Lm trn ti s thc gn nht


Lm trn ti s thc gn nht

NINT(X)
IDNINT (DX)

Nguyn
Nguyn

Lm trn ti s nguyn gn nht


Lm trn ti s nguyn gn nht

AINT (X)
DINT (DX)

Thc
chnh xc i

Ct phn thp phn ca X


Ct phn thp phn ca DX

INT (GX)
IFIX (X)
IDINT (DX)

Nguyn
Nguyn
Nguyn

Ct GX thnh s nguyn
Ct X thnh s nguyn
Ct DX thnh s nguyn

SIGN (X, Y)

Thc

Gn du ca Y cho X

ISIGN (IX, IY)

Nguyn

Gn du ca IY cho IX

DSIGN (DX, DY)

chnh xc i

Gn du ca DY cho DX

123

Tn hm

Kiu hm

nh ngha

MOD (IX,IY)

Nguyn

Ly s d ca php chia IX / IY

AMOD (X,Y)
DMOD (DX,DY)

Thc
chnh xc i

Ly s d ca php chia X / Y
Ly s d ca php chia DX / DY

DIM (X,Y)

Thc

X (cc tiu ca X v Y)

IDIM (IX,IY)

Nguyn

IX (cc tiu ca IX v IY)

DDIM (DX,DY)

chnh xc i

DX (cc tiu ca DX v DY)

MAX (GX,GY,...)

Kiu theo GX, GY, ...

Cc i ca (GX, GY, ...)

MAX0 (IX,IY,...)

Nguyn

Cc i ca (IX, IY, ...)

AMAX1 (X,Y,...)

Thc

Cc i ca (X, Y, ...)

DMAX1 (DX,DY,...)

chnh xc i

Cc i ca (DX, DY, ...)

AMAX0 (IX,IY,...)

Thc

Thc, cc i ca (IX, IY, ...)

MAX1 (X,Y,...)

Nguyn

Cc i ca (X, Y, ...)

MIN (GX,GY,...)

Kiu theo GX,GY,...

Cc tiu ca (GX, GY, ...)

MIN0 (IX,IY,...)

Nguyn

Cc tiu ca (IX, IY, ...)

AMIN1 (X,Y,...)

Thc

Cc tiu ca (X, Y, ...)

DMIN1 (DX,DY,...)

chnh xc i

Cc tiu ca (DX, DY, ...)

AMIN0 (IX,IY,...)

Thc

Cc tiu ca (IX, IY, ...)

MIN1 (X,Y,...)

Nguyn

Cc tiu ca (X, Y, ...)

SIN (X)

Thc

sin X (X - raian)

DSIN (DX)

chnh xc i

sin DX (DX - raian)

CSIN (CX)

Phc

sin CX

COS (X)

Thc

cos X (X - raian)

DCOS (DX)

chnh xc i

cos DX (DX - raian)

CCOS (CX)

Phc

cos CX

TAN (X)

Thc

tgX (X - raian)

DTAN (DX)

chnh xc i

tgDX (DX - raian)

ASIN (X)

Thc

arcsin X

DASIN (X)

chnh xc i

arcsin DX

ACOS (X)

Thc

arccos X

DACOS (DX)

chnh xc i

arccos DX

ATAN (X)

Thc

arctgX

DATAN (DX)

chnh xc i

arctgDX

ATAN2 (X,Y)

Thc

arctg ( X / Y )

DATAN2 (DX,DY)

chnh xc i

arctg ( DX / DY )

COSH (X)

Thc

chX

DCOSH (DX)

chnh xc i

chDX

SINH (X)

Thc

shX

DSINH (DX)

chnh xc i

shDX

TANH (X)

Thc

th X

DTANH (DX)

chnh xc i

thDX

DPROD (X, Y)

chnh xc i

Tch ca X v Y

124

Tn hm

Kiu hm

nh ngha

DBLE (X)

chnh xc i

Chuyn X thnh chnh xc i

CMPLX (X)

Phc

X + 0i

CMPLX (X, Y)

Phc

X + Yi

AIMAG (CX)

Thc

Phn o ca CX

REAL (CX)

Thc

Phn thc ca CX

CONJG (CX)

Phc

Lin hp ca CX, a bi

LEN (CHX)

Nguyn

di ca xu k t CHX

INDEX (CHX, CHY)

Nguyn

V tr ca xu CHY trong xu CHX

CHAR (IX)

K t

K t ng vi v tr th IX trong chui
so snh

ICHAR (CHX)

Nguyn

V tr ca k t CHX trong chui so


snh

LGE (CHX, CHY)

Lgic

Gi tr ca biu thc (CHX ln hn


hoc bng CHY v t vng)

LGT (CHX, CHY)

Lgic

Gi tr ca biu thc (CHX ln hn


CHY v t vng)

LLE (CHX, CHY)

Lgic

Gi tr ca biu thc (CHX nh hn


hoc bng CHY v t vng)

LLT (CHX, CHY)

Lgic

Gi tr ca biu thc (CHX nh hn


CHY v t vng)

Ph lc 2: Phng php Gauss gii h phng trnh i


s tuyn tnh
a11x1
a21x1
...
an1 x1

+
+

a12 x2
a22 x2

...
an2 x2

hay

...

...
...
...

a1n xn
a2n xn

...
ann xn

Ax=b

=
=

b1
b2

...
bn

(*)

a11 a12 ... a1n


b1

a22 ... a2 n
a
b2 x =
=
A = (aij ) = 21
b

... ;
... ... ... ... ;

b
...
a
a

n2
nn
n1
n
Nu ma trn A khng suy bin, tc
det A =

a11
a21

a12
a22

... a1n
... a2 n

...

...

...

an1

an 2 ... ann

...

x1

x2
... .

xn

th h (*) c nghim duy nht. C th tnh nghim theo cng thc Cramer
125

det Ai
,
det A
trong Ai ma trn A vi ct i b thay th bng ct cc s hng t do b .
xi =

1. Phng php loi bin Gauss gii h phng trnh i s tuyn tnh:
Th d cho h
a11 x1 + a12 x2 + a13 x3 + a14 x4 = a15
a21 x1 + a22 x2 + a23 x3 + a24 x4 = a25

(1)
a31 x1 + a32 x2 + a33 x3 + a34 x4 = a35
a41 x1 + a42 x2 + a43 x3 + a44 x4 = a45
Gi s phn t chnh

a11 0 .

Chia phng trnh th nht cho

x1 + b12 x2 + b13 x3 + b14 x4 = b15 ,

vi

b1 j =

a1 j
a11

a11 ,

ta c
(2)

( j = 2, 3, 4, 5) .

Dng phng trnh (2) loi n x1 khi cc phng trnh s 2, 3, 4 ca


h (1): Mun vy, nhn phng trnh (2) tun t vi a21 , a31 , a41 v tun t ly
cc phng trnh s 2, 3, 4 tr i cc tch tng ng va nhn c, ta c ba
phng trnh:
(1)
(1)
(1)
(1)

a22
x2 + a23
x3 + a24
x4 = a25

(1)
(1)
(1)
(1)
a32
x2 + a33
x3 + a34
x4 = a35

(1)
(1)
(1)
(1)
a42
x2 + a43
x3 + a44
x4 = a45

(3)

trong
aij(1) = aij ai1b1 j (i = 2, 3, 4; j = 2, 3, 4, 5)

(4)

(1)
By gi chia phng trnh th nht ca h (3) cho phn t chnh a22
ta

c:
(1)
(1)
(1)
x2 + b23
x3 + b24
x4 = b25
,

(5)

trong
b2(1j) =

a2(1j)
(1)
a22

( j = 3, 4, 5) .

Bng cch tng t nh khi loi x1 , by gi ta loi x2 khi cc phng


trnh th ba v th t, ta c:
( 2)
( 2)
( 2)

a33
x3 + a34
x4 = a35
.
( 2)
( 2)
( 2)

a43
x3 + a44
x4 = a45

(6)

trong
126

aij( 2 ) = aij(1) ai(21) b2(1j)

(i = 3, 4; j = 3, 4, 5) .

(7)

Chia phng trnh th nht ca h (6) cho phn t chnh a33( 2) , ta c:


x3 + b34( 2) x4 = b35( 2) ,

(8)

trong
b3( 2j ) =

a3( 2j )
( 2)
a33

( j = 4, 5) .

Sau nh (8) ta loi x 3 khi phng trnh th hai ca h (6), nhn


c:
( 3)
( 3)
a44
x4 = a45

trong
( 2) ( 2)
a 4( 3j) = a 4( 2j) a43
b3 j

( j = 4, 5)

(9)

Nh vy ta a h (1) v h tng ng c ma trn cc h s l ma


trn tam gic
x1 + b12 x2 + b13 x3 + b14 x4 = b15

(1)
x2 + b23(1) x3 + b24
x4 = b25(1)

(10)
x3 + b34( 2 ) x4 = b35( 2 )
( 3)
(3)
a 44
x4 = a 45

T (10) xc nh cc n
(3)
(3)

x 4 = a 45
a 44

(2)
(2)
x 4 b34
x 3 = b35

(1)
(1)
(1)
x 4 b24
x 3 b23
x 2 = b25

x1 = b15 x 4 b14 x 3 b13 x 2 b12

(11)

Vy th tc gii h phng trnh i s tuyn tnh bc nht quy v hai


qu trnh:
a) Qu trnh thun: a h (1) v dng tam gic (10);
b) Qu trnh nghch: tm n theo cc cng thc (11).
Nu phn t chnh ca h bng khng th ch cn thay i ch ca cc
phng trnh trong h tng ng lm cho phn t chnh khc khng.
S php tnh s hc N cn thc hin trong phng php Gauss bng
N=

2n (n + 1) (n + 2)
+ n (n 1) .
3

Vy s php tnh s hc xp x t l vi lu tha bc ba ca s n.


2. Phng php cn bc gii h phng trnh i s tuyn tnh trong
trng hp ma trn A l ma trn i xng
127

Phng php ny thun li trong trng hp h phng trnh


Ax=b
(12)
c ma trn A l ma trn i xng, iu thng gp trong cc bi ton k thut.
Theo phng php ny ma trn A c biu din thnh tch ca hai ma
trn tam gic chuyn v
A = TT
(13)
trong
t11 t12

0 t22
T =
... ...

0 0

Nhn hai ma trn T v


thc tnh cc phn t tij :

t11

t
t
T = 12 22
... ...

t
1n t2 n

... t1n

... t2 n
,
... ...

... tnn

... 0

... 0
... ...

... tnn

v cho tch bng ma trn

t 11 =

a 11 ,

t1 j =

t ii =

a ii t ki2

a1 j

ta suy ra c cng

( j > 1)

t 11

i 1

A,

(1 < i n )

(14)

k =1

i 1

t ij =

a ij t ki t kj

(i < j )

k =1

t ii

t ij = 0

i> j

khi

Nh vy ta thay h (12) bng hai h tng ng


T' y = b,
Tx=y

15)

hay
t11 y1 = b1

(16)

t11 x1 + t12 x2 + .... + t1n xn = y1


t 22 x2 + ... + t 2 n xn = y 2

.........................
t nn xn = y n

(17)

t12 y1 + t 22 y 2 = b2
.......................
t1n y1 + t 2 n y 2 + .... + t nn y n = bn

T suy ra cc cng thc tnh:


i 1

y1 =

b1
,
t11

yi =

y
xn = n , xi =
t nn

bi t ki y k
k =1

tii

yi

k =i +1

tii

ik

xk

(i > 1)

(18)

(i < n)

(19)
128

Vy qu trnh thun gm tnh cc phn t ca ma trn T theo cc cng


thc (14). Qu trnh nghch l tnh cc ma trn ct y v x theo cc cng thc
(18), (19).

Ph lc 3: Phng php bnh phng nh nht trong


phn tch hi quy
1. M hnh tuyn tnh
M hnh hi quy tuyn tnh c dng:
y = f ( x) = ax + b .

Theo phng php bnh phng nh nht, cc h s hi quy a v b


trong phng trnh trn c tm sao cho tng bnh phng sai s bng
n

E = ( y k axk b) 2
k =1

cc tiu. Ln lt ly o hm biu thc ny theo a , b v cho bng khng, ta


c h phng trnh sau y xc nh a v b :
n

k =1

k =1

k =1

k =1

a x + b xk = xk y k , a xk + b n = y k .
k =1

2
k

Vy cc h s hi quy c tnh theo cc cng thc sau:


n

a=

xk

k =1

k =1
n

y k n xk y k

k =1

( x k ) n x
2

k =1

b=

xk
k =1

k =1

k =1
n

k =1
n

xk yk xk2

( x k ) n x
2

k =1

(20)

2
k

k =1

y
k =1

(21)

2
k

hay h s b cn c th tnh theo cng thc:


n

b=

yk a
k =1

x
k =1

(22)

2. M hnh a thc
Phng php bnh phng nh nht cng c th p dng tnh cc h
s hi quy a thc dng
f ( x) = a0 + a1 x + a2 x 2 + ... + an x m .

th d i vi m hnh bc hai
f ( x) = a0 + a1 x + a2 x 2 .

129

Ly o hm tng sai s theo cc h s v cho bng khng ta c h sau


y xc nh cc h s hi quy bc hai:

a2

a2

a2

x
k =1
n

+ a1 xk + a0 n = y k

2
k

k =1

k =1

k =1

k =1

k =1

k =1

k =1

k =1

k =1

x
k =1

+ a1 xk2 + a0 xk = xk y k

3
k

(23)

xk4 + a1 xk3 + a0 xk2 = xk2 yk

V nguyn tc ta c th s dng phng php ny tm phng trnh a


thc bc bt k. Tuy nhin trong thc t phng php tr thnh khng n nh
khi bc a thc ln hn v cc sai s lm trn s trong my tnh.
3. M hnh phi tuyn
Phng php bnh phng nh nht c th p dng cho hm bt k,
nhng h cc phng trnh tm cc h s c th phi tuyn, v do khng
th gii c bng cch s dng cc phng trnh tuyn tnh. Tuy nhin, trong
mt s trng hp, mt hm phi tuyn c th chuyn thnh mt hm tuyn
tnh. Th d v mt hm c th tuyn tnh ha l
f ( x) = b x a

(24)

Nu ly loga hai v ca phng trnh ny, ta c


ln f ( x) = a ln x + ln b .

(25)

Nu k hiu

ta c

g ( x) = ln f ( x)

(26)

~
b = ln b

(27)

~
x = ln x

(28)

~
y = ln y

(29)

~
g ( x ) = a~
x +b

(30)
~

Vi phng trnh (30) cc h s hi quy a v b tnh theo cc cng thc


n

a=

~xk

k =1

k =1
n

~yk n ~xk ~yk

k =1

k =1

~
b=

(31)

xk ) 2 n ~
xk2
( ~

~xk
k =1

k =1

k =1
n

k =1
n

~xk ~yk ~xk2

~y
k =1

( ~
xk ) 2 n ~
xk2
k =1

(32)

k =1

130

Vy cng vic tnh ton gm: chuyn i cc gi tr s liu xk v yk theo


cc cng thc (28), (29), tnh cc tng, kt qu th vo cc phng trnh (31),
~
(32) tm a v b . Gii phng trnh (27) i vi b v t vo phng trnh
(24).

Ph lc 4: S ng dng phng php hi quy nhiu


bin
Gi s c n quan trc i vi bin ph thuc y v cc bin c lp
x1 , x2 , ..., xm . Phng trnh hi quy c thit lp nh sau:

y = a0 + a1 x1 + a2 x2 + ... + am xm .
Cc h s hi quy ai (i = 1,..., m) c chn sao cho tha mn
n

= ( y a0 a1 x1 a2 x2 ... am xm )2 = min
i =1

Ln lt ly o hm biu thc trn theo a0 , a1 , a2 ,..., am v cho cc o


hm bng khng, ta c h m + 1 phng trnh xc nh cc h s a
na 0
[x1 ]a0
[x2 ]a0
...
[xm ]a0

+
+
+

[x1 ]a1
[x1 x1 ]a1
[x1 x2 ]a1

...
+ [x1 x m ]a1

+
+
+

[x2 ]a2
[x2 x1 ]a2
[x2 x2 ]a2

...
+ [x 2 x m ]a 2

+ ... +
+ ... +
+ ... +
...
+ ... +

[xm ]am
[xm x1 ]am
[xm x2 ]am

=
=
=

[y]

...
[xm xm ]am

...
= [ yxm ]

[ yx1 ]
[ yx2 ]

(33)
H phng trnh ny gi l h phng trnh chnh tc xc nh cc h
s hi quy. Di dng ma trn ta vit h ny nh sau:
[x1 ] [x2 ]
[xm ] a0 b0
...
n

[x1 x1 ] [x2 x1 ] ... [xm x1 ] a1 b1


[x1 ]
[x ]
[x1 x2 ] [x2 x2 ] ... [xm x2 ] . a2 = b2
2
...
...
...
... ... ...
...
[x ] [x x ] [x x ]
[xm xm ] am bm
...
1 m
2 m
m
(34)
n

vi du

[ ] k hiu php ly tng .


1

tm cc h s hi quy a0 , a1 , a2 ,..., am ta phi gii h phng trnh


chnh tc theo phng php loi bin Gauss hoc phng php cn bc hai
m t trong ph lc 2 v ma trn h s ca cc phng trnh chnh tc l ma
trn i xng. Di y dn hai th tc h tr cho vic lp h phng trnh
i s tuyn tnh chun tc (34) SUBROUTINE LHPTCT v gii h phng
131

trnh bng phng php loi bin Gauss SUBROUTINE GAUSS.


SUBROUTINE LHPTCT (y, x, a, n, m)
INTEGER n, m, i, j, k
REAL y (10000), x (10000, 50), a (0 : 50, 0 : 51)
a (0, 0) = n
DO j = 1, m
a (0, j) = 0.0
DO k = 1, n
a (0, j) = a (0, j) + x (k, j)
END DO
END DO
a (0, m + 1) = 0.0
DO k = 1, n
a (0, m + 1) = a (0, m + 1) + y (k)
END DO
DO i = 1, m
a (i, m + 1) = 0.0
DO k = 1, n
a (i, m + 1) = a (i, m + 1) + y (k) * x (k, i)
END DO
END DO
DO i = 1, m
DO j = i, m
A (i, j) = 0.0
DO k = 1, n
a (i, j) = a (i, j) + x (k, i) * x (k, j)
END DO
ENDDO
ENDDO
DO i = 1, m
DO j = 0, i 1
a (i, j) = a (j, i)
END DO
END DO
RETURN
END
SUBROUTINE GAUSS (m, a, x)
INTEGER m
REAL a (0 : 50, 0 : 51), x (0 : 50)
DO i = 0, m 1
k=i
amax = ABS (a (k, k))
DO j = i + 1, m
r = ABS (a (j, i))
IF (amax .LT. r) THEN
amax = r
k=j
END IF
END DO

132

IF (k .NE. i) THEN
DO j = i, m + 1
amax = a (i, j)
a (i, j) = a (k, j)
a (k, j) = amax
END DO
END IF
DO j = i + 1, m + 1
a (i, j) = a (i, j) / a (i, i)
END DO
DO j = i + 1, m
DO k = i + 1, m + 1
a (j, k) = a (j, k) - a (j, i) * a (i, k)
END DO
END DO
END DO
x (m) = a (m, m + 1) / a (m, m)
DO i = m - 1, 0, -1
x (i) = a (i, m + 1)
DO j = i + 1, m
x (i) = x (i) - a (i, j) * x (j)
END DO
END DO
RETURN
END

133

You might also like