簡體   English   中英

我的向量數組在fortran 90中的錯誤

[英]error in my vector array in fortran 90

*我在較早的職位上做了我的作業,並設法獲得了許多贊賞的幫助,但是我再次陷入困境。 我絕不試圖完成我的作業或類似的事情,我只是不理解。 分配告訴我“在您的代碼中,您應該定義一個包含5個元素的矢量類型數組。 然后,您的代碼應打開提供的.dat文件以讀取五個向量值,並且也不要代替將每個向量分別讀取到數組中,而應使用1到5的循環讀取所有必需的向量。 這將為您提供一個向量數組,該數組將被標記為Vi,其中i表示數組中特定元素的索引。 然后,您應該執行並輸出(帶有適當的注釋輸出,指出哪個是哪個輸出)以下計算:

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錯誤:(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

因此,根據您在評論中所說的內容,我建議如下內容:

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可以使某些事情(例如數組操作)非常輕松,但是確實會使其他操作非常棘手。 散布一些解釋非常有幫助。

嘗試:

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

有兩個注意事項: DO循環為空,並且文件未按相同文件號運行時打開/關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM