Fortran - Modul

Modul adalah seperti paket di mana Anda dapat menyimpan fungsi dan subrutin Anda, jika Anda menulis program yang sangat besar, atau fungsi atau subrutin Anda dapat digunakan di lebih dari satu program.

Modul memberi Anda cara untuk membagi program Anda di antara beberapa file.

Modul digunakan untuk -

  • Mengemas subprogram, blok data dan antarmuka.

  • Mendefinisikan data global yang dapat digunakan oleh lebih dari satu rutinitas.

  • Mendeklarasikan variabel yang dapat disediakan dalam rutinitas apa pun yang Anda pilih.

  • Mengimpor modul seluruhnya, untuk digunakan, ke program atau subrutin lain.

Sintaks Modul

Modul terdiri dari dua bagian -

  • bagian spesifikasi untuk pernyataan pernyataan
  • a berisi bagian untuk subrutin dan definisi fungsi

Bentuk umum dari modul adalah -

module name     
   [statement declarations]  
   [contains [subroutine and function definitions] ] 
end module [name]

Menggunakan Modul ke dalam Program Anda

Anda dapat memasukkan modul ke dalam program atau subrutin dengan menggunakan pernyataan -

use name

Harap dicatat bahwa

  • Anda dapat menambahkan modul sebanyak yang diperlukan, masing-masing akan berada dalam file terpisah dan dikompilasi secara terpisah.

  • Sebuah modul dapat digunakan dalam berbagai program berbeda.

  • Sebuah modul dapat digunakan berkali-kali dalam program yang sama.

  • Variabel yang dideklarasikan di bagian spesifikasi modul, bersifat global ke modul.

  • Variabel yang dideklarasikan dalam modul menjadi variabel global dalam setiap program atau rutinitas di mana modul tersebut digunakan.

  • Pernyataan use dapat muncul di program utama, atau subrutin atau modul lainnya yang menggunakan rutinitas atau variabel yang dideklarasikan dalam modul tertentu.

Contoh

Contoh berikut menunjukkan konsep -

module constants  
implicit none 

   real, parameter :: pi = 3.1415926536  
   real, parameter :: e = 2.7182818285 
   
contains      
   subroutine show_consts()          
      print*, "Pi = ", pi          
      print*,  "e = ", e     
   end subroutine show_consts 
   
end module constants 


program module_example     
use constants      
implicit none     

   real :: x, ePowerx, area, radius 
   x = 2.0
   radius = 7.0
   ePowerx = e ** x
   area = pi * radius**2     
   
   call show_consts() 
   
   print*, "e raised to the power of 2.0 = ", ePowerx
   print*, "Area of a circle with radius 7.0 = ", area  
   
end program module_example

Ketika Anda mengkompilasi dan menjalankan program di atas, ini menghasilkan hasil sebagai berikut -

Pi = 3.14159274    
e =  2.71828175    
e raised to the power of 2.0 = 7.38905573    
Area of a circle with radius 7.0 = 153.938049

Aksesibilitas Variabel dan Subrutin dalam Modul

Secara default, semua variabel dan subrutin dalam modul tersedia untuk program yang menggunakan kode modul, oleh use pernyataan.

Namun, Anda dapat mengontrol aksesibilitas kode modul menggunakan private dan publicatribut. Ketika Anda mendeklarasikan beberapa variabel atau subrutin sebagai privat, itu tidak tersedia di luar modul.

Contoh

Contoh berikut menggambarkan konsep -

Pada contoh sebelumnya, kami memiliki dua variabel modul, e dan pi. Mari kita jadikan pribadi dan amati hasilnya -

module constants  
implicit none 

   real, parameter,private :: pi = 3.1415926536  
   real, parameter, private :: e = 2.7182818285 
   
contains      
   subroutine show_consts()          
      print*, "Pi = ", pi          
      print*, "e = ", e     
   end subroutine show_consts 
   
end module constants 


program module_example     
use constants      
implicit none     

   real :: x, ePowerx, area, radius 
   x = 2.0
   radius = 7.0
   ePowerx = e ** x
   area = pi * radius**2     
   
   call show_consts() 
   
   print*, "e raised to the power of 2.0 = ", ePowerx
   print*, "Area of a circle with radius 7.0 = ", area  
   
end program module_example

Ketika Anda mengkompilasi dan menjalankan program di atas, ini memberikan pesan kesalahan berikut -

ePowerx = e ** x
   1
Error: Symbol 'e' at (1) has no IMPLICIT type
main.f95:19.13:

   area = pi * radius**2     
   1
Error: Symbol 'pi' at (1) has no IMPLICIT type

Sejak e dan pi, keduanya dinyatakan pribadi, program module_example tidak dapat mengakses variabel ini lagi.

Namun, subrutin modul lain dapat mengaksesnya -

module constants  
implicit none 

   real, parameter,private :: pi = 3.1415926536  
   real, parameter, private :: e = 2.7182818285 
   
contains      
   subroutine show_consts()          
      print*, "Pi = ", pi          
      print*, "e = ", e     
   end subroutine show_consts 
   
   function ePowerx(x)result(ePx) 
   implicit none
      real::x
      real::ePx
      ePx = e ** x
   end function ePowerx
    
   function areaCircle(r)result(a)  
   implicit none
      real::r
      real::a
      a = pi * r**2  
   end function areaCircle
    
end module constants 


program module_example     
use constants      
implicit none     

   call show_consts() 
   
   Print*, "e raised to the power of 2.0 = ", ePowerx(2.0)
   print*, "Area of a circle with radius 7.0 = ", areaCircle(7.0)  
   
end program module_example

Ketika Anda mengkompilasi dan menjalankan program di atas, ini menghasilkan hasil sebagai berikut -

Pi = 3.14159274    
e = 2.71828175    
e raised to the power of 2.0 = 7.38905573    
Area of a circle with radius 7.0 = 153.938049