View
217
Download
0
Embed Size (px)
Citation preview
8/19/2019 Fortran Array
1/30
Chapter 6 陣列
8/19/2019 Fortran Array
2/30
6-1 矩陣的宣告與使用
宣告
integer :: A(10)
宣告 10個元素的整數陣列 A,其元素為 A(1)、 A(2)…A(10)
所要使用的資料型態,可以是
integer / real / … 等等的基本
型態,!可以是"#用 type
所$%&'的"(型態
陣列)數的*+
,$陣列的-.,/$是整數
A(1
)
A
A(2
)
A(3
)
A(10)…
8/19/2019 Fortran Array
3/30
6-1 矩陣的宣告與使用
宣告
/0 宣告
integer :: A(10)宣告 10個元素的整數陣列 A,其元素為
A(1),A(2),…,A(10)
integer :: A(-1:8)宣告 10個元素的整數陣列 A,其元素為
A(-1), A(0), A(1), A(2),…,A(8)
integer :: A(0:10:2)宣告 6個整數元素陣列,其元素為
A(0),A(2),A(4),A(6),A(8), A(10)
integer :: A(0:10:2)宣告 6個整數元素陣列,其元素為
A(10),A(8),A(6),A(4),A(2),A(0)
陣列元素1用的234
宣告陣列的56
8/19/2019 Fortran Array
4/30
6-1 矩陣的宣告與使用
宣告
70 宣告
integer :: A(3,3)宣告/個 3×3的80陣列
integer :: A(0:3,0:3)宣告/個 4×4的80矩陣
integer :: A(3,3,3)宣告/個 3×3×3的90陣列
8/19/2019 Fortran Array
5/30
6-2 ,$陣列的:4
:;<
integer :: a(5) = (/ 1, 2, 3, 4, 5 /)
=> a(1) = 1, a(2) = 2, a(3) = 3, a(4) = 4, a(5) = 5
integer :: a(5) = (/ (3, i = 1, 5) /)=> a(1) = a(2) = a(3) = a(4) = a(5) = 3
a(1)
a
a(2)
a(3)
a(4)
1 2 3 4 5
a(5)
?@AB@CDEFGHI
8/19/2019 Fortran Array
6/30
6-2 ,$陣列的:4
:;<
integer :: a(5) = (/( i, i = 1, 5) /)
=> a(1) = 1, a(2) = 2, a(3) = 3, a(4) = 4, a(5) = 5
integer :: a(5) = (/ (3, i = 1, 5) /)
=> a(1) = a(2) = a(3) = a(4) = a(5) = 3
integer :: a(5) = (/ 0, ( i, i = 2, 4 ), 5 /)
=>a(1) = 0, a(2) = 2, a(3) = 3, a(4) = 4, a(5) = 5
8/19/2019 Fortran Array
7/30
6-3 陣列JKLMNOP的QRST
/0 QRST
integer :: A(5)
元素JMNO的UVWXP的Y列Z[為
A(1)→A(2)→A(3)→A(4)→A(5)
integer :: A(0:10:2)元素JMNO的UVWXP的Y列Z[為
A(0)→A(2)→A(4)→A(6)→A(8)→A(10)
A(1
)
A
A(2
) A(3
)
A(4) A(5)
8/19/2019 Fortran Array
8/30
A(1,1
)
A A(1,2
)
A(1,3
)
A(2,1
)
A(2,2
)
A(2,3
)
A(3,1
)
A(3,2
)
A(3,3
)
!he"ir#
tr$%
&!he "ir#t '$ln
6-3 陣列JKLMNOP的QRST
80 QRST
integer :: A(3,3)
陣列 AJMNO的Y列Z[為
A(1,1) → A(2,1) → A(3,1)
→ A(1,2) → A(2,2) → A(3,2)
→ A(1,3) → A(2,3) → A(3,3)
]^ "ir#t '$ln
_^ #e'$n*
'$ln
其` thir*
'$ln
'$ln a+$r Y列
T
A(1,1
)
A
A(1,2
)
A(1,3
)
A(2,1
)
A(2,2
)
A(2,3
)
A(3,1
)
A(3,2
)
A(3,3
)
8/19/2019 Fortran Array
9/30
6-3 陣列JKLMNOP的QRST
QRST與ab
cd 3X3陣列的A
sum=0
do i = 1, 3
do j = 1, 3
sum = sum + A(i,j)
end do
end do
< Ex. abef>
A(1,1
)
A
A(1,2
)
A(1,3
)
A(2,1
)
A(2,2
)
A(2,3
)
A(3,1
)
A(3,2
)
A(3,3
)
Not good,g為 !u要Eh的JMNPijb的'
k1資料,lT使用mn
1MNOo
"a#ep的q
r
"a#es"tu1vww
的MNO資料m
"a#eP
8/19/2019 Fortran Array
10/30
6-3 陣列JKLMNOP的QRST
QRST與ab
cd 3X3陣列的A
sum=0
do i = 1, 3
do j = 1, 3
sum = sum + A(j,i)
end do
end do
< Ex. abef>
A(1,1
)
A
A(1,2
)
A(1,3
)
A(2,1
)
A(2,2
)
A(2,3
)
A(3,1
)
A(3,2
)
A(3,3
)
$etter t#an %e&ore,x
yr用 a#e,abz
{的|}s~n
8/19/2019 Fortran Array
11/30
6-4 $rtran0•2G€矩陣的F
整個矩 的‚ƒ
a) a = % „ % …†‡的元素的4ˆ$‰ a
…Š‹
*$ i = 1, . (a,,'Œ為 .個元素的/0陣列 )
a(i) = (i)
en* *$
%) a = % + „ % 與 …†‡的元素的4…3ˆ$‰ a
…Š‹*$ i = 1, .
a(i) = (i) '(i)
en* *$
8/19/2019 Fortran Array
12/30
6-4 $rtran0•2G€矩陣的F
整個矩 的‚ƒ
) a = % - „ % 與 …†‡的元素的4…Žˆ$‰ a
…Š‹
*$ i = 1, .
a(i) = (i) '(i)
en* *$
d) a = % ' „ % 與 …†‡的元素的4…3ˆ$‰ a
…Š‹*$ i = 1, .
a(i) = (i) '(i)
en* *$
8/19/2019 Fortran Array
13/30
6-4 $rtran0•2G€矩陣的F
整個矩 的‚ƒ
e) a = % / „ % 與 …†‡的元素的4…ˆ$‰ a
…Š‹
*$ i = 1, .
a(i) = (i) / '(i)
en* *$
&) a(1:3) = %(4:)% ˆ$‘$元素的4‰ a
…Š‹a(1) = (4), a(2) = (5), a(3) = (6)
8/19/2019 Fortran Array
14/30
6-4 $rtran0•2G€矩陣的F
整個矩 的‚ƒ
e) a(1:5:2) = 3a ‘$元素:;<
…Š‹
a(1) = 3, a(3) = 3, a(5) = 3
&) a(1:10) = a(10:1:-1)’ a(110)的“”‰–
…Š‹
*$ i = 1, ./2
tep = a(i)
a(i)=a(.1-i)
a(.1-i)=tep
en* *$
8/19/2019 Fortran Array
15/30
6-4 $rtran0•2G€矩陣的F
*#ere#ere (ogiae.!r 矩 元素4的—˜‚d )
(矩陣‚ƒ )
ese #ere
(矩陣‚ƒ )
end #ere
Š l$gi'alepr —˜為
™š,z{›/fab
Š l$gi'alepr —˜為
œš,z{›/fab
…Š‹ab的
i&
8/19/2019 Fortran Array
16/30
6-4 $rtran0•2G€矩陣的F
*#ere
!rogram e.001
im!iit none
integer ::
rea :: a(5) = (/ ( , = 5, 1, -1) /)
rea :: %(5) = (/ (, = 1, 5) /)
rea :: (5)
#ere ( a % )
= %
ese #ere
= a
end #ere
rite (',(A10, 52) ) Arra " = , ( (), = 1, 5 )
sto!
end !rogram e.001
<
Ex.
• 整 a b
>
…Š‹
do i = 1, 6
i& ( a(i) %(i) ) t#en
(i) = %(i) ese
(i) = a(i)
end i&
end do
a(1)=5,a(2)=4,a(3)=3,a(4)=2,a(5)=1
(1)=1,(2)=2,(3)=3,(4)=4,(5)=5
< Ex. z{žŸ>Arra " = 100 200 300 200 100
8/19/2019 Fortran Array
17/30
6-4 $rtran0•2G€矩陣的F
ora (ortran75所•2的F
)a) &ora ( i = 1:2, j = 1:2 ) a(i,j) = i + j …Š‹
*$ + = 1, 2
*$ i = 1, 2 a(i,+) = i +
en* *$
en* *$
8/19/2019 Fortran Array
18/30
6-4 $rtran0•2G€矩陣的F
ora%) &ora ( i = 1:2, j = 1:2 )
a(i,j) = i + j
a(j,i) = i j
end &ora…Š‹
*$ + = 1, 2
*$ i = 1, 2
a(i,+) = i +
a(+,i) = i - +
en* *$
en* *$
Ÿ "$rallP的¡¢£¤/
{¥要使用WX的型b,¦
!要3§ en* "$rall'¨ž©
8/19/2019 Fortran Array
19/30
6-4 $rtran0•2G€矩陣的F
ora) &ora ( i = 1:10, j = 1:10, a(i,j) 0 )
#ere ( a 9 10 ) % = 10
end &ora
…Š‹
*$ + = 1, 10
*$ i = 1, 10
i" ( a(i,+) 0 ) then
i" ( a(i,+) 10 ) then
(i,+) = 10
en* i"
en* i"
en* *$
en* *$
8/19/2019 Fortran Array
20/30
6-4 $rtran0•2G€矩陣的F
可)-.的
可以等mabz{P_'ª$«所要使用的¬}
可)-. 宣告
integer, aoata%e :: A(:)
7 integer, aoata%e, dimension(:) :: A
>宣告矩陣是 "可)-. "的矩
陣
®G/個¯@>矩陣®
G/個0},要宣告°個
0}的矩陣±為 A(:,:)
8/19/2019 Fortran Array
21/30
6-4 $rtran0•2G€矩陣的F
,$ 的-.
可)-.的 宣告²,要]³´ aoate›個
¡¢
',$& 的-.µF使用
aoate(A(m))
aoate(A(m:n:in))"$矩陣的§¶·56,n¸24
¹ in',其P,n,in'Œ為整數)
數
,$矩陣-.為
其P為整數)
數ºKL的MNO要»HD'QR資料
8/19/2019 Fortran Array
22/30
6-4 $rtran0•2G€矩陣的F
¼^ HD
使用 ,要]¼^ HD,µF½•,$
-.
deaoate(A) 要¼^的陣列*¾
„ all$'ate所¿m的陣列MNOHD¼
^
8/19/2019 Fortran Array
23/30
6-4 $rtran0•2G€矩陣的F
可)-.的< Ex. 整ab>
!rogram e.003
im!iit none
integer :: students, i
integer , aoata%e :: grades( : )
rite(',') o man students in t#is ass A ;
read(',') students
aoate(grades(students)) do i = 1, students
rite(', (1
8/19/2019 Fortran Array
24/30
6-4 $rtran0•2G€矩陣的F
可)-.的< Ex. 整ab>
do i = 1, students
i& (grades(i) 9 0) t#en
rite(', (1
8/19/2019 Fortran Array
25/30
6-4 $rtran0•2G€矩陣的F
可)-.的< Ex. 整ab>
do i = 1, students
rite(', (1
8/19/2019 Fortran Array
26/30
6-4 $rtran0•2G€矩陣的F
可)-.的
< Ex.z{žŸ>
o man students in t#is ass A ;
3
n!ut grades o& num%er 1 :
77
n!ut grades o& num%er 2 :
>0<ÂÃ 0 9:!9;<
>
n!ut grades o& num%er 3 :
58
num%er 3 &ai
o man students in t#is ass $ ;
2
n!ut grades o& num%er 1 :57
n!ut grades o& num%er 2 :
45
num%er 1 &ai
num%er 2 &ai
8/19/2019 Fortran Array
27/30
6-4 $rtran0•2G€矩陣的F
aoate,deaoate的ÄÅaoate,deaoate可以r用 stat'ÄÅ是Æz{²
aoate(A(m), stat = error )
deaoate(A(m), stat = error )
err$r 是Ç]宣告È的整數)數,¨ all$'ate›個tƒš
s³´ #tat›個¡¢É‰ err$r /個數4Ê
err$r 等‹ 0> all$'ate陣列²err$r E等‹ 0±>KL的MNEË, all$'ate陣列Ì
Í
8/19/2019 Fortran Array
28/30
6-4 $rtran0•2G€矩陣的F
的ÎRÏ數
a) dot!rodut(?etora, ?etor%) „°Ð0}的ѹ >e't$ra與 >e't$r¨“Ò (*$t pr$*'t)‚
d
%) matmu(matri.A, matri.$) „°矩陣 atriA與atri?¨T以ÓŠ的陣列Ô
) ma.o(arra, mas6) 9= mino(arra, mas6)
JÕËa#.的Ö׶,Ø&陣列P¦-4 /¦.4的所JÙÚ,
ÉÛ/個整數Ê
a#.的‚dSTA陣列J%hereP所使用的—˜‚d/ÜÊ9@ =al$'(a,a50)
Ø&陣列P.‹ 50的¦-數4的所JÙ
Ú
8/19/2019 Fortran Array
29/30
6-4 $rtran0•2G€矩陣的F
的ÎRÏ數d) ma.?a(arra, mas6) 9= min?a(arra, mas6)
JÕËa#.的Ö׶,Ø&陣列P¦-4 /¦.4,ÉÛ¦-
4 /
¦.4
e) res#a!e(datasoure, s#a!e) ’資料Ý整型ÞÈ,_ɉ/個陣列,ß用J,$陣列:4š使
用9@ integer a(3,3) = re#hape( (/1,2,3,4,5,6,,8,/), (/3,3/))
9@ integer (2,3) = re#hape( (/1,2,3,4,5,6/),
(/2,3/))
=
963
852
741
a
1 3 5
2 4 6b
=
8/19/2019 Fortran Array
30/30
6-4 $rtran0•2G€矩陣的F
的ÎRÏ數&) sum(arra, mas6)
JÕËa#.的Ö׶,cd陣列元素的AÊàáGa#.,±
>
cd陣列所G元素的AÊ
g) trans!ose(matri.)
ÉÛ–Ú的陣列