2015-03-18 32 views
0

*我做了一個較早的帖子來做我的任務,我設法得到很多讚賞的幫助,但我再次卡住。我絕不會試圖完成我的功課,或者我只是不理解它。該任務告訴我'在你的代碼中,你應該定義一個包含5個元素的vector類型的數組。然後,您的代碼 應該打開提供的.dat文件以讀入五個矢量值,並且也不是單獨將每個矢量讀入數組中,而應該使用從1到5的循環讀取所有需要的矢量。這將爲您留下一個矢量數組,其格式爲 ,記爲Vi ,其中i代表數組中特定元素的索引。然後,您應該 執行和輸出(用合適的音符輸出指示其輸出是)以下 算了一筆賬:錯誤在我的向量陣列在Fortran 90

L = V1 + (V2 − V3) 
M = V2 ● V4 
N = V1 × V5' 

到目前爲止,我已經做到了這一點,我比某些更其錯誤的ID就像一個巨推向右方向感謝*

program assign_9_2_main 

    USE assign_9_2_module 

     type(myvector), dimension(5) :: varray 
     integer :: i, L, M, N 
    OPEN(5,FILE='vectors.dat') 
    READ(5,*) varray(1) 
    DO i = 1, 5, 1 
    end do 
    CLOSE(10) 

    L=varray(1)+(varray(2)-varray(3)) 
    M=varray(2)*varray(4) 
    N=varray(1)*varray(5) 

    write(*,*) L, M, N 

    end program assign_9_2_main 

當我編譯它我得到一個錯誤消息說:L = VARRAY(1)+(VARRAY(2) - VARRAY(3))錯誤: (1)處的二進制數字運算符' - '的操作數是TYPE(myvector)/ TYPE(myvector) assign_9_2_main.f90:14.2:

 M=varray(2)*varray(4) 
      1 
     Error: Operands of binary numeric operator '*' at (1) are  TYPE(myvector)/TYPE(myvector) 
     assign_9_2_main.f90:15.2: 

     N=varray(1)*varray(5) 
      1 
     Error: Operands of binary numeric operator '*' at (1) are TYPE(myvector)/TYPE(myvector). 


clearly i'm doing something wrong please can someone help 
+0

你確定你打算在這裏使用派生類型「type(myvector)」嗎?這是問題所在,因爲您尚未定義如何將兩個「myvector」類型相乘。 – 2015-03-18 23:48:14

+0

您好,非常感謝您的回覆。我不是肯定的,但如果我刪除它,然後我得到一個錯誤信息: 尺寸(5):: VARRAY 錯誤:在(1) assign_9_2_main.f90不可分類的語句:8.17: READ(5 * )varray(1)錯誤:(1) – 2015-03-18 23:50:58

+0

READ語句中的語法錯誤所以它需要一個類型,但可能類似'real'。所以你的聲明應該是'real,dimension(5):: varray'或者等價的'real :: varray(5)' – 2015-03-18 23:57:18

回答

0

那麼,根據什麼你的意見說,我建議像下面這樣:

program assign_9_2_main 

use assign_9_2_module 
! Try to always put implicit none here, it prevents what are called implicit types 
implicit none 

! You can provide the dimensions of an array variable in brackets, rather than a 
! dimension(x, y, ...) statement. 
real :: varray(5) 
integer :: i, l, m, n 

! Avoid 5 as a unit number, it's often got a special meaning (standard input) 
! Also avoid 0, 6, 100, 101 and 102. They're (sometimes) special too. 
open(15, file='vectors.dat') 
do i = 1, 5 
    read(15, *) varray(i) 
end do 
close(15) 

! It's a matter of personal preference, but I like whitespace around operators. 
l = varray(1) + (varray(2) - varray(3)) 
m = varray(2) * varray(4) 
n = varray(1) * varray(5) 

write(*, *) l, m, n 

end program assign_9_2_main 

我在一些東西加入評論在源代碼中,就像一般Fortran事物的指針一樣。一般來說,我發現在你自己的代碼中放置註釋真的有助於你什麼時候回來查看某些東西。 Fortran可以對某些事情(例如數組操作)做很輕鬆的工作,但確實使其他操作非常棘手。散佈一些解釋是非常有幫助的。

+0

非常感謝你讓所有東西都變得清晰了,很高興知道我也沒有太多東西。我不能夠感謝你 – 2015-03-19 00:27:50

0

嘗試:

OPEN(10,FILE='vectors.dat') 
DO i = 1,5 
    READ(5,*) varray(i) 
END DO 
CLOSE(10) 

兩個注意事項:DO循環是空的,文件的打開/關閉,其中不在同一個文件編號操作。