Transcript
  • 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