• 締切済み

fortranのformatについて

DO I=1,100 WRITE(*,100)I 100 FORMAT(I2) の出力は1行に1~100まで表示されますが5行に分けて1行に1~20、2行目に21~30 のように出力させるにはFORMAT文をどのように変えれば出来ますか? 1行目  2行目 1 21 . . . . . . 20 30 基本的な質問ですが宜しくお願いします。

  • 88555
  • お礼率4% (1/22)

みんなの回答

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.3

これで、どうですかね。    R=100    DO 100 I=1,20    WRITE(*,'(20I2)') I,(J*10+I, J=2,R/20)  100 CONTINUE

回答No.2

矛盾あるように思いますが・・・ >1行に1~20 >2行目に21~30 ------------------------- >1行目  2行目 >1 21 >. . >. . >. . >20 30 > 100 FORMAT(I2) 先頭の1文字は改行の制御に使われるので、いきなり「I2」でフォーマットすると改行処理が乱れますよ。

88555
質問者

補足

間違えてました。申し訳ありません。 >1行に1~20 >2行目に21~40 です。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

忘れたんですけど、こんな感じ・・   DO I=1,20   WRITE(5,100) I,I+20,I+30,I+40,I+50 100 FORMAT(5I2)

88555
質問者

補足

今回100の表示にしたんですが、 DO I=1、R の様に変数だったらどうなるのでしょうか? 変数Rは数字ですがわからない状態で一行に20列並びRが収まるまで何行も出力させたいです。

関連するQ&A

  • Fortranのformat形式

    format文を使って数値を出力しようとしています。 例としましてpi=3.141592を出力したいのですが、 write(10, 100) pi 100 (E12.5) とした時に 0.31416E+01 と出力されます。 これを 3.14159E+00 と出力したい時、format文はどういう風にかけばいいのでしょうか? OS: CentOS 6.5 (32bit) Intel fortran version 14.0.1 を使っています。

  • FORTRAN95でハフモデルの計算をしようと思っています。

    FORTRAN95でハフモデルの計算をしようと思っています。 ハフモデルをちょっと拡張して計算を行いたく、なかなかプログラムを組めていません。 一番苦戦しているのが、配列に数字を入れる方法です。 縦5、横9からなる配列Bを定義して、(Bの左上の要素はB11とします) 1列目の2~5行目に1~4の数字を入れ, 1行目の2列目から後ろには1~9を入れて、Bを表示したいです。 ほかの要素は実数なのでBは実数型で定義します。 Bの完成イメージとしては 0 1 2 3 4 5 6 7 8 9 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 です。スペース部分はコンマですが。 プログラムを REAL,DIMENSION(5,9)::B B=0 DO I4=1,4 B(2:5,1)=I4 DO IXW=10,80,10 XWEI=REAL(IXW)/10.0 B(1,2:9)=XWEI END DO END DO DO I5=1,5 WRITE(*,100) (B(I5,J5),J5=1,9) 100 FORMAT(20(',',F3.1)) END DO STOP END こうかくと、 ,0.0,8.0,8.0,8.0,8.0,8.0,8.0,8.0,8.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, のように表示されます。DO文の対になるEND DOよりしたではDOの最後の値しか使えないようです。 しかし、WRITE文をEND DOより中に入れると5×9ではなくもっと縦長の15×9のような配列が表示されてしまいます。 どなたか教えてください。お願いします。

  • Fortran90/95の出力方法について

    Fortran90/95の出力方法について Fortran95において,変数の値をwrite文で出力した後に改行しない方法を教えてください. 具体的には次のProgram reiを用いて質問します. program rei implicit none integer i, n read(*,*) n do i = 1, n write(*,*) i end do end このプログラムを実行させnに3を代入すると次のように表示されます. 1 2 3 しかし,私としては次のように改行せずに表示させたいのです. 1 2 3 また,諸事情により配列は使用しません. プログラムをどのように改良すればよいのでしょうか.教えてください.

  • fortranのwrite文について

    fortranで数値計算をしています。 計算結果をdatファイルに出力する際、 長い変数名の数値を30列(1列は1000行以上)以上にわたって出力したいことがあります。 現在は、それぞれの変数名を横並びにプログラムに書き、 かつ、1行あたりの文字列の制限もあるので、 &記号を使って、無理やり出力しています。 具体的には、 do i=1,1000,1 write(1000,*)aaaaaaaaaaaaaaaa(i),& &bbbbbbbbbbbbbbbb(i),& &cccccccccccccccc(i),& &dddddddddddddddd(i),& ........ end do という形です。 もっとスマートにかけないでしょうか?

  • FORTRANの動的割り当てについて

    今、FORTRANでg95でプログラムを作っているのですが、動的割り当てで理解出来ない現象が起きたので質問させていただきます。 real(8),dimension(:,:,:),allocatable :: a と三次元の動的配列aを定義し allocate(a(0:10,0:10,0:10)) としています。 ここで、外部のファイルから各成分0~10の配列の所に値を読み込ませます。 私の理解では、これは0~10の添字までしか扱えないものと思っていたのですが、write文でa(11,11,11)という要素を書かせてみると、実際に値が出力されてしまいます。動的割り当てとはそういうものなのでしょうか。 また現在作っているプログラムではこれが値を持っているとまずいので、doループで11の値のところだけをif文で0にしようと試みたのですが、そのif文を反映してくれません。 (つまり do i=0.11 do j=0,11 do k=0,11 if (i==11.or.j==11.or.k==11) then .・・・ の時、・・・のところで0にしようしてもそれが反映されない) 始めはコードが間違っているのかと思いましたが、doループの10の値のところを同様に0にしてみたら成り立っていました。 (つまり do i=0,10 do j=0,10 do k=0,10 if (i==10.or.j==10.or.k==10) then ・・・ の時、・・・のところで0にしようとするとそれが反映される) これはやはり定義してないa(11,11,11)が出力されることと関係があるのでしょうか。 初歩的な質問かもしれませんが、よろしくお願い致します。

  • FORTRANでファイルへの出力

    FORTRAN77で,以下のような出力をしたいのですが,どうしたらいいかわかりません.何かいい案があれば,教えてください. 繰り返し処理の途中で計算を止めても,何ステップまで計算したかを第一行目に出力したいです. ex.)繰返し終値が1000として,456ステップで計算を止めたとき, ----------出力ファイル-------------- 456ステップまで計算されています. (↑何ステップまで計算されたかを   第一行に記入したいです.) step 1,データ step 2,データ : : step 456,データ ----(簡単ですが)考えてたプログラム------- OPEN(10,○) WRITE(10,○)  ←ここを悩んでいます. DO I=1,1000 WRITE(10,○)'step',I,データ CONTINUE

  • FORTRAN90

    fortran90で、ファイル出力をフォーマット付きで行いたいのですが、 write(unit,****) のような文で、****の部分のフォーマット指定を マニュアルで入力するのではなく、その場に応じた形で 指定する方法はありますでしょうか? character変数の文字にフォーマット指定の文字列、例えば六つの実数を横一列に書き出す場合を想定して write(char,"(A,I1,A)")"'(",Int,"D13.5)'" とし、 write(unit,char)x,y,z,w,s,t などとするのはできませんでした。 ここでいうintの部分を自動的に変えれるようにしたいのですが 何か策はありますでしょうか? わかりにくい説明ですみませんが宜しくおねがいします。

  • FortranのFormatについて

    Fortranで数値を出力するときのFormatについて質問です。 数値を小数点を無くして、指数表示で出力したいです。 例えば 0.0025 を 25E-4 と出力するのが希望です。 調べたところ、 『■pe■.■e■』(■は数値)というFormatにすれば、  1番目の値は小数点以上の桁数  2番目の値は数値が入る幅  3番目の値は小数点以下の幅  4番目の値は指数の桁数 ということがわかりました。 『2PE8.3e1』だと 0.0025 は 25.00E-4 と出力されます。 『2PE6.1e1』だと 0.0025 は 25.E-4 と出力されます。 しかし、この小数点を消す方法がどうしてもわかりません。 『2pe6.0e1』と設定してもうまく出力されません。 詳しい方がいらっしゃったらぜひ教えてください。 よろしくお願いします。

  • FORTRAN77の質問です。

    ある問題で定圧モル熱容量が C/R=A+BT+DT^-2 であたえられていました。 まずA,B,Dの値と温度Tを与えると、定圧モル熱容量を計算する関数副プログラムFCPMを求めました。 次に表があって圧力5つがあってそれぞれにA、B、Dが書かれています。 250℃から650℃まで50℃刻みで定圧モル熱容量を計算し 表のような一覧表の形で出力するプログラムを書く問題ができません。 まずA、B、DですがDATA文などで表して DO文で DO 10 T=250,50,650 DO 5 I=1,1,5 write(*,*)T,FCPM(A(I),B(I),D(I),T) format(F9.2,5F10.4) 5 continue 10 continue みたいなのでいいんですか? 表の上のほうはどう書けばいいのでしょうか? またDATA文以外で何か良い方法はありませんか?READ文で読み込むのもなんかなぁと思います。

  • FORTRAN ファイルの入出力の方法がわかりません

    メインプログラムを main.dat 入力するファイルを input.txt とします。 input.txtファイル内は A 12 23 B 49 93 C 66 25 ・ ・ ・ と続いてるとします。(数字は同じ数ずつ並んでて、その間にアルファベットがある) この時、2行目~3行目(12と23)、5行目~6行目(49と93)、8行目~9行目(66,25)、・・・・、とそれぞれのアルファベットのグループの数字を読み込んで、別々の出力ファイルを作るにはどうすれば良いかわかりません。つまり ファイルA 12 23 ファイルB 49 93 ファイルC 66 25 ファイルD ・ ・ ・ とアルファベットのグループ毎にファイルを作りたいのです。 DO文だけでできるのか?また、IF文を使う必要があるのか?直接アクセス入力(ACCESS='DIRECT')を使うのか?初心者でかなり調べたんですがよくわかりません。教えて頂けると幸いです。よろしくお願いします。 また、もしよろしければ、グループCのみの数字(66、25)だけを読み込んで、出力する場合についても教えてくれるとありがたいです。 (基本的なOPEN、READ、WRITE文の使い方はわかっています。)

専門家に質問してみよう