• 締切済み

FORTRAN77の問題。

ある直径DPのデータがdiam.datという名前のファイルに保存されている。ファイル中にはDPの測定値が1行に1つ、12けた幅の実数値で書かれている。データの終わりを示すために、最終行には測定値の代わりに-1.0が書かれている。 DPのデータをファイルから読み込み、はいれつDPに格納するとともにデータ数を数える。 というプログラムを書いてください。お願いします。

みんなの回答

  • soaikats
  • ベストアンサー率58% (14/24)
回答No.3

1です。 次の3点について注意して、 ご自身のコードを見直してみてください。 ・DPは配列変数 ・rは配列でない変数 ・カウンタは配列にセットするとき+1する あと少しで完成のようです。 頑張ってください。

  • soaikats
  • ベストアンサー率58% (14/24)
回答No.2

* 読み込んだ値が-1.0になるまでファイルの値を読み続ける   OPEN(UNIT=1,FILE='diam.dat',STATUS='old') 10 READ(1,*)AAA   IF (AAA .NE. -1.0) THEN    (実行したい内容)    GO TO 10   ENDIF   CLOSE(UNIT=1) こんな感じになると思います。 蛇足ですが、READで配列に直接値をセットすると ファイル最終行の"-1.0"も読んでしまうため ・READで一時的に読み込む ・-1.0でなかったら配列にセット としたほうがいいですよ。

endless324
質問者

補足

ありがとうございます。自分なりに考えたのが次ですがどうでしょうか? program kdi third INTEGER I,N real DP,r open(1,file='diam.dat',status='old') N=0 10 N=N+1 read(1,*)r(N) if(r(N).ne.-1.0)then DP(N)=r(N) GO TO 10 ELSE ENDIF close(unit=1)

  • soaikats
  • ベストアンサー率58% (14/24)
回答No.1

大学の課題でしょうか? 丸投げでなく、 「こういうプログラムを組んでみたがうまく動かなかった」 という質問の方がレスがつきやすいですよ。

endless324
質問者

補足

そうですね。自分は10月から習った初心者ですが自分なりに考えて書いたところ program kdi third real DP(1:NMAX),DPMAX,DPMIN INTEGER I,N,NMAX parameter(NMAX=10000) open(1,file='diam.dat',status='old') do 10 I=1,NMAX read(*,*)DP(I) if(DP(I).ne.-1.0)then ここぐらいまで書いて-1があったらどうするのか分からずと待っています。

関連するQ&A

  • 粒度分布と粒径分布のヒストグラム(fortran77)

    ある相当数の粒子の直径DP[mm]のデータがdiam.datという名前のファイルに保存されている。 DPの最大値A、最小値B、平均値AV、標準偏差DV、測定データ数N lnDPの幾何平均値LAV、幾何標準偏差LDP ケース1:AV-DV≦DP<AV、ケース2:AV≦DP<AV+DV ケース3:LAV/LDV≦DP<LAV、ケース4:LAV≦DP<LAV×LDV の各範囲のDPをもつ粒子の個数の持つ割合(P1~P4としました) をfortran77プログラムで書きました。 粒度分布を0.5mm刻みのヒストグラムで表すのに必要な情報を計算し、 画面に表示する。 また粒径分布をヒストグラムで表してみよ。 というところで粒度分布と粒径分布の意味もわからず、どうやってやるかわかりません。 だれかご教授お願いします。

  • 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 という形です。 もっとスマートにかけないでしょうか?

  • ファイルへの格納について

    たとえば、12桁の数値データが何行にもわたって続いているとします。以下のように 259643258756 459831485628 123586486746   ・   ・   ・ このようなデータの上4桁と下4桁だけを取り出してファイルに各々格納し、必要な際にそれを取り出して利用するようなプログラムを作りたいときはどのようにすれば良いのでしょうか。解答をお願いします

  • fortranに関する質問です。

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

  • pythonでテキストの処理をしたいと考えています。

    pythonでテキストの処理をしたいと考えています。 複数のデータファイルがあって、どのファイルもデータ1列目、2列目はある決まった並びになっていて3列目だけランダムな値が入ります。 そこでファイルを読み込んで1列目、2列目は一度読み込んだものを別なファイルに書き出し、 それぞれのファイルの3行目を、その別ファイルに次々と加えていく様なプログラムを組みたいのですが、 どういう風に記述したら良いのか思案しています。 たとえば、一つ目のファイル(1.dat) 1 1 5.1 2 1 6.2 3 1 5.5 1 2 7.6 2 2 2.4 2つ目のファイル(2.dat) 1 1 2.5 2 1 3.2 3 1 4.6 1 2 8.0 2 2 1.1 3つ目のファイル(3.dat) 1 1 3.8 2 1 9.6 3 1 1.2 1 2 3.0 2 2 5.5 とあるときに、result.datというファイルに 1 1 5.1 2.5 3.8 2 1 6.2 3.2 9.6 3 1 5.5 4.6 1.2 1 2 7.6 8.0 3.0 2 2 2.4 1.1 5.5 という風に列をどんどんデータを追加していけるようなプログラムです。 アドバイスをどうかよろしくお願い致します。

  • ファイル入力

    1 20 2 30 3 95 4 52 5 90 3 Maximum  上記の様な入力ファイルinput.datのうち1~5行目のデータを表示するプログラムを作っています。  6行目は空白で、7行目は2列目の中で最大値をとる行の1列目の数値が入っています。  1列目の数値は最後の行を除いて重複することはありません。  入力データの行数はファイルによって最大20行まで変動します。列数は2列で固定です。  以下のプログラムのままでは6行目以降のデータも読み取ってしまい、出力がおかしくなってしまいます。  1~5行目のデータのみ出力するにはどうしたらよいでしょうか。  ご存知の方、お手数ですが教えてください。よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #define row 20 #define col 2 int main(){ int i,j,data[20][2]; FILE *fp; if((fp=fopen("input.dat","r"))==NULL){ fprintf(stderr,"Cannot open file input.dat\n"); exit(1); } for(i=0;i<row;i++){ for(j=0;j<col;j++){ fscanf(fp,"%d",&data[i][j]); printf("%d ",data[i][j]); } printf("\n"); } fclose(fp); return 0; }

  • 数値データの読み出しについて

    初歩的な質問かもしれませんが、よろしくお願いします。 下にあるようなdatファイルがあったとします。 これらのデータから例えば2列目のみを数値として読み出したい場合、どのようなプログラムを書けばよいのか教えていただけないでしょうか。 datファイルの中身 0 112 13 1 231 28 2 388 41 3 621 23 4 980 34 ・ ・  ・ ・ ・  ・ ・ ・  ・

  • Excel VBAで範囲選択後にソートしたい

    OS: Windows 2000 ソフトウェア名/バージョン:Excel2000 Excelマクロで以下のような処理をしたいのですが、どのように記述したらよいのでしょうか? マクロの記述例を教えてください。 (1)Excelの複数シート上にデータがA列とB列に以下のように並んでいる。  ※以下の例の場合、3行~6行はグループ01、8行~12行はグループ02、~ (2)グループ行単位の範囲指定を実行し、その中でB列のソートを実行したい。 (3)データ行の行数、グループの数はシートごとにばらばらで決まっていない。 (4)A列のデータ行は上4桁がブランク、グループ行は上2桁がブランクとなっている。 (5)B列には数値しか入っていない。 【行数】 【A列】     【B列】 (01行)  タイトル行1 (02行)  タイトル行2 (03行) △△△△データ01 数値(78979) (04行) △△△△データ02 数値(34533) (05行) △△△△データ03 数値(21423) (06行) △△△△データ04 数値(51343) (07行) △△グループ01 (08行) △△△△データ11 数値(43522) (09行) △△△△データ12 数値(23432) (10行) △△△△データ13 数値(42312) (11行) △△△△データ14 数値(24123) (12行) △△△△データ15 数値(54343) (13行) △△グループ02 (14行) △△△△データ21 数値(64353) (15行) △△△△データ22 数値(42343) ~ ◆上記の例でやりたいこと: 1:データ行の最初の行(03行)から最初のグループ行を探してその1行前(06行)までを範囲指定してB列の数値でソート 2:最初のグループ行の次の行(08行)から次のグループ行を探してその1行前(12行)までを範囲指定してB列の数値でソート 3:2のグループの次の行(14行)から~以下、データの最終行まで処理する。 以上、よろしくお願いします。

  • プログラミングの問題です。

    下記のプログラムのソースが全くわかりません。 しっかりとした回答お願いします!結構至急なのでよろしくお願いします。 (ア) 身体測定データ保存処理:学籍番号、氏名、身長、体重を表す変数は全て文字列(char[])型とし、これをカンマ区切りで連結し一つの文字列を生成する。これを身体測定データファイル body.txt に追記する。これを、学籍番号L00000が入力されるまで繰り返す。 (イ) 身体測定データ検索処理:身体測定データファイル body.txtを開き、一行ずつ文字列に読み込む。文字列の先頭から最初のカンマが現れるまでの部分文字列が入力された学籍番号と一致するか否かを判定する。一致する場合はファイルから読み取った行をそのまま表示した上でプログラムを終了させ、一致しない場合には次の行を読み込む。これを EOF(ファイル終了)に到達するまで繰り返す。

  • Visual C++を 用いたテキストファイル読み込み(応用)

    Microsoft Visual C++ 2008 Express Editionを使っています。 テキストファイルは 約5000行×6列の数値(のみ)になっております。(列間にスペースあり) いくつかある5000×6行テキストファイルの中から、ファイル名を入力することで任意のテキストファイルにアクセスし、さらに6列のデータをそれぞれ別の配列に格納するコンソールプログラムを考えていますが行き詰まっています。例えば、1列目を配列1、2列目を配列2、・・・といった具合です。 詳しい方、どうかよろしくお願いいたします。