2017-08-16 78 views
1

我試圖訪問一個數據塊時,它被定義的方式是如下數據塊的Fortran 77澄清

 DATA NAME /'X1','X2','X3','X4','X5','X6','X7','X8','X9','10','11',00028650 
    1'12','13','14','15','16','17','18','19','20','21','22','23','24'/ 00028660 

的代碼是在紙面上。請注意這是一箇舊代碼,我唯一想做的事情就是理解數組是如何被索引的。我不想編譯它。

被訪問的方式如下

I = 0 
Loop 
    I = I + 1 
    write (06,77) (NAME(J,I),J=1,4) //this is inside a write statement. 
end loop       //77 is a format statement. 

不知道它是如何被編入索引,如果你們能提供一些線索,這將是巨大的。

+0

您需要顯示'name'的聲明,以便我們充分理解這一點,並給出完整的代碼而不是僞代碼。不過,我猜你有一個_IO暗示做loop_。 – francescalus

+0

@francescalus我編輯的代碼盡我所能。請看看它。交談目的的名字是兩個字符。這就是我在代碼中所做的,我只是爲了這個問題而將它改爲數字。 – LionsFan

+0

你有類似'character * 2 name(4,6)'的東西嗎? – francescalus

回答

1

語法(expr, intvar=int1,int2[,int3])泛指暗示的DO循環。有幾個地方可能會出現這種情況,而輸入/輸出語句就是這樣一個地方。

一個隱含的DO循環計算表達式expr與做控制整數變量intvar依次最初int1取值的int3步驟,直到值int2達到/傳遞。這個循環控制和do循環語句中的一樣。

在問題的情況下,表達式是name(j,i),可變j整數是循環變量時,邊界14之間取值。 [int3不設置這樣的步長被視爲1。]因此,該輸出語句是酷似

write(6,77) name(1,i), name(2,i), name(3,i), name(4,i) 

,因爲我們應該注意到,暗示循環的元件,以便被擴展。 i本身來自包含此輸出語句的循環。

name這裏可能指的是一個函數,但是如果存在初始化它的data語句,它必須以某種方式被聲明爲一個2級(字符)數組。初始化並不重要。

+0

你能否在i = 1的情況下進一步解釋,會命名(1,i)等於等等,爲什麼?拋開我的是它看起來像一個二維數組。 – LionsFan