1 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 09:55:26 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 FORTRAN使いが優しくコメントを返しますが、 お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。 ●注意事項 ・質問する前にGoogle等の検索サイトで検索しましょう。 ・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。 ・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。 ●前スレ くだすれFORTRAN(超初心者用) pc8.2ch.net/test/read.cgi/tech/1138063703/ くだすれFORTRAN(超初心者用)その2 pc11.2ch.net/test/read.cgi/tech/1164121236/ ●関連スレ FORTRAN W pc8.2ch.net/test/read.cgi/tech/1163319215/
396 名前:392 mailto:sage [2008/06/23(月) 20:54:35 ] 上の人は別人です まだFORTRAN77を触り始めて間が無いので表示するプログラムが限界です 勉強のためにコメントをつけてくだされば嬉しいです って言いたいと思う
397 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:17:09 ] >>396 本質的には >>395 と言っている事が一緒だね。 さらに解説ヨロってのも凄いが。
398 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:36:47 ] まぁとりあえず、作ってみようぜ
399 名前:デフォルトの名無しさん [2008/06/23(月) 23:13:44 ] 学校の課題なんだから必要な構文の説明あるだろ 初心者じゃなくて怠け者だろ
400 名前:デフォルトの名無しさん [2008/06/24(火) 02:33:14 ] この問題がわかりません↓ 0.0 から 1.0 までの 10 個の値、 0.12, 0.32, 0.09, 0.83, 0.58, 0.39, 0.72, 0.44, 0.71, 0.24 を使って、起点 0.0、幅 0.2 としたときの頻度分布 を求めるプログラムを作成せよ。 結果はこのように表示されるようです。 s < 0.2 2 0.2 <= s < 0.4 3 0.4 <= s < 0.6 2 0.6 <= s < 0.8 2 0.8 <= s 1 if文を使うのはわかるのですが、頻度分布をどう求めていいのかわかりません。 fortran77です。 どうかよろしくお願いします。
401 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 09:21:12 ] >>396 初心者には、入出力まわりが一番難しいのだが。
402 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 10:36:12 ] >>400 PROGRAM HIST INTEGER NUM(5) REAL S(10) DATA S / 0.12, 0.32, 0.09, 0.83, 0.58, $ 0.39, 0.72, 0.44, 0.71, 0.24 / DO 10 I = 1, 5 NUM(I) = 0 10 CONTINUE C DO 20 I = 1, 10 IF (S(I) .LT. 0.0) THEN WRITE(*, *) 'INPUT ERROR!' STOP ELSE IF (S(I) .LT. 0.2) THEN NUM(1) = NUM(1) + 1 ELSE IF (S(I) .LT. 0.4) THEN NUM(2) = NUM(2) + 1 ELSE IF (S(I) .LT. 0.6) THEN NUM(3) = NUM(3) + 1 ELSE IF (S(I) .LT. 0.8) THEN NUM(4) = NUM(4) + 1 ELSE IF (S(I) .LE. 1.0) THEN NUM(5) = NUM(5) + 1 ELSE WRITE(*, *) 'INPUT ERROR!' STOP END IF 20 CONTINUE C
403 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 10:36:47 ] WRITE(*, *) 's < 0.2 ', NUM(1) WRITE(*, *) '0.2 <= s < 0.4 ', NUM(2) WRITE(*, *) '0.2 <= s < 0.4 ', NUM(3) WRITE(*, *) '0.6 <= s < 0.8 ', NUM(4) WRITE(*, *) '0.8 <= s ', NUM(5) STOP END s < 0.2 2 0.2 <= s < 0.4 3 0.2 <= s < 0.4 2 0.6 <= s < 0.8 2 0.8 <= s 1 Press any key to continue . . .
404 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 11:20:33 ] >>392 あまりチェックしてない。 曜日求め部分をよく練っていない。 うるう年対応してしまったw 今年限定ならデータいじればよし。 FUNCTION ILEAP(IY) ILEAP = 0 IF (MOD(IY, 4) .EQ. 0) ILEAP = 1 IF (MOD(IY, 100) .EQ. 0) ILEAP = 0 IF (MOD(IY, 400) .EQ. 0) ILEAP = 1 RETURN END C FUNCTION IDAYS(IY, IM, ID) INTEGER MDAYS(12) DATA NFEB /28/ DATA MDAYS /31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31/ MDAYS(2) = NFEB + ILEAP(IY) IDAYS = ID DO 10 I = 1, IM - 1 IDAYS = IDAYS + MDAYS(I) 10 CONTINUE RETURN END C
405 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 11:23:50 ] PROGRAM CALEND 1 WRITE(*, *) 'TODAY' READ(*, *) IM0, ID0, IDW0 IF (IM0 .LE. 0) STOP 'NORMAL END' WRITE(*, *) 'WHEN' READ(*, *) IM1, ID1 IDAYS0 = IDAYS(2008, IM0, ID0) IDAYS1 = IDAYS(2008, IM1, ID1) IDIFF = IDAYS1 - IDAYS0 IDW = MOD(IDIFF, 7) + 7 + IDW0 - 1 IDW = MOD(IDW, 7) + 1 WRITE(*, *) IDIFF, 'DAYS', IDW, 'YOU' GOTO 1 STOP END TODAY 6 23 2 WHEN 1 1 -174 DAYS 3 YOU TODAY 6 23 2 WHEN 12 31 191 DAYS 4 YOU TODAY 0 0 0 NORMAL END Press any key to continue . . .
406 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:03:44 ] >>404 乙 「各月の日数はファイルから読み込む」となっているね。 最近みかける宿題の出題者は、 無駄にファイル処理をさせようとしていない?
407 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:09:14 ] >>406 問題よく読んでなかったw 後で直す。
408 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:48:19 ] >>402 ありがとうございました!! NUMを使うんですね。 解決できました。感謝です。
409 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 15:03:32 ] >>408 > NUMを使うんですね。 ピントがずれてないか? 優しい人たち乙。 私なら「宿題は自分でやれ」で放置だな。
410 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 15:47:09 ] >>409 初心者はピントがずれているもんだよ orz
411 名前:デフォルトの名無しさん [2008/06/24(火) 20:20:12 ] 入力データ: test.datの中身 0,10,100,a,b,500, プログラムソース character dmm(10)*10 open(10,file='test.dat',status='old') read(10,*) (dmm(i),i=1,6) do i=1,6 write(*,*) dmm(i) end do stop end 出力結果 0 10 100 a b 500 compaq visual fortran 6.0では たとえば入力データの"b"->"*"に変更した場合のように 文字列にアスタリスクが入っている場合、エラーで落ちてしまいます。 cygwinのg77では問題なく表示されました。 コンパイラによって読めない文字列ってあるのでしょうか?
412 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:55:38 ] >>411 漏れのCVF6.6Cはbを*にしてもエラーでない。 単なるVer.6のバグでないか。 おぼろげな記憶ではVer.6→Ver.6.5は有料うpデートで、結構大きな変化があったはず。 Ver.6.0→Ver.6.1 と Ver.6.5→Ver.6.6は無料。
413 名前:407 >>392 mailto:sage [2008/06/25(水) 01:25:17 ] FUNCTION IDAYS(IM, ID, MDAYS) INTEGER MDAYS(12) IDAYS = ID DO 10 I = 1, IM - 1 IDAYS = IDAYS + MDAYS(I) 10 CONTINUE RETURN END C********************************************* FUNCTION IDW(IDIFF, IDW0) K = MOD(IDIFF + IDW0, 7) + 7 - 1 IDW = MOD(K, 7) + 1 RETURN END C********************************************* PROGRAM CALEND INTEGER MDAYS(12) OPEN(9, FILE = 'month.dat') READ(9, *) (MDAYS(I), I = 1, 12) C 1 WRITE(*, *) 'TODAY' READ(*, *) IM0, ID0, IDW0 IF (IM0 .LE. 0) STOP 'NORMAL END' WRITE(*, *) 'WHEN' READ(*, *) IM1, ID1 IDAYS0 = IDAYS(IM0, ID0, MDAYS) IDAYS1 = IDAYS(IM1, ID1, MDAYS) IDIFF = IDAYS1 - IDAYS0 WRITE(*, *) IDIFF, 'DAYS', IDW(IDIFF, IDW0), 'YOU' GOTO 1 STOP END
414 名前:407 >>392 mailto:sage [2008/06/25(水) 01:36:07 ] month.dat 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 >>406 今回は、うるう年を外部データとして与えようという親心なのかもしれない。 >>396 プログラムの解説 FUNCTION IDAYS(IM, ID, MDAYS) 一月一日から特定の月日までの日数を計算する。 FUNCTION IDW(IDIFF, IDW0) 今日からの日数差と今日の曜日から、その日数差の日の曜日を求める。 この計算式は、考えるのが面倒なのでちょっと複雑。 もう少しシンプルな書き方があるかもしれない。 FORTAN77のMOD関数は負数を引数とすると、負の数を返すので+7とかが必要。 Fortran90ならMODULO関数というのが新設されていて便利。 だがいずれにせよ7で割り切れるときは0を返すので、1〜7にするために-1/+1の 人工的な操作をした。自分で決める曜日を0〜6にすれば話はもっと楽になる。 PROGRAM CALEND まず各月の日数をファイルから読み込む。 今年はうるう年なので、うるう年の日数データを用意した。 あとは、I/Oの後、上で用意した関数を使ってやればいい。 ここでループから抜けるために、今日の月が0以下の数の場合終了するようにした。
415 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 10:25:23 ] >>414 詳しい説明ありがとうございました。
416 名前:411 mailto:sage [2008/06/25(水) 13:24:19 ] >>412 Ver.6.0から6.1へアップデートしてみました。 今度は*のデータの後にブランクが入るようになりました。 つまり、>>411 の入力データでaを*にすると、 * b と表示されて、500のデータは読めていない。 おっしゃる通り、Ver.6.0とか6.1固有のバグなのかもしれません。 こういうデータ処理には使うなってことでしょうか。 ありがとうございました
417 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 02:19:25 ] >>416 俺の予感では、 read(10,*) (dmm(i),i=1,6) をフォーマットつけて read(10,’(A)') にすればおkな気がする。根拠は宇宙からのメッセージ!w
418 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 14:08:07 ] FortranってCの/*〜*/みたいな範囲コメントってできないんでしょうか?
419 名前:411 mailto:sage [2008/06/26(木) 14:16:04 ] >>417 そんなこと・・・あるかもなって思って試してみたけど、 だめだわ。エラーで落ちる。 cygwinのg77でもダメ。 その宇宙からのメッセージ、あんまあてに出来んぞ ま気持ちだけは嬉しかったわ。ありがとな(´・ω・`)
420 名前:デフォルトの名無しさん [2008/06/27(金) 00:29:58 ] >>418 fortranは、第1行目に「c」或いは「*」を入れるか、 「!」の後がコメントになる その他のコメントは聞いたことないし見たことない f90以降にそんなフォーマットがあるのかもしれんけど、おれは見たことない
421 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 01:31:33 ] >>418 Fortranは行を基本単位とする言語なので、行毎に指示をするのが自然な形だ。 CやPascalのように、行が意味を持たない代わりに終端符号などをいちいち付ける言語とは 根源的な思想の違いがある。 しかしプリプロセッサを使えば実は範囲コメントも実現出来る。 ただ、プリプロセッサは本来の規格の外にあるので処理系依存の機能になる。 自分の処理系のFortranマニュアルでfppとかを調べてみるべし。 良いニュースとしては将来Fortran2008で、プリプロセッサが規格に入ることになっているので、 それまで、待つという手もある。 10年くらい待つことになると思うがwwwwwww
422 名前:418 mailto:sage [2008/06/27(金) 10:29:44 ] >>420 ,421 ありがとうございます。 行をまとめてズバッとコメントアウトしたいときとか不便だなぁと感じるのですが、仕様上諦めるしかないんですね・・・ 世の中のコンパイラがFortran2008に対応するのいつごろだろう 2003だってまだ新しい感じですよね
423 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 12:39:40 ] >>422 え、それこそ1文字目にCや*を入れるだけでしょ。1行の前半分をコメントにするのは難しいけど。 まさか、エディタでしこしこ100行くらいの1文字目にC入れるのがしんどいとかだったら言語の問題じゃなくて あんたの未熟さの問題だけど。
424 名前:418 mailto:sage [2008/06/27(金) 17:39:39 ] >>423 確かに私は未熟者ですが・・・。 手動でしこしこやらずに、そういうことをサクッと一発でやる方法ってないですかね? viでしこしこ書いてるんですが、sedなどの外部コマンド呼ぶのもアレだし emacsや他のIDEならそういう便利機能ってあるんでしょうか?
425 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 18:00:20 ] 例えばVisual Studio + Intel Fortranの場合、 Shift押しながら複数行選択し、コメントアウトボタンを押せば行頭に!つくよ。
426 名前:418 mailto:sage [2008/06/27(金) 18:14:37 ] >>425 ありがとうございます。VSはさすがに便利ですね。 今の開発環境は、単に端末からサーバに入ってvi、なんですが Windowsに移行しちゃおうかしら
427 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 19:47:11 ] do while文は最適化を妨げるから使うなって聞いたのですが、本当ですか?便利なので使いまくってますが。
428 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:03:57 ] >>426 viなら置換コマンドを使え。 10行目から20行目までの先頭に ! を挿入 :10,20s/^/!/ 30行目から40行目までの先頭の ! を削除 :30,40s/^!// 行頭の ! をすべて削除 :%s/^!//
429 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:05:25 ] >>426 emacs では C-c ; でリージョンをコメントアウトできる
430 名前:418 mailto:sage [2008/06/27(金) 23:37:45 ] >>428 ,429 ありがとうございます。勉強になりました。
431 名前:デフォルトの名無しさん [2008/06/28(土) 08:28:25 ] >>418 コメントアウトしたいブロックを「#if 0」〜「#endif」で挟む。 UNIX系OS上の処理系なら、ソースファイルの拡張子を「.F」に、 Fortran90なら「.F90」にしておけば、コンパイル時に 自動でプリプロセッサを通してくれるはず。
432 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 16:58:39 ] Fortran90のサフィックスは普通.f90ですが、2003や2008だとどうなるんですか?.f03や.f08?
433 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 20:15:58 ] >>432 サフィックスは固定形式と自由形式の違いの認識じゃない? f90 以降は、.f90だと思う。
434 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 09:47:29 ] >>433 そうでしたね・・・お恥ずかしい質問失礼しました。
435 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 17:34:50 ] Fortran90以降の(自由形式の)ソースファイルとして認識されるファイルの拡張子は処理系によって .f90, .f95, .f2k, .f03, .f08 などがある。 固定形式の方は .f, .for, .ftn などがある。
436 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 11:41:15 ] www.uploda.org/uporg1533847.f.html このファイルなんだけど、 stv=c1*cos(t)-(0.5d0)*(exp(-c*t/2.0d0)*(c*cos(t*e1)-(e)*sin(t*e1) の部分で絶対にエラーを吐かれます 何がいけないのかまったくわからないのですが文字数制限とかでしょうか?
437 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 11:46:53 ] 事故解決しました
438 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 20:28:27 ] nはサブルーチンの引数で0<n<100の整数とします。 GOTO n 1 CALL hogehoge01(...) GOTO 999 2 CALL hogehoge02(...) GOTO 999 ... 99 CALL hogehoge99(...) 999 PRINT *, '終わり' みたいな事がやりたのですがコンパイルエラーになります。 現在は IF THEN FLSE で場合分けしているのですが分岐の数が多くて あまりスマートではありません。何か上手い方法は無いでしょうか?
439 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 21:23:35 ] >>438 使っている言語を詳しく
440 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:31:01 ] >>439 Intel Fortran Compiler 10.1 です
441 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:36:14 ] すいません、言語でしたね。Fortran 90 を使っています。 Fortran 95 で Intel Compiler がサポートしている機能なら使っても問題ないです。
442 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 14:38:07 ] >>438 割り当てGOTO文の行き先はASSIGN文で与えないといけない。ただし、常数じゃないと駄目だったはず。 GOTO n, (1, 2, 3, 4, ....) と書く方法もあるが。 まぁFortran90だったら、素直に SELECT CASE にしとけ。 今時Fortran66時代の割り当てGOTOを持ち出し、しかもIF-THEN-ELSEより割り当てGOTOを スマートだと感じ、エラーメッセージを貼らないで質問し、 おまけにhogehogeなどというUnix界隈の嫌な語を使うwwww はっきり言えば、チミはセンスがズレてるから、ちゃんとFortran90以降を基礎から習え。
443 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 10:03:56 ] 昔のFORTRANって引数に渡した定数をサブルーチン側で変更すると 呼び出し側にも影響が出たって本当ですか? function(1, 2) とかで呼んだ場合定数の1と2が入れ替わるみたいな話を耳にしたのですが。
444 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 17:17:05 ] フォートラン90なんですが、途中結果をターミナルに出力させた後に pause 文を入れて、出力結果を確認してリターンキーを押さないと プログラムが再開しないようにしてあります。 これを、リターンキーを押さなくても、ある程度の時間(10秒とか)が 経つと勝手に再開するようには出来ないのでしょうか。。
445 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 19:30:07 ] >>444 OS とコンパイラは何?
446 名前:444 mailto:sage [2008/07/24(木) 20:38:42 ] WinXpのcygwinで g95でコンパイルしてます
447 名前:デフォルトの名無しさん [2008/07/24(木) 21:40:55 ] fortranを使って双子素数(連続した奇数が素数になっているものの組)を出力する課題に取り組んでいるんですが 完全にお手上げ状態です。 一応素数の出力はできてるみたいなんですが・・・ *素数の出力 INTEGER n,i,k * READ(5,*) n i=2 WRITE(6,*) i * DO 10 i=3,n,2 k=3 30 IF (k**2 .GT. i) GOTO 20 IF (mod(i,k) .EQ. 0) GOTO 10 k=k+2 GOTO 30 20 WRITE(6,*) i 10 CONTINUE * STOP END こんな感じです。 違う方法でやったほうがいいんでしょうか…
448 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 22:46:10 ] 解読できんw
449 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 23:05:23 ] >>446 CALL SLEEP(10) ! 10秒間待つ >>447 そのプログラムを修正するのなら、 ・調べた奇数が素数だったのか素数で無かったのかを記録する変数を用意して 「DO 10 i=…」 のループで毎回結果を記録しておく。 ・素数が見つかったら上記の変数を調べて、1つ前の奇数も素数だった場合は 両方の値を出力する。
450 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 23:34:50 ] >>443 その通り。ただ定数を直接書くのではなくパラメータ指定した定数を書かないと はっきり分からんだろう。これはサブルーチンの引数が参照渡しなので起こりうる。 SUBROUTINE sub_test(a, b) IMPLICIT NONE REAL, INTENT(IN OUT) :: a, b REAL :: tmp tmp = a a = b b = tmp RETURN END SUBROUTINE sub_test !=========================================== PROGRAM test IMPLICIT NONE REAL, PARAMETER :: a = 1.0, b = 2.0 EXTERNAL :: sub_test PRINT *, 'a=', a, ' b=', b CALL sub_test(a, b) PRINT *, 'a=', a, ' b=', b STOP END PROGRAM test Fujitsu-Lahey Fortran95 実行結果 (Intel Fortran は実行時エラー) a= 1.00000000 b= 2.00000000 a= 2.00000000 b= 1.00000000 Program Completed Press Enter to Continue. >>444 過去レス>>326 と重複している。その回答を読め。
451 名前:デフォルトの名無しさん [2008/07/25(金) 00:13:07 ] >>449 本当に申し訳ないのですが素数だったか素数じゃなかったかを判別するプログラムが作れません… まるなげになってしまって申し訳ないですが具体的にどうなるか教えていただけないでしょうか? (面倒だったり自分でやれとおっしゃるならいいですが)
452 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 09:09:52 ] 449 ではないが。 素数を画面に書かせることはできてるわけでしょ? それなら (1)素数を画面に書くかわりに、適当な変数たとえば prime_prev に代入 (2)あらたに素数を見つける。その素数と prime_prev との差を調べる (3)差が2なら双子素数。2でないなら、(2)で見つけた素数を prime_prev に代入して ふたたびステップ2へ。 でいいんじゃね?
453 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 11:54:47 ] 普通素数はエラトステネスのふるいをつかって求めるから、 その表で連続している奇数を捜せば良いのではないかい?
454 名前:名無し [2008/07/28(月) 17:48:07 ] FORTRAN77を用いてモンテカルロシミュレーションのプログラムを作成しようと思っています。 しかしFORTRAN77を用いたプログラミング自体始めたばかりであり、プログラムの作成方法についてピンときません。 もしよかったならどのようにしてプログラムを作ればよいのか教えてもらえませんか? 大まか過ぎる質問ではありますが・・・。
455 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:27:16 ] その質問だと回答してくれる人少ないんじゃない? まず 1. 計算機にやらす内容を手作業でできるかどうか(時間は別として) ここでつまづくならFortranの問題じゃなく、 モンテカルロって何? 何を入力して、何を出力するの? などがわかってないのでちょっと別問題。 1.をクリアしてるなら、次に 2. その処理をコーディングしていくと、どこでつまづくのか を考えよう。 その部分が明確になっているなら、このスレッドの方は回答くださるかと思います。 大まかな質問なので大まかな回答しかできないけど RANDOM_NUMBERやRANDとかいった乱数発生関数があるのでこれを利用することになるんだと思うよ。 ちなみにどんな関数があるかはコンパイラに依存するので・・。
456 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:57:35 ] >>454 分子シミュレーション講座1 モンテカルロ・シミュレーション ISBN978-4-254-12691-4、神山新一・佐藤明、朝倉書店 付録 7.7 基本的なFORTRANの計算プログラム集 図書館で借りろ。
457 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 00:49:18 ] >>454 FORTRANでプログラム出来るとはありがたいこと。 まず天皇陛下に感謝をささげよ。 次に先輩から下敷きになるプログラムを貰うこと。 これで将来の運命が決まる。 筋の悪いウンコプログラムを貰ったらもうアウトw 筋が良くても長大な完成版を貰ったらやはりアウトww 筋が良くて簡素で、自分で拡張してゆける物を貰えたら、おのずから上達して成功する。 つまり、すべては運なので神に祈れw
458 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 03:21:57 ] >>457 課題がモンテカルロだしw
459 名前:デフォルトの名無しさん [2008/07/29(火) 18:11:23 ] サブルーチンの練習ということで以下のようなプログラムを作ったのですがコンパイル時にエラーになってしまいます。 もしよろしければどこがだめなのかご教授ください。改行が多いと怒られたので2レス使います。 PROGRAM ENSHUU6_4 IMPLICIT NONE INTEGER :: I,A INTERFACE SUBROUTINE PHIBO(i,result) IMPLICIT NONE INTEGER,INTENT(IN) :: i INTEGER,INTENT(OUT) :: result END SUBROUTINE PHIBO END INTERFACE WRITE(*,*) ' I= ' READ(*,*) I CALL PHIBO(i,result) WRITE(*,*) ' result= ',result STOP END
460 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:12:22 ] SUBROUTINE PHIBO IMPLICIT NONE INTEGER,INTENT(IN) :: i INTEGER,INTENT(OUT) :: result INTEGER, DIMENSION(0:100) :: A INTEGER :: N A(0)=1 A(1)=1 DO N=1,i A(N+1)=A(N)+A(N-1) END DO result=A(i) RETURN END SOUROUTINE PHIBO sage忘れました・・・申し訳ない
461 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:29:02 ] >>459 >>460 ・IMPLICIT NONEがあるのに宣言されていない変数が使われている ・サブルーチンの宣言に仮引数がない ・綴りの間違い 何行目に間違いがあるのかはエラーメッセージに示されているはずなので それを参照して自分で探すこと。
462 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 01:04:09 ] >>461 ありがとうございます
463 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 12:14:25 ] >>462 エラーメッセージをコピペしてもらえると、回答はすごく楽になる。
464 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 15:27:02 ] >>463 In file ttt.f90:16 CALL PHIBO(i,result) Error: Symbol 'r' at (1) has no IMPLICIT type とだけ表示されます。 >>461 の宣言されていない変数がなんなのかと綴りがどこが間違っているか発見できません。
465 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 15:30:31 ] 間違えました >Error: Symbol 'r' at (1) has no IMPLICIT type ではなく Error: Symbol 'result' at (1) has no IMPLICIT type です
466 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 16:07:50 ] >>464-465 です 解決しました。ありがとうございました!! また質問に来た時はよろしくお願いします。
467 名前:デフォルトの名無しさん [2008/07/30(水) 20:58:51 ] >>454-458 アドバイスありがとうございました。 説明不足でしたので少し補足をしておきます。 モンテカルロシミュレーションを用いたタンパク質と低分子の結合実験を行えるプログラム(使用言語:FORTRAN77)を作ろうと考えています。 ここでのモンテカルロシミュレーションはタンパク質上の各部分に乱数とよばれる数をふりわけて、確率的な試行(低分子をタンパク質に結合させる操作)を何回も繰り返すことを意味します。 これによってタンパク質上での低分子の結合しやすい部分を見つけ出そうと考えています。 しかしプログラミングを本格的に始めて間もないということもあり、プログラムを作るための糸口がいま一つ見つかりません。 (例えばタンパク質上の各部分での乱数のふりかた、パソコンによる操作でタンパク質と低分子を結合できるようなプログラムの書き方) 話がまた戻りますが、プログラム完成にいたるまでの手順、方法等についてのアドバイスを頂けませんか?
468 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 23:34:14 ] > 例えばタンパク質上の各部分での乱数のふりかた 乱数はRANDOM_NUMBER関数で0<=x<1の値を発生させることができる。 発生させたい数字が5〜10なのなら、 発生させたい数字 = 5.0 + x * 5.0 になる。 > パソコンによる操作でタンパク質と低分子を結合できるようなプログラムの書き方 パソコンではどうあがいても分子結合はできません。 揚げ足を取りましたが、シミュレーション方法は先生に聞くべき。 ここではそのシミュレーション方法をプログラミングに反映させる方法を聞いてください。
469 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 08:07:51 ] fortran77 だと RANDOM_NUMBER 関数は使えないらしいぞ www.geocities.jp/eyeofeconomyandhealth/homepage/kumikomi3.html しかし >>467 は fortran90 か 95 を使わない理由はあるの? 77より便利だよ。
470 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 09:10:48 ] >>467 この質問内容を見る限り、自分で一から作るのは無理っぽいので、 下敷きになるプログラムをどこかから手に入れることだ。 論文読めばプログラム名があって、ググレば出るだろ。 今はそれどころではないと思うが、真面目な計算に入る前に、乱数も自前のを用意したほうがいい。 というか本来は擬似乱数の評価からはじめないと、叩きまくられる。 乱数マニアがいてうるさいw スパコンのたぐいならハードウェア実装の乱数とかもあるが。
471 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 18:52:31 ] モンテカルロで使う乱数はメルセンヌツイスターでいいだろ。 fortran のコードも公開されてるから、ググってダウンロードして、出力される数列を 自分でチェック。
472 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 19:04:40 ] くだらない質問ですが closeしたファイルに書き加えるってどうやるのでしょうか?
473 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:56:17 ] >>472 もう一度openする。そのときにposition='append'で書き込み位置を指定する。 そうするとwriteで書き込みしたときにファイルの最後に書き足される。
474 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 21:06:56 ] FORTRAN90と95のgnu版が欲しいな
475 名前:472 mailto:sage [2008/08/14(木) 22:12:29 ] >>473 ありがと〜
476 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 22:18:44 ] フリーのFORTRAN95なら www.silverfrost.com/11/ftn95/ftn95_fortran_95_for_windows.asp
477 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 22:33:19 ] >>474 gfortran
478 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 22:40:42 ] gfortranのwin32版はないみたいだ
479 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 22:43:31 ] >>478 あるよ gcc.gnu.org/wiki/GFortranBinaries
480 名前:デフォルトの名無しさん [2008/08/22(金) 14:34:23 ] 以下のコードは、配列を受け取る手続きcallbackを別の手続きforward に渡すコードです。forwardでは、callbackに対応する仮手続きの引用 仕様で、この配列が1開始添え字(つまりデフォルト)としているが、 callbackでは、0開始添え字になっています。 このような「添え字のずらし」は合法のはずですが、これをコンパイル すると、g95ではOK、intel fortranではコンパイルエラーとなります。 質問は、これがintel fortranの方言によるものなのか、規格上の根拠 があるのか、どちらなのかということです。
481 名前:デフォルトの名無しさん [2008/08/22(金) 14:36:14 ] module dummyproc contains subroutine callback(x) real(8), dimension(0:) :: x end subroutine subroutine forward(cb,x) interface subroutine cb(x) real(8), dimension(:) :: x end subroutine end interface real(8), dimension(:) :: x call cb(x) end subroutine end module use dummyproc real(8), dimension(5) :: x x = (/1d0, 2d0, 3d0, 4d0, 5d0/) call forward(callback, x) end
482 名前:デフォルトの名無しさん [2008/08/23(土) 00:28:50 ] >>480-481 >>481 でエラーが出るのはインターフェースが矛盾しているからだろう。 real(8), dimension(0:) :: x こうすればコンパイラを通る。 ただ、0から始まる配列の引き渡しで様々な問題が起こるのは事実。 規格書をよく読んでいないから断言できないが、元々多分曖昧な点があるんだろうと思う。 処理系によって動作が違う。 また、部分配列を送る時に微妙な問題がある。 たとえば、 REAL :: x(0:100) の全体を、サブルーチンに送る時に、 1.CALL sub(x) 2.CALL sub(x(:)) と送ると、ソース上の意味では同じことだが、大概の処理系では2.の時のように 部分配列の指定子がつくと、いったん暗黙にアロケートされたテンポラリ配列に コピーして送るために、サブルーチン側で LBOUND(x) を書かせてみると 1.の場合は配列が0から始まると認識するのに、2.の場合は配列が1から始まると みなしていたりする。 さらにややこしいことに、最近 Intel Fortran は、引数として x(:) を渡すときは、 テンポラリを作らずに x の番地をそのまま渡すようにしたらしい事で、時と場合と処理系に 依存して何が起こるか分からん気分だったりする。 まぁFortranの自然数は1から始まるのでしょうがない。 0から配列を始める奴が悪いwwwというのが、俺が昔同じような問題で悩んだときの結論だw
483 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:12:11 ] すみません、教えて下さい。 fortran77で、プログラム途中に print *, A みたいに Aを出力させるとさせないのとでは 最後の結果(計算にAの値を使う)が異なってしまいます。 (printを入れると正しい値、入れないと NaN) 出来ればprint無しで動かしたいのですが、これって何が悪いのでしょうか? WinXp-Cygwin、g77でコンパイルしています。
484 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 04:53:09 ] >>483 書いたプログラム晒せや。
485 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 21:26:44 ] デバッグ文入れたときにのみ結果が違うってのは、 大抵の場合、配列破壊が起きてる。 サブルーチンの引数渡しをチェック、宣言文チェック等すべし。 ちなみにprint文周辺だけ見てもわからない場合が多いよ。 後は、晒すしかないね。
486 名前:483 mailto:sage [2008/08/26(火) 22:10:28 ] >>485 ありがとうございます。 ここで晒すには長すぎるので、なんとか地力で頑張ってみます
487 名前:デフォルトの名無しさん [2008/08/27(水) 01:06:04 ] >>486 PRINT文を入れて結果が変わるのは、最適化による場合もある。 最適化レベルを0にする、もしくはデバッグモードで実行してみるという手もある。 また>>485 で指摘された可能性を追求する場合には、サブスクリプト・チェックの オプションをつけてコンパイル・実行することにより容易に確認できる。
488 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 19:22:23 ] >>486 77なら暗黙の型宣言使ってるだろうから、その A がプログラムの実行順で、 どこに初めて現れるのかも確認すれ。初期化に失敗してるかもしれん。 どうしてもバクがみつからなかったら、90/95で書き直すべし。 固定形式と暗黙の型宣言の組み合わせは、バクの温床。
489 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 21:04:19 ] 新しく独学でFORTRAN勉強したいのですが、 77と90/95ではどちらがいいのでしょうか? 完全にプログラミング初心者です。
490 名前:486 mailto:sage [2008/08/27(水) 22:24:09 ] >>487-488 追加アドバイスどうも感謝です 参考になります!
491 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 01:01:36 ] 二次元配列とかで 行列の一部に数値を与えた場合 他の数値を与えられてないところの部分はどのように処理されるのでしょうか?
492 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 01:12:29 ] >>491 基本的に変数や配列の中身はゴミが入っていると思ったほうが良い。 0が入っていると思ってはいけない。 共同利用のコップと同じで洗ってから使えw
493 名前:491 mailto:sage [2008/08/28(木) 01:26:19 ] なるほど!ありがとうございます。
494 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 21:57:13 ] コンパイルは成功するのですが データを入力すると RUNTIME ERROR Error 29.Call to missing routine AAA といってエラーが出ます、これはどういう意味でしょうか??
495 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:22:31 ] >>494 副プログラムAAAが存在しないというエラーだが、普通はリンク時に存在しないと怒られる。 externalとかで引数にでもしてるのかな? もう少しコンパイラ等を詳しく。
496 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 19:20:51 ] >>489 しがらみのない自由の身なら、断然90/95。並列化など、将来性も多少はあるかもしれない。 一方77は、過去の遺産を引き継ぐはめになった人が、発狂しながら解読するもの。
497 名前:デフォルトの名無しさん [2008/09/01(月) 21:25:09 ] 今までfortran77を使っていたのですが、90や95を使いたくなり、g95をインストールしました。 それで実際に試してみたのですが、コンパイルが上手くいきません。 77を使っていた時はテキストエディタにfcpadを使っており、マウス操作でコンパイルしていましたが、 g95ではコマンドプロンプトでコンパイルするため、勝手がよく分からず困っています。 例えばhello.f90というファイルを作ってコンパイルするとき、 g95 hello.f90 -o a.exe とコマンドプロンプトで入力すると g95: hello.f90: No such file or directly となってしまいます。 こうなってしまうのは入力した内容がおかしいからでしょうか? ファイルの保存場所などにも関係があるのでしょうか? あまりに初歩的な内容で申し訳ないのですが、よければよろしくお願いします。
498 名前:デフォルトの名無しさん [2008/09/01(月) 22:40:26 ] >>497 >g95: hello.f90: No such file or directly hello.f90 が(g95から見て)見つからないのでコンパイルできません。 cd コマンドで hello.f90 が保存してあるディレクトリに移動してからコンパイルして下さい。 現在居るディレクトリ(カレントディレクトリ)は通常コマンドプロンプトのカーソルの左に C:\hage\> 等と表示されています。
499 名前:デフォルトの名無しさん [2008/09/02(火) 07:53:41 ] >>498 わかりやすい説明ありがとうございます。 申し訳ないですが、もう1つ質問してもいいですか? helloの拡張子がfだとコンパイルできるのですが、f90やf95に変えると g95: hello.f90: No such file or directly または g95: hello.f95: No such file or directly となってしまいます・・・。これはなぜでしょうか?
500 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 23:06:57 ] >>499 まずエクスプローラでファイル名及び拡張子が確実に「hello.f90」になっているかチェック。 エクスプローラは必ず「拡張子を表示する」設定にしておくこと。 メモ帳で編集している場合は「テキスト文書(*.txt)」で保存すると勝手に拡張子 .txt を付けられて 「hello.f90.txt」となっている場合がある。
501 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 11:22:12 ] うちの研究室の先輩からソースコードをもらったのだが・・・ COMMON文やGOTO文がそこらじゅうにあって解読するのが大変だ・・・。 個人的にはF90以降形式で書きたいけれど、ここに書き加えて大丈夫かな? >>499 windowsなら、g95の後にソースコードをドラッグ&ドロップか、 vistaならソースコードのアイコンを、shiftを押して右クリック、パスとしてコピーをして プロンプトにパスを貼り付けて実行してもダメ?
502 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:58:26 ] >>500 >>501 色々と試してみましたが、やはり上手くいきませんでした・・・。 もうちょっと試行錯誤してみます。 こんなくだらない質問に答えていただき、ありがとうございました!
503 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 01:22:52 ] Intel Fortran の次期バージョンベータテストが始まっている。 V.11が来年一月までの期限付きだが、無条件に配布されている。 Windows版はVisualStudio(Fortran 専用)つきで。 気になる人はチェキラ!w ここの右下に入り口あり。 ttp://www.intel.com/cd/software/products/asmo-na/eng/399359.htm めーる登録でライセンスキー送られてくる。 Fortran2003対応の模様。インストールにXP以降が必要。 仕事マシンWin2kの俺様涙目w
504 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 01:53:15 ] 配列について伺います。 以下のような配列を宣言することはできるのでしょうか? 1 2 3 a = 4 5 6 7 8 9 言葉にすると、「i成分ごとに異なる数のj成分が存在するような配列を宣言できるか?」 ということになります。 不要な成分に0を入れて(3,4)成分の配列をつくるのが素直なのかもしれませんが、メモリの関係でそのような配列の宣言ができませんでした。 #実際の問題設定は、三次元の多相流の計算です。 #計算領域がいくつかのゾーンに分かれており、 #それらの領域すべての物理量をひとつの配列で取り扱おうとしています。 #従って、座標3成分、相の種類1成分、物理量の種類1成分、ゾーン1成分 #の計6成分の配列を取り扱います。 #ゾーンの大きさがマチマチなので最大のものに合わせて配列を宣言すると #メモリが足りなくなってしまいます。
505 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 08:51:02 ] >>503 つかってみよっと
506 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:28:03 ] >>504 F90以降なら構造型を使う。 F77なら、確かEQUIVALENCEで部分配列に別名を付ければ、そのようなことが出来なくもなかったはず。 ただ、諦めて複数の配列変数に分割する方か、見通しがよくなるかもしれない。 F77では、まともにコーディングしたことない、つーか、したくないので、他に定石があるかもしれんが…
507 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 13:59:21 ] >>504 配列の持たせ方を変える方法はどうかな? 上記の例の場合、 実際にデータのあるa(9)に値を入れ、 参照配列b(3)にa中の各行の値の入る先頭番号を入れる。 b(1)=1,b(2)=4,b(3)=6 各行の先頭の値は例えば下記のように取り出す do i = 1, 3 print *, a(b(i)) enddo
508 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 15:07:44 ] 90なら ALLOCATALE で配列を宣言して、必要なだけそのときに ALLOCATEすればいいかな。
509 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 17:03:26 ] 窓用gfortran試してるんだけど、a.exeじゃなくてコンパイル後のファイル名を指定してコンパイルする方法ってある?
510 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 17:39:30 ] いつもどおり-oでいいとおもった ためしてない
511 名前:デフォルトの名無しさん [2008/09/06(土) 18:24:23 ] CompaqのFortranV6.6からIntelFortranV10.1に乗り換えました 付属のVisualStudio環境ではF90の作業用の前提となっているのか そのエディタは6カラム目の素敵な継続行カラムなどに配慮されていません そのあたりF77の固定カラムに便利なように設定は変更できないでしょうか?
512 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 19:25:04 ] >>511 ツール>オプション>フォントおよび色 で変えられたはず。 のであったが、>>503 の新版入れたらなんかおかしくなったwww
513 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 21:29:47 ] 固定形式は廃止予定事項だから、新機能の実装を優先して、後回しにしたんじゃw
514 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 01:00:56 ] >>506-508 ありがとうございます。 構造体を使うことも検討したのですが、ゾーンを指す変数nzでdo文を回したいと考えていたので、今回は用いませんでした。 割付け配列についても、ゾーン間で補完を行う必要があり、同時にすべてのゾーンのデータを保持する必要があるため、今回の用途には適さないのではないかと考えています。 >>507 さんのアドバイスを検討してみます。
515 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 21:38:02 ] >>509 gfortran -o xxx.exe 2ch.f90でおkですよ。 でも、同じくgfortranで自作ライブラリのリンクの仕方が分からない・・・ どうやってコマンドを入力すればいいんだろう・・・。
516 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 22:16:59 ] >>515 gfortran hage.f90 -lmytoupee または gfortran hage.f90 libmytoupee.a モジュールとライブラリのパスはそれぞれ -I, -L で適時指定すること。
517 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 03:10:45 ] というかGCCってコンパイラオプション統一してんの?
518 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:58:22 ] >>516 ありがとうございます。 でも、自分がものすごく初歩的な勘違いをしているかもしれませんが、 ネット上のライブラリはOKでしたが、自作ライブラリがうまく使えないんです。 ライブラリってサブルーチンやモジュールをいろいろなプログラムで使えるようにしたもの、 という認識でいいのでしょうか?
519 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 00:35:44 ] gfortran -c subroutine.f90 ar cr module.a *.o ranlib module.a gfortran main.f90 ./module.a ./a.out でダメか?作った静的ライブラリをパスの通っている場所にコピーして使ってもおk
520 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 21:00:58 ] プログラムをつい最近始めたばかりの超初心者です。 微妙にスレチですみませんが・・・ intel fortran compiler10.1をknoppix(5.3.1)の環境でインストールしようと思い、 ttp://www.obihiro.ac.jp/~suzukim/masuda/ifc101_install.html の手順にそって行っていました。 しかし、ライセンス文を読み進めたあとに Where do you want to install to? Specify directory starting with '/'. [/opt/intel/fc/10.1.015] : でそのままEnterを押し、インストールが開始され、 Installing... という文字が出るのですが、そのままPCがフリーズしてしまいます。 何度か再起動しやり直しましたが同じでした。 これはkoppixそのままの環境ではインストールできない ということでしょうか? 初歩の初歩だと思うのですが、 どなたかご教授お願いいたします。
521 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 00:14:12 ] knoppix を LiveCD で使っているとか?
522 名前:520 mailto:sage [2008/09/12(金) 01:17:25 ] CD-Rに焼きこんでそのまま起動させて使っています。 他で少し調べたのですが、 HDDにknoppixをインストールして使うべきなのでしょうか・・・。
523 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 11:26:51 ] 容量が足りんとかかなぁ knoppixのハードディスクインストールって、普通のディストロのインストールと 比べて簡単かなぁ
524 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 00:30:43 ] >>519 ありがとうございます。うまくできました。 こうして作ると、modファイルも生成されるのですが、 このmodファイルもライブラリ配布の時に必須なのでしょうか? modファイルが無いとコンパイルに失敗するので・・・。
525 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 02:17:51 ] >>522 /opt が CD-R にあるから書き込めないんだと思う knoppix を HDD にインストールして使えば大丈夫でしょ >>524 モジュールを使ったライブラリ配布するならモジュールが記述されたソースファイルを配布すればいい それ以前に、ライブラリを配布するなら全てのソースファイルを配布してくれるのが一番ありがたい どうしてもソースの公開がいやならば、静的ライブラリだけでなく、動的ライブラリも付けたほうがいい
526 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 11:02:26 ] fortran77を使っているのですがファイルをopen分で読み込むプログラムを作成した際 attempt to read past end-of-failというエラーメッセージが表示されます。 この原因と対策について教えていただければありがたいです。
527 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 11:36:35 ] >>526 >attempt to read past end-of-fail end of file じゃないの? ファイルを読み込んでいるうちに、まだ読まねばならないはずなのに、おしまいまで 来てしまったというエラーだと思う。
528 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 21:56:24 ] Windows用gFortranに対応しているIDEって何かある? あと>>503 に登録したけどメール来ない(´・ω・`)
529 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 23:05:08 ] 524です。 >>525 ありがとうございます。確かに、ソースファイルを渡すのが手っ取り早いですね。 静的、動的ライブラリがいいんですね。覚えておきます。 何度も質問で申し訳ありません。Fortran90形式でplplotを使いたいと思うのですが、 CMAKEを使って処理をすればよいとのことでしたが、f90コンパイルをONにしてもエラーになって C++とF77形式のみでしかmakeができません・・・。 できたファイルを見てもほとんどがC++の形式で、VS2005で開いてコンパイルも失敗してしまいます。 どうしたらFortran90形式でライブラリを読み出して使えるようになるでしょうか。
530 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 19:37:35 ] >>528 eclipse + Photran で大丈夫だと思う。Windows版は使ったことないから保証できんが。 >>529 plplot は使ったことないからわからんな。すまんこ。 おいらはグラフィックは gnuplot に描かせている。system 関数で端末のコマンド打てるから それ使えば自動でグラフ表示できるよ。
531 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 22:01:39 ] >>528 Sign Up Now! のところではなく、右下のLINKを踏んで登録だぜ!
532 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 02:48:38 ] もしかすると基本的なことなのかもしれないのですが調べてもわからなかったので・・・ 以下のようなファイルに収められた数値を順番(?)に読み込むことは可能でしょうか 200709150 左から4文字までが年、そこから2文字で月、さらに3文字でガソリンの価格 200710151 最近30年を対象に年ごとのガソリン価格の平均を求めるプログラムを作りたいのですが 200711153 とりあえずデータを年・月・ガソリン価格に分けて読ませたいのですが 200712151 なにかいいアイデアはございませんでしょうか? 200801149 (以下同様に続く)
533 名前:532 mailto:sage [2008/09/25(木) 02:50:20 ] 書き忘れましたがfortran77を使ってます
534 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 08:08:25 ] format指定すれば簡単に読めるけど、 「調べてもわからなかったので・・・」の内容を詳しくよろしく
535 名前:532 mailto:sage [2008/09/25(木) 09:04:20 ] 詳しくいうといくつかのfortran関連サイトや教科書を見たけどわからなかった ということです
536 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 09:19:49 ] >>535 だれが"調べる"の定義を詳しく言えといったんだ…
537 名前:532 mailto:sage [2008/09/25(木) 09:28:28 ] といいますと・・・
538 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 18:01:49 ] 質問者が主に3種類 1) 自分で調べる気がないので神が答えを書いてくれることを期待した丸投げ 2) 丸投げだと印象が悪いかと思い、調べてもいないくせに「調べてもわかりません」 3) ちゃんと調べたけどわからない勤勉な人 回答: a) 質3なら回答してあげたい b) 質2なら遠まわしに回答 c) 質1なら放置 532が教科書等で何を調べたのかどう調べたのかで 教えてあげるかどうか決めたいってことでしょ
539 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 18:21:17 ] fortranのことで調べてもわからなかったような奴のどこが勤勉なんだよ こんなもん調べてもわからないような奴の方がカス
540 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 22:08:54 ] >>532 READ(10, '(I4, I2, I3)') IYEAR, IMONTH, IPRICE これで読め!
541 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 17:31:14 ] read文は終わった後に次の行に改行しますが、改行しないで今の位置を保持する方法ってありますか?
542 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 18:46:24 ] >>541 do i=1, 3 read(unit=10, fmt='(I5)', advance='NO') n(i) end do
543 名前:541 mailto:sage [2008/09/27(土) 19:09:10 ] >>542 さん advanceってreadでも使えるんですか!ありがとうございました。
544 名前:デフォルトの名無しさん [2008/09/29(月) 14:28:56 ] 実行時にエラーメッセージ「invalid character in field」が表示されます 原因として何が考えられますでしょうか
545 名前:544 mailto:sage [2008/09/29(月) 15:35:53 ] 自己解決しました。単純なミスでした・・・ 一息ついて後でみると以外とすぐミスがわかったりしますよね
546 名前:デフォルトの名無しさん [2008/09/29(月) 16:42:11 ] FORTRANってやったことないんだけど なんかこのスレ見てるぶんには PL/Iに文法が似てますねえ
547 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 18:28:02 ] そりゃ大昔の言語という仲間だからな
548 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 23:08:21 ] >>546 FORTRANの方が先祖だけどな。 PL/I=FORTRAN+COBOL かな。 昔はIBMに勤めると嫌でもならわされていたような。
549 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 00:48:45 ] >>530 ありがとうございます。 gnuplotをダウンロードして、早速使ってみました。 うまく工夫すれば直接Fortran計算結果をグラフにできるようなので、いろいろと試してみます。