fortran array

Post on 07-Jul-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 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.)

    ÉÛ–Ú的陣列