• 締切済み

Fortranの並びによる出力の書式指定について

Fortranなのですが、以下のような並びによる出力について考えます。 write(*,'( 5i2 )') (n,n=1,5) 出力結果は1 2 3 4 5 というだけのことで、2桁の整数を5個出力せよ、ということです。出力する前から5個の整数が来ることが分かっているということになります。 ところが個数が5じゃない場合、どのように書式指定すればいいでしょうか。出力する整数の個数がプログラムの実行結果によって変化する(つまり変数)ということです。よろしくお願いします。 Fortranのカテゴリがないようなので、C言語の専門家に聞くしかないと思い、こちらに上げてみました。Cだとすんなりできそうですが。

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

簡単には、'(999i2)' とか大きい数字を指定すれば良いです。 あるいは、'(5i2)' は文字列データなので、そういう文字列データを作れば良いです。 character(len=10) :: fmt integer :: n, i n = 5 write(fmt,'("(",i4,"i2)")') n write(*,fmt) (i,i=1,n) > Fortranのカテゴリがないようなので、 「 その他(プログラミング・開発)」カテゴリが適当です。

skmsk1941093
質問者

お礼

回答ありがとうございます。やってみます。 Fortranですが、Cが一番、活発であることと、むかしからある開発環境なので似ているのかなと思ってこちらに出しました。”その他”だと目につかなくて回答してもらえないように思ったもので。

関連するQ&A

  • Fortran の入出力文の書き方

    fortran の read, write文で25桁くらいある数値を処理したいのですが、どうのように表現するのでしょうか。数値は整数です。

  • Fortran 出力形式

    Fortranのプログラムで write(IUO,1) a(10) write(IUO,1) b(10) write(IUO,1) c(10) 1 format(1p,1f10.4) と書かれていると、ファイルIUO内に、 formatから1行でa(10),b(10),c(10)の値が連続して出力されます。 a(1) b(1) c(1) a(2) b(2) c(2) ........ ........ ........ a(10) b(10) c(10) のようにa,b,cの値を各列ごとに出力させたい時はformatをどのように書けばよいのでしょうか? 詳しい方がいらっしゃったら教えて下さい。 よろしくお願いします。

  • 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 また,諸事情により配列は使用しません. プログラムをどのように改良すればよいのでしょうか.教えてください.

  • linux RedHatでC言語

    整数、単精度(float)、倍精度(double)の変数変換、各種書式付出力について教えてください。 また、よろしければ、40桁の整数、有効数字20桁の実数、小数点以下15桁の実数を表示する方法について教えてください。 本当にC言語の初歩だとは思いますが教えてください。

  • fortranでのcsvファイルを出力する方法

    fortranでコンマ切りテキストファイル(CSVファイル)を 出力する方法をご存知の方、いらっしゃいませんでしょうか? 私が使用した処理系(intel fortran 8.0 for Windows)で write(600,*)1.4,',',2.33,',',30.11 というコードを実行させると fort.600 というファイル名のテキストファイルが生成されて 中身は ___1.400000_____,___2.330000_____,___30.11000____ となります。( _ は半角空白を意味します。) 私が欲しいのは余計な空白の入っていない 1.4,2.33,3.11 または 1.400000,2.330000,30.11000 という出力なのですが、どのような書式指定をすれば これが可能なのでしょうか? 全くのfortran初心者です。よろしくご教示ください。

  • fortranのtxtファイル出力書式について

    こんにちは。 fortranのtxtファイル出力について質問させていただきます。 下記のようなコードでtxtファイルに計算結果を出力させています。(途中省略) open(20, file ='outputx1.txt') do ax1 = 1, m do ax2 = 1, l if (sum2(ax1, 1, ax2) == 1) then write(20,*) ax1, ax2 endif enddo enddo close(20) ここでm=103,l=300です。 このコードで出力すると、結果は以下のようになります。      9    293      9    294      9    295      10     97      10     98      10     99 しかし、以下のようにtxtファイルを出力したいと考えています。 9 164 9 165 9 166 10 151 10 152 10 153 *の部分を色々といじってみたのですが、うまいやり方が見つかりません。 説明不足とは思いますが、アドバイスよろしくお願いします。

  • 配列のファイル出力について

    fortranでできるファイルへの配列の出力をC言語でどのようにプログラムするか教えて頂きたいと思います。 2次元配列a(i,j)の出力はfortranでは以下のようなプログラムになります。 open(10,.省略...) ファイルを指定して開く do j=1,ny                ループj   write(10,'(100f10.3)') (a(i,j),i=1,nx) ループi+書き出し enddo                  ループjの最後尾  close(10)                ファイルを閉じる 100f10.3というのは小数点3桁の実数で10カラムで表現したものが100個並ぶという意味です。これと同じことをやるC言語プログラムを教えて頂きたいのですが。私の手元にある本にはやり方が載っていません。 C言語にはfortranのような数字のカラムを指定するようなフォーマットの調整などできるのでしょうか。よろしくお願いします。

  • fortran77教えてください

    fortran77の問題で次のプログラムの作成の仕方を教えてください 整数A,B,Cを読み込み、それを係数とする2次方程式Ax^2+Bx+C=0の解を計算して表示するプログラムを サブルーチン副プログラムを用いて作成せよ(複素数型を使うこと) メインプログラムでは整数A,B,Cの入力および解の出力および解の出力を行い解の計算はサブルーチン副プログラムで行うこと なお'keisan.txt'という名前のデータファイルに結果を出力するように 計算時は以下の3つの方程式を用いること x^2+3x+5=0 X^2+6x+4=0 x^2+x+1=0

  • fortranに関する質問です。

    fortranに関する質問です。 100個の整数データが並んでいるdate1.TXTとdata2.TXTがある。この二つのファイルを読み込んで、200個全てのデータを小さい順に並び替え、1行に10個ずつの整数を印字して画面上に出力しなさい。全データの和、平均値、最大値、最小値を求めて出力しなさい。 1、 データファイルはそれぞれ100個の数字が並んでおり、date1.TXTには3桁の数字が5個ずつ20行、data2.TXTは2桁の数字が10個ずつ10桁の型式できにゅうされている。 2、配列を用いる方法でプログラムを作ること。 以上の問題が全く理解できません。 出来れば、詳しく教えていただきたいです。

  • Fortranの出力の改行について

    Fortran超初心者です。 test1.csvのファイルには、x,yの変数がずっと続いています。 test2.datのファイルには、a,bの変数がずっと続いています。 この2つのファイルの変数を元に、d,eの値を求め、それをtest3.csvというファイルに出力したいのです。 test1.csvとtest2.datの計算はできていたのですが、test3.csvの出力は最後の計算結果のみしか出力されていません。 多分毎回出力はしているのですが、計算を繰り返すと上書きされ消えてしまうという仕組みになっているのだと思います。 どうやったら上書きされずに、csvファイルの次の行に次のデータを入力できますか? 以下私が考えたFortran90のプログラムです。 open (10, file='test1.csv', status='old')  do   read (10, *, iostat=ios) x, y   open (11, file='test2.dat', status='old')   do    read (11, *, iostat=jos) a, b    d = x +a    e = y + b    if (jos .lt. 0) exit   enddo   open (12, file='test3.csv', status='replace')   write (12, *) x, y, a, b, d, e   close (12)   close (11)   if (ios .lt. 0) exit  enddo close (10) 本当に始めたばかりで、いまいち意味の分かっていない部分もあるのですが、問題点を指摘してくれたら助かります。 わかりにくいので、具体的に少し書くと、 test1.csvには 1,2 9,3 6,4 とデータが続くとします。 test2.datには 80,50 10,20 90,60 とデータが続くとします。 test3.datには 1,2,80,50,81,52 1,2,10,20,11,22 1,2,90,60,91,62 9,3,80,50,89,53 9,3,10,20,19,23 9,3,90,20,99,23 6,4,80,60,86,64 6,4,10,20,16,24 6,4,90,20,96,24 と出力されるようにしたいのです。 実際のデータや変数名も違いますが、プログラムの構造は同じです。 よろしくおねがいします。

専門家に質問してみよう