0

*我之前发了一篇关于我的作业的帖子,我设法得到了非常感激的帮助,但是我又一次被困住了。我绝不会试图完成我的家庭作业或类似的事情,我只是不明白。作业告诉我“在您的代码中,您应该定义一个包含 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)/类型(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
4

2 回答 2

0

尝试:

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

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

于 2015-03-19T00:10:23.650 回答
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 可以使某些事情变得非常轻松(例如数组操作),但确实使其他操作变得非常棘手。散布一些解释是非常有帮助的。

于 2015-03-19T00:03:44.227 回答