2015-03-18 28 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循环是空的,文件的打开/关闭,其中不在同一个文件编号操作。