フォートランで任意のデータの総和を求めるプログラムの作り方

このQ&Aのポイント
  • フォートランを使用して、データファイルから任意のデータの総和を求めるプログラムを作成する方法について教えてください。
  • プログラムの始めにデータファイルを読み込み、総和を計算します。
  • フォートランの構文を使用して、データファイルからデータを取得し、総和を計算する処理を行います。具体的なプログラムの作り方を教えていただけますか。
回答を見る
  • ベストアンサー

fortranのプログラミングについてです。

フォートランで任意のデータの総和を求めるプログラムを書きたいのですが 例えばデータファイルに2,3,6,8とあればその和19が出てくる感じです。 よくやりかたがわかりません。 始めにこのようにファイル形式でデータを取り込みます。 INTEGER n OPEN(5,FILE='test.txt') 100 READ(5,*,END=110) n WRITE(*,*) n GO TO 100 110 CONTINUE CLOSE(5) END 次に総和をはじきだしたいのですが。ここのところがよくわかりません。 どうか教えていただきたいのですが。

質問者が選んだベストアンサー

  • ベストアンサー
  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.2

質問のプログラムを改造するつもりだったんですが^^ でないと、順番に読み込んだnが無駄になりますので。 READ~GOTOまでが繰り返しの間なので ※ファイルから1件読み込み、終了なら110へ。そうでなければGOTOまでの処理を行い、以下繰り返し ・その前に初期化 sum=0 ※1回だけ必要。繰り返しの中に入れてしまうと、sumが増えていかないので ・繰り返しの間に sum=sum+n ※データファイルの内容nをsumに加算する。nが終わるまで繰り返される。終わったかどうかの判断はREADでしている

abcdesu
質問者

お礼

丁寧な解説ありがとうございます。 無事コンパイル、実行できるようになりました

その他の回答 (1)

  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.1

もう一つ、変数を用意して、ファイルを読むたびに足していけばよい(総和=総和+n)です。OPENの前に初期化(0を代入)も忘れずに。

abcdesu
質問者

補足

INTEGER n OPEN(5,FILE='test.txt') 100 READ(5,*,END=110) n WRITE(*,*) n GO TO 100 110 CONTINUE CLOSE(5) END すみませんFORTRANは初心者なんですが、このあとに     sum=0     do 300 i=1,10000000     sum=sum+x2(i) 300 continue ファイルは1回だけよむようにしたいのですが。 もう少しヒントをいただけるとありがたいのですが 申し訳ございません。 なかなかなじめません。プログラムは。(泣)

関連するQ&A

  • FORTRANのプログラミングについて

    たびたび申し訳ありません。 またFORTRANに関しての質問です。 x y z 0 0 30 1 0 45 2 0 60 3 0 43 4 0 51 5 0 32 0 1 43 1 1 90 2 1 32 3 1 85 4 1 65 5 1 90 0 2 32 1 2 32 と続くファイルがあります。これをFORTRANをで書き換えて、 0 0 30 0 1 43 0 2 32 1 0 45 1 1 90 1 2 32 と続くデータにしたいのです。(これを以下目的のファイルという) 今のところ、次のようなプログラムを書き、特定のXに対しては、結果を吐き出すことに成功しています。 program dat real x1(100),h,y2(100),y1(100),z1(100) integer i,n,j,k,l,m,a(100) open(7,file='test.txt') open(9,file='af-test.dat') do i=1,100 read(7,*,end=200) x1(i),y1(i),z1(i) if(x1(i).eq.90)then write(9,*) x1(i),y1(i),z1(i) end if end do 200 close(7) close(9) end ここまではうまくいくのですが、これでは90以外の場合は出力されません。(あたりまえですが) 特定のXに限らずに例えばXを0から100まで吐き出されるような目的のファイル作るにはをどのようにしてプログラムを書けばいいかご教授ください。

  • FORTRANの質問です

    今、実験の解析を行っています。 読み込みたいテキストファイルには -1,0.4 0,0,233 -1,0.9 ・・など左側には-1か0のどちらかがあります。 これを -1,0.4 -1,0.9 を含むファイルと 0,0.0233 を含むファイルの二つに分けたいのです。 今プログラムを作っているのですがどうしてもできません。 どうしたらいいのでしょうか? と質問しました。説明不足気味だったので、追加で説明させていただきます。 データの数はかわります。5個だったり、900個だったりします。 この数はわかりません。 program dat real n(10), y(10) write(*,*)'k=' read(*,*)k open(7,file='test.txt') do i=1,k read(7,*,end=200) n(i),y(i) end do 200 close(7) open(8,file='aftest1.txt') open(9,file='aftest2.txt') do j=1,k if(n(j).eq.0) then write(8,*) y(j) else if(n(j).eq.-1) then write(9,*) y(j) end if end do close(8) close(9) end と書いたのですがデータの数と繰り返しの数が一致しないと、出力されません。 いちいちファイルをみるのは面倒なので、なんとか したいのですが

  • FORTRANのプログラム

    今、実験の解析を行っています。 読み込みたいテキストファイルには -1,0.4 0,0,233 -1,0.9 ・・など左側には-1か0のどちらかがあります。 これを -1,0.4 -1,0.9 を含むファイルと 0,0.0233 を含むファイルの二つに分けたいのです。 今プログラムを作っているのですがどうしてもできません。 どうしたらいいのでしょうか? program dat real x(10), y(10) open(7,file='test.txt') do i=1,10 read(7,*,end=200) x(i),y(i) end do do j=1,10 if(x(j).eq.0.0) then open(8,file='aftest1.txt') write(8,*) y(j) else open(9,file='aftest2.txt') write(9,*) y(j) end do close(8) close(9) 200 close(7) end

  • FORTRANでのプログラミングについて

    学校で下記のカッコ内を埋めなければいけないのですが、まったく分からなくて困っています。どなたか教えてくださいませんか?下のプログラムが分かりにくくてごめんなさい。 年賀はがきの当選番号(下二ケタ)5本を配列に登録しておき、コンソールから年賀はがきの下二桁の数字を入力するたびに、あたりはずれを返すプログラムを書きなさい。 登録用当選番号 07 12 35 46 77 1.配列に登録するというのは代入しておくことです。 2.入力は下2けたのみの入力とする 3.999を入力したら終了することとする 4.あたり・はずれは画面に表示すればよい 5.入力されたデータが5つの配列と同じかどうかを 比較して、同じ場合にはあたりを表示する命令文に とぶ。 6.あたりを表示したらデータ入力にもどる 7.同じ数値が無い場合は、はずれと表示してデータ 入力にもどる プログラム integer d(5),i,j,n d(1)=7 d(2)=12 d(3)=35 d(4)=46 d(5)=77 20 ( ) ( ) go to 40 do 10 ( ) if(d(i).eq.n) then write(6,*) ( ) go to 20 end if 10 continue write(6,*) ( ) go to 20 40 stop end

  • fortran エラーについて

    fortranで、副プログラムを使ってデータを昇順または降順に並べ替えるプログラムを入力して実行しようとしたところ、 ・Unexpected junk in formal argument list at (1) ・Two main PROGRAMs at (1) and (2) という2つのエラーが出ました。 これらの改善方法を教えて頂きたいです。 初心者ですので簡単なところで間違えている可能性もありますが、ご指摘いただければ幸いです。 以下、実際に入力したプログラムです。 ------------------------------ implicit none integer::i,n real::x(1000),a(1000),b(1000) n=1000 open(10,file='input-data-1.txt') do i=1,n read(10,*) x(i) end do close(10) open(10,file='output-data-1.txt') do i=1,n call koukan(i,x(i),a(i),b(i)) write(10,'(i4,2f10.3)') i,a(i),b(i) end do close(10) stop end subroutine koukan(i,x(i),shoujun,koujun) implicit none integer::i,n,made real::x(1000),w,shoujun,koujun do made=n-1,1,-1 do i=1,made if(x(i)>x(i+1)) then w=x(i) x(i)=x(i+1) x(i+1)=w end if end do end do shoujun=x(i) do made=n-1,1,-1 do i=1,made if(x(i)<x(i+1)) then w=x(i) x(i)=x(i+1) x(i+1)=w end if end do end do koujun=x(i) return end ------------------------------

  • プログラミング Fortran

    以下のプログラムの空白部分が分かる方、是非力を貸して下さい!!(> <) 次の数列ai=1,…,N(1≦N≦100)                  ai=1, ai+1=2ai-3 に対して               S=Σai(※Σの上はN、下はi=1) を計算・表示するプログラムは以下のようになる。ここでは整数Nは端末から入力する。 common num,a(100),sum read(5,*) num call [ ] call pqrstu write(6,*) ‘a=’,(a(i),i=1,num) write(6,*) ‘sum=’,sum end * subroutine abcdef common num,a(100) a(1)=[ ] do 20 i=1,num a(i+1)=a(i)*2.0-3.0 20 continue end * subroutine pqrstu common [ ] sum=[ ] do 20 i=1,num sum=[ ] 20 continue end よろしくお願いします!!

  • FORTRAN:出力ファイルをフォルダごとに整理するには

    出力ファイルの数が多いので、出力と同時にフォルダごとに整理したいのですがうまくいきません。 具体的に言うと、例えば CHARACTER DEF(2)*1 DATA DEF/'1.txt','2.txt'/ DO 10 NB=1,2 OPEN(10,FILE='A-A\output-'//DEF(NB)) 10 CONTINUE END というプログラムで出力すると、 A-Aというフォルダ内にoutput-1.txt、output-2.txtが作成されます。 これを発展させて、二つ以上のフォルダ内に出力する方法をいろいろ試したのですが、うまくいきません。 わかる方がいらっしゃれば、どうかご回答お願いいたします。 以下は、試したがうまくいかなかったプログラムです。 CHARACTER ABC(2)*5 CHARACTER DEF(2)*1 DATA ABC/'A','B'/ DATA DEF/'1.TXT','2.TXT'/ DO 20 NA=1,2 DO 10 NB=1,2 OPEN(10,FILE='A-'//ABC(NA)\output-'//DEF(NB)) 10 CONTINUE 20 CONTINUE END

  • FORTRAN:出力ファイルをフォルダごとに整理するには

    出力ファイルの数が多いので、出力と同時にフォルダごとに整理したいのですがうまくいきません。 具体的に言うと、例えば CHARACTER DEF(2)*1 DATA DEF/'1.TXT','2.TXT'/ DO 10 NB=1,2 OPEN(10,FILE='A-A\output-'//DEF(NB)) 10 CONTINUE END というプログラムで出力すると、 A-Aというフォルダ内にoutput-1.txt、output-2.txtが作成されます。 これを発展させて、二つ以上のフォルダ内に出力する方法をいろいろ試したのですが、うまくいきません。 わかる方がいらっしゃれば、どうかご回答お願いいたします。 以下は、試したがうまくいかなかったプログラムです。 CHARACTER ABC(2)*5 CHARACTER DEF(2)*1 DATA ABC/'A','B'/ DATA DEF/'1.TXT','2.TXT'/ DO 20 NA=1,2 DO 10 NB=1,2 OPEN(10,FILE='A-'//ABC(NA)\output-'//DEF(NB)) 10 CONTINUE 20 CONTINUE END

  • FORTRAN77のプログラミングについて教えてください。

    ・学校の課題で任意の数値の平均と、入力した数の個数を出力するプログラムを作 りなさいという課題が出たのですがうまくいきません。次にあげるプログラムの 中で修正する部分を教えてください。 *課題2 平均値 integer N real X,T1,M * 初期値 N=0 T1=0 * 累積 10 read(5,*,end=20) X N=N+1 T1=T1+X go to 10 * まとめ 20 if(N.GE.2) then M=T1/N write(6,*) '総数は' ,N, '平均は',M ELSE IF(N.EQ.1) THEN WRITE(6,*) '総数は',N, '平均は',T1 ELSE WRITE(6,*) '数値がない' END IF END IF END ・この問題は最初からよくわかりません。教えてください。  「3つの数a,b,cを読み込む。a,b,cを三角形の3辺の長さとしたとき三角形にな  るかを判定しなさい。三角形にならない場合はその面積をヘロンの公式を求め  て表示する。     s=(a+b+c)/2 , ss=s(s-a)(s-b)(s-c) として       S=sqrt(ss) とする。」 以上の二つです。分かる方お願いします。

  • Fortran のエラー

    9002700385647,2,0,1,0,915110373,20050524,0,2,4911 9004300501590,1,0,1,0,910410489,20050630,-1,1,4527 このようなデータ1万人分必要なところだけ読み取って 書き出そうとするのですがうまくいきません。  This application has requested the Runtime to terminate it in an unusual way. とエラーメッセージが出ます。なぜでしょうか。 ――――――――――――――――――――――――――――――― OPEN (1,FILE='OKAMOTODA.TXT',STATUS='OLD') OPEN (2,FILE='NEWNEW.TXT',STATUS='NEW', 1 FORM='FORMATTED') II=0 31 READ(1,*,END=900)K1,K2,K3,K4,K5,K6,K7,K8,K9,K10 II=II+1 WRITE(2,991) II,K1,K2,K3,K4,K5 991 FORMAT(2X,I3,5I20) IF(II .LT. 10000) THEN GOTO 31 ELSE GOTO 900 ENDIF 900 CLOSE(1) CLOSE(2) END ―――――――――――――――――――――――――――――――

専門家に質問してみよう