2016-02-05 132 views
0

如何編寫接受任意大小數組的函數(只要它們的rank是1)? 這正是固有功能shape可以做的,所以我不認爲我的要求太苛刻。 實際上,功能shape做的更多。它可以(顯然)接受任意形狀的數組,即每個維度上的任意級別和任意長度。接受任意大小的rank-1數組的Fortran函數

這個問題旨在編寫一個函數sub2ind,它對應於同名的MATLAB函數。

+0

作爲這個問題的一部分,你可能還在乎函數結果是一些任意(但相關)大小的數組? – francescalus

+0

嗯,我想知道最普遍的答案,但第一步將回答在這種情況下函數提供標量作爲輸出。 –

回答

2

我不知道我是否正確理解您的問題,但自Fortran函數發明以來,在Fortran中可以接受任何數組大小的函數。 (儘管有些技巧有時涉及FORTRAN 77之前)。任何教科書或教程都會對待這個問題。

現代風格假定形狀:

function f(a) 
    real :: a(:) 
    do i = 1, size(a) 
    ... 
    end functions 

明確的尺寸:

function f(n, a) 
    real :: a(n) 
    do i = 1, n 
    ... 
    end functions 

假定大小:

function f(n, a) 
    real :: a(*) 
    do i = 1, n 
    ... 
    end functions 

對於假定的形狀,顯式接口(最好使用模塊)是必要的。

+0

我不想明確地給出尺寸,所以我需要第一種和第三種方法,但我不知道有什麼區別;我不知道我應該使用模塊的方式..(我是新來的fortran) –

+0

然後你必須閱讀教科書。並搜索stackoverflow。有關於此的很好的問題和答案。對於需要模塊的高級數組工作, –

+0

http://stackoverflow.com/questions/8412834/correct-use-of-modules-subroutines-and-functions-in-fortran http://stackoverflow.com/questions/1240510/how-do-you-use- fortran-90-module-data http://stackoverflow.com/questions/11953087/proper-use-of-modules-in-fortran –

相關問題