[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 01/23 11:34 / Filesize : 200 KB / Number-of Response : 550
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれFORTRAN(超初心者用)その3



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/

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計算結果をグラフにできるようなので、いろいろと試してみます。







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<200KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef