2017-11-21 10 views
0

複数の.datファイルの固定計算ステップを実行したいと思います。ここで複数の.datファイルに対して同じ計算を行う方法

は、私は、すなわち計算1つの.datファイルで何をしたいかについての私のコードです:

dimension t(128716),x(128716) 

    open (unit=88,file='ALFA-gua-100m-2.dat',status='unknown') 

    do i=1,128716 
     read(88,*)t(i),x(i) 

    enddo 
    sum=0 
    do j=1,128716 
     sum=sum+x(j) 
    enddo 



    write(*,*)sum/128716 
    close(88) 
    stop 
    end 

は、どのように私はこれについて行くのですか?提案してください!

dimension t(128716),x(128716) 

    open (unit=11,file='ALFA-gua-100m-2.dat',status='unknown') 
    open (unit=12,file='ALFA-gua-100m-5.dat',status='unknown') 

    do i=1,2 
     ii = i + 10 

     do j=1,128716 
     read(ii,*)t(j),x(j) 
     enddo 

     sum=0 
     do k=1,128716 
     sum=sum+x(k) 
     enddo 

    enddo 

    do l=1,2 
     ll = l + 10 
     write(ll,*)sum/128716.0 

     close(ll) 
    enddo 

    stop 
    end 

しかし、その動作していない:

はここで、複数のファイルのための私のコードです。

+0

オープンファイルからコードをループで追加できますか?それはあなたが達成しようとしていることをするはずです。 –

+0

私はこのコードを修正しましたが、それは動作しません。ここに私のコードはあります:寸法t(128716)、x(128716) open(ユニット= 11、ファイル= 'ALFA-gua-100m-2.dat'、ステータス= (オープン ) '不明' 単位= 12、ファイル= 'ALFA-GUA-100M-5.dat'、ステータス= '不明') iが= 1,2 II =私は= jで行う10 を+ください1,128716 リード(II *)T(j)は、X(J) ENDDO和= 0 行うK = 1,128716 和=和+ X(k)は ENDDO ENDDO(ll、*)sum/128716となる。0 近い(LL) ENDDO ストップあなたは* *手段 "それが動作していない" かを説明しなければならない –

+0

終了。このようなフレーズは決して使用しないでください。何も言わないでください。エラーメッセージがありますか?それらをすべて表示してください!間違った結果?それらを表示し、なぜそれらが間違っているのか、正しいものがどのように見えるのかを説明してください。 [ask]と[mcve]を参照してください。 –

答えて

0

2つのループが別々にある場合は、sumをループの2回の繰り返しに使用することはできません。 2番目のファイルを処理するときに上書きされます。

  1. ループを1つにまとめることができます。

    do i=1,2 
        ii = i + 10 
    
        do j=1,128716 
        read(ii,*)t(j),x(j) 
        enddo 
    
        sum=0 
        do k=1,128716 
        sum=sum+x(k) 
        enddo 
    
        write(ii,*)sum/128716.0 
    
        close(ii) 
    enddo 
    
  2. 合計値sums(i)の配列を使用できます。

    do i=1,2 
        ii = i + 10 
    
        do j=1,128716 
        read(ii,*)t(j),x(j) 
        enddo 
    
        sum=0 
        do k=1,128716 
        sums(i)=sums(i)+x(k) 
        enddo 
    
    enddo 
    
    do l=1,2 
        ll = l + 10 
        write(ll,*)sums(l)/128716.0 
    
        close(ll) 
    enddo 
    
0

@ VladimirFの答えに補遺。配列のすべての要素を合計する

xと呼ばれる、我々は単に

sumx = sum(x) 

を書くことができ、プログラマがすべてのループを記述するための必要はありません。合計の配列を使用する場合、

sums(1) = sum(x) 

のようなものが適切です。それは、変数sumを呼び出すためには良い考えではありません。そして、私は書いている間、私は

meanx = sum(x)/size(x) 

を書きたい配列の平均値を計算する

。その名前の既存の固有の関数があり、読者(コンパイラではありません)にもその名前の変数を混同させるだけです。

関連する問題