Fortran - Array

Array dapat menyimpan koleksi elemen berurutan dengan ukuran tetap dari tipe yang sama. Sebuah array digunakan untuk menyimpan sekumpulan data, tetapi seringkali lebih berguna untuk menganggap array sebagai kumpulan variabel dengan tipe yang sama.

Semua array terdiri dari lokasi memori yang berdekatan. Alamat terendah sesuai dengan elemen pertama dan alamat tertinggi untuk elemen terakhir.

Angka (1) Angka (2) Angka (3) Angka (4)

Array dapat berbentuk satu dimensi (seperti vektor), dua dimensi (seperti matriks), dan Fortran memungkinkan Anda membuat hingga array 7 dimensi.

Mendeklarasikan Array

Array dideklarasikan dengan dimension atribut.

Misalnya, untuk mendeklarasikan array satu dimensi bernama bilangan, bilangan real yang mengandung 5 elemen, Anda menulis,

real, dimension(5) :: numbers

Elemen individu array direferensikan dengan menentukan subskripnya. Elemen pertama dari sebuah array memiliki subskrip satu. Nomor array berisi lima variabel nyata –bilangan (1), bilangan (2), bilangan (3), bilangan (4), dan bilangan (5).

Untuk membuat array dua dimensi 5 x 5 bilangan bulat bernama matriks, Anda menulis -

integer, dimension (5,5) :: matrix

Anda juga dapat mendeklarasikan array dengan beberapa batas bawah eksplisit, misalnya -

real, dimension(2:6) :: numbers
integer, dimension (-3:2,0:4) :: matrix

Menetapkan Nilai

Anda dapat menetapkan nilai untuk masing-masing anggota, seperti,

numbers(1) = 2.0

atau, Anda dapat menggunakan loop,

do i  =1,5
   numbers(i) = i * 2.0
end do

Elemen array satu dimensi dapat langsung diberi nilai menggunakan simbol tangan pendek, yang disebut konstruktor array, seperti,

numbers = (/1.5, 3.2,4.5,0.9,7.2 /)

please note that there are no spaces allowed between the brackets ‘( ‘and the back slash ‘/’

Contoh

Contoh berikut menunjukkan konsep yang dibahas di atas.

program arrayProg

   real :: numbers(5) !one dimensional integer array
   integer :: matrix(3,3), i , j !two dimensional real array
   
   !assigning some values to the array numbers
   do i=1,5
      numbers(i) = i * 2.0
   end do
   
   !display the values
   do i = 1, 5
      Print *, numbers(i)
   end do
   
   !assigning some values to the array matrix
   do i=1,3
      do j = 1, 3
         matrix(i, j) = i+j
      end do
   end do
   
   !display the values
   do i=1,3
      do j = 1, 3
         Print *, matrix(i,j)
      end do
   end do
   
   !short hand assignment
   numbers = (/1.5, 3.2,4.5,0.9,7.2 /)
   
   !display the values
   do i = 1, 5
      Print *, numbers(i)
   end do
   
end program arrayProg

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

2.00000000    
 4.00000000    
 6.00000000    
 8.00000000    
 10.0000000    
         2
         3
         4
         3
         4
         5
         4
         5
         6
 1.50000000    
 3.20000005    
 4.50000000    
0.899999976    
 7.19999981

Beberapa Istilah Terkait Array

Tabel berikut memberikan beberapa istilah terkait array -

Istilah Berarti
Pangkat Ini adalah jumlah dimensi yang dimiliki sebuah array. Misalnya, untuk array bernama matriks, rank adalah 2, dan untuk array bernama angka, rank adalah 1.
Tingkat Ini adalah jumlah elemen di sepanjang dimensi. Misalnya, nomor array memiliki tingkat 5 dan matriks yang bernama array memiliki tingkat 3 di kedua dimensinya.
Bentuk Bentuk larik adalah larik bilangan bulat satu dimensi yang berisi jumlah elemen (luasan) di setiap dimensi. Misalnya, untuk matriks array, bentuknya adalah (3, 3) dan nomor arraynya adalah (5).
Ukuran Ini adalah jumlah elemen yang dikandung sebuah array. Untuk matriks array, nilainya adalah 9, dan untuk nomor array, nilainya adalah 5.

Meneruskan Array ke Prosedur

Anda bisa meneruskan array ke prosedur sebagai argumen. Contoh berikut menunjukkan konsep -

program arrayToProcedure      
implicit none      

   integer, dimension (5) :: myArray  
   integer :: i
   
   call fillArray (myArray)      
   call printArray(myArray)
   
end program arrayToProcedure


subroutine fillArray (a)      
implicit none      

   integer, dimension (5), intent (out) :: a
   
   ! local variables     
   integer :: i     
   do i = 1, 5         
      a(i) = i      
   end do  
   
end subroutine fillArray 


subroutine printArray(a)

   integer, dimension (5) :: a  
   integer::i
   
   do i = 1, 5
      Print *, a(i)
   end do
   
end subroutine printArray

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

1
2
3
4
5

Dalam contoh di atas, subrutin fillArray dan printArray hanya dapat dipanggil dengan array berdimensi 5. Namun, untuk menulis subrutin yang dapat digunakan untuk array dengan ukuran berapa pun, Anda dapat menulis ulang menggunakan teknik berikut -

program arrayToProcedure      
implicit  none    

   integer, dimension (10) :: myArray  
   integer :: i
   
   interface 
      subroutine fillArray (a)
         integer, dimension(:), intent (out) :: a 
         integer :: i         
      end subroutine fillArray      

      subroutine printArray (a)
         integer, dimension(:) :: a 
         integer :: i         
      end subroutine printArray   
   end interface 
   
   call fillArray (myArray)      
   call printArray(myArray)
   
end program arrayToProcedure


subroutine fillArray (a)      
implicit none      
   integer,dimension (:), intent (out) :: a      
   
   ! local variables     
   integer :: i, arraySize  
   arraySize = size(a)
   
   do i = 1, arraySize         
      a(i) = i      
   end do  
   
end subroutine fillArray 


subroutine printArray(a)
implicit none

   integer,dimension (:) :: a  
   integer::i, arraySize
   arraySize = size(a)
   
   do i = 1, arraySize
     Print *, a(i)
   end do
   
end subroutine printArray

Harap dicatat bahwa program ini menggunakan size berfungsi untuk mendapatkan ukuran array.

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

1
2
3
4
5
6
7
8
9
10

Bagian Array

Sejauh ini kita telah merujuk ke seluruh larik, Fortran menyediakan cara mudah untuk merujuk beberapa elemen, atau bagian dari larik, menggunakan satu pernyataan.

Untuk mengakses bagian array, Anda perlu memberikan batas bawah dan atas bagian tersebut, serta langkah (kenaikan), untuk semua dimensi. Notasi ini disebut asubscript triplet:

array ([lower]:[upper][:stride], ...)

Ketika tidak ada batas bawah dan atas yang disebutkan, defaultnya ke luasan yang Anda nyatakan, dan nilai langkah default ke 1.

Contoh berikut menunjukkan konsep -

program arraySubsection

   real, dimension(10) :: a, b
   integer:: i, asize, bsize
   
   a(1:7) = 5.0 ! a(1) to a(7) assigned 5.0
   a(8:) = 0.0  ! rest are 0.0 
   b(2:10:2) = 3.9
   b(1:9:2) = 2.5
   
   !display
   asize = size(a)
   bsize = size(b)
   
   do i = 1, asize
      Print *, a(i)
   end do
   
   do i = 1, bsize
      Print *, b(i)
   end do
   
end program arraySubsection

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

5.00000000    
5.00000000    
5.00000000    
5.00000000    
5.00000000    
5.00000000    
5.00000000    
0.00000000E+00
0.00000000E+00
0.00000000E+00
2.50000000    
3.90000010    
2.50000000    
3.90000010    
2.50000000    
3.90000010    
2.50000000    
3.90000010    
2.50000000    
3.90000010

Array Fungsi Intrinsik

Fortran 90/95 menyediakan beberapa prosedur intrinsik. Mereka dapat dibagi menjadi 7 kategori.

  • Perkalian vektor dan matriks

  • Reduction

  • Inquiry

  • Construction

  • Reshape

  • Manipulation

  • Location