Upload
nghia-zer
View
225
Download
0
Embed Size (px)
Citation preview
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 1/71
1
NGÔN NG LP TRÌNHTÍNH TOÁN FORTRAN
Trn Thùy Dng ± SNEEPEmail: [email protected]
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 2/71
2
GII THIU CHUNG
FORTRAN (FORmular TRANslator): mt trong nhng ngôn ng lptrình c nht (phát hành vào nm 1957) c thit k cho các tính toántrong khoa hc k thut.
Các phiên bn ca Fortran
FORTRAN 1957
FORTRAN II
FORTRAN IV
FORTRAN 66 (c phát hành theo tiêu chun ANSI 1966)
FORTRAN 77 (chun ANSI 1977)
FORTRAN 90 (Chun ANSI 1990) FORTRAN 95 (Chun ANSI mi nht)
Có nhiu phiên bn µbn a hóa¶ khác nhau.
Nhiu chng trình tính toán trong khoa hc k thut c vit sndi dng các SubFunction hoc SubRoutine.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 3/71
3
TI SAO PHI CHN FORTRAN
FORTRAN c to ra vit các chng trình giicác bài toán khoa hc k thut
a vào kiu bin nguyên và du chm ng (floating point)
a vào kiu d liu mng cho các tính toán toán hc
a vào các subroutines và subfunctions
Trình biên dch có th to ra mã ti u cao (chy nhanh)
Có sn rt nhiu th vin s toán (numerical-math)
Các khó khn và nhc im ca Fortran:
Cho phép s dng lnh GO TO rt t do nên khó chiu các on mã lnh và làm ri chng trình
Khó kim soát các d liu dng phi s (nonnumerical)
Không có kh nng lp trình qui
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 4/71
4
Tài liu tham kho
An introduction to programming in Fortran 90
Janet A Nicholson, I ntroduction to programming using
FORTRAN 90 American National Standard, P rogramming Language
FORTRAN
MIT, Fortran 95 Handbook (Scientific and Engineering Computation)
Lahey/Fujitsu, Fortran 95 Language Reference
Tao Pang, An I ntroduction to Computational Phy sics(Fortran 90 and H P F P rograms Related to t he Book)
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 5/71
5
Ni dung chính
1. C bn v Fortran
2. Cu trúc iu khin
3. Module và th tc
4. S liu dng array
5. Bin con tr
6. Lnh Vào/ Ra
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 6/71
6
1. C bn v Fortran
Cu trúc tng quát ca chng trình Fortran:[PROGRAM TenChuongTrinh]
[Cac_cau_lenh_khai_bao]
[Cac_cau_lenh_thuc_hien]END [PROGRAM [TenChuongTrinh]]
[SUBPROGRAM]
Cu trúc câu lnh ca Fortran:
Mt dòng lnh không quá 132 ký t (k c du cách); Câu lnh quá dài: t ký t ³&´ cui dòng ni vi
dòng tip theo.
Mi ký t sau du ³!´ là li chú thích.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 7/71
7
1. C bn v Fortran
Ví d chng trình Fortran n gin:
program sum !a: tên chng trình
!an example of program structure !b: chú thích
real :: answer,x,y !c: khai báo bin
print *, 'Enter two numbers' !d: d liu ra
read *, x !e: d liu vào
read *, y !e: d liu vào
answer=x+y !f : phép toán s hc
print *, 'The total is ', answer !g: d liu ra
end program sum !h: kt thúc chng trình
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 8/71
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 9/71
9
1. C bn v Fortran
D liu và cách biu din d liu trong Fortran
Kiu ký t (4 byte), khai báo:
CH ARACTER (length) vname
hoc CH ARACTER (type[,type«])[attrib[,attrib]«] :: vname hoc CH ARACTER [*chrs] vname [*lengths][(dim)] &
[/values/][,vname [*lengths][(dim)]] [/values/]
Kiu logic (4 byte)
Ch nhn 2 giá tr: .TRUE. và .FALSE. Khai báo: LOGIC AL [([KIND=]kind)] [, attrs ::] vname
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 10/71
10
1. C bn v Fortran
D liu và cách biu din d liu trong Fortran:
Interger X,Y(10)
Real, parameter :: A=2010Complex(4), Dimension(8) :: cz, cq
CHARACTER (20) St1, St2*30
LOGICAL, ALLOCATABLE :: flag1, flag2
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 11/71
11
nh ngha các phép toán trong Fortran
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 12/71
12
1. C bn v Fortran
Nhp và xut d liu n gin
Lnh nhp d liu: RE AD*, list
Lnh in d liu không nh dng: PRINT*,list
Thí d: PRINT*, "Can bac hai cua ", 2, ³la´, SQRT(2.0)
Lnh in d liu nh dng:
Cú pháp: k FORM AT (danh sách các c t)
k là nhãn ca dòng lnhThí d: X = 123.4567
PRINT 10, X
10 FORM AT( F8.2 )
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 13/71
13
Mt s c t trong lnh in nh dng
nH trong ó - n s v trí xut d liu vn bn. Thí d:PRINT 5 , Y
5 FORM AT (16H TICH PH AN B ANG , F9.3)
nX s chèn n du trng vào bn ghi. Thí d:PRINT 35
35 FORM AT ('1' , 25X , 'THI NGHIEM SO 1')
Aw : w là s v trí giành cho 1 bin là xâu ký t
Iw: w là s v trí dùng cho 1 bin s nguyên
Fw.d : dùng biu din dng thp phân ca s thc, - w tng s v trí dành cho s thc k c du chm thp phân,- d s ch s thp phân sau du chm
E w.d : ghi ra di dng lu tha
L w: trong ó - w s v trí giành cho d liu kiu logic.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 14/71
14
1. C bn v Fortran
S dng file: c t file:
program readdata
implicit none!c d liu t file tên là mydata.txt
real :: x,y,z
open(10,file='mydata.txt')
read(10,*) x,y,z
print *,x,y,z
close(10)
end program readdata
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 15/71
15
1. C bn v Fortran
S dng file: Vit vào file:
program io2real :: numinteger :: iopen(12,file='myoutput')do i = 1,100
num = i/3.0 write(12,*) num
end doclose(12)print *, 'finished'
end program io2
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 16/71
16
1. C bn v Fortran
S dng file: Fortran ngm nh mt s thit b chun liên kt vi
nh danh UNIT nh sau:
Du sao (*):M
àn hình hoc bàn phímí UNIT = 0: Màn hình hoc bàn phím
í UNIT = 5: Bàn phím
í UNIT = 6: Màn hình
Thí d:
OPEN (UNIT = 10, FILE = µTEST.dat')WRITE(10,'(A18,\)µ)'Ghi vao File TEST.dat &
da lien ket voi UNIT 10¶
WRITE (*, '(1X, A30,\)') ' In ra man hinh.µ
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 17/71
17
2. Cu trúc iu khin
2.1. Cu trúc IF và các lnh tng ng
2.2. Cu trúc lp vi lnh DO
2.3. Cu trúc SELECT C ASE
2.4. Chu trình lp không xác nh
2.5. Mt s ví d
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 18/71
18
2.1. Cu trúc IF và các lnh tng ng
Lnh IF logic: Dng 1:
Dng 2:
IF (Biu thc logic) THENlnh 1....
lnh nEND IF
IF (Biu thc logic) THENlnh 1....lnh n
ELSElnh n + 1....lnh m
END IF
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 19/71
19
2.1. Cu trúc IF và các lnh tng ng
Lnh IF logic: Dng 3: IF (Biu thc lôgic 1) THEN
lnh 1...
lnh mELSE IF (Biu thc lôgic 2) THENlnh m+1...lnh n
ELSE IF (Biu thc lôgic 3) THENlnh n+1
...lnh p
ELSElnh p+1...lnh q
END IF
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 20/71
20
2.1. Cu trúc IF và các lnh tng ng
Lnh IF logic: Thí d: PROGRAM XEPLOAI
INTEGER DIE M W RITE (*,'( A\)') ' CHO DIE M TBCHT: 'R E A D*, DIE M
IF (DIE M <0 .OR . DIE M > 10) THE N PRINT*, µ DIE M KHONG HOP LE¶STOP
ELSE IF (DIE M >= 9) THE N PRINT*,' LOAI XU AT S A C'
ELSE IF (DIE M >= 8) THE N PRINT*,' LOAI GIOI'
ELSE IF (DIE M >= 7) THE N PRINT*,' LOAI KH A 'ELSE IF (DIE M >= 5) THE N
PRINT*,' LOAI TR U NG BINH'ELSE
PRINT*,' LOAI YEU'E ND IF
E ND XEPLOAI
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 21/71
21
2.1. Cu trúc IF và các lnh tng ng
Lnh IF logic: mt s biu thc lôgic
Toán t Dng khác Thí d Gii thích
== .eq. If(i==j) then... bng
> .gt. If (i.gt.j) then ... Ln hn
>= .ge. If (i.ge.j) then ... Ln hn hoc bng
< .lt. If (i.lt.j) then ... Nh hn
<= .le. If (i.le.j) then ... Nh hn hoc bng
/= .ne. If (i.ne.j) then ... Khác nhau.not. If (not.k) then ... .true. nu k là .false.
và ngc li
.or. If(i>j.or.j<k) then... Phép lôgic OR
.and. If(i>j.and.j<k) then... Phép lôgic AND
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 22/71
22
2.1. Cu trúc IF và các lnh tng ng
Lnh IF s hc Lnh IF s hc cho phép thc hin r nhánh chng
trình thành ba nhánh tùy thuc vào giá tr ca biuthc s hc.
Dng tng quát: IF (BThuc_SoHoc) m1, m2, m3
INTEGER N PRINT*, ' NH AP MOT SO NGUYE N 'R E A D*, N IF ( Ní50) 10, 20, 30
10 PRINT*,' SO NA Y NHO HON 50'GOTO 40
20 PRINT*,' SO NA Y BANG 50'GOTO 40
30 PRINT*,' SO NA Y LON HON 50'40 CONTINUE
E ND
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 23/71
23
2.1. Cu trúc IF và các lnh tng ng
Lnh nhy vô iu kin GOTO:
Cú pháp: GOTO m
trong ó m là nhãn ca câu lnh cn c huyn ti .
Lnh GO TO tính toán:
Cú pháp: GO TO (n1, n2,..nm ), i
trong ó: n1, n2,..nm là các nhãn ca nh ng lnh t h c hin,
- i là c h s ca nhãn ca câu lnh cn ti .
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 24/71
24
2.2. Cu trúc lp vi lnh DO
Dng 1:DO n bdk= Dau, Cuoi [, Buoc ] !bdk: bin iu khin
Các_câu_lnh
n Câu_lnh_kt_thúc Dng 2:
DO n bdk = Dau, Cuoi [, Buoc ]
Các_câu_lnh
n CONTINUE
Dng 3:DO bdk = Dau, Cuoi [, Buoc ]
Các_câu_lnh
END DO
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 25/71
25
2.2. Cu trúc lp vi lnh DO
REAL X(15), Y(15)N = 15DO 3 I =1, N
READ * , X (I)Y (I) = X (I)
3 CONTINUE
DO 2 I = 1, N-1K = IDO 4 J = I + 1, N
IF (Y(K).LT.Y(J)) K = J4 CONTINUE
IF (K .NE. I) THENTG = Y(I)Y(I) = Y(K)Y(K) = TG
END IF2 CONTINUEDO 7 I = 1, NPRINT 5 , X (I), Y (I)
7 CONTINUE5 FORMAT (1X, 2F10.2)
END
Thí d 1: Vit chngtrình nhp 15 phn tca mng s thc X, sp
xp li các phn t mngtheo th t gim dn vàin lên màn hình các mngc và mi thành hai ct.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 26/71
26
2.2. Cu trúc lp vi lnh DO
INTEGER N1, N2, TONG, I PRINT '( A\)', ' CHO GIA TRI N1, N2 ( N1<= N2):¶R E A D*, N1, N2TONG = 0DO I = N1, N2,1
TONG = TONG + I PRINT*, I
E ND DO PRINT '(" TONG=",I5)', TONG E ND
Thí d 2: Vit chng trình tính tng các s nguyên liên tip tN1 n N2, trong ó N1 và N2 c nhp vào t bàn phím.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 27/71
27
2.3. Cu trúc SELECT CASE
Dng tng quát:SELECT C A SE (BThuc_Chon)
C A SE (Chon1)
Cac_cau_lenh
_1C A SE (Chon2)
Cac_cau_lenh _2
...
C A SE DEFA ULT
Cac_cau_lenh _nE ND SELECT
BThuc_Chon, Chon1, Chon2,« phi có cùng kiu d lius nguyên, lôgic hoc CH ARACTER*1
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 28/71
28
2.3. Cu trúc SELECT CASE
Thí d: gõ mt ký t và cho bit ó là ch cái hay ch s.
CH ARA CTER *1 charPrint*,' Hay go mot ky tu:'R ead*, Char
SELECT C A SE (char)C A SE ('0':'9')
W RITE (*, *) "Day la chu so ", CharC A SE (' A ':'Z','a':'z') W RITE (*, *) "Day la chu cai ",Char
C A SE DEFA ULT W RITE (*, *) "Day khong phai chu so, &
cung khong phai chu cai." W RITE (*, *) "Day la ky tu ", Char
E ND SELECT E ND
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 29/71
29
2.4. Chu trình lp không xác nh
Cu trúc kt hp IF và GOTO m Câu_lnh _u_vòng_lp
Các_câu_lnh _tip_theo_trong_vòng_lp
IF (BThuc_ Logic) GOTO m hoc: m Câu_lnh _u_vòng_lp
Các_câu_lnh _tip_theo_trong_vòng_lp
IF (BThuc_ Logic) THE N
Các_câu_lnh _x_lý_trc_khi_lp_li
GOTO m
E ND IF
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 30/71
30
2.4. Chu trình lp không xác nh
Cu trúc DO và EXITDng 1:
[TenChuTrinh:] DO
IF (BThuc_Logic) EXITCác_câu_lnh
END DO [TenChuTrinh]
Dng 2:[TenChuTrinh:] DO
Các_câu_lnhIF (BThuc_Logic) EXIT
END DO [TenChuTrinh]
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 31/71
31
2.4. Chu trình lp không xác nh
Cu trúc DO WHILE«END DODO WHILE (BThuc_Logic)
Các_câu_lnh
END DO
Lnh CYCLECYCLE [Tên_Chu_Trình
Lnh CYCLE có th nm trong các chu trình lng nhau.
Nu không ch ra Tên_Chu_Trình thì CYCLE ch có tácng i vi chu trình lp trong nht cha nó.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 32/71
32
2.4. Chu trình lp không xác nh
Thí d: Tính s PI theo công thc
ây là tng ca mt chui an du mà s hng
tng quát là:
7
1
5
1
3
11
4
!T
,...2,1,12
1 1
!
nn
n
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 33/71
33
Cách 1: S dng chu trình lp kt hp IF và GOTO
PROGRAM TINHPI1 ! Cach 1: IF & GOTOREAL EPS, SS, PI, TMPINTEGER :: N, DAU = 1EPS=0.0001TMP=0.0N=1100 PI=TMP+DAU/FLOAT(2*N-1)
DAU = íDAUSS=ABS((PI-TMP)/PI)PRINT*,'Vong lap thu ',N,' Sai so=',SS
IF (SS >= EPS) THENTMP = PI
N=N+1GOTO 100ELSE
PI=PI*4.0WRITE(*,300)PI
300 FORMAT(4X,' PI = ',F10.4)END IF
END
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 34/71
34
Cách 2: S dng chu trình lp kt hp DO và EXIT
PROGRAM TINHPI2 ! CACH 2: DO & EXITREAL EPS, SS, PI, TMPINTEGER :: N, DAU = 1EPS=0.0001TMP=0.0N=1DO
PI=TMP+DAU/FLOAT(2*N-1)DAU = íDAUSS=ABS((PI-TMP)/PI)PRINT*,'Vong lap thu ',N,' Sai so=',SS
IF (SS < EPS) EXIT
TMP = PIN=N+1
END DOPI=PI*4.0WRITE(*,300)PI300 FORMAT(4X,' PI = ',F10.4)END
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 35/71
35
Cách 3: S dng cu trúc DO WHILE
PROGRAM TINHPI3 ! CACH 3: DO WHILEREAL EPS, SS, PI, TMPINTEGER :: N, DAU = 1EPS=0.0001TMP=0.0
N=1SS=1.0DO WHILE (SS >= EPS)
PI=TMP+DAU/FLOAT(2*N-1)DAU = íDAUSS=ABS((PI-TMP)/PI)
PRINT*,'Vong lap thu ',N,' Sai so=',SS
TMP = PIN=N+1
END DOPI=PI*4.0WRITE(*,300)PI300 FORMAT(4X,' PI = ',F10.4)
END
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 36/71
36
3. Chng trình con và Modul
t chc mt chng trình gn gàng, d khai thác,Fortran cho phép phân mnh chng trình và to thànhcác chng trình con là th tc (SUBROUTINE) vàhàm (FUNCTION)
Các chng trình con cng có th chia thành hai loi:chng trình con trong và chng trình con ngoài.
Có th chn ra nhng chng trình con trong s cácchng trình con to ra mt th vin riêng. Tp hp
các chng trình con này c gi là modul.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 37/71
37
3. Chng trình con và Modul
Hàm lnh: Dng tng quát:
Tên hàm (danh sách i s) = Biu thc
c khai báo u chng trình, cùng vi các lnhkhai báo d liu.
PROGRAM BT_HAM1REAL X, FxFx = 3*x**2 - 5*x + 2Print*,' Cho gia tri cua X: 'Read*,xPrint '('' Gia tri ham F(x)='',F10.3)', FxEND
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 38/71
38
3. Chng trình con và Modul
Hàm chng trình con: Khai báo:
[KiuDL][RECURSIVE] FUNCTION TenHam &
([Các_i_s]) [R
ESUL
T (TenKetQua) ][Các_câu_lnh_khai_báo]
[Các_câu_lnh_thc hin]
[TenHam = ...]
END FUNCTION [TenHam]
Hàm có th c gi ti bng cách hoc gán giá trhàm cho bin, hoc hàm tham gia vào biu thc tính:
TenBien = TenHam ([Các_i_s])
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 39/71
39
3. Chng trình con và Modul
Th tc con: Cú pháp khai báo th tc:
SUBROUTINE TenThuTuc [( Các_i_s )]
[Các_câu_lnh_khai_báo]
[Các_câu_lnh_thc_hin]
END SUBROUTINE [TenThuTuc]
Li gi th tc:
C ALL TenThuTuc [( Các_i_s)]
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 40/71
40
3. Chng trình con và Modul
Câu lnh CONT AINS: Phân cách thân chng trình chính vi các chng
trình con trong thuc nó.
Các chng trình con trong c sp xp ngay saucâu lnh CONT AINS và trc t khóa END cachng trình chính.
B cc tng quát:PROGRAM TenChuongTrinh
[Các_câu_lnh_khai_báo][Các_câu_lnh_thc_hin][CONT AINSCác_chng_trình_con_trong ]
END [PROGRAM [TenChuongTrinh]]
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 41/71
41
3. Chng trình con và Modul
Thí d 1:
Gii phng trình f(x) = 0 bng phng pháp lpNewton
Các bc:B1) Khi to nghim x bng mt giá tr ban u nào ó
B2) Gán x bi xí f(x)/f¶(x), trong ó f¶(x) là o hàm bcnht ca f(x)
B3) T nh và kim tra iu kin f(x) ~ 0Nu cha tha mãn thì quay li bc 2.
Nu tha mãn thì in kt qu và kt thúc chng trình.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 42/71
42
Gii phng trình f(x) = x3 + x 3
PROGRAM Newton! Giai PT f(x) = 0 bang PP Newton
IMPLICIT NONE
INTEGER :: Its = 0 ! Dem lan lap
INTEGER :: MaxIts = 20 ! So lan lap cuc dai
LOGICAL :: Converged = .false. ! Dieu kien hoi tu
REAL :: Eps = 1E-6 ! Sai so cho phep
REAL :: X = 2. ! Gia tri nghiem khoi tao
DO WHILE (.NOT. Converged .AND. Its < MaxIts)
X = X - F(X) / DF(X)PRINT *, X, F(X)
Its = Its + 1
Converged = ABS(F(X)) <= Eps
END DO
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 43/71
43
IF (Converged) THENPRINT *,'Hoi tu'
ELSEPRINT *,'Phan ky'
END IFPRINT *,¶Nghiem PT: X = µ,X!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CONTAINSFUNCTION F(X)REAL F, XF = X ** 3 + X - 3
END FUNCTION F!!!!!!!!!!!!!!!!!!!!!!!!!!!!FUNCTION DF(X)REAL DF, XDF = 3 * X ** 2 + 1
END FUNCTION DFEND PROGRAM Newton
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 44/71
44
3. Chng trình con và Modul
Thí d 2: Tính các c trng thng kê: trung bình,phng sai và lch chun ca chui x gm n phn ttheo công thc sau:
,1
n
x
m
n
i
i
x
§!! ,
1
21
2
x
n
i
i
xm
n
x
D
!
§!
x xD!W
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 45/71
45
PROGRAM THKEINTEGER N, I
REAL X(99), TBINH, PSAI, DLCPRINT *, ' NHAP DO DAI CHUOI (<100)'READ *, NPRINT *, ' NHAP CAC GIA TRI CUA X:'
5 FORMAT (1X, ' X(', I2, '): ')
DO I = 1, NWRITE (*, 5) IREAD *, X (I)
ENDDOCALL STAT(X, N, TBINH, PSAI, DLC)
WRITE(*, 8) TBINH, PSAI, DLC8 FORMAT (1X, 'T.BINH = ', F7.2, µ PH.SAI = ',&
F7.2, ' DL CHUAN = ', F7.2)END
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 46/71
46
SUBROUTINE STAT (X, N, AVER, VARI, STDV)REAL X (N), AVER, VARI, STDVINTEGER N, IAVER = 0.0VARI = 0.0DO I = 1, N
AVER = AVER + X (I)VARI = VARI + X (I) * X (I)
END DOAVER = AVER / REAL (N)VARI = VARI / REAL (N-1) - AVER * AVERSTDV = SQRT (VARI)RETURN
END
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 47/71
47
Hàm tr v nhiu giá tr
Fortran 90 cho phép nh ngha hàm vi kh nng tr v nhiugiá tr.
Thí d 3: gi s có hàm f(x)= 3x2 + 2x -5. Hãy tính giá tr cahàm ti các giá tr ca i s x1, x2,..., xn.
INTEGER, PARAMETER :: N = 7REAL, DIMENSION (N) :: X, FXDATA X /-3., -2., -1., 0., 1., 2., 3./FX = F(X,N)PRINT*, FXCONTAINS
FUNCTION F(X,N)INTEGER, INTENT (IN) :: NREAL, DIMENSION(N),INTENT(IN) :: XREAL, DIMENSION(SIZE(X)):: F
F(:) = 3*X(:)*X(:) + 2*X(:) - 5END FUNCTIONEND
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 48/71
48
Hàm tr v nhiu giá tr
Nu F(X,N) c khai báo nh mt hàm ngoài thì trong phnkhai báo ca chng trình gi cn phi có khi giao din nhsau:
INTEGER, PARAMETER :: N = 7REAL, DIMENSION (N) :: X, FX
INTERFA CEFU NCTION F(X, N)INTEGER , INTE NT (IN) :: N R E AL, DIM E NSION( N),INTE NT(IN) :: XR E AL, DIM E NSION(SIZE(X)):: F
E ND FU NCTIONEND INTERFACEDATA X /-3., -2., -1., 0., 1., 2., 3./
FX = F(X,N)PRINT*, FXENDFUNCTION F(X,N)
INTEGER, INTENT (IN) :: NREAL, DIMENSION(N),INTENT(IN) :: XREAL, DIMENSION(SIZE(X)):: F
F(:) = 3*X(:)*X(:) + 2*X(:) - 5END FUNCTION
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 49/71
49
Các thuc tính ca i s
Thuc tính INTENT: khi thc hin li gi n mtchng trình con, các i s hình thc s c thay thbi các i s thc ca chng trình gi. Cú pháp và tác ng ca t khóa INTENT nh sau:
INTENT (Mô_t) [::] vnamehocKiu_DL, INTENT (Mô_t) :: vname(vname là danh sách bin óng vai trò i s hình thc;
Mô_t có th nhn mt trong các giá tr:
IN: khi tham s ch truyn vào cho chng trình con vàkhông th b làm thay i giá tr OUT: nu bin tr giá tr v chng trình gi, nó cn phi có
mt trong danh sách i s hình thc INOUT: va là tham s truyn vào cho chng trình con
va là bin tr giá tr v cho chng trình gi.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 50/71
50
Các thuc tính ca i s
Thí d v INTENT:REAL X(20), SUMCALL RANDOM_NUMBER (X) ! To mng s ngu nhiên XPRINT*,X ! X truyn cho chng trình conCALL TONG (X,20,SUM)PRINT*,SUM ! Bin kt qu tr v t CTConPRINT*,X ! X tr v t chng trình conCONTAINSSUBROUTINE TONG (X,N,SUM)
INTEGER, INTENT (IN) :: N ! N ch INREAL, INTENT (INOUT) :: X(N) ! X va IN va OUTREAL, INTENT (OUT) :: SUM ! SUM ch OUT
X = X + 10. ! Làm thay i XSUM = 0.DO I=1,N
SUM=SUM+X(I)END DOEND SUBROUTINE TONG
END
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 51/71
51
Các thuc tính ca i s
Thuc tính OPTIONAL: Khi xây dng các chng trình con, danh sách các i
s hình thc có th rt nhiu. tránh vic tham chiun nhng i s không cn thit ta có th khai báo
trong chng trình con tt c hoc mt s i s cóthuc tính tùy chn.
T khóa dùng khai báo i s tùy chn là OPTION ALmà cú pháp và cách s dng ca nó c mô t nhsau:
OPTION AL [::] vname
hoc
Kiu_DL, OPTION AL :: vname
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 52/71
52
Các thuc tính ca i s
Thuc tính OPTION AL: Thí d:
SUBROUTINE TONG (X,N,SUM, A, B, C, D, E)INTEGER, INTENT (IN) :: NREAL, INTENT (INOUT) :: X(N)
REAL, INTENT (OUT) :: SUMREAL, OPTIONAL :: A, B, C, D, E ! Các i s tùy chnX = X + 10.SUM = 0.DO I=1,N
SUM=SUM+X(I)
END DOA = X(1)B = X(2)C = A + BD = X(3)E = C * DEND SUBROUTINE TONG
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 53/71
53
Các thuc tính ca i s
Gi s trong chng trình chính ta khai báo khi giaodin cho chng trình này là:INTERFACE
SUBROUTINE TONG (X,N,SUM, A, B, C, D, E)
REAL, INTENT (INOUT) :: X(N)
REAL, OPTIONAL :: A, B, C, D, E
END SUBROUTINE TONG
END INTERFACE
Khi ó chng trình con TONG có th c gi nnh sau:CALL TONG (X,N,SUM) !B qua tt c các i s tùy chn
CALL TONG (X,N,SUM,T) !B qua 4 i s tùy chn cui cùng
CALL TONG (X,N,SUM,T,U) !B qua 3 i s cui cùng
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 54/71
54
Các thuc tính ca i s
Thuc tính SAVE: Vùng b nh cung cp cho các bin a phng trong
các chng trình con s c gii phóng ngay sau khichng trình con tr kt qu v cho chng trình gi.Nu mun lu gi giá tr ca chúng cho ln gi sau tacó th t thuc tính S AVE cho chúng.
Cú pháp khai báo thuc tính S AVE nh sau:
S AVE [::] vnamehoc
Kiu_DL, S AVE :: vname
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 55/71
55
MODUL
Fortran nh ngha 3 khái nim n v chng trình (ProgramUnit) là: chng trình chính, chng trình con ngoài, và modul.Modul khác vi các chng trình con 2 im quan trng: Modul có th cha trong ó nhiu hn mt chng trình con.
M
odul có th cha nhng câu lnh khai báo và c t mà chúng có ththam chiu c i vi tt c các n v chng trình có s dngmodul.
Các modul cng có th c biên dch mt cách c lp. Cu trúcchung ca modul có dng nh sau:MODULE TenModul
[Các_câu_lnh_khai_báo][CONTAINS
Các_chng_trình_con_modul]
END [MODULE [TenModul]] s dng modul ta dùng câu lnh khai báo USE ngay u
chng trình: USE Tên_Modul_c_s_dng
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 56/71
56
MODUL
PROGRAM EXAMPUSE MyModulIMPLICIT NONEREAL A, BPRINT*, µ Cho mot so: µREAD*, A
B = Pi ! Khai bao tu ModulCALL DOI_CHO( A, B ) ! Khai bao tu ModulPRINT*, A, B
ENDMODULE MyModulREAL, PARAMETER :: Pi = 3.1415927CONTAINS
SUBROUTINE DOI_CHO ( X, Y )REAL Tmp, X, YTmp = XX = YY = Tmp
END SUBROUTINE DOI_CHOEND MODULE MyModul
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 57/71
57
Câu lnh Include
Ví d, gi s ta có file ³P ARAM.INC´ lu ti th mc
hin thi vi ni dung là:
INTEGER, PARAMETER :: NMAX=200, MMAX=100
REAL, PARAMETER :: Re=6731, G=9.8
Khi ó chng trình sau ây:
PROGRAM CT1
INCLUDE ³PARAM.INC´«
END
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 58/71
58
4. Mng
Mng là mt tp hp các phn t có cùng kiu d liu,c sp xp theo mt trt t nht nh, trong ó miphn t c xác nh bi ch s và giá tr ca chúng.
Kiu d liu ca các phn t mng có th là kiu shoc không phi s. Mi mng c xác nh bi tênmng, s chiu, kích thc cc i và cách sp xpcác phn t ca mng.
Mng có th là mng tnh hoc mng ng.
Khi khai báo mng cn phi ch ra tên và s chiu canó, nhng có th cha cn ch ra kích thc và cáchsp xp các phn t mng. Có rt nhiu cách khai báobin mng.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 59/71
59
4. Mng
Mt s dng cú pháp tng quát ca câu lnh khai báo mng thngc s dng: Dng 1:
Kiu_DL Tên_bin_mng (Mô_t)RE AL*4 X (0:100)
RE AL Y(12,34) Dng 2:
Thuc_tính Tên_bin_mng (Mô_t)DIMENSION N (10,20)
ALLOC AT ABLE Y(:,:)
Dng 3:
Kiu_DL, Thuc_tính (Mô_t) :: Tên_bin_mngRE AL, ALLOC AT ABLE(:,:) :: X
INTEGER, DIMENSION(12,34) :: Y
Dng 4:
Kiu_DL, Thuc_tính :: Tên_bin_mng(Mô_t)RE AL, ALLOC AT ABLE :: X (:,:)
RE AL, DIMENSION Y(12,34)
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 60/71
60
Lu tr và truy cp ti các phn t mng
S dng lnh D AT A khi to mng:
REAL, DIMENSION(10) :: A, B, C(3,3)
DATA A / 5*0, 5*1 /
! Gán 5 phn t u bng 0 và 5 phn t tip!theo bng 1
DATA B(1:5) / 4, 0, 5, 2, -1 /
! Ch gán giá tr cho các phn t t B(1) n!B(5)
DATA ((C(I,J), J= 1,3), I=1,3) /3*0,3*1, 3*2/
! Gán giá tr cho các phn t ca C ln lt!theo hàng
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 61/71
61
Lu tr và truy cp ti các phn t mng
Biu thc mng: Có th thc hin các phép toán trên các bin mng.
Trong trng hp này các mng phi có cùng cutrúc.
REAL, DIMENSION(10) :: X, YX + Y !Cng tng ng các phn t ca X và Y:
!X(I) + Y(I)X * Y ! Nhân tng ng các phn t ca X và Y:
!X(I) * Y(I)X * 3 ! Nhân tng ng các phn t ca X vi 3:
!X(I) * 3X * SQRT(Y) ! Nhân các phn t ca X vi cn bc 2
!ca các phn t tng ng ca Y:!X(I) * SQRT(Y(I))
X == Y ! Phép toán so sánh, cho kt qu .TRUE. nu! X(I) == Y(I), và .FALSE. nu ngc li.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 62/71
62
Cu trúc WHERE... ELSEWHERE ... END WHERE
Cú pháp lnh nh sau:
WHERE (iu_kin) Câu_lnh
hoc
WHERE (iu_kin)
Các_câu_lnh_1
ELSEWHERE
Các_câu_lnh_2
END WHERE
Lu tr và truy cp ti các phn t mng
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 63/71
63
Cu trúc WHERE... ELSEWHERE ... ENDWHERE
REAL A (5), B(5), C(5)
A = (/ 89.5, 43.7, 126.4, 68.3, 137.7 /)B = 0.0C = 0.0WHERE (A > 100.0)
A = 100.0
B = 2.3ELSEWHERE
A = 50.0C = -4.6
END WHERE
Lu tr và truy cp ti các phn t mng
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 64/71
64
Mng có kích thc và cách sp xp các phn tkhông c xác nh ngay t lúc khai báo gi là mngng.
Các mng ng luôn phi có thuc tính ALLOC AT ABLEtrong câu lnh khai báo.
Kiu_DL,DIMENSION(Mô_t), ALLOC AT ABLE :: Tên_bin
hoc
Kiu_DL, ALLOC AT ABLE [::] Tên_bin [(Mô_t)]
hoc
ALLOC AT ABLE [::] Tên_bin [(Mô_t)]
Mng ng (Dynamical array)
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 65/71
65
Mng ng (Dynamical array)
Ví d: RE AL,DIMENSION(:), ALLOC AT ABLE :: X ! Mng 1 chiu RE AL, ALLOC AT ABLE :: vector(:) ! Mng 1 chiu INTEGER, ALLOC AT ABLE :: matrix(:,:) ! Mng 2 chiu
DIM
ENSIO
N X (:,:) ! X là mng hai chiu và RE AL, ALLOC AT ABLE :: X ! X là mng ng, thc
ALLOC AT ABLE :: Y(:,:) ! Y là mng ng 2 chiu
Câu lnh ALLOC ATE dùng nh v kích thc và cáchsp xp các phn t mng trong b nh (tc cp phát b
nh cho bin).
Câu lnh DE ALLOC ATE dùng gii phóng vùng b nh
mà bin mng ng ã c cp phát.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 66/71
66
Mng ng (Dynamical array)
REAL, DIMENSION(:), ALLOCATABLE :: X, OldXREAL AINTEGER NALLOCATE (X(0)) ! Kích thc ca X (lúc u bng 0)N = 0DO
Print*, µCho mot so: µREAD(*,*) AIF ( A < 0 ) EXIT ! Nu A<0 thì thoátN = N + 1 ! Tng N lên 1 n vALLOCATE(OldX(SIZE(X))) ! Cp phát kích thc ca
! OldX bng kích thc ca XOldX = X ! Lu X vào OldX
DEALLOCATE( X ) ! Gii phóng XALLOCATE(X(N)) ! Cp phát X có kích thc bng NX = OldX ! Gán toàn b OldX cho XX(N) = A !Gán giá tr mi cho phn t th N ca XDEALLOCATE( OldX ) ! Gii phóng OldX
END DOPRINT*,N, ( X(I), I = 1, N )
END
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 67/71
67
Kiu con tr
Con tr là mt khái nim xác nh bin có thuc tínhcon tr. Bin con tr có th là bin vô hng hoc binmng. Khai báo kiu con tr nh sau:
POINTER [::] Tên_con_tr [(Mô_t)] [, ...]
hoc
Kiu_DL, POINTER :: Tên_con_tr [(Mô_t)]
Bin con tr có th c cp phát b nh bng lnh
ALLOC ATE hoc tr n mt bin khác. Bin c contr tr n hoc là mt bin có thuc tính ích
(T ARGET) hoc mt bin ã c xác nh.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 68/71
68
Kiu con tr
INTEGER, POINTER :: P1 (:)INTEGER, POINTER :: P2 (:)INTEGER, ALLOCATABLE, TARGET :: D (:)ALLOCATE (D (7)) ! Cp phát b nh cho bin ICHD = 1D (1:7:2) = 10.
PRINT*, 'DICH=',DP1 => D ! Con tr tr vào bin ICHPRINT*,'CON TRO P1=',P1ALLOCATE (P1(10)) ! Cp phát b nh cho bin con trP1 = 5P2 => P1 ! Con tr tr vào bin ã xác nhPRINT*,'CON TRO P1=',P1
print*print*,'CON TRO P2=',P2P2 = 8PRINT*,'CON TRO P1=',P1print*print*,'CON TRO P2=',P2END
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 69/71
69
Kiu con tr
a con tr v trng thái không tr vào âu c tadùng câu lnh:
NULLIFY (P) !P là bin con tr
xác nh trng thái hin thi ca con tr có thdùng hàm:
ASSOCI ATED (P) !P là bin con tr
Hàm này tr v giá tr .TRUE. nu con tr ã liên kt vi mt bin, và
tr v giá tr .FALSE. nu con tr trng thái không tr vào âu c.
Bin con tr có th c cp phát b nh bng câulnh ALLOC ATE và c gii phóng bi câu lnhDE ALLOC ATE tng t nh mng ng.
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 70/71
70
Bn ghi
nh ngha mt bn ghi lu tr thông tin ca mt sinhviên nh sau:TYPE HOSOSV CHARACTER (30) HoTen !bao gom ca ho va ten
CHARACTER (20), DIMENSION(4) :: DiaChi! Tinh, huyen, xa, thon/xom
CHARACTER (10) DienThoaiCHARACTER (9) MaSo ! Vi du, K45003504LOGICAL GioiTinh ! .TRUE. neu la Nu,
! .FALSE. doi voi Nam (!)INTEGER NgaySinh ! Vi du, 19870308REAL, DIMENSION(40) :: Diem !Diem cac mon hocE ND TYPE
8/6/2019 Giới thiệu về Fortran
http://slidepdf.com/reader/full/gioi-thieu-ve-fortran 71/71
71
Bn ghi
Khai báo:
TYPE (HOSOSV) SVien
hay
TYPE (HOSOSV), DIMENSION (24) :: KTHN_K51
Truy cp:SVien%HoTen = ³Hoang Anh Dung´
SVien%DiaChi(1) = ³Ha Noi´
SVien%DiaChi(2) = ³Hoan Kiem´
SVien%DiaChi(3) = ³Hang Bac´
SVien%DiaChi(4) = ³Dinh Tien Hoang´
SVien%GioiTinh = .FALSE.