*我之前做了一个与我的任务有关的帖子,我设法获得了很多赞赏,但是我又被卡住了。我绝不试图完成我的作业或类似的东西,我只是不理解它。赋值告诉我'在你的代码中你应该定义一个带有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
答案 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
循环为空,文件打开/关闭,不在同一文件编号上运行。