0

*私は自分の課題を行うために以前の投稿を作成し、非常にありがたい助けを得ることができましたが、再び立ち往生しています. 私は決して宿題を終わらせようとしているわけではなく、そのようなことは理解していません。割り当ては、「コード内で、5 つの要素を持つベクトル TYPE の配列を定義する必要があることを示しています。次に、コードで提供された .dat ファイルを開いて 5 つのベクトル値を読み込む必要があります。また、各ベクトルを配列に個別に読み込む代わりに、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

コンパイルすると、次のようなエラー メッセージが表示されます。タイプ (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

したがって、コメントで述べたことに基づいて、次のようなものを提案します。

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 に答える
0

試す:

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

2 つの注意事項:DOループは空で、ファイルのオープン/クローズは同じファイル番号で実行されていません。

于 2015-03-19T00:10:23.650 に答える