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