fortran 90中我的矢量数组中的错误

时间:2015-03-18 23:41:02

标签: arrays vector fortran fortran90 do-loops

*我之前做了一个与我的任务有关的帖子,我设法获得了很多赞赏,但是我又被卡住了。我绝不试图完成我的作业或类似的东西,我只是不理解它。赋值告诉我'在你的代码中你应该定义一个带有5个元素的矢量TYPE数组。你的代码 然后应该打开提供的.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

2 个答案:

答案 0 :(得分: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可以对某些事情做很轻松的工作(例如数组操作),但确实使其他操作非常棘手。分散一些解释是非常有帮助的。

答案 1 :(得分:0)

尝试:

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

两个注意事项:DO循环为空,文件打开/关闭,不在同一文件编号上运行。