Slide Ngôn Ngữ Lập Trình Tính Toán Fortran Trần Thùy Dương, 71 Trang

background image

1

p pp p

ppp

Trҫn Thùy Dương ± SNEEP

Email: duongtran902@gmail.com

background image

2

p

-

`

TN (

`

mular

TN

slator): mӝt trong nhӳng ngôn ngӳ lұp

trình cũ nhҩt (phát hành vào năm 1957) đưӧc thiӃt kӃ cho các tính toán
trong khoa hӑc kӻ thuұt.

-

Các phiên bҧn cӫa `ortran

-

`

TN 1957

-

`

TN II

-

`

TN IV

-

`

TN 66 (đưӧc phát hành theo tiêu chuҭn NSI 1966)

-

`

TN 77 (chuҭn NSI 1977)

-

`

TN 90 (Chuҭn NSI 1990)

-

`

TN 95 (Chuҭn NSI mӟi nhҩt)

-

Có nhiӅu phiên bҧn µbҧn đӏa hóa¶ khác nhau.

-

NhiӅu chương trình tính toán trong khoa hӑc kӻ thuұt đưӧc viӃt sҹn
dưӟi dҥng các Sub`unction hoһc Suboutine.

background image

ó

pp

-

`

TN đưӧc tҥo ra đӇ viӃt các chương trình giҧi

các bài toán khoa hӑc kӻ thuұt

-

Đưa vào kiӇu biӃn nguyên và dҩu chҩm đӝng (floating point)

-

Đưa vào kiӇu dӳ liӋu mҧng cho các tính toán toán hӑc

-

Đưa vào các subroutines và subfunctions

-

Trình biên dӏch có thӇ tҥo ra mã tӕi ưu cao (chҥy nhanh)

-

Có sҹn rҩt nhiӅu thư viӋn sӕ toán (numerical-math)

-

Các khó khăn và nhưӧc điӇm cӫa `ortran:

-

Cho phép sӱ dөng lӋnh G T rҩt tӵ do nên khó đӇ đӑc
hiӇu các đoҥn mã lӋnh và làm rӕi chương trình

-

Khó kiӇm soát các dӳ liӋu dҥng phi sӕ (nonnumerical)

-

Không có khҧ năng lұp trình đӋ qui

background image

z

!"#$

-

@

-

¨

anet Nicholson, V

@

-

merican National Standard, ÷

@

-

Ö

IT,

-

›

ahey/`ujitsu,

-

Tao Pang, @ V

÷

÷ ÷ !

background image

5

p%&'()*'

1.

Cơ bҧn vӅ `ortran

2.

Cҩu trúc điӅu khiӇn

ó

.

Ö

odule và thӫ tөc

z

.

Sӕ liӋu dҥng array

5.

BiӃn con trӓ

6.

›

Ӌnh Vào/ a

background image

6

|

+,#'-.$// '

-

Cҩu trúc tәng quát cӫa chương trình `ortran:

Ž

Ž

Ž

Ž Ž

Ž

-

Cҩu trúc câu lӋnh cӫa `ortran:

-

Ö

ӝt dòng lӋnh không quá 1ó2 ký tӵ (kӇ cҧ dҩu cách);

-

Câu lӋnh quá dài: đһt ký tӵ ³

&

´ ӣ cuӕi dòng đӇ nӕi vӟi

dòng tiӃp theo.

-

Ö

ӑi ký tӵ sau dҩu ³

!

´ là lӡi chú thích.

background image

7

|

+,#'-.$// '

-

Ví dө chương trình `ortran đơn giҧn:

å

/$(/ !0!

!a: tên chương trình

!an example of program structure !b: chú thích

/1 22 '031/4546

!c: khai báo biӃn

å

/'7489'1/3$'!,1/08

!d: dӳ liӋu ra

/1 &745

!e: dӳ liӋu vào

/1 &746

!e: dӳ liӋu vào

'031/:5;6

!f : phép toán sӕ hӑc

å

/'7481$ 084 '031/

!g: dӳ liӋu ra

1'&å/$(/ !0!

!h: kӃt thúc chương trình

background image

C

|

+,#'-.$// '

-

Dӳ liӋu và cách biӇu diӉn dӳ liӋu trong `ortran

-

KiӇu sӕ nguyên:

(z byte)

-

Giá trӏ tӯ: - 21z7zCó6z7 (2

ó

1

) to 21z7zCó6z (2

ó

1

-1)

-

Khai báo:

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

(

Kind

=1,2,z,C;

attrs:

PÖETE, DIÖENSI N, ›› CTB›E,

P INTE..)

-

KiӇu sӕ thӵc:

(eal: z byte; Double: C byte )

-

E› [([KIND=]kind)][[,attrs] ::] vname

(chính xác 6 chӳ sӕ)

-

D B›E PECISI N [[,attrs] ::]vname

(chính xác 15 chӳ sӕ)

-

KiӃu sӕ phӭc:

(z byte)

-

C ÖP›EX [([KIND =]kind)] [[,attrs] :: ] vname

background image

9

|

+,#'-.$// '

-

Dӳ liӋu và cách biӇu diӉn dӳ liӋu trong `ortran

-

KiӇu ký tӵ (

z

byte), khai báo:

-

CHCTE (length) vname

-

hoһc

CHCTE (type[,type«])[attrib[,attrib]«] :: vname

-

hoһc

CHCTE [*chrs] vname [*lengths][(dim)] &

[/values/][,vname [*lengths][(dim)]] [/values/]

-

KiӇu logic

(z byte)

-

ChӍ nhұn 2 giá trӏ:

9

9

-

Khai báo:

›

GIC› [([KIND=]kind)] [, attrs ::] vname

background image

10

|

+,#'-.$// '

-

Dӳ liӋu và cách biӇu diӉn dӳ liӋu trong `ortran:

Interger X,Y(10)

Real, parameter :: A=2010

Complex(4), Dimension(8) :: cz, cq

CHARACTER (20) St1, St2*30

LOGICAL, ALLOCATABLE :: flag1, flag2

background image

11

f

''(< )=)å>å$='/$'($// '

background image

12

|

+,#'-.$// '

-

Nhұp và xuҩt dӳ liӋu đơn giҧn

-

›

Ӌnh nhұp dӳ liӋu:

ED*, list

-

›

Ӌnh in dӳ liӋu không đӏnh dҥng:

PINT*,list

Thí dө:

PINT*, "Can bac hai cua ", 2, ³la´, SQT(2.0)

-

›

Ӌnh in dӳ liӋu đӏnh dҥng:

-

Cú pháp:

k ` ÖT (danh sách các đһc tҧ)

-

k là nhãn cӫa dòng lӋnh

Thí dө:

X = 12ó.z567

PINT 10, X

10 ` ÖT( `C.2 )

background image

Ö%0?@A)#/$'(''@ '&B'(

-

H

trong đó - n sӕ vӏ trí đӇ xuҩt dӳ liӋu văn bҧn. Thí dө

:

PINT 5 , Y
5 ` ÖT (16H TICH PHN BNG , `9.ó)

-

X

sӁ chèn dҩu trӕng vào bҧn ghi. Thí dө:

PINT ó5

ó

5 ` ÖT ('1' , 25X , 'THI NGHIEÖ S 1')

-

Ð

:

Ð

là sӕ vӏ trí giành cho 1 biӃn là xâu ký tӵ

-

IÐ

Ð

là sӕ vӏ trí dùng cho 1 biӃn sӕ nguyên

-

`Ð

dùng biӇu diӉn dҥng thұp phân cӫa sӕ thӵc, - Ð

tәng sӕ vӏ trí dành cho sӕ thӵc kӇ cҧ dҩu chҩm thұp phân,
- sӕ chӳ sӕ thұp phân sau dҩu chҩm

-

E Ð

ghi ra dưӟi dҥng luӻ thӯa

-

›

Ð

trong đó - Ð sӕ vӏ trí giành cho dӳ liӋu kiӇu logic.

background image

1z

|

+,#'-.$// '

-

Sӱ dөng file:

-

Đӑc tӯ file:

program readdata

implicit none

!Đӏc dӱ liӉu tӭ file tên là mydata.txt

real :: x,y,z
h

print *,x,y,z
h

end program readdata

background image

15

|

+,#'-.$// '

-

Sӱ dөng file:

-

ViӃt vào file:

program io2

real :: num
integer :: i
h h

do i = 1,100

num = i/3.0

end do
h
print *, 'finished'

end program io2

background image

16

|

+,#'-.$// '

-

Sӱ dөng file:

-

`

ortran ngҫm đӏnh mӝt sӕ thiӃt bӏ chuҭn liên kӃt vӟi

đӏnh danh NIT như sau:

Dҩu sao (*): Öàn hình hoһc bàn phím

í NIT = 0: Öàn hình hoһc bàn phím
í NIT = 5: Bàn phím
í NIT = 6: Öà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.µ

background image

17

_ C/D)@."E'

2.1. Cҩu trúc I` và các lӋnh tương ӭng

2.2. Cҩu trúc lһp vӟi lӋnh D

2.ó. Cҩu trúc SE›ECT CSE

2.z. Chu trình lһp không xác đӏnh

2.5. Öӝt sӕ ví dө

background image

1C

_ | C/D)-)=)'F+'(G'(

-

›

Ӌnh I` logic:

-

Dҥng 1:

-

Dҥng 2:

(BiӇu thӭc logic) 9p

lӋnh 1
....
lӋnh n

9pH

(BiӇu thӭc logic) 9p

lӋnh 1
....
lӋnh n

99

lӋnh n + 1
....
lӋnh m

9pH

background image

19

_ | C/D)-)=)'F+'(G'(

-

›

Ӌnh I` logic:

-

Dҥng ó:

(BiӇu thӭc lôgic 1) 9p

lӋnh 1
...
lӋnh m

99(BiӇu thӭc lôgic 2) 9p

lӋnh m+1
...
lӋnh n

99(BiӇu thӭc lôgic ó) 9p

lӋnh n+1
...
lӋnh p

99

lӋnh p+1
...
lӋnh q

9pH

background image

20

_ | C/D)-)=)'F+'(G'(

-

›

Ӌnh I` logic:

-

Thí dө:

÷

÷

!"!"

# $"

÷

%&""÷'

($)"

÷

*(!

($+"

÷

($,"

÷

&"

($-"

÷

*"

(

÷

.*

÷

background image

21

_ | C/D)-)=)'F+'(G'(

-

›

Ӌnh I` logic: mӝt sӕ biӇu thӭc lôgic

Toán tӱ

Dҥng khác

Thí dө

Giҧi thích

==

.eq.

If(i==j) then...

bҵng

>

.gt.

If (i.gt.j) then ...

›

ӟn hơn

>=

.ge.

If (i.ge.j) then ...

›

ӟn hơn hoһc bҵng

<

.lt.

If (i.lt.j) then ...

Nhӓ hơn

<=

.le.

If (i.le.j) then ...

Nhӓ hơn hoһc bҵng

/=

.ne.

If (i.ne.j) then ...

Khác nhau

.not.

If (not.k) then ...

.true. nӃu k là .false.

và ngưӧc lҥi

.or.

If(i>j.or.j<k) then...

Phép lôgic

.and.

If(i>j.and.j<k) then...

Phép lôgic ND

background image

22

_ | C/D)-)=)'F+'(G'(

-

›

Ӌnh I` sӕ hӑc

-

›

Ӌnh I` sӕ hӑc cho phép thӵc hiӋn rӁ nhánh chương

trình thành ba nhánh tùy thuӝc vào giá trӏ cӫa biӇu
thӭc sӕ hӑc.

-

Dҥng tәng quát:

I` (BThuc_SoHoc) m1, m2, mó

÷

"÷(*.

-/

÷ (.""-

0

÷ (.-

0

/÷ (."-
0!*

background image

_ | C/D)-)=)'F+'(G'(

-

›

Ӌnh nhҧy vô điӅu kiӋn G T :

-

Cú pháp:

G T

"

#$ %

& '

-

›

Ӌnh G T tính toán:

-

Cú pháp:

G T

(

)

*

)

)

(

)

*

)

"+

# %

% )

" ,#

#$ %

& '

background image

2z

_ _ C/D)Aå-I'H

-

Dҥng 1:

D

-) [, !]

!bdk: biӃn điӅu khiӇn

Các_câu_lӋnh

Câu_lӋnh_kӃt_thúc

-

Dҥng 2:

D

-) [, !]

Các_câu_lӋnh

C NTINE

-

Dҥng ó:

D

-) [, !]

Các_câu_lӋnh

END D

background image

25

_ _ C/D)Aå-I'H

REAL X(15), Y(15)

N = 15

3 I =1, N
READ * , X (I)
Y (I) = X (I)

3

!*

2 I = 1, N-1
K = I

4 J = I + 1, N
IF (Y(K).LT.Y(J)) K = J

4

!*

IF (K .NE. I) THEN

TG = Y(I)
Y(I) = Y(K)
Y(K) = TG

END IF

2

!*

7 I = 1, N

PRINT 5 , X (I), Y (I)

7

!*

5 FORMAT (1X, 2F10.2)

END

* &J |

: ViӃt chương

trình nhұp 15 phҫn tӱ
cӫa mҧng sӕ thӵc X, sҳp
xӃp lҥi các phҫn tӱ mҧng
theo thӭ tӵ giҧm dҫn và
in lên màn hình các mҧng
cũ và mӟi thành hai cӝt.

background image

26

_ _ C/D)Aå-I'H

÷

!" #'

1

÷

÷

22-

*&J_

: ViӃt chương trình tính tәng các sӕ nguyên liên tiӃp tӯ

N1 đӃn N2, trong đó N1 và N2 đưӧc nhұp vào tӯ bàn phím.

background image

27

_ C/D)999

-

Dҥng tәng quát:

(!!(3!h

!(!h

!333

!(!h

!333


!(*

!333

(!

BThuc_Chon, Chon1, Chon2,« phҧi có cùng kiӇu dӳ liӋu

sӕ nguyên, lôgic hoһc CHCTE*1

background image

2C

_ C/D)999

-

*&J2

gõ mӝt ký tӵ và cho biӃt đó là chӳ cái hay chӳ sӕ.

!" !
÷

"4hh5
!

(!!(

!()

2h2!

!(6

22!

!(*

25h4 h7

45h4 2

252!

(!

background image

29

_ /K'Aå"L'(5=)@ '

-

Cҩu trúc kӃt hӧp I` và G T

!8393:;3<=43>

!?38393@ 3h3h43<=43>

3h4

hoһc:

!8393:;3<=43>

!?38393@ 3h3h43<=43>

3h4"

!?38393A3B3CD353> 3E

background image

ó

0

_ /K'Aå"L'(5=)@ '

-

Cҩu trúc D và EXIT

Dҥng 1:

Ž

TenChuTrinh:] DO

IF (BThuc_Logic) EXIT
Các_câu_lӉnh

END DO ŽTenChuTrinh]

Dҥng 2:

Ž

TenChuTrinh:] DO

Các_câu_lӉnh
IF (BThuc_Logic) EXIT

END DO ŽTenChuTrinh]

background image

ó

1

_ /K'Aå"L'(5=)@ '

-

Cҩu trúc D WHI›E«END D

DO WHILE (BThuc_Logic)

Các_câu_lӉnh

END DO

-

›

Ӌnh CYC›E

CYCLE ŽTên_Chu_Trình

›

Ӌnh CYC›E có thӇ nҵm trong các chu trình lӗng nhau.

NӃu không chӍ ra Tên_Chu_Trình thì CYC›E chӍ có tác
đӝng đӕi vӟi chu trình lһp trong nhҩt chӭa nó.

background image

ó

2

_ /K'Aå"L'(5=)@ '

-

Thí dө: Tính sӕ PI theo công thӭc

Đây là tәng cӫa mӝt chuӛi đan dҩu mà sӕ hҥng

tәng quát là:

´

‚

‚

‚

‚

‚

i

i

i

background image

óó

=)|2M&J'()/K'Aå"NOå

-

PROGRAM TINHPI1 ! Cach 1: IF & GOTO
REAL EPS, SS, PI, TMP
INTEGER :: N, DAU = 1
EPS=0.0001
TMP=0.0
N=1
100 PI=TMP+DAU/FLOAT(2*N-1)

DAU = íDAU
SS=ABS((PI-TMP)/PI)

PRINT*,'Vong lap thu ',N,' Sai so=',SS

IF (SS >= EPS) THEN

TMP = PI
N=N+1
GOTO 100

ELSE

PI=PI*4.0
WRITE(*,300)PI

300 FORMAT(4X,' PI = ',F10.4)

END IF

END

background image

óz

=)_2M&J'()/K'Aå"NOå

H-9P

PROGRAM TINHPI2 ! CACH 2: DO & EXIT
REAL EPS, SS, PI, TMP
INTEGER :: N, DAU = 1
EPS=0.0001
TMP=0.0
N=1
DO

PI=TMP+DAU/FLOAT(2*N-1)
DAU = íDAU
SS=ABS((PI-TMP)/PI)

PRINT*,'Vong lap thu ',N,' Sai so=',SS

IF (SS < EPS) EXIT

TMP = PI
N=N+1

END DO
PI=PI*4.0
WRITE(*,300)PI
300 FORMAT(4X,' PI = ',F10.4)
END

background image

ó

5

=)2M&J'()C/D)HQ9

PROGRAM TINHPI3 ! CACH 3: DO WHILE
REAL EPS, SS, PI, TMP
INTEGER :: N, DAU = 1
EPS=0.0001
TMP=0.0
N=1
SS=1.0
DO WHILE (SS >= EPS)

PI=TMP+DAU/FLOAT(2*N-1)
DAU = íDAU
SS=ABS((PI-TMP)/PI)

PRINT*,'Vong lap thu ',N,' Sai so=',SS

TMP = PI
N=N+1

END DO
PI=PI*4.0
WRITE(*,300)PI
300 FORMAT(4X,' PI = ',F10.4)
END

background image

ó

6

F+'(/K')$'-Ö$&

-

ĐӇ tә chӭc mӝt chương trình gӑn gàng, dӉ khai thác,
`

ortran cho phép phân mҧnh chương trình và tҥo thành

các chương trình con là thӫ tөc (

SB TINE

) và

hàm (

`

NCTI N

)

-

Các chương trình con cũng có thӇ chia thành hai loҥi:
chương trình con trong và chương trình con ngoài.

-

Có thӇ chӑn ra nhӳng chương trình con trong sӕ các
chương trình con đӇ tҥo ra mӝt thư viӋn riêng. Tұp hӧp
các chương trình con này đưӧc gӑi là modul.

background image

ó

7

F+'(/K')$'-Ö$&

-

Hàm lӋnh:

-

Dҥng tәng quát:

R'!S& '0=)@?0?T:UEG)

-

Đưӧc khai báo ӣ đҫu chương trình, cùng vӟi các lӋnh

khai báo dӳ liӋu.

PROGRAM BT_HAM1
REAL X, Fx
Fx = 3*x**2 - 5*x + 2
Print*,' Cho gia tri cua X: '
Read*,x
Print '('' Gia tri ham F(x)='',F10.3)', Fx
END

background image

óC

F+'(/K')$'-Ö$&

-

Hàm chương trình con:

-

Khai báo:

[KiӇuD›][ECSIVE] `NCTI N TenHam &

([Các_đӕi_sӕ]) [ES›T (TenKetQua) ]

[Các_câu_lӋnh_khai_báo]
[Các_câu_lӋnh_thӵc hiӋn]
[TenHam = ...]

END `NCTI N [TenHam]

-

Hàm có thӇ đưӧc gӑi tӟi bҵng cách hoһc gán giá trӏ
hàm cho biӃn, hoһc hàm tham gia vào biӇu thӭc tính:

TenBien = TenHam ([Các_đӕi_sӕ])

background image

ó

9

F+'(/K')$'-Ö$&

-

Thӫ tөc con:

-

Cú pháp khai báo thӫ tөc:

SB TINE TenThuTuc [( Các_đӕi_sӕ )]

[Các_câu_lӋnh_khai_báo]

[Các_câu_lӋnh_thӵc_hiӋn]

END SB TINE [TenThuTuc]

-

›

ӡi gӑi thӫ tөc:

C›› TenThuTuc [( Các_đӕi_sӕ)]

background image

z

0

F+'(/K')$'-Ö$&

-

Câu lӋnh

C NTINS

:

-

Phân cách thân chương trình chính vӟi các chương
trình con trong thuӝc nó.

-

Các chương trình con trong đưӧc sҳp xӃp ngay sau
câu lӋnh C NTINS và trưӟc tӯ khóa END cӫa
chương trình chính.

-

Bӕ cөc tәng quát:

P GÖ TenChuongTrinh

[Các_câu_lӋnh_khai_báo]
[Các_câu_lӋnh_thӵc_hiӋn]

[C NTINS

Các_chương_trình_con_trong ]

END [P GÖ [TenChuongTrinh]]

background image

z

1

F+'(/K')$'-Ö$&

-

Thí dө 1:

-

Giҧi phương trình f(x) = 0 bҵng phương pháp lһp
Newton

-

Các bưӟc:

B1) Khӣi tҥo nghiӋm x bҵng mӝt giá trӏ ban đҫu nào đó

B2) Gán x bӣi xí f(x)/f¶(x), trong đó f¶(x) là đҥo hàm bұc

nhҩt cӫa f(x)

Bó) T nh và kiӇm tra điӅu kiӋn f(x) ~ 0

NӃu chưa thӓa mãn thì quay lҥi bưӟc 2.

NӃu thӓa mãn thì in kӃt quҧ và kӃt thúc chương trình

.

background image

z

2

#åF+'(/K'VS5T:5

;5

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

background image

IF (Converged) THEN

PRINT *,'Hoi tu'

ELSE

PRINT *,'Phan ky'

END IF
PRINT *,¶Nghiem PT: X = µ,X
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CONTAINS

FUNCTION F(X)

REAL F, X
F = X ** 3 + X - 3

END FUNCTION F

!!!!!!!!!!!!!!!!!!!!!!!!!!!!

FUNCTION DF(X)

REAL DF, X
DF = 3 * X ** 2 + 1

END FUNCTION DF

END PROGRAM Newton

background image

zz

F+'(/K')$'-Ö$&

-

Thí dө 2:

Tính các đһc trưng thӕng kê: trung bình,

phương sai và đӝ lӋch chuҭn cӫa chuӛi x gӗm n phҫn tӱ
theo công thӭc sau:

i

i

õ

i

i

‚

‚

õ

background image

z

5

PROGRAM THKE

INTEGER N, I
REAL X(99), TBINH, PSAI, DLC
PRINT *, ' NHAP DO DAI CHUOI (<100)'
READ *, N
PRINT *, ' NHAP CAC GIA TRI CUA X:'

5 FORMAT (1X, ' X(', I2, '): ')

DO I = 1, N

WRITE (*, 5) I
READ *, X (I)

ENDDO
CALL STAT(X, N, TBINH, PSAI, DLC)
WRITE(*, 8) TBINH, PSAI, DLC

8 FORMAT (1X, 'T.BINH = ', F7.2, µ PH.SAI = ',&

F7.2, ' DL CHUAN = ', F7.2)
END

background image

z

6

SUBROUTINE STAT (X, N, AVER, VARI, STDV)

REAL X (N), AVER, VARI, STDV
INTEGER N, I
AVER = 0.0
VARI = 0.0
DO I = 1, N

AVER = AVER + X (I)
VARI = VARI + X (I) * X (I)

END DO
AVER = AVER / REAL (N)
VARI = VARI / REAL (N-1) - AVER * AVER
STDV = SQRT (VARI)
RETURN

END

background image

z

7

!/#-.'.(=/

-

`

ortran 90 cho phép đӏnh nghĩa hàm vӟi khҧ năng trҧ vӅ nhiӅu

giá trӏ.

-

Thí dө ó: giҧ sӱ có hàm f(x)= óx

2

+ 2x -5. Hãy tính giá trӏ cӫa

hàm tҥi các giá trӏ cӫa đӕi sӕ x

1

, x

2

,..., x

n

.

INTEGER, PARAMETER :: N = 7
REAL, DIMENSION (N) :: X, FX
DATA X /-3., -2., -1., 0., 1., 2., 3./
FX = F(X,N)
PRINT*, FX
CONTAINS
FUNCTION F(X,N)

INTEGER, INTENT (IN) :: N
REAL, DIMENSION(N),INTENT(IN) :: X
REAL, DIMENSION(SIZE(X)):: F

F(:) = 3*X(:)*X(:) + 2*X(:) - 5

END FUNCTION
END

background image

zC

!/#-.'.(=/

-

NӃu `(X,N) đưӧc khai báo như mӝt hàm ngoài thì trong phҫn

khai báo cӫa chương trình gӑi cҫn phҧi có khӕi giao diӋn như

sau:

INTEGER, PARAMETER :: N = 7
REAL, DIMENSION (N) :: X, FX

!

*!

(

((6

*!

END INTERFACE
DATA X /-3., -2., -1., 0., 1., 2., 3./
FX = F(X,N)
PRINT*, FX
END
FUNCTION F(X,N)

INTEGER, INTENT (IN) :: N
REAL, DIMENSION(N),INTENT(IN) :: X
REAL, DIMENSION(SIZE(X)):: F

F(:) = 3*X(:)*X(:) + 2*X(:) - 5

END FUNCTION

background image

z

9

=)%)*')W @?0?

-

%) *' p9p

: khi thӵc hiӋn lӡi gӑi đӃn mӝt

chương trình con, các đӕi sӕ hình thӭc sӁ đưӧc thay thӃ

bӣi các đӕi sӕ thӵc cӫa chương trình gӑi.

-

Cú pháp và tác đӝng cӫa tӯ khóa INTENT như sau:

INTENT (Öô_tҧ) [::] vname

hoһc

KiӇu_D›, INTENT (Öô_tҧ) :: vname

(

vname

là danh sách biӃn đóng vai trò đӕi sӕ hình thӭc;

Ö

ô_tҧ

có thӇ nhұn mӝt trong các giá trӏ:

-

IN

: khi tham sӕ chӍ truyӅn vào cho chương trình con và

không thӇ bӏ làm thay đәi giá trӏ

-

T

: nӃu biӃn trҧ giá trӏ vӅ chương trình gӑi, nó cҫn phҧi có

mһt trong danh sách đӕi sӕ hình thӭc

-

IN T

: vӯa là tham sӕ truyӅn vào cho chương trình con

vӯa là biӃn trҧ giá trӏ vӅ cho chương trình gӑi.

background image

50

=)%)*')W @?0?

-

Thí dө vӅ INTENT:

REAL X(20), SUM
CALL RANDOM_NUMBER (X) ! Tңo mҥng sӓ ngҭu nhiên X
PRINT*,X ! X truyӃn cho chương trình con
CALL TONG (X,20,SUM)
PRINT*,SUM ! BiӁn kӁt quҥ trҥ vӃ tӭ CTCon
PRINT*,X ! X trҥ vӃ tӭ chương trình con
CONTAINS
SUBROUTINE TONG (X,N,SUM)

INTEGER, INTENT (IN) :: N ! N chӋ IN
REAL, INTENT (INOUT) :: X(N) ! X vӭa IN vӭa OUT
REAL, INTENT (OUT) :: SUM ! SUM chӋ OUT
X = X + 10. ! Làm thay đӗi X
SUM = 0.
DO I=1,N

SUM=SUM+X(I)

END DO
END SUBROUTINE TONG

END

background image

51

=)%)*')W @?0?

-

%)*'p2

-

Khi xây dӵng các chương trình con, danh sách các đӕi
sӕ hình thӭc có thӇ rҩt nhiӅu. ĐӇ tránh viӋc tham chiӃu
đӃn nhӳng đӕi sӕ không cҫn thiӃt ta có thӇ khai báo
trong chương trình con tҩt cҧ hoһc mӝt sӕ đӕi sӕ có
thuӝc tính tùy chӑn.

-

Tӯ khóa dùng đӇ khai báo đӕi sӕ tùy chӑn là PTI N›
mà cú pháp và cách sӱ dөng cӫa nó đưӧc mô tҧ như
sau:

PTI N› [::] vname

hoһc

KiӇu_D›, PTI N› :: vname

background image

52

=)%)*')W @?0?

-

Thuӝc tính PTI N›:

-

Thí dө:

SUBROUTINE TONG (X,N,SUM, A, B, C, D, E)
INTEGER, INTENT (IN) :: N
REAL, INTENT (INOUT) :: X(N)
REAL, INTENT (OUT) :: SUM
REAL, OPTIONAL :: A, B, C, D, E ! Các đӓi sӓ tùy chӏn
X = X + 10.
SUM = 0.
DO I=1,N

SUM=SUM+X(I)

END DO
A = X(1)
B = X(2)
C = A + B
D = X(3)
E = C * D
END SUBROUTINE TONG

background image

=)%)*')W @?0?

-

Giҧ sӱ trong chương trình chính ta khai báo khӕi giao
diӋn cho chương 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 đó chương trình con T NG có thӇ đưӧc gӑi đӃn
như sau:

CALL TONG (X,N,SUM) !Bӓ qua tҩt cҧ các đӕi sӕ tùy chӑn
CALL TONG (X,N,SUM,T) !Bӓ qua z đӕi sӕ tùy chӑn cuӕi cùng
CALL TONG (X,N,SUM,T,U) !Bӓ qua ó đӕi sӕ cuӕi cùng

background image

5z

=)%)*')W @?0?

-

%)*'X92

-

Vùng bӝ nhӟ cung cҩp cho các biӃn đӏa phương trong
các chương trình con sӁ đưӧc giҧi phóng ngay sau khi
chương trình con trҧ kӃt quҧ vӅ cho chương trình gӑi.
NӃu muӕn lưu giӳ giá trӏ cӫa chúng cho lҫn gӑi sau ta
có thӇ đһt thuӝc tính SVE cho chúng.

-

Cú pháp khai báo thuӝc tính SVE như sau:

SVE [::] vname

hoһc

KiӇu_D›, SVE :: vname

background image

55

ÖH

-

`

ortran đӏnh nghĩa ó khái niӋm đơn vӏ chương trình (Program

nit) là: chương trình chính, chương trình con ngoài, và modul.

Ö

odul khác vӟi các chương trình con ӣ 2 điӇm quan trӑng:

-

Ö

odul có thӇ chӭa trong đó nhiӅu hơn mӝt chương trình con.

-

Ö

odul có thӇ chӭa nhӳng câu lӋnh khai báo và đһc tҧ mà chúng có thӇ

tham chiӃu đưӧc đӕi vӟi tҩt cҧ các đơn vӏ chương trình có sӱ dөng
modul.

-

Các modul cũng có thӇ đưӧc biên dӏch mӝt cách đӝc lұp. Cҩu trúc
chung cӫa modul có dҥng như sau:

MODULE TenModul

Ž

Các_câu_lӉnh_khai_báo]

Ž

CONTAINS

Các_chương_trình_con_modul]

END ŽMODULE ŽTenModul]]

-

ĐӇ sӱ dөng modul ta dùng câu lӋnh khai báo SE ngay đҫu

chương trình:

USE Tên_Modul_đưӥc_sӯ_dӧng

background image

56

ÖH

PROGRAM EXAMP

USE MyModul
IMPLICIT NONE
REAL A, B
PRINT*, µ Cho mot so: µ
READ*, A
B = Pi ! Khai bao tu Modul
CALL DOI_CHO( A, B ) ! Khai bao tu Modul
PRINT*, A, B

END
MODULE MyModul

REAL, PARAMETER :: Pi = 3.1415927
CONTAINS
SUBROUTINE DOI_CHO ( X, Y )

REAL Tmp, X, Y
Tmp = X
X = Y
Y = Tmp

END SUBROUTINE DOI_CHO

END MODULE MyModul

background image

57

Y'')&1

-

Ví dө, giҧ sӱ ta có file ³

PÖ.INC

´ lưu tҥi thư mөc

hiӋn thӡi vӟi nӝi dung là:

INTEGER, PARAMETER :: NMAX=200, MMAX=100

REAL, PARAMETER :: Re=6731, G=9.8

-

Khi đó chương trình sau đây:

PROGRAM CT1

INCLUDE ³PARAM.INC´

«

END

background image

5C

Ö#'(

-

Ö

ҧng là mӝt tұp hӧp các phҫn tӱ có cùng kiӇu dӳ liӋu,

đưӧc sҳp xӃp theo mӝt trұt tӵ nhҩt đӏnh, trong đó mӛi
phҫn tӱ đưӧc xác đӏnh bӣi chӍ sӕ và giá trӏ cӫa chúng.

-

KiӇu dӳ liӋu cӫa các phҫn tӱ mҧng có thӇ là kiӇu sӕ
hoһc không phҧi sӕ. Öӛi mҧng đưӧc xác đӏnh bӣi tên
mҧng, sӕ chiӅu, kích thưӟc cӵc đҥi và cách sҳp xӃp
các phҫn tӱ cӫa mҧng.

-

Ö

ҧng có thӇ là mҧng tĩnh hoһc mҧng đӝng.

-

Khi khai báo mҧng cҫn phҧi chӍ ra tên và sӕ chiӅu cӫa
nó, nhưng có thӇ chưa cҫn chӍ ra kích thưӟc và cách
sҳp xӃp các phҫn tӱ mҧng. Có rҩt nhiӅu cách khai báo
biӃn mҧng.

background image

59

Ö#'(

-

Ö

ӝt sӕ dҥng cú pháp tәng quát cӫa câu lӋnh khai báo mҧng thưӡng

đưӧc sӱ dөng:

-

HB'(|2

KiӇu_D› Tên_biӃn_mҧng (Öô_tҧ)

E›*z X (0:100)

E› Y(12,óz)

-

HB'(_2

Thuӝc_tính Tên_biӃn_mҧng (Öô_tҧ)

DIÖENSI N N (10,20)
››

CTB›E Y(:,:)

-

HB'(2

KiӇu_D›, Thuӝc_tính (Öô_tҧ) :: Tên_biӃn_mҧng

E›, ›› CTB›E(:,:) :: X

INTEGE, DIÖENSI N(12,óz) :: Y

-

HB'(2

KiӇu_D›, Thuӝc_tính :: Tên_biӃn_mҧng(Öô_tҧ)

E›, ›› CTB›E :: X (:,:)

E›, DIÖENSI N Y(12,óz)

background image

60

F/Z-/6)[åI)=)å\'M!#'(

-

Sӱ dөng lӋnh DT đӇ khӣi tҥo mҧng:

REAL, DIMENSION(10) :: A, B, C(3,3)
DATA A / 5*0, 5*1 /

! Gán 5 phҩn tӯ đҩu bҳng 0 và 5 phҩn tӯ tiӁp

!theo bҳng 1

DATA B(1:5) / 4, 0, 5, 2, -1 /

! ChӋ gán giá trӍ cho các phҩn 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 phҩn tӯ cөa C lҩn lưӥt

!theo hàng

background image

61

F/Z-/6)[åI)=)å\'M!#'(

-

BiӇu thӭc mҧng:

-

Có thӇ thӵc hiӋn các phép toán trên các biӃn mҧng.
Trong trưӡng hӧp này các mҧng phҧi có cùng cҩu
trúc.

REAL, DIMENSION(10) :: X, Y
X + Y

!Cӛng tương ӫng các phҩn tӯ cөa X và Y:

!X(I) + Y(I)

X * Y

! Nhân tương ӫng các phҩn tӯ cөa X và Y:

!X(I) * Y(I)

X * 3

! Nhân tương ӫng các phҩn tӯ cөa X vӝi 3:

!X(I) * 3

X * SQRT(Y)

! Nhân các phҩn tӯ cөa X vӝi căn bүc 2

!cөa các phҩn tӯ tương ӫng cөa Y:

!X(I) * SQRT(Y(I))

X == Y

! Phép toán so sánh, cho kӁt quҥ .TRUE. nӁu
! X(I) == Y(I), và .FALSE. nӁu ngưӥc lңi.

background image

62

-

Cҩu trúc WHEE... E›SEWHEE ... END WHEE

-

Cú pháp lӋnh như sau:

WHEE (ĐiӅu_kiӋn) Câu_lӋnh

hoһc

WHEE (ĐiӅu_kiӋn)

Các_câu_lӋnh_1

E›SEWHEE

Các_câu_lӋnh_2

END WHEE

F/Z-/6)[åI)=)å\'M!#'(

background image

-

Cҩu trúc WHEE... E›SEWHEE ... END

WHEE

REAL A (5), B(5), C(5)
A = (/ 89.5, 43.7, 126.4, 68.3, 137.7 /)
B = 0.0
C = 0.0
WHERE (A > 100.0)

A = 100.0
B = 2.3

ELSEWHERE

A = 50.0
C = -4.6

END WHERE

F/Z-/6)[åI)=)å\'M!#'(

background image

6z

-

Ö

ҧng có kích thưӟc và cách sҳp xӃp các phҫn tӱ

không đưӧc xác đӏnh ngay tӯ lúc khai báo gӑi là mҧng
đӝng.

-

Các mҧng đӝng luôn phҧi có thuӝc tính ›› CTB›E
trong câu lӋnh khai báo.

KiӇu_D›,DIÖENSI N(Öô_tҧ),›› CTB›E :: Tên_biӃn

hoһc

KiӇu_D›, ›› CTB›E [::] Tên_biӃn [(Öô_tҧ)]

hoһc

››

CTB›E [::] Tên_biӃn [(Öô_tҧ)]

Ö#'(@%'(SH6' !) // 6T

background image

65

Ö#'(@%'(SH6' !) // 6T

-

Ví dө:

-

E›,DIÖENSI N(:),›› CTB›E :: X ! Öҧng 1 chiӅu

-

E›, ›› CTB›E :: vector(:) ! Öҧng 1 chiӅu

-

INTEGE,›› CTB›E :: matrix(:,:) ! Öҧng 2 chiӅu

-

DIÖENSI N X (:,:) ! X là mҧng hai chiӅu và

-

E›, ›› CTB›E :: X ! X là mҧng đӝng, thӵc

-

››

CTB›E :: Y(:,:) ! Y là mҧng đӝng 2 chiӅu

-

Câu lӋnh

››

CTE

dùng đӇ đӏnh vӏ kích thưӟc và cách

sҳp xӃp các phҫn tӱ mҧng trong bӝ nhӟ (tӭc cҩp phát bӝ
nhӟ cho biӃn).

-

Câu lӋnh

DE›› CTE

dùng đӇ giҧi phóng vùng bӝ nhӟ

mà biӃn mҧng đӝng đã đưӧc cҩp phát.

background image

66

Ö#'(@%'(SH6' !) // 6T

REAL, DIMENSION(:), ALLOCATABLE :: X, OldX
REAL A
INTEGER N
ALLOCATE (X(0)) ! Kích thưӝc cөa X (lúc đҩu bҳng 0)
N = 0
DO

Print*, µCho mot so: µ
READ(*,*) A
IF ( A < 0 ) EXIT ! NӁu A<0 thì thoát
N = N + 1 ! Tăng N lên 1 đơn vӍ
ALLOCATE(OldX(SIZE(X))) ! Cҧp phát kích thưӝc cөa

! OldX bҳng kích thưӝc cөa X

OldX = X ! Lưu X vào OldX
DEALLOCATE( X ) ! Giҥi phóng X
ALLOCATE(X(N)) ! Cҧp phát X có kích thưӝc bҳng N
X = OldX ! Gán toàn bӛ OldX cho X
X(N) = A !Gán giá trӍ mӝi cho phҩn tӯ thӫ N cөa X
DEALLOCATE( OldX ) ! Giҥi phóng OldX

END DO
PRINT*,N, ( X(I), I = 1, N )
END

background image

67

LE)$'/]

-

Con trӓ là mӝt khái niӋm đӇ xác đӏnh biӃn có thuӝc tính
con trӓ. BiӃn con trӓ có thӇ là biӃn vô hưӟng hoһc biӃn
mҧng. Khai báo kiӇu con trӓ như sau:

P INTE [::] Tên_con_trӓ [(Öô_tҧ)] [, ...]

hoһc

KiӇu_D›, P INTE :: Tên_con_trӓ [(Öô_tҧ)]

-

BiӃn con trӓ có thӇ đưӧc cҩp phát bӝ nhӟ bҵng lӋnh
››

CTE hoһc trӓ đӃn mӝt biӃn khác. BiӃn đưӧc con

trӓ trӓ đӃn hoһc là mӝt biӃn có thuӝc tính đích
(TGET) hoһc mӝt biӃn đã đưӧc xác đӏnh.

background image

6C

LE)$'/]

INTEGER, POINTER :: P1 (:)
INTEGER, POINTER :: P2 (:)
INTEGER, ALLOCATABLE, TARGET :: D (:)
ALLOCATE (D (7)) ! Cҧp phát bӛ nhӝ cho biӁn ĐICH
D = 1
D (1:7:2) = 10.
PRINT*, 'DICH=',D
P1 => D ! Con trӑ trӑ vào biӁn ĐICH
PRINT*,'CON TRO P1=',P1
ALLOCATE (P1(10)) ! Cҧp phát bӛ nhӝ cho biӁn con trӑ
P1 = 5
P2 => P1 ! Con trӑ trӑ vào biӁn đã xác đӍnh
PRINT*,'CON TRO P1=',P1
print*
print*,'CON TRO P2=',P2
P2 = 8
PRINT*,'CON TRO P1=',P1
print*
print*,'CON TRO P2=',P2
END

background image

69

LE)$'/]

-

ĐӇ đưa con trӓ vӅ trҥng thái không trӓ vào đâu cҧ ta
dùng câu lӋnh:

N››I`Y (P)

!P là biӃn con trӓ

-

ĐӇ xác đӏnh trҥng thái hiӋn thӡi cӫa con trӓ có thӇ
dùng hàm:

SS CITED (P)

!P là biӃn con trӓ

Hàm này trҧ vӅ giá trӏ .TE. nӃu con trӓ đã liên kӃt vӟi mӝt biӃn, và

trҧ vӅ giá trӏ .`›SE. nӃu con trӓ ӣ trҥng thái không trӓ vào đâu cҧ.

-

BiӃn con trӓ có thӇ đưӧc cҩp phát bӝ nhӟ bҵng câu
lӋnh ›› CTE và đưӧc giҧi phóng bӣi câu lӋnh
DE›› CTE tương tӵ như mҧng đӝng.

background image

70

U#'(

-

Đӏnh nghĩa mӝt bҧn ghi lưu trӳ thông tin cӫa mӝt sinh

viên như sau:

.÷"((F

CHARACTER (30) HoTen !bao gom ca ho va ten
CHARACTER (20), DIMENSION(4) :: DiaChi

! Tinh, huyen, xa, thon/xom

CHARACTER (10) DienThoai
CHARACTER (9) MaSo ! Vi du, K45003504
LOGICAL GioiTinh ! .TRUE. neu la Nu,

! .FALSE. doi voi Nam (!)

INTEGER NgaySinh ! Vi du, 19870308
REAL, DIMENSION(40) :: Diem !Diem cac mon hoc

background image

71

U#'(

-

Khai báo:

TYPE (HOSOSV) SVien

hay

TYPE (HOSOSV), DIMENSION (24) :: KTHN_K51

-

Truy cұp:

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.


Wyszukiwarka

Podobne podstrony:
Slide kỹ Thuật Lập Trình Nguyễn Thủy Đoan Trang, 20 Trang
Slide Lập Trình Hợp Ngữ Nhiều Tác Giả, 109 Trang
Cơ Học Lý Thuyết (Tóm Tắt Lý Thuyết & Bài Tập Mẫu) Trịnh Anh Ngọc, 71 Trang
Slide Đặc Tả Ngôn Ngữ Lập Trình Từ Vựng Cú Pháp Ts Ngyuyễn Hứa Phùng, 17 Trang
Lập Trình Web Động Với PHP và MySQL Phần 1 Tống Phước Khải, 132 Trang
ĐHTN Giáo Trình Môn Học Xử Lý Ảnh Ts Đỗ Năng Toàn & Ts Phạm Việt Bình, 76 Trang
Slide Lập Thẩm Định Dự Án Đầu Tư xây Dựng Pgs Ts Nguyễn Văn Hiệp
Bài Tập Lập Trình C Lương Trần Hy Hiền, 18 Trang
Mẫu Mô Tả Công Việc Và Các Tiêu Chuẩn Đánh Giá Một Lập Trình Viên Nguyễn Trọng Hòa
KC 01 01 Công Nghệ Cứng Hóa Các Thuật Toán Mật Mã (NXB Hà Nội 2004) Nguyễn Hồng Quang, 71 Trang
Slide Ngôn Ngữ Lập Trình C Nguyễn Đình Thuân, 98 Trang
Giáo Trình Lập Trình Pascal Căn Bản Nhiều Tác Giả, 90 Trang
Lập Trình Động Nhiều Tác Giả, 96 Trang
Slide Lập Trình Trên Môi Trường Windows Với ADO NET Phạm Minh Tuấn, 23 Trang
Slide Lập Trình Trên Môi Trường Windows Với Windows Form Phạm Minh Tuấn, 34 Trang
LVDA Các Phương Pháp Bão Mật Thông Tin (NXB Hà Nội 1999) Đăng Văn Hạnh, 74 Trang
ĐHCT Giáo Trình Thực Hành Lập Trình Hệ Thống (NXB Cần Thơ 2008) Nguyễn Hứa Duy Khang, 39 Trang
ĐHMO Lập Dự Toán Xây Dựng Cơ Bản Ths Lương Văn Cảnh, 21 Trang
ĐHĐL Giáo Trình Kỹ Thuật Lập Trình Pascal (NXB Đà Lạt 2001) Nguyễn Danh Hưng, 135 Trang

więcej podobnych podstron