Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 模組 台灣師範大學數學系 黃聰明.

Similar presentations


Presentation on theme: "Chapter 模組 台灣師範大學數學系 黃聰明."— Presentation transcript:

1 Chapter 模組 台灣師範大學數學系 黃聰明

2 M-1 Public and Private 程式說明 module test implicit none private var_1
public var_2,sub_1 integer :: var_1,var_2 ... contains subroutine sub_1 end module test 將模組內的變數或函式定義成只能在此模組內使用的變數或函式 內定的狀態為 public 將模組內的變數或函式定義成可以對外界公開使用的變數或函式 函式要放在contains中

3 M-1 Public and Private < Ex0M01. 完整程式> <接下頁> module bank
   implicit none    private money    public LoadMoney, SaveMoney, Report    integer :: money =    contains       subroutine LoadMoney(num)           implicit none           integer :: num           money=money-num           return       end subroutine < Ex0M01. 完整程式> <接下頁> 變數 money 只能在 module bank 中使用,主程式中不能使用 money 變數 將 LoadMoney, SaveMoney, Report 定義成可以對外界公開使用的函式

4 M-1 Public and Private < Ex0M01. 完整程式> <接下頁>
      subroutine SaveMoney(num)          implicit none          integer :: num           money=money+num           return       end subroutine subroutine Report()          write(*,"('銀行目前庫存',I,'元')") money          return end module bank < Ex0M01. 完整程式> <接下頁>

5 M-1 Public and Private < Ex0M01. 完整程式> < Ex. 執行結果>
program ex0M01    use bank    implicit none    call LoadMoney(100)    call SaveMoney(1000)    call Report()    stop end program ex0M01 < Ex0M01. 完整程式> < Ex. 執行結果> TEST

6 M-2 USE 更改模組中變數名稱 use指令後面,可以臨時把 module 裡面的變數或函式名稱改名 module A
implicit none integer :: va end module A module B integer :: va, vb end module program main use A, aa=>va use B ... use指令後面,可以臨時把 module 裡面的變數或函式名稱改名 把 module A 中的變數 va改名為 aa 來使用,若不使用 “use A, aa=> va”,module A 和 module B 都同時擁有名稱為 va 的變數,在主程式中同時使用這兩個 module 時,會出現變數名稱重複的問題

7 M-2 USE 只使用模組中的某些變數 use指令後面,可以臨時只選擇 module 裏面所需之變數或函式 module A
implicit none integer :: va, vb, vc end module module B integer :: va, vb program main use A, only : vc use B ... use指令後面,可以臨時只選擇 module 裏面所需之變數或函式 只用 module A 中的變數 vc,其他 va 和vb 變數都不使用,因此不會與 module B 中的va 和vb 變數衝突

8 M-2 USE 合併使用 use指令後面,可以臨時 只選擇 module 裏面所需之變數或函式並名稱改名 module A
implicit none integer :: va, vb, vc end module module B integer :: va, vb program main use A, only : c => vc use B ... use指令後面,可以臨時 只選擇 module 裏面所需之變數或函式並名稱改名 只用module A 中的變數 vc,不過把 vc 改名成 c 來使用

9 M-2 USE < Ex0M02. 完整程式> <接下頁> module MA implicit none
real :: a,b contains subroutine getx() write(*,"('x=',F5.2)") -b/a return end subroutine end module < Ex0M02. 完整程式> <接下頁>

10 M-2 USE < Ex0M02. 完整程式> <接下頁> module MB use MA
implicit none real :: c contains subroutine getx2() real :: a2, d, sqrt_d a2=2*a d=b*b-4*a*c if ( d>=0 ) then sqrt_d = sqrt(d) write(*,"('x=',F5.2,',',F5.2)")(-b+sqrt_d)/a2, (-b-sqrt_d)/a2 < Ex0M02. 完整程式> <接下頁>

11 M-2 USE < Ex0M02. 完整程式> < Ex0M02. 完整程式> <接下頁>
else write(*,*) "無實數解" end if return end subroutine end module < Ex0M02. 完整程式> <接下頁> subroutine sub1() use MA implicit none a=2.0 b=3.0 call getx() return end subroutine < Ex0M02. 完整程式> <接下頁>

12 M-2 USE < Ex. 執行結果> < Ex0M02. 完整程式> < Ex0M02. 完整程式>
TEST subroutine sub2() use MB implicit none a=1.0 b=4.0 c=4.0 call getx2() return end subroutine < Ex0M02. 完整程式> program main implicit none call sub1() call sub2() end program < Ex0M02. 完整程式>

13 M-3 Interface Overload Overload subroutine 在程式碼中可以同時擁有多個名稱相同,但是參數型態、
數目不同的函式,程式會自動根據傳入的參數,來決定 要呼叫哪一個函式 Overload subroutine 在 module 中使用 interface,可以用來定義一個虛擬的 函式名稱

14 M-3 Interface < Ex0M03. 完整程式> <接下頁> module MA
implicit none interface show module procedure show_int module procedure show_character end interface contains subroutine show_int( n ) integer, intent(in) :: n write(*,"('n=',I3)") n return end subroutine show_int < Ex0M03. 完整程式> <接下頁> 虛擬的函式名稱show

15 M-3 Interface < Ex0M03. 完整程式> <接下頁>
subroutine show_character( str ) implicit none character(len=*), intent(in) :: str write(*,"('str=',A)") str return end subroutine show_character end module < Ex0M03. 完整程式> <接下頁>

16 M-3 Interface < Ex. 執行結果> < Ex0M03. 完整程式> TEST
program main use MA implicit none call show_int(1) call show(1) call show_character("FORTRAN 95") call show("FORTRAN 95") stop end program < Ex0M03. 完整程式> 參數是整數, 會自動選擇呼叫show_int 參數是字串, 會自動選擇呼show_character


Download ppt "Chapter 模組 台灣師範大學數學系 黃聰明."

Similar presentations


Ads by Google