215
NXB Đại hc Quc gia Hà Ni 2007 Tkhoá: File, hàm, lnh , chương trình con, thtc, ký t, xâu, mng, biến, tương quan, cu trúc, ph, thut toán Tài liu trong Thư vin đin tĐại hc Khoa hc Tnhiên có thđược sdng cho mc đích hc tp và nghiên cu cá nhân. Nghiêm cm mi hình thc sao chép, in n phc vcác mc đích khác nếu không được schp thun ca nhà xut bn và tác gi. NGÔN NGLP TRÌNH FORTRAN 90 Phan Văn Tân

Ngon Ngu Lap Trinh FORTRAN 90

Embed Size (px)

DESCRIPTION

it is vietnamese book

Citation preview

  • NXB i hc Quc gia H Ni 2007

    T kho: File, hm, lnh , chng trnh con, th tc, k t, xu, mng, bin, tng quan,

    cu trc, ph, thut ton

    Ti liu trong Th vin in t i hc Khoa hc T nhin c th c s dng cho

    mc ch hc tp v nghin cu c nhn. Nghim cm mi hnh thc sao chp, in n phc v

    cc mc ch khc nu khng c s chp thun ca nh xut bn v tc gi.

    NGN NG LP TRNH FORTRAN 90

    Phan Vn Tn

  • 1

    PHAN VN TN

    NGN NG LP TRNH FORTRAN 90

    NH XUT BN I HC QUC GIA H NI

  • 2

    MC LC

    LI GII THIU ..................................................................................................................................6 M U .................................................................................................................................................8 CHNG 1. NHNG YU T C BN CA NGN NG FORTRAN...................................10

    1.1 CHY MT CHNG TRNH FORTRAN.........................................................................10 1.2 CU TRC CHUNG CA MT CHNG TRNH FORTRAN........................................14 1.3 CU TRC CU LNH........................................................................................................15

    1.3.1 ngha ca du cch (Blank) ..........................................................................................15 1.3.2 Li ch thch.....................................................................................................................16 1.3.3 Dng ni tip ....................................................................................................................16

    1.4 KIU D KIU......................................................................................................................16 1.4.1 Lp cc kiu s (Integer, Real, Complex) ........................................................................17 1.4.2 Kiu k t (Character) v kiu lgic (Logical) ................................................................20 1.4.3 Php ton trn cc kiu d liu ........................................................................................22

    1.5 HNG .....................................................................................................................................24 1.5.1 Hng nguyn.....................................................................................................................24 1.5.2 Hng thc .........................................................................................................................24 1.5.3 Hng k t ........................................................................................................................25

    1.6 TN BIN V TN HNG...................................................................................................26 1.7 QUI TC KIU N................................................................................................................27 1.8 PHONG CCH LP TRNH .................................................................................................29 1.9 BIU THC S .....................................................................................................................29

    1.9.1 Php chia vi s nguyn...................................................................................................30 1.9.2 Biu thc hn hp.............................................................................................................30

    1.10 LNH GN. GN HNG, GN BIU THC...................................................................30 1.11 LNH VO RA N GIN................................................................................................32

    1.11.1 Lnh vo d liu .............................................................................................................32 1.11.2 c d liu t file TEXT.................................................................................................33 1.11.3 Lnh kt xut d liu ......................................................................................................34 1.11.4 Kt xut ra my in ..........................................................................................................35

    1.12 S DNG HM TRONG FORTRAN.................................................................................35 BI TP CHNG 1 ..................................................................................................................38

    CHNG 2. CC CU LNH C BN CA FORTRAN............................................................42 2.1 LNH CHU TRNH (DO LOOPS).........................................................................................42 2.2 LNH R NHNH VI IF ....................................................................................................45

    2.2.1 Dng 1 ..............................................................................................................................45 2.2.2 Dng 2 ..............................................................................................................................46 2.2.3 Dng 3 ..............................................................................................................................47 2.2.4 Dng 4 ..............................................................................................................................48 2.2.5 Lnh nhy v iu kin GOTO .........................................................................................50 2.2.6 Lnh IF s hc ..................................................................................................................51

    2.3 KT HP DO V IF ..............................................................................................................53 2.4 R NHNH VI CU TRC SELECT CASE.....................................................................54 2.5 THAO TC VI HNG V BIN K T (CHARACTER) ..............................................56 BI TP CHNG 2 ..................................................................................................................57

  • 3

    CHNG 3. CC CU TRC M RNG .....................................................................................60 3.1 CHU TRNH DO TNG QUT V CHU TRNH DO LNG NHAU................................60 3.2 CU TRC IF TNG QUT V CU TRC IF LNG NHAU .......................................61 3.3 CHU TRNH NGM ..............................................................................................................64 3.4 NH DNG D LIU BNG LNH FORMAT................................................................64 3.5 CHU TRNH LP KHNG XC NH ...............................................................................66

    3.5.1 Cu trc kt hp IF v GOTO..........................................................................................66 3.5.2 Cu trc DO v EXIT .......................................................................................................68 3.5.3 Cu trc DO WHILEEND DO......................................................................................69 3.5.4 Lnh CYCLE.....................................................................................................................70 3.5.5 Mt s v d v chu trnh lp khng xc nh...................................................................72

    BI TP CHNG 3 ..................................................................................................................74 CHNG 4. CHNG TRNH CON (SUBROUTINE V FUNCTION) V MODUL.............78

    4.1 KHI NIM............................................................................................................................78 4.2 TH VIN CC HM TRONG............................................................................................78 4.3 CC CHNG TRNH CON TRONG .................................................................................79

    4.3.1 Hm trong (Internal FUNCTION) ...................................................................................79 4.3.2 Th tc trong (Internal SUBROUTINE)...........................................................................80

    4.4 CU LNH CONTAINS........................................................................................................81 4.5 MT S V D V CHNG TRNH CON TRONG ........................................................82 4.6 BIN TON CC V BIN A PHNG .......................................................................85 4.7 NH NGHA HM BNG CU LNH N....................................................................87 4.8 CHNG TRNH CON NGOI ...........................................................................................87

    4.8.1 Cu lnh EXTERNAL .......................................................................................................89 4.8.2 Khai bo khi giao din (INTERFACE BLOCK).............................................................89

    4.9 CC THUC TNH CA I S ........................................................................................91 4.9.1 Thuc tnh INTENT ..........................................................................................................91 4.9.2 Thuc tnh OPTIONAL.....................................................................................................92 4.9.3 Thuc tnh SAVE...............................................................................................................93

    4.11 PHP QUI.......................................................................................................................95 BI TP CHNG 4 ..................................................................................................................96

    CHNG 5. MNG ............................................................................................................................98 5.1 KHI NIM V MNG TRONG FORTRAN ......................................................................98 5.2 KHAI BO MNG ................................................................................................................98 5.3 LU TR MNG TRONG B NH V TRUY CP N CC PHN T MNG ....101

    5.3.1 S dng lnh DATA khi to mng ...........................................................................103 5.3.2 Biu thc mng...............................................................................................................104 5.3.3 Cu trc WHERE... ELSEWHERE ... END WHERE......................................................104

    5.4 MNG NG (DYNAMICAL ARRAY) ...........................................................................105 5.5 KIU CON TR ...................................................................................................................107

    5.5.1 Trng thi con tr...........................................................................................................109 5.5.2 Cp pht v gii phng bin con tr ..............................................................................109

    5.6 HM TR V NHIU GI TR .........................................................................................110 BI TP CHNG 5 ................................................................................................................111

    CHNG 6. BIN K T ...............................................................................................................115 6.1 KHAI BO BIN K T ....................................................................................................115 6.2 CC XU CON (SUBSTRING)..........................................................................................116

  • 4

    6.3 X L BIN K T ...........................................................................................................116 6.4 PHP TON GP XU K T .........................................................................................121 6.5 TO NH DNG FORMAT BNG XU K T...........................................................121 6.6 MNG XU K T ............................................................................................................122 BI TP CHNG 6 ................................................................................................................123

    CHNG 7. KIU FILE ..................................................................................................................125 7.1 KHI NIM..........................................................................................................................125 7.2 PHN LOI FILE ................................................................................................................127

    7.2.1 File c nh dng (Formatted Files) ..............................................................................127 7.2.2 File khng nh dng (Unformatted Files).....................................................................127 7.2.3 File dng nh phn (Binary Files) ..................................................................................128 7.2.4 File truy cp tun t (Sequential-Access Files) .............................................................128 7.2.5 File truy cp trc tip (Direct-Access Files) ..................................................................128

    7.3 T CHC D LIU TRONG FILE ....................................................................................129 7.3.1 File truy cp tun t c nh dng .................................................................................129 7.3.2 File truy cp trc tip c nh dng ...............................................................................130 7.3.3 File truy cp tun t khng nh dng ...........................................................................131 7.3.4 File truy cp trc tip khng nh dng .........................................................................132 7.3.5 File truy cp tun t dng nh phn ...............................................................................133 7.3.6 File truy cp trc tip dng nh phn.............................................................................133

    7.4 LNH M (OPEN) V NG (CLOSE) FILE..................................................................134 7.4.1 Lnh m file ....................................................................................................................134 7.4.2 Lnh ng file .................................................................................................................137

    7.5 CC LNH VO RA D LIU VI FILE ........................................................................138 7.5.1 Lnh c d liu t file (READ) .....................................................................................138 7.5.2 Lnh ghi d liu ra file (WRITE)....................................................................................139 7.5.3 Vo ra d liu vi NAMELIST .......................................................................................141 7.5.4 Mt s v d thao tc vi file ..........................................................................................143

    BI TP CHNG 7 ................................................................................................................146 CHNG 8. MT S KIN THC M RNG ..........................................................................149

    8.1 KHAI BO DNG CHUNG B NH................................................................................149 8.1.1 Lnh COMMON .............................................................................................................149 8.1.2 Lnh EQUIVALENT .......................................................................................................150

    8.2 CHNG TRNH CON BLOCK DATA.............................................................................151 8.3 CU LNH INCLUDE ........................................................................................................151 8.4 LNH INQUIRE...................................................................................................................152 8.5 IU KHIN CON TR FILE ............................................................................................154

    8.5.1 Lnh REWIND ................................................................................................................154 8.5.2 Lnh BACKSPACE.........................................................................................................154 8.5.3 Lnh ENDFILE...............................................................................................................154

    8.6 CU TRC D LIU DO NGI DNG NH NGHA................................................155 BI TP CHNG 8 ................................................................................................................159

    CHNG 9. MT S BI TON THNG DNG......................................................................160 9.1 CC BI TON THNG K C BN..............................................................................160

    9.1.1 Tnh trung bnh s hc ca mt chui s liu.................................................................160 9.1.2 Tnh lch chun ca mt chui s liu ......................................................................161 9.1.3 Sp xp chui theo th t tng dn v xc nh gi tr ln nht, nh nht ca chui...161 9.1.4 Xc nh cc phn v ca chui......................................................................................162 9.1.5 Tnh cc mmen phn b................................................................................................163

  • 5

    9.1.6 Tnh mt s c trng thng k khc .............................................................................166 9.1.7 Tnh mmen tng quan v h s tng quan ...............................................................167

    9.2 MT S BI TON V MA TRN ..................................................................................172 9.2.1. Tch hai ma trn ............................................................................................................172 9.2.2. nh thc ca ma trn...................................................................................................173 9.2.3. Phn ph i s .............................................................................................................176 9.2.4. Ma trn nghch o .......................................................................................................177 9.2.5. Gii h phng trnh i s tuyn tnh..........................................................................179

    9.3 TNG QUAN V HI QUI TUYN TNH ....................................................................183 9.3.1. Xy dng phng trnh hi qui tuyn tnh.....................................................................183 9.3.2. Tnh h s tng quan ring..........................................................................................185 9.3.3. Tnh h s tng quan bi .............................................................................................187

    9.4 PHNG PHP S .............................................................................................................188 9.4.1. Tm nghim phng trnh ..............................................................................................188 9.4.2. Tnh tch phn xc nh .................................................................................................190 9.4.3. Sai phn hu hn v o hm .......................................................................................191 9.4.4. Ton t Laplaxian .........................................................................................................195 9.4.5. Gii phng trnh truyn nhit......................................................................................197 9.4.6. Xy dng c s d liu ..................................................................................................201

    BI TP CHNG 9 ................................................................................................................206 TI LIU THAM KHO..................................................................................................................208 PH LC ............................................................................................................................................209

    1. TRNH T CC CU LNH TRONG MT N V CHNG TRNH FORTRAN......209 2. TM TT CC CU LNH CA FORTRAN ....................................................................209 3. MT S HM V TH THC CA FORTRAN...............................................................211

  • 6

    LI GII THIU

    Trong nhng nm gn y, cng vi s pht trin mnh m ca Cng ngh Thng tin v in t Vin thng, nhiu chng trnh, phn mm my tnh ra i v c ng dng rng ri, gp phn thc y s pht trin kinh t, x hi. Trong s , cc ngn ng lp trnh cng ngy cng c pht trin v ph bin. Ngn ng lp trnh Fortran cng khng phi l mt ngoi l. T nhng phin bn u tin vi nhiu hn ch cho n nay Fortran lun l mt trong nhng ngn ng thng dng rt c a chung trong lp trnh gii cc bi ton khoa hc k thut. Vi nhiu th mnh vt tri so vi cc ngn ng lp trnh khc, Fortran thng c ng dng gii cc bi ton ln, i hi phi x l tnh ton nhiu, nht l tnh ton song song.

    Trc nhng nm chn mi ca th k hai mi, khi m th h my PC hy cn mi l Vit Nam, hu nh cc bi ton ng dng u c chy trn cc my tnh ln (MINSK32, EC1022, EC1035, IBM360,) vi cc chng trnh thng c lp bng ngn ng Fortran. Song, khi cc my PC ngy cng ph bin hn, vi nhiu phn mm tin dng i km, thm vo l s i hi v cu hnh my tnh ca Fortran, ngn ng Fortran hu nh b lng qun trong mt thi gian kh di. Nhiu ngi phi thay i thi quen s dng Fortran, t thch ng bng cch chuyn sang tip cn vi cc ngn ng lp trnh khc hoc chuyn hng nghin cu. S thiu thng tin cp nht lm nhiu ngi tng rng Fortran l mt ngn ng c ri, khng ai dng na. Nhng khng phi nh vy. Trc s i hi phi gii quyt nhng bi ton ln (chng ti mun nhn mnh lp cc bi ton khoa hc k thut), chy ch thi gian thc (Realtime), Fortran ngy cng c pht trin v hon thin vi nhiu c im mi. iu cun ht nhiu ngi quay v vi Fortran. Mt l do khc c tc ng khng nh, khin ngi ta tip tc la chn ngn ng lp trnh Fortran l qu trnh quan h hp tc quc t. Khi lm vic vi cc i tc nc ngoi, trong nhiu lnh vc hu ht cc chng trnh c vit bng ngn ng Fortran, nu khng bit v n, ng ngha vi vic i bn khng cng ting ni; v do c th dn n s bt li, km hiu qu khi lm vic vi nhau.

    Nhn thc c tm quan trng ca vn ny, nhng nm gn y, ngn ng lp trnh Fortran c a vo chng trnh o to ca mt s khoa trong trng i hc Khoa hc T nhin, i hc Quc gia H Ni. Mt khc, i vi nhiu nh khoa hc, hin nay ngn ng Fortran tr thnh mt trong nhng cng c lm vic khng th thiu, v tt nhin trong s c chng ti.

    Bi vy, quyn sch ny ra i vi k vng ca chng ti l cung cp cho bn c nhng kin thc c bn nht v ngn ng lp trnh Fortran 90. Qua bn c c th ng dng n mt cch hiu qu trong cc lnh vc chuyn mn ca mnh. Quyn sch c th c dng lm gio trnh ging dy bc i hc v sau i hc cho ngnh Kh tng Thy vn v Hi dng hc, trng i hc Khoa hc T nhin, i hc Quc gia H Ni. Tuy nhin chng ti cng mong mun n s gip cho sinh vin cc bc o to thuc cc ngnh khoa hc khc, nh Vt l hc, Ha hc, Ton hc trong trng i hc Khoa hc T nhin c thm mt ti liu tham kho b ch trong qu trnh hc tp ti trng.

  • 7

    Quyn sch cng c th lm ti liu tham kho cho cc cn b, k s, cc nh nghin cu thuc nhiu lnh vc khc nhau.

    Trong qu trnh bin son quyn sch, mt s ng nghip xut chng ti a thm vo phn ha ca Fortran. Mt s khc li ngh gn phn giao din gia nhng kt qu tnh ton kt xut vi mt s phn mm ha khc, nh GrADS, NCAR Graphics, Chng ti xin chn thnh cm n v ghi nhn nhng kin ng gp qu bu . Nhn thy rng phn ha ca Fortran ch c tch hp trong mt s phin bn chy trn mi trng Microsoft Windows; cn gn kt cc file kt xut ca Fortran vi cc phn mm ha khc t nht cn phi c mt s kin thc c bn v cc phn mm ny. V khun kh quyn sch c hn, chng ti s c gng trnh by nhng ni dung trn trong mt n phm khc trong tng lai.

    Mc d c gng chuyn ti ni dung quyn sch sao cho c th p ng c nhiu i tng, t nhng ngi mi lm quen cho n nhng ngi tng c qu trnh lm vic nht nh vi ngn ng Fortran, vi b cc t d n kh, t n gin n phc tp, song do cn nhiu hn ch v kinh nghim v kin thc, quyn sch cng khng trnh khi nhng khim khuyt. Chng ti rt mong nhn c s ng gp kin ca tt c cc bn c.

    hon thnh quyn sch ny, chng ti nhn c s h tr c v tinh thn v vt cht t pha trng i hc Khoa hc T nhin, i hc Quc gia H Ni, c bit t cc ng nghip thuc Khoa Kh tng Thy vn v Hi dng hc ca trng, ni chng ti gn b trong cng tc ging dy v hot ng khoa hc hng chc nm nay. Nhn y chng ti xin by t lng bit n chn thnh v li cm n su sc.

    H Ni, 22005 Tc gi

  • 8

    M U

    Tp hp cc qui tc c bit m ho nhng kin thc cho my tnh hiu c gi l ngn ng lp trnh. C rt nhiu ngn ng nh vy, v d FORTRAN, BASIC, Pascal, C,... FORTRAN l tn cu to t FORmula TRANslation (din dch cng thc, hay cn gi l cng thc dch), l mt trong nhng ngn ng lp trnh bc cao u tin. N c th s dng nhng tn tng trng biu din nh lng ton hc v vit cc cng thc ton hc di dng thc hp l c th hiu c, nh X = (B+DELTA)/(2*A). tng ca FORTRAN c John Backus xut vo khong cui nm 1953 New York, v chng trnh FORTRAN u tin c chy vo thng 4 nm 1957.

    K t , vic s dng FORTRAN nhanh chng c ph bin rng ri. iu i hi cn phi sm tiu chun ho n sao cho chng trnh vit ra phi bo m chy c mi ni. Vo nm 1966, ln u tin phin bn chun ca ngn ng lp trnh ny c n hnh. Phin bn ny, nh bit, l Fortran 66 (chnh xc hn l FORTRAN 66, nhng thc t ngi ta cho cch vit hoa l khng trang trng). Phin bn chun mi sau , Fortran 77, c n hnh vo nm 1978. Khng bng lng vi s cnh tranh ca cc ngn ng mi khc, nh Pascal v C, FORTRAN tip tc pht trin mt cch mnh m. V phin bn chun gn y, FORTRAN 90 (hoc Fortran 90), vi nhiu c tnh t ph, ra i vo thng 8 nm 1991. Cho n nay, FORTRAN pht trin n nhng phin bn mi hn, nh FORTRAN 95, FORTRAN 2003. Trong khun kh quyn sch ny chng ti ch hn ch trnh by nhng kin thc c bn ca FORTRAN 90. Nhng phn b sung ca cc phin bn sau so vi FORTRAN 90 khng nhiu v cng cha qu cn thit phi a vo y. Trong mt s tnh hung c th, gip ngi c tng lm quen vi FORTRAN 77 hoc cn c thm kin thc c nhng chng trnh ca ngi khc vit bng FORTRAN 77, chng ti s c thm nhng ghi ch m rng thch hp. Nhng ngi thnh tho Fortran mun quan tm n lch s pht trin ca ngn ng lp trnh ny c th tham kho thm cun Fortran 90 Explained, Oxford University Press (Oxford, 1990) ca Michael Metcalf v John ReidMetcalf v Reid.

    Nh ni trn, chnh xc hn nn vit ngn ng FORTRAN, nhng do s thch tu tin, y chng ti cng s vit Fortran thay cho cch vit FORTRAN.

    Quyn sch c b cc trong 9 chng. Chng 1: Nhng yu t c bn ca ngn ng Fortran. Trong chng ny trnh by cch chy mt chng trnh Fortran, cu trc chung ca mt chng trnh, cu trc cu lnh, cc kiu d kiu, biu thc s, cu lnh gn, cc lnh vo ra n gin v cch s dng hm trong Fortran. Chng 2: Cc cu lnh c bn ca Fortran. y trnh by cc cu lnh chu trnh (DO Loops), lnh r nhnh vi IF v SELECT CASE, cch s dng kt hp DO v IF v mt s thao tc vi hng v bin k t (CHARACTER). Chng 3: Cc cu trc m rng. Chng ny trnh by nhng kin thc lin quan n chu trnh DO tng qut v chu trnh DO lng nhau, cu trc IF tng qut v cu trc IF lng nhau, chu trnh ngm, nh dng d liu bng lnh FORMAT v chu trnh lp khng xc nh. Chng 4: Chng trnh con v modul. Chng ny

  • 9

    cp n nhng khi nim v th vin cc hm chun ca Fortran, cc chng trnh con trong, chng trnh con ngoi v modul, v mt s kin thc khc. Chng 5 trnh by nhng kin thc v mng trong Fortran, nh cch khai bo mng, lu tr mng trong b nh v truy cp n cc phn t mng. Chng 6 trnh by v bin k t v x l bin k t. Chng 7 cung cp nhng kin thc v file, nh phn loi file, t chc d liu trong file, cc lnh vo ra d liu vi file. Chng 8: Mt s kin thc m rng. y trnh by cch khai bo dng chung b nh v ng dng, chng trnh con BLOCK DATA, cu trc d liu do ngi dng nh ngha v mt s cu lnh thng gp khc. Chng 9 dn ra mt s bi ton thng dng, nh lp cc bi ton thng k, cc bi ton v ma trn, tng quan v hi qui tuyn tnh, phng php s. Cui mi chng l h thng cc bi tp t gii, nhm cng c nhng kin thc c lin quan.

    Phn cui ca quyn sch l mt s ph lc, gip bn c c th tra cu nhanh ngha h thng cc cu lnh cng nh cc hm v th tc ca Fortran trong qu trnh lp trnh.

  • 10

    CHNG 1. NHNG YU T C BN CA NGN NG FORTRAN

    1.1 CHY MT CHNG TRNH FORTRAN

    Cng nh khi bt u hc mt ngn ng lp trnh no khc, nu l ngi mi lm quen vi Fortran, ta nn chy cc chng trnh v d trong phn ny cng sm cng tt, khng cn c gng hiu mt cch chi tit chng lm vic nh th no. Vic gii thch chng s c gii thiu dn dn cc phn sau. chy c cc chng trnh ny trc ht ta cn phi c mt b phn mm bin dch v c ci t trn h thng my tnh. Ngoi ra, ta cng cn phi lm quen vi b phn mm ny, phi bit cch son tho cc chng trnh Fortran v bin dch ri chy n nh th no. Vic lm quen ny khng mt nhiu thi gian v cng kh n gin, nn khng c trnh by y. Hn na, v Fortran c th lm vic trn nhiu h iu hnh khc nhau, nh cc dng UNIX, LINUX, WINDOWS, DOS, v n cng c nhiu phin bn khc nhau i vi tng h iu hnh, nn s khng y nu ch trnh by y mt hoc mt vi trng hp.

    Chng trnh sau y s a ra li cho mng, nu ta a tn ca mnh vo khi c hi:

    V d 1.1 Chng trnh lm quen

    ! Vi du mo dau ! Loi Chao mung! CHARACTER NAME*20 PRINT*, 'Ten ban la gi?' READ*, NAME PRINT*, 'Xin chao ban ', NAME END

    Kt qu nhn c trn mn hnh khi chy chng trnh ny nh sau (cu tr li l dng ch in nghing):

    Ten ban la gi? Nam Xin chao ban Nam

    Tuy nhin, vi chng trnh trn, nu ta g tn mnh y c H v tn, v gia cc t c du cch th kt qu c th hi bt ng y. Nhng khng sao, chng ta s tm hiu vn ny sau.

    Lu rng, trong on chng trnh trn cc t ting Vit c vit di dng khng du, v khng phi khi no ta cng c th g ting Vit c du, v khng phi khi no kt qu hin th trn mn hnh my tnh cng bng ting Vit c du. Bi vy, trong a s trng hp, nhng cu, t ting Vit xut hin trong cc chng trnh v d s c dng ting Vit khng du. C th iu ny s gy

  • 11

    kh chu khi so snh Fortran vi mt s ngn ng khc. Nhng ta s cm thy t hi lng vi khim khuyt nh ny so vi kh nng tuyt vi ca Fortran.

    Chng trnh sau y cho php tnh gi tr ca hm A(t) = 3219816174 ).t(. khi nhp vo gi tr ca bin t

    V d 1.2: Tnh gi tr ca hm

    ! PROGRAM TinhHam ! Tinh gia tri ham A(t)=174.6*(t1981.2)**3 INTEGER T ! Bin nguyn lu gi tr bin t REAL A ! Bin thc lu gi tr hm A(t) PRINT*,Cho gia tri cua bien t: READ*, T A = 174.6 * (T - 1981.2) ** 3 PRINT*,'Gia tri ham A(t) khi t= ', T, ' la : ', A END PROGRAM TinhHam

    Khi chy chng trnh ny, trn mn hnh s xut hin dng ch (pha di dng ny l con tr mn hnh () nhp nhy): Cho gia tri cua bien t:

    Nu a vo gi tr 2000 (cho bin t) ta s nhn c kt qu:

    Gia tri ham A(t) khi t = 2000 la : 1.1601688E+06

    Gi tr kt qu ca hm c in ra di dng k hiu khoa hc E+06, c ngha l s trc nhn vi 10 lu tha 6, tc l tr s ca A(t) vo khong 1,16 triu. By gi ta hy chy chng trnh ny nhiu ln, mi ln thay i gi tr ca bin t v th tm xem khi no th gi tr ca hm A(t) s t khong 10 triu. Sau , hy th g nhm gi tr ca t (v d g vo 2,000 thay v g 2000) xem Fortran phn ng li nh th no.

    Mt v d khc, gi s ta c 1000 la gi tit kim trong ngn hng vi li sut 9% mi nm. Vy, sau mt nm s tin s c trong ngn hng bng bao nhiu?

    lp chng trnh cho my tnh gii bi ton ny trc ht cn phi lm r vn v mt nguyn tc. Nhn thy rng, s tin s c sau mt nm s l tng ca s tin gc gi v s tin li s c. Nh vy, lgic cc bc thc hin bi ton s l:

    1) Nhp s liu vo my (s tin gc v li sut)

    2) Tnh tin li (tc 9% ca 1000, bng 90)

    3) Cng tin li vo s tin gc (90 + 1000, tc 1090)

    4) In (hin th) s tin s c sau mt nm.

    Vi lgic , ta c th vit chng trnh nh sau:

  • 12

    V d 1.3: Tnh tin gi tit kim

    ! Chuong trinh nay khong nhap du lieu tu ban phim PROGRAM TinhTien ! Tinh tien gui tiet kiem REAL SoTien, TienLai, LaiSuat SoTien = 1000.0 ! S tin gc ban u LaiSuat = 0.09 ! Li sut TienLai = LaiSuat * SoTien SoTien = SoTien + TienLai PRINT*, 'So tien se co sau mot nam:', SoTien END PROGRAM TinhTien

    Ta g chng trnh ny vo my ri chy tnh, v ch rng y my khng i hi phi nhp u vo (input) t bn phm nh v d trc y (Ti sao?). Kt qu nhn c trn mn hnh s l:

    So tien se co sau mot nam: 1.0900000E+03

    S rt c ch nu ta c gng thc hin lp li nhiu ln cc v d trn y, mi ln nh vy th sa i mt t trong chng trnh v theo di xem kt qu thay i nh th no. iu s s gip cho ta t tin hn khi tip cn vi nhng ni dung sau ny ca Fortran.

    By gi ta tm hiu xem trong qu trnh thc hin, cc chng trnh Fortran s lm nhng g. Ni chung, sau khi g li chng trnh (source code) v tin hnh chy (run) n trong mi trng ca h iu hnh my tnh thch hp ( ci t phn mm Fortran), s c hai qu trnh tch bit xy ra. u tin, chng trnh c bin dch (compile), tc l mi cu lnh c dch (translated) sang m my (machine code) sao cho my tnh c th hiu c. Qu trnh ny xy ra nh sau. Trc ht cc cu lnh ca chng trnh s c kim tra v c php (Syntax). Nu khng c li, chng s c dch sang m my v lu tr vo mt file gi l i tng (Object) hay ch. Sau chng s c lin kt (Link) vi h thng th vin chun ca Fortran to thnh file c th thc hin (executable) c. Nu chng trnh cn li, cc li s c ch ra v qu trnh bin dch kt thc m khng to c file ch, v do khng xy ra qu trnh th hai. Nu qu trnh th nht thc hin thnh cng th chuyn sang qu trnh th hai, trong chng trnh dch (tc file c th thc hin c) s c thc hin (executed). bc ny mi mt ch th dch ca chng trnh s ln lt c thc hin theo qui tc lp.

    B chng trnh thc hin trn vn qu trnh th nht (tc l cho n khi to c file c th thc hin executable) thng gi l trnh bin dch (compiler).

    Trong khi bin dch, khng gian b nh RAM ca my tnh nh v cho mi d liu s c pht sinh bi chng trnh. Phn b nh ny c th hiu nh l nhng vng b nh khu tr m mi mt trong chng, ti mt thi im, ch c th xc nh mt gi tr d liu. Cc b nh khu tr ny c tham chiu n bi cc tn k hiu (nh danh) trong chng trnh. Bi vy, cu lnh:

    SoTien = 1000.0

  • 13

    l cp pht s 1000.0 n v tr b nh c tn SoTien. V ni dung ca SoTien c th thay i trong khi chng trnh chy nn n c gi l bin (variable).

    V hnh thc, chng trnh tnh tin gi tit kim (v d 1.3) trn y c bin dch nh sau:

    1) a s 1000 vo v tr b nh SoTien 2) a s 0.09 vo v tr b nh LaiSuat 3) Nhn ni dung ca LaiSuat vi ni dung ca SoTien v a kt qu vo v tr b nh

    TienLai 4) Cng ni dung ca SoTien vi ni dung ca TienLai v a kt qu vo SoTien

    5) In (hin th) thng bo ni dung ca SoTien

    6) Kt thc.

    Khi chy chng trnh, cc cu lnh dch ny c thc hin theo th t t trn xung di. Qu trnh thc hin, cc v tr b nh c s dng s c nhng gi tr sau:

    SoTien : 1000 LaiSuat: 0.09 TienLai: 90 SoTien : 1090

    Ch rng ni dung ban u ca SoTien b thay th bi gi tr mi.

    Cu lnh PROGRAM dng th hai trong v d 1.3 m u cho chng trnh. N l cu lnh tu chn, v c th km theo tn tu . Dng th nht v dng th ba, bt u vi du chm than, l li gii thch, c li cho ngi c chng trnh, v khng nh hng g ti chng trnh dch. Cc bin trong chng trnh c th c cc kiu (type) khc nhau; cu lnh REAL trong v d ny l khai bo kiu. Cc dng trng (nu c) trong chng trnh c xem nh nhng cu lnh khng thc hin (non-executable), tc l khng c tc ng no c thc hin, c th chn thm vo cho chng trnh c sng sa, khng ri mt.

    By gi ta hy th lm li v d ny nh sau.

    1) Chy chng trnh v ghi nh li kt qu

    2) Thay i cu lnh thc hin SoTien = 1000.0 bi cu lnh SoTien = 2000.0 v chy li chng trnh. R rng c th hiu c ti sao kt qu mi li khc vi kt qu trc .

    3) Tip n, loi b dng lnh

    SoTien = SoTien + TienLai

    v chy li chng trnh. Kt qu nhn c l s tin khng thay i! Nh vy, do loi b dng lnh

    SoTien = SoTien + TienLai

    nn s tin li s khng c cng vo, tc ni dung b nh ca bin SoTien khng c cp nht.

  • 14

    Tm li, gii mt bi ton bng lp trnh vi ngn ng Fortran ta cn thc hin theo trnh t cc bc sau:

    1) Phn tch bi ton, xc nh thut gii, cc bc thc hin v trnh t thc hin cc bc. y l bc ht sc quan trng, v n quyt nh s ng n v mt lgic ca vic gii bi ton. Do , ni chung ta nn lp mt dn bi c th v biu din n qua cc s (thng gi l s khi)

    2) Son tho m ngun ca chng trnh (chng trnh ngun, hay li chng trnh), tc l ngn ng ho cc thut gii, theo ng trnh t lp v lu vo mt (hoc mt s) file vi phn m rng l *.f90 (hoc *.f, *.for, ngm nh i vi Fortran 77).

    3) Tin hnh bin dch chng trnh. bc ny nu chng trnh vn cn li c php ta s quay li bc 2) chnh sa ri tip tc bin dch li chng trnh. Qu trnh c tip din cho n khi trnh bin dch to c file ch (Ojective file) v thc hin lin kt (link) nhn c file thc hin (executable file).

    4) Chy chng trnh (tc chy file thc hin) nhn c kt qu. Sau khi nhn c kt qu tnh ta cn phn tch, xem xt tnh hp l, ng n ca n. Nu kt qu khng ph hp cn phi xem xt li bc 1) v bc 2).

    1.2 CU TRC CHUNG CA MT CHNG TRNH FORTRAN

    Cu trc chung ca mt chng trnh Fortran n gin nh sau (nhng phn t trong du ngoc vung l tu chn, c th c, cng c th khng):

    [PROGRAM TenChuongTrinh] [Cac_cau_lenh_khai_bao] [Cac_cau_lenh_thuc_hien] END [PROGRAM [TenChuongTrinh]]

    Nh thy, ch c mt cu lnh bt buc trong chng trnh Fortran l END. Cu lnh ny bo cho chng trnh dch rng khng cn cu lnh no hn na dch.

    K hiu

    END [PROGRAM [TenChuongTrinh]]

    c ngha rng c th b qua TenChuongTrinh trong cu lnh END, nhng nu c TenChuongTrinh th t kho PROGRAM l bt buc.

    TenChuongTrinh l tn ca chng trnh, thng c t mt cch ty sao cho mang tnh gi nh, rng chng trnh s gii quyt vn g. Cac_cau_lenh_khai_bao l nhng cu lnh khai bo bin, hng,... v kiu d liu tng ng ca chng trnh bin dch cp pht b nh, phn lung x l. Cac_cau_lenh_thuc_hien l nhng cu lnh xc nh qui tc v trnh t thc hin tnh ton, x l t c kt qu.

  • 15

    Trong cu trc trn, cc mc (nu c) bt buc phi xut hin theo trnh t nh m t. C ngha l sau cu lnh m t tn chng trnh s l cc cu lnh khai bo, tip theo l cc cu lnh thc hin. Cu lnh END phi t cui chng trnh.

    1.3 CU TRC CU LNH

    Dng cu lnh c bn ca mi chng trnh Fortran 90 c th gm t 0 n 132 k t (cu lnh c th l trng rng; cu lnh trng rng lm cho chng trnh d c hn bi s phn cch lgic gia cc on). i vi phin bn Fortran 77 v cc phin bn trc , ni dung cc cu lnh phi bt u t ct th 7 v ko di ti a n ct th 72. Nu cu lnh c ni dung di hn, n s c ngt xung dng di, v dng ni tip ny phi c mt k t bt k (khc du cch) xut hin ct th 6. Bn c cn lu c im ny khi s dng cc chng trnh ca ngi khc, hoc ca chnh mnh, lp trnh vi cc phin bn Fortran 77 v trc . Fortran 90 khng c s hn ch .

    Mt cu lnh cng c th c nhn. Nhn l mt s nguyn dng trong khong 199999. Nhn (nu c) phi l duy nht trong mt chng trnh v phi t u cu lnh, phn cch vi ni dung cu lnh bi t nht mt du cch. i vi Fortran 77 v cc phin bn trc, nhn c ghi vo cc ct 15.

    Tt c cc cu lnh, tr cu lnh gn (v d Sotien = 1000.0), u bt u bng cc t kho (keyword). Trn y chng ta gp mt s t kho nh END, PRINT, PROGRAM, v REAL.

    Ni chung trn mi dng c mt cu lnh. Tuy nhin, nhiu cu lnh cng c th xut hin trn mt dng, nhng chng phi c phn cch nhau bi cc du chm phy (;). cho r rng, ch nn vit nhng cu lnh gn rt ngn, nh:

    A = 1; B = 1; C = 1

    Nhng cu lnh di c th c vit trn nhiu dng v phi c k hiu ni dng (s c trnh by di y).

    1.3.1 ngha ca du cch (Blank)

    Ni chung cc du cch l khng quan trng, ta c th s dng chng lm cho chng trnh d c hn bng cch vit tht cu lnh vo (thm du cch vo pha bn tri) hoc chn vo gia cc cu lnh. Tuy nhin, cng c nhng ch khng c php chn du cch vo, nh cc qui c v cch vit t kha, tn bin,... m ta gi l cc k hiu qui c.

    K hiu qui c trong Fortran 90 l mt chui lin tip cc k t c ngha, chng hn cc nhn, cc t kha, tn, hng,... Nh vy, cc cch vit INTE GER, So Tien v < = l khng c php (

  • 16

    Tuy nhin, tn, hng hoc nhn cn phi c phn cch vi cc t kho, tn, hng hoc nhn khc t nht mt du cch. Nh vy REALX v 30CONTINUE l khng c php (v X l bin, cn 30 l nhn).

    1.3.2 Li ch thch

    Mi k t theo sau du chm than (!) (ngoi tr trong xu k t) l li ch thch, v c chng trnh dch b qua. Ton b ni dung trn cng mt dng c th l li ch thch. Dng trng cng c dch nh dng ch thch. Li ch thch c th c dng mt cch tu lm cho chng trnh d c.

    i vi Fortran 77, nu ct u tin c k t C hoc c th ni dung cha trn dng s c hiu l li ch thch. Qui tc ny khng c Fortran 90 chp nhn. Nhng thay cho cc k t C hoc c", nu s dng k t du chm than th chng li tng ng nhau.

    1.3.3 Dng ni tip

    Nu cu lnh qu di n c th c chuyn mt phn xung dng tip theo bng cch thm k hiu ni dng (&) vo cui cng ca dng trc khi ngt phn cn li xung dng di. V d:

    A = 174.6 * & (T - 1981.2) ** 3

    Nh ni trn, Fortran 77 s dng ct th 6 lm ct ni dng, do cch chuyn tip dng ca Fortran 90 s khng tng thch vi Fortran 77.

    Du & ti cui ca dng ch thch s khng c hiu l s ni tip ca dng ch thch, v khi & c xem nh l mt phn ca ch thch.

    1.4 KIU D KIU

    Nh thy trn y, cc chng trnh Fortran thng c bt u bng cc cu lnh khai bo bin, hng v kiu d liu ca chng. Khi nim kiu d liu (data type) l khi nim c bn trong Fortran 90. Kiu d liu bao gm tp hp cc gi tr d liu (chng hn, ton b cc s), cch thc biu th chng (v d, 2, 0, 999), v tp hp cc php ton (v d, php ton s hc) cho php xut hin trong chng.

    Fortran 90 nh ngha 5 kiu d liu chun, c chia thnh hai lp l lp cc kiu s (numeric) gm s nguyn (integer), s thc (real) v s phc (complex), v lp cc kiu khng phi s (non-numeric) gm kiu k t (character) v kiu lgic (logical).

    Lin kt vi mi kiu d liu l cc loi (kind) d liu. V c bn iu lin quan n kh nng lu tr v biu din gi tr d liu. Chng hn, c th c hai loi s nguyn (integer): s nguyn ngn v s nguyn di. Chng ta s cp n vn ny su hn cc phn sau.

  • 17

    Ngoi cc kiu d liu chun trn y, ta c th nh ngha cho ring mnh cc kiu d liu khc, chng c th c cc tp gi tr v cc php ton ring.

    Gn lin vi cc kiu d liu cn c cc thuc tnh d liu. Fortran nh ngha kh nhiu thuc tnh, sau y l mt s thuc tnh thng dng:

    PARAMETER: thuc tnh hng, DIMENSION: thuc tnh mng, ALLOCATABLE: thuc tnh cp pht ng, POINTER: thuc tnh con tr, ...

    Thuc tnh c th c dng i km vi cu lnh khai bo kiu d liu m t kiu d liu ca bin, hng. Trong nhiu trng hp thuc tnh cng c th c dng c lp nh nhng cu lnh khai bo.

    1.4.1 Lp cc kiu s (Integer, Real, Complex)

    a. Kiu s nguyn

    D liu c kiu s nguyn l nhng d liu nhn cc gi tr thuc tp s nguyn, v d 0, 1, 2, 3,..., 5, 10,... l tp hp cc s c th m c hay tp c th t, tc l mt s nguyn bt k lun c mt s lin trc v mt s lin sau. khai bo bin hoc hng c kiu s nguyn ta s dng cu lnh:

    INTEGER [([KIND=]kind)][,attrs] ::] vname Trong :

    kind l loi, nhn mt trong cc gi tr 1, 2, 4 hoc 8 (i vi UNIX hoc LINUX).

    attrs l thuc tnh, nhn mt, hoc nhiu hn, trong cc gi tr PARAMETER, DIMENSION, ALLOCATABLE, POINTER,

    vname l danh sch bin hoc hng, c vit cch nhau bi cc du phy.

    Ty theo loi m mt bin/hng nguyn s chim dung lng b nh v phm vi gi tr l ln hay nh. Trong bng 1.1 dn ra min gi tr hp l i vi cc loi s nguyn c khai bo, trong ct 1 biu th nhng cch c th khai bo, ct 2 l dung lng b nh b chim gi ng vi cc loi s nguyn, v ct 3 l phm vi gi tr ca cc loi s nguyn tng ng khai bo.

    Bng 1.1 Min gi tr v dung lng b nh ca kiu s nguyn Cch khai bo S byte chim gi Phm vi gi tr

    INTEGER 4 2 147 483 648 n 2 147 483 647

    INTEGER*1 hoc INTEGER (1) hoc INTEGER (KIND=1)

    1 128 n 127 INTEGER*2 hoc INTEGER (2) hoc INTEGER (KIND=2)

    2 32 768 n 32 767 INTEGER*4 hoc INTEGER 4 2 147 483 648 n

  • 18

    (4) hoc INTEGER (KIND=4) 2 147 483 647

    Cc v d sau y cho thy c th s dng cc cch khc nhau khai bo kiu s nguyn cho cc bin, hng.

    INTEGER, DIMENSION(:), POINTER :: days, hours INTEGER(2), POINTER :: k, limit INTEGER(1), DIMENSION(10) :: min

    Tt c cc bin c khai bo trn y u c kiu s nguyn. Dng th nht khai bo cc bin days, hours l nhng bin mng mt chiu c thuc tnh con tr, vi kch thc cha xc nh, mi phn t mng l mt s nguyn 4 byte; dng th hai khai bo hai bin n (bin v hng) k, limit c thuc tnh con tr kiu s nguyn loi 2 byte; dng th ba khai bo mt bin mng min gm 10 phn t, mi phn t l mt s nguyn loi 1 byte. Nhng khai bo trn tng ng vi cch khai bo di y:

    INTEGER days, hours INTEGER(2) k, limit INTEGER(1) min DIMENSION days(:), hours(:), min (10) POINTER days, hours, k, limit

    Cc bin trn cng c th c khi to gi tr ban u thng qua cc lnh khai bo, chng hn:

    INTEGER (2) :: k=4 INTEGER (2), PARAMETER :: limit=12

    Trong khai bo trn, bin limit c thuc tnh l PARAMETER nn gi tr ca n s khng b bin i trong qu trnh thc hin chng trnh. Bi vy n c gi l hng, khc vi k l bin. Cng c th khai bo bin v hng di dng sau y:

    INTEGER days, hours INTEGER (2):: k=4, limit DIMENSION days(:), hours(:) POINTER days, hours PARAMETER (limit=12)

    Vi cch khai bo ny, cc t kha DIMENSION, POINTER, PARAMETER ( ba dng cui) c gi l cc lnh khai bo, dng nh ngha bin, hng v thuc tnh ca chng.

    b. Kiu s thc

    Kiu s thc ni chung gn ging vi tp s thc trong ton hc. Khc vi kiu s nguyn, kiu s thc l tp hp khng m c, hay tp khng c th t. biu din s thc Fortran 90 s dng hai phng php gn ng l chnh xc n v chnh xc kp. C th khai bo kiu s thc bng cu lnh:

    REAL [([KIND=]kind)][[,attrs] ::] vname i vi s thc chnh xc kp (hay chnh xc gp i) ta cn c th s dng cu lnh khai

    bo:

    DOUBLE PRECISION [[,attrs] ::] vname Trong :

  • 19

    kind l loi, nhn gi tr 4, 8 hoc 16 (i vi UNIX hoc LINUX).

    attrs l thuc tnh, nhn mt, hoc nhiu hn, trong cc gi tr PARAMETER, DIMENSION, ALLOCATABLE, POINTER,

    vname l danh sch bin hoc hng, vit cch nhau bi cc du phy.

    Cch khai bo, phm vi gi tr, chnh xc v dung lng b nh b chim gi ng vi tng loi s thc c cho trong bng 1.2, trong cc ct 1, 2, 4 c m t tng t nh cc ct 1, 2, 3 trong bng 1.1. Ring ct th 3 y, do s thc ch c biu din gn ng nn gi tr ca chng ch t c chnh xc nht nh ty theo dung lng nh dng m t chng. chnh xc trong trng hp ny c hiu l s ch s c th biu din chnh xc gi tr ca bin/hng thc. V d, nu chy chng trnh sau y

    REAL X X = 123456789.0 PRINT '(F30.2)', X end

    ta s nhn c kt qu trn mn hnh l:

    X= 123456800.00

    C l bn c s ngc nhin, v bin x ch c gn gi tr ri in ra m gi tr in ra li khc vi gi tr gn vo? Nguyn nhn ca s khc nhau ny l ch, ta khai bo bin x l loi s thc 4 byte, do ch c 6 ch s u tin biu din chnh xc gi tr ca bin x.

    Bng 1.2 Min gi tr v dung lng b nh ca kiu s thc

    Cch khai bo S

    byte chim

    gi

    chnh xc (s ch s)

    Phm vi gi tr

    REAL REAL*4 REAL (KIND=4)

    4

    6

    3.4028235E+38 n 1.1754944E38; 0;

    +1.1754944E38 n +3.4028235E+38 REAL*8 REAL (KIND=8) DOUBLE PRECISION

    8

    15

    1.797693134862316D+308 n 2.225073858507201D308;

    0; +2.225073858507201D308 n

    +1.797693134862316D+308

    Sau y l mt s v d khai bo cc bin, hng c kiu s thc.

    ! Khai bao cac bien co kieu du lieu so thuc REAL X, Y(10) REAL*4 A,B REAL (KIND=8), DIMENSION (5) :: U,V DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: T REAL, PARAMETER :: R_TDat = 6370.0

    Dng th nht khai bo mt bin n X v mt bin mng Y gm 10 phn t, chng u l nhng s thc loi 4 byte; dng th hai khai bo hai bin n A v B l nhng bin thc loi 4 byte; dng th ba khai bo hai bin mng U, V, mi bin gm 5 phn t l nhng s thc loi 8 byte; dng

  • 20

    th t khai bo bin mng thuc tnh ng T c chnh xc gp i, tc mi phn t mng chim 8 byte; dng cui cng khai bo hng n R_TDat, c gi tr khi to bng 6370.0.

    c. Kiu s phc

    S phc c nh ngha nh mt cp c th t ca hai s thc c gi l phn thc v phn o. D liu kiu s phc c khai bo bng cu lnh:

    COMPLEX [([KIND =]kind)] [[,attrs] :: ] vname Trong tham s kind nhn gi tr 4 hoc 8; tham s attrs l mt hoc nhiu thuc tnh, nhn

    cc gi tr PARAMETER, DIMENSION, ALLOCATABLE, POINTER,; vname l danh sch bin hoc hng, vit cch nhau bi cc du phy.

    chnh xc v phm vi gi tr ca kiu s phc l chnh xc v phm vi gi tr ca cc phn thc v phn o. Dung lng b nh chim gi ca mt s phc l dung lng ca hai s thc. Bng 1.3 lit k cc cch khai bo v s byte chim gi ca cc bin, hng c kiu s phc.

    V d, cu lnh:

    COMPLEX (4), DIMENSION (8) :: cz, cq khai bo hai bin phc cz v cq, mi bin l mt mng gm 8 phn t phc, tc l 8 cp s thc, mi s thc chim 4 byte. Cu lnh ny tng ng vi hai cu lnh sau:

    COMPLEX(4) cz, cq DIMENSION(8) cz, cq

    Bng 1.3 Min gi tr v dung lng b nh ca kiu s phc Cch khai bo S byte chim gi

    COMPLEX COMPLEX *4 COMPLEX (4) COMPLEX (KIND=4)

    8

    COMPLEX *8 COMPLEX (8) COMPLEX (KIND=8) DOUBLE CPMPLEX

    16

    1.4.2 Kiu k t (Character) v kiu lgic (Logical)

    a. Kiu k t

    Kiu k t c tp gi tr l cc k t lp thnh xu (chui) k t. di ca xu l s k t trong xu c khai bo. Mi k t trong xu k t chim 1 byte b nh. Do , s byte chim gi b nh ca bin, hng kiu k t ty thuc di ca xu. Cu lnh tng qut khai bo bin, hng kiu k t c th l mt trong cc cch sau.

    Cch 1:

    CHARACTER (length) vname Trong length l mt s nguyn dng ch di cc i ca vname; vname l danh sch tn

    bin, hng c kiu xu k t, vit cch nhau bi du phy.

    Cch 2:

  • 21

    CHARACTER (type[,type])[attrib[,attrib]] :: vname

    Vi type l tham s di v loi, nhn mt trong cc dng:

    (LEN = type-value) (KIND = expr) (KIND = expr, LEN = type-value) ([LEN =] type-value, KIND = expr)

    trong typevalue c th l du sao (*), hng nguyn khng du, hoc biu thc nguyn; expr l biu thc xc nh gi tr hng nguyn tng ng vi phng php biu din k t (chng hn, ch ci Latinh, ch ci Hylp,).

    attrib l mt hoc nhiu thuc tnh, vit cch nhau bi du phy. Nu ch ra thuc tnh th sau phi s dng du (::). Cc thuc tnh c th l: ALLOCATABLE, DIMENSION, PARAMETER, POINTER,...

    Cch 3:

    CHARACTER [*chrs] vname [*lengths][(dim)] & [/values/][,vname [*lengths][(dim)]] [/values/]

    Trong : chrs l di (cc i) ca cc xu, c th l mt s nguyn khng du, biu thc nguyn nm trong ngoc n, hoc du sao nm trong ngoc n (*); lengths l di (cc i) ca xu, c th l s nguyn khng du, biu thc nguyn nm trong ngoc n, hoc du sao nm trong ngoc n (*); dim: khai bo mng, tc vname nh l mng; /values/ l lit k cc hng k t, tc gi tr ca cc bin, hng vname.

    V d:

    CHARACTER (20) St1, St2*30 CHARACTER wt*10, city*80, ch CHARACTER (LEN = 10), PRIVATE :: vs CHARACTER*(*) arg CHARACTER name(10)*20 CHARACTER(len=20), dimension(10):: plume CHARACTER(2) susan,patty,alice*12,dotty, jane(79) CHARACTER*5 word /'start'/

    Cc khai bo trn y c ngha nh sau: bin St1 c di cc i bng 20 k t, bin St2 c di cc i bng 30 k t; cc bin wt, city, ch tng ng c di cc i l 10, 80 v 1 k t; bin vs c di cc i bng 10 k t v c thuc tnh PRIVATE; bin arg c di khng xc nh; cc bin mng mt chiu name, plume mi mng gm 10 phn t, mi phn t l mt xu c di cc i 20 k t; cc bin susan, patty, dotty c di cc i 2 k t, bin alice c di cc i 12 k t v bin mng jane gm 79 phn t, mi phn t l mt xu di 2 k t; bin word di ti a 5 k t v c khi to gi tr u bng 'start'.

    b. Kiu lgic

    D liu kiu lgic ch nhn cc gi tr .TRUE. hoc .FALSE. Cu lnh khai bo kiu d liu lgic c dng:

  • 22

    LOGICAL [([KIND=]kind)] [, attrs ::] vname

    Trong :

    kind: l di tnh bng byte, nhn cc gi tr 1, 2, hoc 4.

    attrs: l cc thuc tnh, c th nhn mt hoc nhiu gi tr, phn cch nhau bi du phy.

    vname: Danh sch cc bin, hng, phn cch nhau bi du phy.

    S byte chim gi b nh ca kiu d liu logic ph thuc vo loi d liu nh m t trong bng 1.4.

    Bng 1.4 Min gi tr v dung lng b nh ca kiu lgic Cch khai bo Loi (KIND) S byte chim gi

    LOGICAL 4 4 LOGICAL*1 hoc LOGICAL (1) hoc LOGICAL (KIND=1)

    1

    1

    LOGICAL*2 hoc LOGICAL (2) hoc LOGICAL (KIND=2)

    2

    4

    LOGICAL*4 hoc LOGICAL (4) hoc LOGICAL (KIND=4)

    4

    4

    V d, cc cu lnh sau y khai bo cc bin c kiu lgic di cc dng khc nhau:

    LOGICAL, ALLOCATABLE :: flag1, flag2 LOGICAL (2), SAVE :: doit, dont = .FALSE. LOGICAL switch

    Cch khai bo hon ton tng ng vi cc cu lnh khai bo sau y:

    LOGICAL flag1, flag2 LOGICAL (2) doit, dont = .FALSE. ALLOCATABLE flag1, flag2 SAVE doit, dont

    1.4.3 Php ton trn cc kiu d liu

    Trong cc v d trc y ta thy mt s biu thc vit bng ngn ng Fortran trong c s dng mt s php ton, nh php nhn hai s, php cng hai s,... Tuy nhin, vi cc kiu d liu khc nhau, cc php ton trn chng cng c th khc nhau. Sau y s trnh by chi tit hn v vn ny.

    Ni chung, Fortran nh ngha bn lp php ton tng ng vi cc kiu d liu c m t:

    Php ton s hc: S dng vi cc kiu s nguyn, s thc v s phc. Php ton quan h, hay php ton so snh: S dng vi cc kiu s nguyn, s thc, kiu k

    t, v cng c th i vi c s phc trong trng hp so snh bng hoc khng bng.

    Php ton lgic: S dng vi kiu lgic, v c th vi c s nguyn. Php ton gp xu k t: S dng vi kiu k t.

  • 23

    Bng 1.5 lit k k hiu cc php ton, th t u tin, th t thc hin trong biu thc v ngha ca chng, trong th t u tin c xp sao cho mc u tin cao nht l 1.

    Mc d vy, trong lc vit chng trnh ta cn ch mt s im sau y khi thc hin cc php ton i vi cc kiu d liu khc nhau:

    Trong mt biu thc s hc, nu cc ton hng c cng kiu d liu th kiu d liu kt qu l kiu d liu ca cc ton hng. Nu cc ton hng khc kiu d liu th kt qu nhn c s c kiu d liu ca ton hng c kiu mnh nht. Chng hn, biu thc gm hn hp c s nguyn v s thc th kt qu s c kiu s thc, v kiu s thc mnh hn kiu s nguyn. Tuy nhin, khi gn kt qu cho mt bin th kiu ca kt qu s c chuyn thnh kiu d liu ca bin. V d, nu a, b, x l cc bin thc, cn n l bin nguyn th:

    a=22.9; b=6.1 => x=a+b=16.8; nhng n=a+b=16 a=2.9; b=6.8 => x=a+b=9.7; nhng n=a+b = 9 Nh thy, gi tr ca a+b sau khi gn cho n th phn thp phn s b cht ct.

    Kt qu ca biu thc quan h v biu thc lgic lun lun nhn gi tr hoc .TRUE. hoc .FALSE.

    Bng 1.5 nh ngha cc php ton trong Fortran

    Sau y l mt s v d c lng gi tr ca biu thc:

    2 ** 9 ** 0.5 cho kt qu l 8

    K hiu php ton

    Tn gi/ ngha Th t u tin

    Th t thc hin V d

    Php ton s hc ** Php ly tha 1 Phi sang tri A ** B * Php nhn 2 Tri sang phi A * B / Php chia 2 Tri sang phi A / B + Php cng 3 Tri sang phi A + B Php tr 3 Tri sang phi A B

    Php ton quan h .EQ. ( ==

    ) Bng Khng phn nh A.EQ.B; A == B

    .LT. ( < ) Nh hn Khng phn nh A.LT.B; A < B

    .LE. ( B .GE. ( >=

    ) Ln hn hoc bng Khng phn nh A.GE.B; A >= B

    .NE. ( /= )

    Khng bng (Khc) Khng phn nh A.NE.B; A /= B Php ton lgic

    .NOT. Ph nh 1 Khng phn nh .NOT. L1

    .AND. V (Php hi) 2 Tri sang phi L1. AND. L2 .OR. Hoc (Php tuyn) 3 Tri sang phi L1. OR. L2

    .XOR. Hoc trit tiu 4 Tri sang phi L1. XOR. L2

    .EQV. Tng ng 4 Tri sang phi L1. EQV. L2 .NEQV. Khng tng ng 4 Tri sang phi L1. NEQV. L2

    Gp k t // Gp hai xu k t Tri sang phi ST1 // ST2

  • 24

    10 + 3 * 2 ** 4 16 / 2 cho kt qu l 50 3.5 > 7.2 cho kt qu l .FALSE.

    Nu a v b l hai bin lgic, khi cc php ton gia a v b s cho kt qu:

    Gi tr ca a v ca b a .AND. b a .OR. b a .EQV. b a .NEQV. b

    a.XOR.b

    a=.TRUE., b=.TRUE. .TRUE. .TRUE. .TRUE. .FALSE. .FALSE.

    a=.TRUE., b=.FALSE. .FALSE. .TRUE. .FALSE. .TRUE. .TRUE.

    a=.FALSE., b=.TRUE. .FALSE. .TRUE. .FALSE. .TRUE. .TRUE.

    a=.FALSE., b=.FALSE. .FALSE. .FALSE. .TRUE. .FALSE. .FALSE.

    Nu ST1 v ST2 l hai xu k t nhn cc gi tr:

    ST1=Hanoi ST2= Vietnam th

    ST1 // ST2 s cho kt qu l Hanoi Vietnam 1.5 HNG

    Hng l nhng k hiu qui c c s dng biu th cc gi tr c kiu ring. Mi kiu d liu c mt loi hng tng ng.

    1.5.1 Hng nguyn

    Hng nguyn c s dng biu th cc gi tr kiu s nguyn thc s. Biu din n gin nht v r rng nht l s nguyn khng du hoc c du. Trong trng hp hng nguyn dng, th du l khng bt buc (tu ). V d:

    1000, 0, +753, 999999, 2501 l nhng hng biu din trong h c s thp phn (c s 10). Cc s dng cng c th c biu din di dng nh phn (binary c s 2), bt phn (octal c s 8) hoc thp lc phn (hexa c s 16), v d:

    trong h c s 2 (binary): B'1011' trong h c s 8 (octal): O'0767' trong h c s 16 (hexadecimal): Z'12EF'

    Trong cc biu din trn, c th s dng ch in thng hoc ch in hoa. Du nhy kp (") c th c s dng thay cho du nhy n (') nh l s phn ranh gii. Tuy nhin, cc dng thc ny khng c dng vi cu lnh DATA.

    1.5.2 Hng thc

    Hng thc dng biu th cc gi tr c kiu s thc v c hai dng.

  • 25

    Dng th nht c vit rt r rng, gi l dng du phy tnh, bao gm mt dy s c cha du chm thp phn. N c th c du hoc khng du. V d:

    0.09 37. 37.0 .0 -.6829135

    Nh vy, khi vit mt hng thc, c th khng c s no pha bn tri hoc pha bn phi du chm thp phn (nh 37. v .0), nhng ch c mt du chm thp phn khng thi th khng c php.

    Dng th hai c gi l dng du phy ng. V c bn n bao gm hoc mt s nguyn hoc mt s thc du phy tnh (c th c du hoc khng) v sau l ch ci E (hoc e), tip theo l s nguyn (c du hoc khng). S nguyn ng ng sau E l ch s m ca 10, hm rng l 10 lu tha m s ng trc E phi nhn vi n. V d:

    2.0E2 (2.0 102 = 200.0) 2E2 (2 102 = 200.0) 4.12E+2 (4.12 10+2 = 412.0) -7.321E-4 (7.321 104 = -0.0007321) Hng thc c lu tr di dng lu tha trong b nh, khng quan trng chng c vit

    thc s nh th no. Bi vy, nu s thc c th c biu din di dng phn s th chng cng s c biu din gn ng. Thm ch, gia s nguyn v s thc c cng gi tr, chng cng c biu din khc nhau. V v 43 l s nguyn, trong khi 43.0 (hoc 43.) l s thc, v chng s c biu din khc nhau trong b nh.

    Phm vi v chnh xc ca hng thc khng c ch ra mt cch chun xc, nhng chnh xc khong 67 ch s thp phn.

    1.5.3 Hng k t

    Hng k t l mt chui cc k t nm trong cp du nhy n ( ) hoc nhy kp ( ). Ngoi tr cc k t iu khin (chng hn, #27 l ESC), nhng k t khc thuc bng m k t ASCII (American Standard Code for Information Interchange Bng m chun dng trao i thng tin gia cc thit b my tnh, gm 256 k t, k c cc ch ci, k t thng thng, k t iu khin v k t ha) u c th c s dng biu din hng k t. Bi v mi k t trong bng m ASCII tng ng vi s th t duy nht ca n, nn cc gi tr ca hng k t c s phn bit gia ch thng v ch hoa.

    V d: HANOI khc vi Hanoi, hoc Hai Phong khc vi Hai phong, Cng cn phn bit r khi nim hng m ta va cp trn y vi hng c khai bo trong

    cu lnh thuc tnh PARAMETER. Khi nim hng y l nhng gi tr c th, chng c th c gn cho bin hoc hng c tn. Cn hng trong khai bo PARAMETER l hng c tn c xc nh bi tn hng v nhn gi tr c th l hng theo khi nim y; hng s khng b thay i gi tr trong qu trnh thc hin chng trnh. V d, hy xt on chng trnh sau:

    REAL, PARAMETER :: X = 12.

  • 26

    REAL Y, Z Y = 23. Z = X + Y PRINT*, X, Y, Z END

    y, X l hng (c tn), nhn gi tr khng i (l hng s) bng 12. Cn Y v Z l cc bin, trong Y c gn bi hng s c gi tr bng 23.

    1.6 TN BIN V TN HNG

    Ta thy rng v tr b nh c th c ch nh bi tn tng trng (symbolic names), gi l tn bin hoc tn hng, nh SoTien v LaiSuat. Tn bin, tn hng c th gm 1 n 31 k t, v phi bt u bi mt ch ci ting Anh. Cc k t c s dng cu to tn bin, tn hng gm 26 ch ci ting Anh, khng phn bit ch thng, ch hoa, (AZ v az), 10 ch s (09), v du gch di (_).

    Ngoi tr hng xu k t, Fortran khng phn bit tn vit bng ch thng hay ch hoa, v d MYNAME v MyName l nh nhau. C l nhng ngi c truyn thng lp trnh Fortran lu nm thng vit chng trnh ch bng ch ci in hoa. Tuy nhin ta nn vit ln c ch thng v ch hoa cho d c. Chng hn, nu ta vit SoTien chc chn s d hiu hn l vit SOTIEN. Mt khc, v Fortran 90, v c cc phin bn mi hn sau ny, khng khng ch di tn ch 6 k t nh cc phin bn c, nn r rng, tn vit di c th s tt hn tn vit ngn, v n mang tnh gi nh hn. Chng hn, nn vit SoTien thay cho cch vit n gin ST.

    Sau y l mt s v d v cch t tn bin, tn hng hp l v khng hp l: Tn hp l Tn khng hp l

    X X+Y (v cha du + l mt php ton) R2D2 SHADOW FAX (v cha du cch) Pay_Day 2A (v k t u tin l ch s) ENDOFTHEMONTH OBI-WAN (v cha du l mt php ton)

    Bin l v tr b nh m gi tr ca n c th b thay i trong qu trnh thc hin chng trnh. Tn ca bin c cu to theo qui tc trn y. Bin c kiu v loi d liu xc nh, c cho bi khai bo kiu, v d:

    INTEGER X ! X l bin nguyn 4 byte REAL LaiSuat ! LaiSuat l bin thc 4 byte CHARACTER LETTER ! LETTER l bin k t di bng 1 REAL :: A = 1 ! A l bin thc nhn gi tr khi to 1

    Ch rng, bin c th c khi to khi khai bo n, nh cu lnh cui cng v d trn. Trong trng hp ny phi s dng du hai chm kp (::). Gi tr ca bin c khi to theo cch ny c th b thay i trong qu trnh chng trnh thc hin.

    Mc d cc bin X, LaiSuat v LETTER c khai bo trong on chng trnh trn, nhng gi tr ca chng vn cha c xc nh. Bn c (c bit l nhng ngi mi bt u lp trnh) phi ch trnh vic tham chiu n cc bin cha c xc nh ny, v n c th s dn n

  • 27

    li trong lc thc hin chng trnh (Runtime error), rt kh g ri. V d, khi chy chng trnh sau y ta s nhn c kt qu ng:

    Real x, y, z x = 3.0 y = 2.0 z = x / y print*, x, y, z end

    Nhng nu b i dng th hai v th ba ri chy li chng trnh th li Runtime error s xut hin do cu lnh z = x/y tham chiu n cc bin x v y cha xc nh.

    Bin c th c xc nh bng nhiu cch, v d bng vic khi to n (nh v d trc) hoc bng vic gn gi tr cho n, nh trong v d trn y hoc nhng v d trc.

    Bin cng c th c gn gi tr ban u bng lnh DATA sau khi khai bo, v d:

    REAL A, B INTEGER I, J DATA A, B / 1, 2 / I, J / 0, -1/

    Cu lnh DATA trn y ln lt gn cc gi tr 1 cho bin A, 2 cho bin B, 0 cho bin I v 1 cho bin J.

    Tn (k c tn bin, tn hng v tn chng trnh) trong chng trnh phi l duy nht. Chng hn, nu chng trnh c t tn l TinhTien, th vic khai bo mt bin khc cng tn s dn n li.

    Cc bin m t trong nhng v d trn gi l cc bin v hng, hay bin n, v ti mt thi im chng ch lu mt gi tr n nht. Ngoi cc bin v hng cn c cc loi bin khc, chng hn bin mng. Ta s cp chi tit n cc loi bin ny sau.

    1.7 QUI TC KIU N

    Cc phin bn trc ca Fortran c mt qui tc t tn ngm nh c gi l qui tc kiu n (implicit type rule). Theo qui tc ny, cc bin bt u bng cc ch ci I, J, K, L, M, N c t ng hiu l bin c kiu s nguyn (INTEGER), cn cc bin bt u bng nhng ch ci khc, nu khng c khai bo r rng, s c hiu l bin thc (REAL). bo m tnh tng thch ca cc chng trnh vit vi cc phin bn trc, qui tc ny vn c p dng ngm nh trong Fortran 90.

    Tuy nhin, trong mt s tnh hung, qui tc kiu n c th dn n li chng trnh trm trng do nhng s sut ng tic khi t tn bin. Gi tr thc c th c gn mt cch khng c cho bin nguyn, lm cho phn thp phn sau du chm thp phn b cht ct. V d, nu khng khai bo kiu REAL cho bin LaiSuat th cu lnh

    LaiSuat = 0.12

  • 28

    trong chng trnh s gn gi tr 0 cho bin LaiSuat, v n c ngm hiu l bin nguyn.

    phng nhng li nh vy, ngay t u chng trnh ta nn a vo cu lnh sau

    IMPLICIT NONE Cu lnh ny s xo b thuc tnh qui tc kiu n, do tt c cc bin s dng trong chng

    trnh bt buc phi c khai bo. l cch lp trnh tt, v c khai bo ta mi buc phi tm n bin v ngha ca n.

    Sau y ta s xt mt v d v gii bi ton chuyn ng trong trng trng lc.

    Nu mt hn c tung ln thng ng vi tc ban u u, qung ng dch chuyn

    thng ng s ca n sau thi gian t c cho bi cng thc 2

    gtut)t(s2

    = , trong g l gia tc trng trng. B qua lc cn ca khng kh, hy tnh gi tr ca s, khi cho cc gi tr ca u v t.

    lp chng trnh gii bi ton ny ta c th hnh dung lgic chun b chng trnh nh sau:

    1) Nhp cc gi tr g, u v t vo my tnh

    2) Tnh gi tr ca s theo cng thc cho

    3) In gi tr ca s

    4) Kt thc

    Nhn dn bi ny c th mt s ngi cho l n qu tm thng, thm ch h cho rng n lng ph thi gian vit ra. V do , ta s khng ly lm ngc nhin ti sao mt s ngi trong , nht l nhng ngi mi bt u lp trnh, li thch lm trc tip trn my tnh, v lp trnh bc 2 trc bc 1, ri lng tng trc kt qu nhn c. Thc t iu ny rt quan trng, v n to cho ta thi quen phn tch bi ton mt cch k lng, thit k chng trnh c tnh lgic, v chn tn bin, kiu bin khai bo mt cch ph hp nht.

    Da theo cc bc trn y ta c th vit chng trnh nh sau:

    V d 1.4: Chuyn ng trong trng trng lc

    PROGRAM ChuyenDongThangDung ! Chuyen dong thang dung duoi truong luc trong IMPLICIT NONE ! Xa b qui tc kiu n REAL, PARAMETER :: G = 9.8 ! Gia tc trng trng REAL S ! Qung ng (m) REAL T ! Thi gian REAL U ! Tc ban u (m/s) PRINT*, ' Thoi gian Quang duong' PRINT* U = 60 T = 6 S = U * T - G / 2 * T ** 2

  • 29

    PRINT*, T, S END PROGRAM ChuyenDongThangDung

    Trc ht, khai bo G l hng, v gi tr ca n c xc nh khng thay i trong chng trnh v nhn gi tr bng 9.8. V trong chng trnh c s dng cu lnh IMPLICIT NONE do ta phi khai bo tt c cc bin. Bn c c th kim chng tc dng ca cu lnh ny bng cch th b qua mt cu lnh khai bo bin no (thm du chm than vo u dng lnh) v chy li chng trnh xem Fortran phn ng nh th no.

    1.8 PHONG CCH LP TRNH

    Trn thc t c th xy ra tnh hung ta cn s dng li hoc nng cp cc chng trnh lp t rt lu ri, hoc khai thc cc chng trnh do mt ngi no vit. S rt kh khn nu trong chng trnh chng c mt li ch thch no c. i vi nhng chng trnh ca mnh, c th ta qun i nhng g mnh vit. Vic tm hiu li mt chng trnh khng c nhng li ch thch nh vy i khi lm cho ta nn ch, khng kin nhn thc hin.

    trnh tnh trng , cn phi c mt phong cch lp trnh tt. Ngha l trong chng trnh phi c nhng li ch thch ng ch, y , r rng; trong cc cu lnh nn chn vo nhng du cch hp l, s dng hp l cc k t in thng v in hoa; gia cc on chng trnh nn c cc dng trng; nn phn cp cc cu lnh b tr chng sao cho c s tht, th, d theo di.

    Chng hn, trong cc chng trnh c vit trn y, chng ta thng a vo nhng li ch thch mang ngha m t, nh dng m t chng trnh s lm g, cc bin c khai bo c ngha g,

    1.9 BIU THC S

    Trong chng trnh ChuyenDongThangDung v d 1.4 ta s dng dng m ngun sau:

    U * T - G / 2 * T ** 2

    y l mt v d v biu thc s biu din bng ngn ng Fortran, l cng thc lin kt cc hng, cc bin (v cc hm, nh hm tnh cn bc hai) bng cc php ton thch hp. N ch ra qui tc tnh gi tr ca mt biu thc i s thng thng. Trong trng hp trn y, biu thc ch tnh mt gi tr n nn n c gi l biu thc v hng.

    Th t thc hin cc php tnh trong mt biu thc c xc nh bi th t u tin ca cc php ton. Tuy nhin, nu trong biu thc c cc b phn nm trong ngoc n ( ) th chng lun lun c thc hin trc tin. Chng hn, biu thc 1 + 2 * 3 s cho kt qu l 7, trong khi (1 + 2) * 3 s cho kt qu l 9. Ch rng 3**2 s cho kt qu l 9 ch khng phi 9.

    Khi c cc php ton cng bc u tin xut hin lin tip nhau trong biu thc, chng s c thc hin theo th t t tri sang phi, ngoi tr php ly ly tha. Do , biu thc B/C*A c thc hin nh (B/C)*A m khng phi nh B/(C * A). i vi cc php ton ly tha, th t thc hin l t phi sang tri. V d, biu thc A**B**C c thc hin theo nguyn tc A**(B**C).

  • 30

    1.9.1 Php chia vi s nguyn

    i vi nhng ngi mi lp trnh bng Fortran, y qu l mt vn khng n gin, bi v nhiu khi kt qu nhn c ca cc biu thc nm ngoi d on ca h. Vn l ch, khi mt i lng c kiu s nguyn (hng, bin hoc biu thc nguyn) chia cho mt i lng c kiu s nguyn khc, kt qu nhn c cng s c kiu s nguyn, do phn l thp phn b ct b. Ta hy xt cc v d sau y.

    10 / 3 cho kt qu l 3

    19 / 4 cho kt qu l 4

    4 / 5 cho kt qu l 0

    -8 / 3 cho kt qu l -2

    3 * 10 / 3 cho kt qu l 10

    10 / 3 * 3 cho kt qu l 9

    Nh vy, khi chia hai i lng nguyn cho nhau, kt qu nhn c l phn nguyn ca thng, cn phn d b ct b.

    1.9.2 Biu thc hn hp

    Fortran 90 cho php thc hin php tnh vi biu thc cha cc ton hng c kiu khc nhau. Nguyn tc chung l cc kiu d liu yu hn hoc n gin hn buc phi chuyn i sang kiu d liu mnh hn. V kiu s nguyn l n gin nht, cho nn trong biu thc c cc ton hng nguyn v thc th cc ton hng nguyn phi chuyn thnh cc ton hng c kiu thc. Tuy nhin, qu trnh chuyn i ny ch thc hin i vi tng php tnh m khng nht thit p dng cho c biu thc. V d:

    10 / 3.0 cho kt qu l 3.33333

    4. / 5 cho kt qu l 0.8

    2**(-2) cho kt qu l 0, v 2**(2)=1/(2**2) = 1/4 Nhng biu thc

    3 / 2 / 3.0

    s cho kt qu bng 0.333333 v 3/2 c tnh trc, nhn gi tr nguyn bng 1.

    1.10 LNH GN. GN HNG, GN BIU THC

    Lnh gn l cu lnh c s dng ph bin nht trong lp trnh. C php cu lnh gn c dng:

    vname = expr

    Trong vname l tn ca bin hoc hng, expr l gi tr (hng) hoc biu thc. Mc ch ca cu lnh gn l tnh gi tr ca biu thc v phi (nu cn) v gn cho bin/hng v tri. Nh vy,

  • 31

    du bng (=) trong cu lnh gn hon ton khng c ngha nh du bng trong ton hc, m n c hiu l du gn, v nn c l vname c gn bi gi tr ca expr. V d, cu lnh

    X = A + B

    c hiu l ni dung ca bin X c gn bi gi tr ca tng ni dung ca bin A v ni dung ca bin B. Khi thc hin cu lnh, my s ly gi tr ca A cng vi gi tr ca B, kt qu nhn c sau s gn cho bin X.

    Tng t, cu lnh

    N = N + 1

    hm ngha l tng gi tr ca bin N ln mt n v. ng nhin trong ton hc biu thc ny khng c ngha. Tc ng ca qu trnh thc hin cu lnh l ly ni dung ca bin N cng vi 1, c bao nhiu gn li cho bin N.

    Nu expr khng cng kiu d vi vname, n c chuyn i sang kiu d liu ca vname trc khi gn. C ngha l iu c th dn n sai s tnh ton. V d, gi s N l bin nguyn, cn X v Y l nhng bin thc th:

    N = 10. / 3 (gi tr ca N s l 3)

    X = 10 / 3 (gi tr ca X s l 3.0)

    Y = 10 / 3. (gi tr ca Y s l 3.33333)

    S v trong lp trnh nhiu lc cng c th dn n kt qu sai khng ng c. Chng hn, khi mun tnh trung bnh cng hai s (v d im trung bnh ca hai mn hc), nu t tn bin cc mn l M1 v M2 m khng khai bo chng l bin thc (tc my s hiu l hai bin nguyn theo qui tc kiu n), th im trung bnh c xc nh bi cu lnh:

    TBinh = (M1 + M2) / 2 s b cht ct phn thp phn do v phi l kt qu ca php chia hai s nguyn. Nu tng (M1+M2) khng chia ht cho 2 th kt qu nhn c l sai. Nhng, nu cu lnh trn c vit di dng:

    TBinh = (M1 + M2) / 2.0

    th kt qu li hon ton chnh xc mc d M1 v M2 vn l nhng bin nguyn.

    Sau y l mt s v d v cu lnh gn.

    C = (A ** 2 + B ** 2) ** 0.5 / (2 * A)

    A = P * (1 + R / 100) ** N

    Cu lnh th nht c th c vit bng cch khc khi s dng hm th vin SQRT (hm ly cn bc hai) ca Fortran nh sau:

    C = SQRT ( A ** 2 + B ** 2 ) / (2 * A)

    Tuy nhin, khng c vit cu lnh di dng:

    C = (A ** 2 + B ** 2) ** (1/2) / (2 * A)

  • 32

    Bi v (1/2) trong biu thc ly tha s nhn gi tr bng 0 do php chia hai s nguyn cho nhau.

    1.11 LNH VO RA N GIN

    Qu trnh nhn thng tin vo v kt xut thng tin ra ca my tnh c gi l qu trnh vo ra

    d liu. Dng vo ra d liu n gin nht trong Fortran l s dng cc lnh READ* v PRINT*, v c gi l vo ra trc tip. Cc dng vo ra d liu phc tp hn s c cp n trong nhng phn sau.

    Trong cc mc trc ta gp cc cu lnh vi READ* v PRINT*, nhng cha gii thch g v chng. y ta s thy rng l nhng cu lnh rt thng dng m ta cn phi tm hiu ngay.

    1.11.1 Lnh vo d liu

    T nhng v d trn nhn thy cc bin c gn gi tr bng cch s dng cu lnh gn, chng hn nh trong chng trnh TinhTien:

    SoTien = 1000.0 LaiSuat = 0.09

    Cch lm ny khng linh hot, v khi mun chy chng trnh vi cc gi tr s tin gc hoc li sut khc nhau, mi ln nh vy ta phi thay i trc tip cc cu lnh gn ny trong chng trnh, sau bin dch li ri mi thc hin chng trnh. Thay cho cch ny ta c th s dng cu lnh

    READ* nh sau:

    READ*, SoTien, LaiSuat

    Trong trng hp ny, khi chy chng trnh, my s ch ta g gi tr ca cc bin t bn phm. Cc gi tr ny c th c g trn cng mt dng, phn cch nhau bi cc du cch, du phy hoc trn cc dng khc nhau.

    Dng tng qut ca lnh READ* nh sau:

    READ*, list

    Trong list l danh sch bin; nu c nhiu hn mt bin th chng c vit cch nhau bi du phy.

    Khi vo d liu vi lnh READ* cn ch mt s im sau.

    Mi dng d liu c g lin tc (khng dng du ENTER xung dng) c gi l mt bn ghi. Nu dng d liu qu di, khng hin th trn mt dng mn hnh, n s c t ng cun xung dng di, nhng vn thuc cng mt bn ghi.

    Mi mt lnh READ khi nhn d liu i hi mt bn ghi mi. Khi nhp d liu vo t bn phm, mi bn ghi c phn tch nhau bi du ENTER (nhn phm ENTER). Do , cu lnh:

    READ*, A, B, C

  • 33

    s c tha mn vi mt bn ghi cha 3 gi tr:

    3 4 5 Trong khi cc cu lnh:

    READ*, A READ*, B READ*, C i hi phi a vo 3 bn ghi, mi bn ghi cha 1 gi tr (tc l trong khi nhp d liu s dng du ENTER xung dng sau khi g vo mt gi tr):

    3 4 5

    Khi gp mt lnh READ mi, nhng d liu cha c c trn bn ghi hin thi (nu cn) s b b qua, v mt bn ghi mi khc s c tm n nhn d liu.

    Nu lnh READ i hi nhiu d liu hn s d liu cha trn bn ghi hin thi n cng s tm n bn ghi mi tip theo nhn tip d liu. Do , nu d liu khng p ng cho lnh READ th chng trnh s b kt thc vi thng bo li.

    V d, cc cu lnh

    READ*, A READ*, B, C READ*, D

    vi cc bn ghi d liu a vo l ( y mi dng c xem l mt bn ghi):

    1 2 3 4 7 8 9 10 s c hiu qu ging nh cc lnh gn sau:

    A = 1 B = 4 C = 7 D = 9

    Tc l cc gi tr 2, 3 trn bn ghi th nht, 8 trn bn ghi th ba v 10 trn bn ghi th t, b b qua.

    1.11.2 c d liu t file TEXT

    Trn thc t thng xy ra tnh hung, ta ang mun kim tra, chnh sa chng trnh, trong mi ln chy, chng trnh cn phi c vo nhiu s liu. Chng hn, khi vit mt chng trnh tnh trung bnh ca 10 s, chc chn ta s cm thy rt kh chu nu c phi nhp vo 10 s t bn phm (bng lnh READ*) mi khi th li chng trnh. l cha ni n nhng chng trnh i hi nhiu d liu hn, nh tnh im trung bnh chung hc tp cho mt lp sinh vin khong 50 ngi,

  • 34

    100 ngi, trnh phin phc trong nhng trng hp nh vy, Fortran cung cp mt phng thc vo d liu kh n gin nhng rt hu ch, l s dng file s liu.

    tng l ch, trc khi chy chng trnh, ta cn phi chun b s liu v lu chng vo mt file ring bit trn a. File s liu ny c th c to ra bng mt trnh son tho bt k v c

    ghi li di dng file TEXT (ASCII file) vi mt tn file no , chng hn SOLIEU.TXT. Khi chy chng trnh, my s tm n file ny v nhn s liu t . Mun vy, thay cho cu lnh READ*, ta s dng hai cu lnh mi c chc nng tham chiu n file v c d liu t file. tin trnh by, ta

    xt v d n gin sau. Gi s ta c file s liu vi tn l SOLIEU.TXT m ni dung ca n ch gm 3 s dng u tin ca file:

    3 4 5

    By gi ta hy g chng trnh sau y vo my v chy th:

    PROGRAM ThuFile REAL A, B, C OPEN(1, FILE = 'SOLIEU.TXT') ! M file READ(1, *) A, B, C ! c s liu t file PRINT*, A, B, C END

    Cu lnh OPEN kt ni s 1 vi file SOLIEU.TXT trn a. S 1 ny c gi l UNIT, mang hm ngha ch th s hiu file (hay knh vo/ra). Cu lnh READ y (khc vi lnh READ*) nh hng cho chng trnh tm v c s liu trong file c kt ni vi UNIT 1. Thng thng s

    UNIT nhn gi tr trong khong 19999.

    1.11.3 Lnh kt xut d liu

    Lnh PRINT* l cu lnh rt thun tin cho vic kt xut thng tin khi lng d liu khng ln. Thng thng n c s dng trong qu trnh xy dng, pht trin chng trnh, hoc a ra nhng kt qu tnh ton trung gian theo di tin trnh lm vic ca chng trnh. Dng tng qut ca n nh sau:

    PRINT*, list

    Trong list c th l danh sch hng, bin, biu thc v xu k t, c vit cch nhau bi du phy (,). Xu k t phi c t trong cp du nhy n ( ) hoc du nhy kp ( ). Nu list l danh sch rng th lnh ny c dng n gin l PRINT* v c ngha chn thm mt dng trng. V d:

    PRINT* PRINT*, "Can bac hai cua ", 2, ' la', SQRT(2.0)

    Sau y l mt s qui tc chung ca lnh PRINT.

  • 35

    Mi cu lnh PRINT* to ra mt bn ghi mi. Nu ni dung bn ghi qu di n s c cun xung cc dng tip theo.

    i vi s thc, ty theo ln gi tr ca s c in m chng c th c biu din di dng du phy tnh hoc du phy ng. Nu mun in dng cu k, c qui cch, ta c th s dng lnh nh dng FORMAT. V d, in s 123.4567 di dng du phy tnh trn 8 ct, vi 2 ch s sau du chm thp phn, ta c th vit:

    X = 123.4567 PRINT 10, X 10 FORMAT( F8.2 )

    Lnh nh dng FORMAT cho php b tr khun mu in theo qui cch c ch ra phn trong du ngoc n. Trong v d trn, nu mun in gi tr ca bin X km theo nhng ch thch hp l ta c th a thm vo cc hng k t. Chng hn, thay cho cu lnh trn y ta c th vit:

    10 FORMAT( Gia tri bien X = , F8.2 )

    Hng k t phi c t trong cp du nhy n, hoc du nhy kp. Ta s cp chi tit n cu lnh ny trong cc mc sau.

    Lnh PRINT* cng c th c dng in mt thng bo (hng k t) di qu mt dng bng cch s dng k t ni dng. V d:

    PRINT*, 'Day la cau thong bao duoc & &viet bang lenh PRINT co noi dong'

    1.11.4 Kt xut ra my in

    Nu mun kt xut ra my in, ta ch cn t tham s FILE=PRN trong cu lnh OPEN v kt hp vi vic s dng lnh WRITE. V d:

    OPEN (2, FILE = 'prn' ) WRITE(2, *) 'In ra may in' PRINT*, 'In ra man hinh'

    Ch rng lnh WRITE trong trng hp ny phi gn kt vi s hiu file UNIT trong lnh OPEN. Lnh ny tng qut hn lnh PRINT. Ta s lm quen vi cu lnh ny nhng ni dung sau.

    1.12 S DNG HM TRONG FORTRAN

    Trn y ta gp trng hp tnh cn bc hai ca mt s dng bng hm th vin SQRT ca Fortran. ch l mt trong rt nhiu hm c sn do trnh bin dch cung cp. H thng cc hm ny (v c nhng hm do ngi dng xy dng b sung thm) lp thnh mt th vin cc hm trong (hay cn gi l hm th vin), cho php ta s dng chng nh nhng hp en m khng cn bit chng c xy dng nh th no. Mi mt hm nh vy thc hin mt chc nng tnh ton khc nhau (nh ly cn bc hai, tnh cosine,...) v cho mt gi tr kt qu. Cc hm ny c tham chiu trc tip

  • 36

    trong cc biu thc. Khi tnh biu thc, hm s c thc hin theo trnh t thut ton xy dng v gi tr tnh c ca hm s thay th v tr tham chiu n hm.

    V d, xt on chng trnh sau:

    REAL X, Y X = 16.0 Y = 5.6 + SQRT(X) PRINT*, X, Y END

    Trong chng trnh ny, tnh gi tr ca Y, cn phi tnh SQRT(X). V X = 16.0 nn hm

    SQRT(X) = SQRT(16.0) s cho kt qu l 0.16 = 4.0. Do , Y = 5.6 + 4.0 = 9.6. Mc d vy ta hon ton khng bit cch tnh cn bc hai m hm SQRT thc hin nh th no. V ta s dng hm SQRT tnh cn bc hai ca mt s X no nh l mt s tha nhn tnh ng n, chnh xc ca n.

    Fortran cung cp cho ta mt th vin cc hm kh phong ph. tin s dng khi trnh by cc phn sau, trong bng 1.6 nu ra mt s hm thng dng nht.

    Khi s dng cc hm th vin ta cn c bit ch n tnh nng ca chng. V d, cc hm INT v NINT c s dng i s thc thnh s nguyn, nhng hm INT s ct b phn thp phn trong khi hm NINT lm trn s thc n s nguyn gn nht: INT(5.3) l 5 NINT(5.3) l 5 INT(5.8) l 5 NINT(5.8) l 6 INT(5.3) l 5 NINT(5.3) l 5 INT(5.8) l 5 NINT(5.8) l 6

    Bng 1.6 Mt s hm th vin thng dng ca Fortran Tn hm

    v li gi hm

    Chc nng ca hm Kiu d

    liu ca i s

    Kiu d liu ca kt

    qu INT (X) Chuyn s X thnh s nguyn

    sau khi cht ct phn thp phn REAL INTEGER

    NINT (X) Lm trn s X n s nguyn gn nht

    REAL INTEGER

    REAL (X) Chuyn s nguyn X thnh s thc

    INTEGER REAL

    ABS (X) Tm gi tr tuyt i ca X REAL REAL IABS (X) Tm gi tr tuyt i ca X INTEGER INTEGER SQRT (X) Tnh cn bc hai ca X REAL REAL EXP (X) Tnh Xe REAL REAL ALOG (X) Tnh lnX (logarit t nhin) REAL REAL ALOG10 (X) Tnh lgX (logarit thp phn) REAL REAL SIN (X) Tnh Sine ca X REAL REAL COS (X) Tnh Cosine ca X REAL REAL TAN (X) Tnh Tang ca X REAL REAL MOD (X,Y) Tnh phn d ca php chia hai

    s nguyn X/Y INTEGER INTEGER

    MAX0(X1,...,XN) Tm gi tr ln nht ca dy s INTEGER INTEGER

  • 37

    X1,...,XN MIN0(X1,...,XN) Tm gi tr nh nht ca dy s

    X1,...,XN INTEGER INTEGER

    AMAX1(X1,...,XN) Tm gi tr ln nht ca dy s X1,...,XN

    REAL REAL

    AMIN1(X1,...,XN) Tm gi tr nh nht ca dy s X1,...,XN

    REAL REAL

    Hm REAL c s dng i mt s nguyn thnh mt s thc. Nu cc bin TONG v N l nhng bin nguyn cn T_BINH l bin thc, khi hai cu lnh sau y c th cho kt qu hon ton khc nhau: T_BINH = TONG / N

    v

    T_BINH = REAL(TONG)/REAL(N)

    Nhng hm trn y ch i hi c mt i s, nhng nh thy trong bng 1.6, c th c nhng hm i hi hai i s hoc nhiu hn. V d, hm MOD i hi hai i s, trong khi cc hm MAX0, MIN0, AMAX1, AMIN1 li c th c s lng i s ln hn hoc bng hai.

    V d 1.5. Gi s A, B, C l ba nh ca mt tam gic. K hiu AB, AC, BC l cc cnh ca tam gic, ALFA l gc kp gia hai cnh AB v AC. Cho bit di ca cc cnh AB, AC v s o bng ca gc ALFA, c th tnh di ca cnh BC theo cng thc:

    BC2 = AB2 + AC2 2.AB.AC.Cos(Alfa) Vit chng trnh nhp vo di cc cnh AB, AC v gc ALFA () ri tnh di ca cnh

    BC.

    Ta c chng trnh sau:

    REAL AB, AC, BC, ALFA REAL PI PI = 4.0*ATAN (1.0) PRINT*,Cho do dai cac canh AB, AC: READ*, AB,AC PRINT*,Cho so do goc (do) giua AB va AC: READ*, ALFA BC = SQRT (AB**2 + AC**2 2*COS(ALFA*PI/180.0) ) PRINT*,Do dai canh BC = , BC END

    Trong chng trnh trn, hm ATAN tnh Arctang. V Tang ca gc /4 bng 1 nn Arctang ca 1 bng /4.

    Mt trong nhng hm rt quan trng c s dng trong nhiu lnh vc l hm ex, trong e l mt hng s, c gi tr bng 2.718282 khi ly trn s n su ch s thp phn. V d, hm mt xc sut ca bin ngu nhin tun theo lut phn b chun chun ha c dng:

  • 38

    2

    21

    21)(

    xexf=

    Biu thc c lng gi tr ca hm ny vit bng ngn ng Fortran c th c dng:

    F = 1.0/SQRT(2.0*PI)*EXP(0.5*X*X)

    BI TP CHNG 1

    1.1 Hy cho bit trong cc tn bin di y nhng tn no vit sai theo qui c ca Fortran, ti sao: (a) A2 (b) A.2 (c) 2A (d) 'A'ONE (e) AONE (f) X_1 (g) MiXedUp (h) Pay Day (i) U.S.S.R. (j) Pay_Day (k) min*2 (l) PRINT

    1.2 Hy xc nh xem trong nhng hng sau y hng no vit ng, hng no vit sai theo qui c ca Fortran, ti sao: (a) 9,87 (b) .0 (c) 25.82 (d) 356231 (e) 3.57*E2 (f) 3.57E2.1 (g) 3.57E+2 (h) 3,57E2

    1.3 Hy vit cc biu thc sau y di ngn ng Fortran: (a) cbxax2 ++ =0; (b) cbxax2 ++ >0; (c) cbxax2 ++

  • 39

    1.8 Cho trc gi tr ca ba bin thc A=2, B=3, C=5 v hai bin nguyn I=2, J=3. Hy cho bit gi tr ca cc biu thc sau nu chng c tnh bng chng trnh Fortran:

    1) A*B + C; 2) A*(B + C); 3) B/C*A; 4) B/(C * A); 5) A/I/ J; 6) I/J/A; 7) A*B**I/A ** J * 2; 8) C + (B / A) ** 3 / B * 2.; 9) A ** B ** I; 10) B** A ** C; J / (I / J).

    1.9 Nhit th v c xc nh bi cng thc = TpC/R

    p1000

    , trong T (oC) v p (mb)

    l nhit v p sut ban u ca phn t kh, R/Cp0.288. Hy lp chng trnh nhp vo gi tr nhit v p sut ban u ca mt phn t kh v tnh nhit th v ca n.

    1.10 Gi s c cc khai bo sau:

    REAL P1, X, Y

    INTEGER MAXI, A, B, I

    PARAMETER (P1 = 3.14159, MAXI = 1000)

    Hy tnh gi tr ca cc cu lnh hp l di y, ng thi ch ra nhng cu lnh khng hp l, ti sao. Cho A=3, B=4 v X=1.0 I = A * B I = (990 MAXI) / A I = A*Y x = pi*y I = A/B X = A / B X = A * (A/ B) I = B / 0 I = A * (990 MAXI) I = (MAXI 990) / A X = A / Y I = PI*A x = pi/y I = B/A I = (MAXI 990) * A L = A * 0 I = A * MAXI 990)

    1.11 Cho A, B, C v X l tn ca bn bin thc (REAL), I, J v K l tn ca ba bin nguyn (INTEGER). Hy sa cc cu lnh di y cho ph hp vi qui tc biu din biu thc s hc bng ngn ng Fortran.

    1) X = 4.0 A* C 2) A = AC 3) I = 2XJ 4) K = 3(1 J) 5) X = 5A/BC 6) I = 5J3

  • 40

    1.12 Vit chng trnh xc nh s ln p ca qu tim trong c cuc i mt con ngi. Chng trnh cho php tnh vi nhp p bt k ca qu tim (v d 72 ln/pht) v vi tui th bt k ca mt ngi (v d 75 tui). Ly s ngy trong mt nm bng 365.25 ngy.

    1.13 Thi gian bay (t giy) v cao (h mt) t c ca mt vin n pho c xc nh theo cc cng thc:

    cosvSt =

    2

    2gtvth = trong S (m) l khong cch t ni bn n mc tiu; v (m/s) l vn tc ban u ca vin n; (radian) l gc nng ca nng pho; v g (m/s2) l gia tc trng trng. Cho g = 9.8 m/s2. Hy vit chng trnh nhp vo khong cch n mc tiu, gc nng ca nng pho v vn tc ban u ca vin n v tnh thi gian bay v cao t c ca vin n.

    1.14 Bit th ca mt gia nh l mt hnh ch nht c cc kch thc l XN v YN. Bit th c xy dng trn mt khu t cng l hnh ch nht c cc cnh song song vi bit th v c cc kch thc XD v YD. Ngoi bit th, trong khu t cn c mt vn hoa hnh trn bn knh RH. Khong trng cn li ca khu t l c. Hy vit chng trnh nhp vo nhng gi tr hp l ca cc kch thc ca bit th, ca khu t v ca vn hoa v tnh xem nu mt ngi ct c ct c 2 m2/s th phi mt bao nhiu thi gian ct ht c trong khu t .

    1.15 Vit chng trnh nhp vo cc t s v mu s ca hai phn s ri tnh tng, hiu, tch, thng ca chng. In kt qu di dng phn s v gi tr phn trm ca phn s kt qu.

    1.16 Vit chng trnh c vo gi, pht, giy v i ra gi biu din di dng s thp phn (v d XX gi, YY pht, ZZ giy s c i thnh HH.TTTT gi)

    1.17 Vit chng trnh nhp gi tr ba in tr ca mt mch in mc song song v tnh in tr tng ng ca mch theo cng thc:

    321

    1111RRRRtd

    ++=

    1.18 B 3 s nguyn dng m, n, p tha mn iu kin m2 + n2 = p2 c gi l b ba s Pitago (v d, ba s 3, 4, 5 l mt b s Pitago), v ba s ny tha mn iu kin l ba cnh ca mt tam gic vung, trong m v n l hai cnh gc vung, p l cnh huyn. Cho hai s nguyn dng x v y, vi x > y, khi c th to mt b s Pitago theo cng thc sau:

    m = x2 y2 n = 2xy

    p = x2 + y2

  • 41

    Vit chng trnh nhp vo hai s nguyn dng v thnh lp b s Pitago theo cc cng thc trn.

    1.18 Tc suy gim nhit theo phng thng ng (gradient thng ng ca nhit ) trong lp kh quyn di cng c th ly gn ng bng 0.6oC/100m. Vit chng trnh xc nh nhit kh quyn cao h (m) no nu bit rng nhit mc nc bin (h=0) l T (OC).

    1.19 Hy biu th di dng cc cu lnh ca Fortran nhng ni dung sau:

    (a) Thm 1 vo gi tr ca bin I ri lu kt qu vo nh ca bin I.

    (b) Ly lu tha 3 ca I ri cng vi J v lu kt qu vo nh I.

    (c) Chia tng ca A v B cho tch ca C v D ri lu vo nh ca bin X.

    1.20 Vit chng trnh tnh gi tr ca biu thc sau:

    A= ( )( )x

    19238.03

    5172.1520345.0x3coscbsinx

    +++ ,

    trong : x nhp t bn phm; b=2x31.769; c=lg(x4+5x)+ln(x2+5b) 1.21 Vit chng trnh nhp vo to ba im A(x1,y1), B(x2,y2), C(x3,y3) ri tnh tch v

    hng ca cc vect AB, AC.

    1.22 S dng trnh son tho Fortran (hoc mt trnh son tho bt k) to mt file TEXT c tn l SOLIEU.TXT vi ni dung ca file nh sau:

    23 12.5 65.2 21 67 89 34 56 76 32 45.6 54.6 67.8 21.3 Sau vit chng trnh c file s liu theo cc yu cu: c cc gi tr th nht v th ba dng 1 v gn cho cc bin A, B; c cc gi tr th hai, th ba v th t dng 2 v gn cho cc bin C, D, E; c hai gi tr dng 3 v gi tr th nht dng 4 v gn cho cc bin X, Y, Z. In kt qu nhn c ca cc bin A, B, C, D, E, X, Y, Z ln mn hnh v so snh vi ni dung file s liu.

  • 42

    CHNG 2. CC CU LNH C BN CA FORTRAN

    Trong chng trc chng ta lm quen vi mt s cu lnh ca Fortran, nh lnh gn, cc lnh vo ra n gin vi READ* v PRINT*, lnh m file OPEN nhn d liu t file TEXT hoc kt xut thng tin ra my in, lnh nh dng FORMAT,... Vi nhng cu lnh , ta c th vit c mt s chng trnh n gin. Chng ny s nghin cu nhng cu lnh phc tp hn.

    2.1 LNH CHU TRNH (DO LOOPS)

    Khi vit chng trnh, ta c th bt gp tnh hung, mt hoc nhiu cu lnh no phi thc hin lp li nhiu ln ging nhau. Chng hn, mun in 10 s nguyn lin tip, mi ln in mt s, ta phi dng n 10 cu lnh in ra. iu lm cho ta nhiu lc cm thy bt tin. Tuy nhin, thay cho cch lm trn y, Fortran h tr mt cu trc cu lnh kh n gin nhng rt hiu qu. l cu lnh chu trnh, hay chu trnh lp xc nh. C php cu lnh c th c cc dng sau.

    Dng 1:

    DO m bdk = TriDau, TriCuoi [, Buoc] Cc_cu_lnh m Cu_lnh_kt_thc

    Dng 2: DO m bdk = TriDau, TriCuoi [, Buoc] Cc_cu_lnh m CONTINUE

    Dng 3: DO bdk = TriDau, TriCuoi [, Buoc] Cc_cu_lnh END DO

    Trong : bdk, TriDau, TriCuoi, Buoc phi c cng kiu d liu; m l nhn ca cu lnh kt thc chu trnh, trong trng hp khng th s dng cu lnh kt thc nh vy, c th thay th n bng cu lnh m CONTINUE nh dng 2. Nu TriDau < TriCuoi th Buoc phi l mt s dng, ngc li nu TriDau > TriCuoi th Buoc phi l mt s m. Nu Buoc=1 th c th b qua Buoc.

    Cu trc dng 1 v dng 2 l ca Fortran 77 v cc phin bn trc , nhng chng vn tng thch vi Fortran 90. Mc d vy, do mt s c im m rng ca cu lnh chu trnh trong Fortran 90 (m ta s cp cc phn sau), hin nay ngi ta t s dng cc cu trc .

    Tp Cc_cu_lnh nm gia DO v

    m Cu_lnh_kt_thc hoc

    m CONTINUE

  • 43

    hoc

    ENDDO l nhng cu lnh c thc hin lp i lp li. S ln lp li c xc nh bi:

    S ln lp = MAX { (TriCuoi TriDau + Buoc) / Buoc, 0 } Tc ng ca lnh chu trnh c m t trn hnh 2.1. C th tm tt tc ng ny qua cc bc

    sau.

    1) Bt u chu trnh bdk c gn gi tr bng TriDau.

    2) Sau chng trnh s thc hin biu thc so snh bdk=TriCuoi:

    a) Nu biu thc cho kt qu .TRUE. (ng):

    a.1) Tip tc thc hin Cc_cu_lnh, k c Cu_lnh_kt_thc, nm trong chu trnh ri tng hoc gim bdk mt lng bng tr tuyt i ca Buoc

    a.2) Quay v thc hin bc 2)

    b) Nu biu thc cho kt qu .FALSE. (sai) th kt thc chu trnh

    a) Trng hp TriDau=TriCuoi

    Hnh 2.1 S khi m t tc ng ca lnh chu trnh DO

    Ta nhn thy, tc ng ca chu trnh l thc hin lp i lp li Cc_cu_lnh, k c Cu_lnh_kt_thc. Mi ln nh vy gi tr ca bdk s thay i ph hp vi Buoc, cn TriDau v TriCuoi c gi nguyn cho n khi vng lp kt thc. Do , trong phm vi vng lp, tc l trong Cc_cu_lnh v Cu_lnh_kt_thc, tuyt i khng c xut hin nhng cu lnh lm thay i gi tr ca bdk, TriDau v TriCuoi, nu khng s dn n li khng lng trc c.

    V d 2.1. Chng trnh sau y s tnh tng cc s nguyn lin tip t N1 n N2, trong N1 v N2 c nhp vo t bn phm.

    INTEGER N1, N2, TONG, I PRINT '(A\)', ' CHO GIA TRI N1, N2 (N1

  • 44

    READ*, N1, N2 TONG = 0 DO I = N1,N2,1 TONG = TONG + I PRINT*, I ENDDO PRINT '(" TONG=",I5)', TONG END

    Khi chy chng trnh, cc s nguyn lin tip t N1 n N2 s c hin ln mn hnh v cui cng l thng bo kt qu tng ca cc s t N1 n N2. Cc cu lnh

    PRINT '(A\)', ' CHO GIA TRI N1, N2 (N1

  • 45

    V d 2.2. Chng trnh tnh cn bc hai ca s a theo phng php Newton c th c m t nh sau:

    1) Nhp vo s a

    2) Khi to x bng 1 (gn gi tr cho x bng 1)

    3) Lp li 6 ln cc bc sau y:

    a) Thay x bi (x + a/x)/2

    b) In gi tr ca x

    4) Kt thc chng trnh

    M ngun chng trnh nh sau:

    PROGRAM Newton ! Tinh can bac hai bang pp Newton REAL A ! S s ly cn bc hai INTEGER I ! Bin m php lp REAL X ! Gi tr gn ng ca cn bc hai ca a WRITE( *,*) ' Cho so se lay can bac hai: ' READ*, A PRINT* X = 1 ! Khi to gi tr ban u ca x (??) DO I = 1, 6 X = (X + A / X) / 2 PRINT*, X ENDDO PRINT* PRINT*, 'Can bac 2 cua ,a, tinh theo F90 la:',& SQRT(A) END

    Khi chy chng trnh, trn mn hnh s xut hin 6 ln gi tr ca X. Gi tr dng th 6 c xem l gn ng ca cn bc hai ca a tnh bng phng php lp Newton, cn gi tr in dng cui cng l cn bc hai ca a tnh bng hm th vin SQRT ca Fortran. Gia chng c th c s khc nhau; khi a cng ln th s khc nhau cng nhiu. Trong trng hp ny ta c th tng s ln lp li bng cch thay s 6 dng lnh DO I = 1, 6 bng mt s ln hn v chy li chng trnh. Vic so snh kt qu nhn c sau mi ln thay i dng lnh ny s gip ta hiu r hn ngha ca vng lp.

    Ch : Ni chung Fortran cho php cc bin bdk, TriDau, TriCuoi, Buoc nhn kiu d liu l s nguyn hoc s thc. Tuy nhin ta khng nn dng kiu d liu thc, do s thc c biu din dng gn ng, c th gy nn nhng sai s khng lng trc c.

    2.2 LNH R NHNH VI IF

    Cu trc r nhnh l kiu cu trc rt ph bin i vi cc ngn ng lp trnh. Trong Fortran, cu trc r nhnh c cho kh a dng. Sau y ta s ln lt xt tng trng hp.

    2.2.1 Dng 1

    IF (BThuc_Logic) Cu_lnh

  • 46

    Hnh 2.2 Cu trc IF dn