[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 10/07 02:37 / Filesize : 345 KB / Number-of Response : 920
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:デフォルトの名無しさん [2009/01/24(土) 18:32:01 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。

●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。


●前スレ
くだすれFORTRAN(超初心者用)その3
pc11.2ch.net/test/read.cgi/tech/1196384126/

くだすれFORTRAN(超初心者用)その2
pc11.2ch.net/test/read.cgi/tech/1164121236/

くだすれFORTRAN(超初心者用)
pc8.2ch.net/test/read.cgi/tech/1138063703/


●関連スレ
FORTRAN W
pc11.2ch.net/test/read.cgi/tech/1163319215/


785 名前:773 mailto:sage [2009/12/05(土) 16:01:16 ]
>>781-784
レスありがとうございます。>>783さんのレスを見て調べたら,
コマンドラインからコンパイルする方法が NAGのサイトの
FAQページに載っていました。
今度は数秒でコンパイルできました!

# しかも,できた実行ファイルのサイズが,IDEのときは 266KBだったのに対して,
   コマンドラインからのときはわずか 18KBとずいぶん小さくなりました
   ちなみに,g95でコンパイルしたときは 339KBでした。

本当にありがとうございました m(_ _)m

786 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 16:37:57 ]
もしかしてNAGが駄目駄目ってオチなのかな?
でもそんな悪い評判は聞いたことないが・・・

787 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:25:08 ]
>>770
バイナリファイルも、F2003ならSTREAMファイルとしてあけることで扱える。

F2003以前でもベンダー拡張でSTREAMアクセスできることが多い。
また規格の範囲内でもDIRECTアクセス・ファイルの属性で代替できることがある。
(独自フォーマットのDirectFile形式のベンダーもあるが、垂れ流し的に書いているものも多いので、
実質ストリームとして使える)
ただFortranの規格ではレコード長が処理系依存なので、バイトかワードかが確定できない。
でもコンパイラのオプションで単位をバイトに指定出来ることが多い。



788 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:24:30 ]
>>785
それって単にランタイムDLLになっただけじゃ?
IDEの時はスタティックリンクなんでしょ

789 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:53:35 ]
IDE経由とコマンドラインの場合とで、デフォルトの動作が違うってこと?
IDE使ったことないんで分からないけど、そういうもんなのかね

でもスタティックリンクにしたら、サイズが増えるのはいいとして
10倍以上の時間がかかるなんて、あり得るの?

790 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 02:17:44 ]
デバックシンボルでも埋め込んであるんだろ
それに実行ファイル自体が最適化がかかってないかもしれない
環境を聞かないと何とも堪えようがない

791 名前:773 mailto:sage [2009/12/06(日) 08:35:45 ]
>>788
> IDEの時はスタティックリンクなんでしょ

IDEの設定を見たら,おっしゃるとおりで,
「nagforランタイムライブラリの非共有(静的)バージョンを結合」
となっていました。ひとつ勉強になりました(汗)。


>>790
> 環境を聞かないと何とも堪えようがない

環境は……

【1つめのパソコン VAIOノート】
OS: Windows XP Home edition Ver.2002 SP3
RAM: 512MB
HDDの空き領域:Cドライブは 706MB,Dドライブは 1.92GB
Fortran Builder 5.2 は Dドライブにインストール。

【2つめのパソコン let's note ノート】
OS: Windows XP Professional edition Ver.2002 SP3
RAM: 1GB
CPU: Pentium M 1.20GHz
HDDの空き領域: Cドライブは数十GB
Fortran Builder 5.2 は Cドライブにインストール。

……です。


792 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 08:39:32 ]
NAGのお値段を考えたら・・・おニュウPCを買うべきだとおもう


793 名前:773 mailto:sage [2009/12/06(日) 08:42:25 ]
あ,【1つめのパソコン VAIOノート】の CPU は
Pentium 4 の 2.40GHzです。




794 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 19:59:53 ]
次の行列の演算を2次元配列を用いて行うプログラムを作りたいのですが;
どなたか教えください。

[123] [13]
[ ]×[23]
[045] [46]

です。
わかりにくいのですが、2行3列と3行2列の乗算です。。

795 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 20:01:50 ]
見づらくてすみません。。
[123] [13]
[   ]×[23]
[045] [46]



796 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 04:24:21 ]
行列成分は実数にした。違いは無い

real a(3,2), b(2,3), o(2,2)
a(1,1) = 1.0
  |
a(3,2) = 5.0
b(1,1) = 1.0
 |
b(2,3) = 6.0

do j = 1, 2
do i = 1, 2
o(i,j) = 0.0
do m = 1, 3
  o(i,j) = o(i,j) + a(m,j) * b(i,m)
enddo
enddo
enddo

で o が結果の2x2行列ね。習慣で(i,j)=(列、行)の番地にしてもうたけどいいやね。
そういや行列のサイズ数をいうときの行と列をよく間違えてしまうw

797 名前:デフォルトの名無しさん [2009/12/07(月) 23:28:25 ]
>>758
x=x+vx*dt*i
y=y+vy*dt*i
R=sqrt(x**2+y**2)
vx=vx-K*(x/R)*dt*i
vy=vy-K*(y/R)*dt*i
上のiがすべていらない。

798 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:42:02 ]
>>795
MATMUL 関数を使うんだw



799 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 08:40:35 ]
>>798
同意w
でも知らないうちにコードミスで転置行列にしてしまうことがあるw

800 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 08:58:02 ]
do 800 i = 1, 800
  write(*,*) '800 get'
800 continue

801 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 18:00:32 ]
はじめてきました。
ド素人質問失礼します。
コンパイラはG95で、Fファイルで実行します。
OSはVISTAです。

N個の値(整数値0〜100)の中から最大・最小・偏差値を出したくてこうしました。

DO 10 I=1,N
READ(5,*) SC(I)
MA=MAX0(SC(I))
MI=MIN0(SC(I))
10 CONTINUE
するとエラーが
MA=MAX0(SC(I))
1
MI=MIN0(SC(I))
1

    Intrinsic'max0'at(1)must have at least two arguments
Intrinsic'min0'at(1)must have at least two arguments
と出ます。
配列を組み込み関数の引数に使ってるのが違うのかと思うのですが、配列を使えるようにする方法が何かないかが主に知りたいです。

802 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 18:03:53 ]
>>801
すみません、、、
改行でずれました、、、
MA=MAX0(SC(I))
___1
MI=MIN0(SC(I))
___1
です。


803 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 18:10:43 ]
MAX0というのがどういう関数なのか知らないが、
MAXと同じなら
MA = MAX( MA, SC( I ) ) 
MAは要初期値。

配列に全部読み込んでから最大値を求めるなら
MAXVAL( SC ) 




804 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 18:13:48 ]
>>801
関数が要求する引数の数が少なくとも2個だからじゃない?最も大きい(小さい)ものを返せ、という
関数なんだし。配列の要素は配列じゃないよ(OOPならそれもアリだろうけど)。

その前に折角g95を使っているのなら、F77式の書き方はするべきではない。

homepage.mac.com/galois21/fortran/ref.html

805 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 01:07:11 ]
フォートランを研究室で指定されて使おうとしてるんですけど
www.salfordsoftware.co.uk/
のどこからダウンロードするのかみつからないんですけど教えてくれますか?
あとフォートランは遺産が多いと聞きましたがうちの研究室は転用が禁止らしいのですが
フォートランの意味はあまりないということでしょうか?
簡単な質問ですがお願いします

806 名前:805 mailto:sage [2009/12/14(月) 02:35:45 ]
なんとかなりそうです
スレ汚し失礼しました

807 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 05:06:18 ]
ああ、Fortran依存症がまたひとり・・・・いらっしゃい!

808 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 10:09:27 ]
>>805
転用禁止は、遺産うんぬんの前に、「理解して勉強しろ」ということだろう。

809 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 17:32:48 ]
結局わからなくてゼミの先輩にインストールするためのプログラム(ftn77pe.exe)を貰ったんですが

64ビットバージョンのwindowsでの非互換性のためプログラムまたは機能である〜〜を開始または実行できません
ソフトウェア製造元に問い合わせて64ビットWindows互換バージョンが利用可能であるかどうか確認してください

とでました。OSはwindows7です。7に対応していないんでしょうか?
こういった場合どういう解決策がありますか?お願いします。

810 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 20:45:06 ]
今、浮動小数点例外を握りつぶす処理を入れてるんですが、
処理を入れた部分以外のところをコンパイルオプションでトラップしたいです。
が、オプションを入れると既に処理を入れた部分の判別条件で引っかかってしまいます。
未処理の部分だけトラップしたいんですが何かいい方法はないでしょうか。

811 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 23:06:15 ]
サイトを隅から隅まで探してもfortranをダウンロードするページみつけれませんでした・・・
64ビットのがあるんでしょうか

812 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 23:34:04 ]
>>810
トラップって何?

具体的にどうしたいのか分からないけど、ソースの或る特定の部分を無視して
コンパイルしたいのであれば、プリプロセッサを使ってみたら?

813 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 23:50:42 ]
>>810
CALL IEEE_SET_HALTING_MODE(云々)
あたりでなんとかならんか?
Fortran2003の機能だが、最近のコンパイラはサポートしているので・・





814 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:03:20 ]
Sun solais10のSunStudio12(SunFortran)で書かれたプログラムが動かなくて困っています

浮動小数点例外でcore吐いて停止していますが
ファイルがバッファに残ったままとまっている為
どこまで進んでから落ちたのか良く判りません
環境変数かなんかでバッファサイズを0若しくは充分小さく出来ないでしょうか?

ソースをゴタゴタと生成している部分がありコンパイルが容易ではなく
出来ればflushを挟んでの再コンパイルを避けたいのです

intelのfortranなら出来るチックな話はぐぐったら出てきましたが......


815 名前:773 mailto:sage [2009/12/17(木) 23:42:36 ]
NAG Fortran Builder 5.2 で,

program main
  print *, 'Hello World !'
  stop
end

のクイック実行のコンパイル&リンクに12分50秒もかかった現象について,先週の土曜日に
ここで質問をした者ですが,パソコンにインストールしているウイルス対策テスト
F-Secure Internet Security 2010 のメーカーであるエフセキュアのサポートセンターにも
問い合わせたところ,解決案を幾つか提示されました。

結局それらのうちの1つの『 ディープガードの無効化 』をすることで,
コンパイル&リンクにかかる時間が通常どおり大幅に短縮されて,約10秒で
終わるようになりました。

アドバイスを下さった方々,ありがとうございました。


816 名前:773 mailto:sage [2009/12/19(土) 11:37:10 ]
↑のその後です。

昨日,エフセキュアのサポートセンターとメールでやり取りし,

「『 ディープガードの無効化』をするとセキュリティレベルが下がるので,
  その代わりに『高度なモニタリング』を無効化する。
  それで駄目なら『ファイルを除外スキャン』でスキャン対象から除外したい
  ファイル・フォルダを選択する」

という対処方法に変わりました。

これで F-Secure Internet Security 2010 の『 ディープガードの無効化』と
『高度なモニタリング』の両方が有効な環境下での NAG Fortran Builder の
動作の正常化が確保できました。


817 名前:773 mailto:sage [2009/12/19(土) 11:43:02 ]
↑書き間違えました。
(誤)『 ディープガードの無効化』と『高度なモニタリング』の両方が有効な環境下
(正)『 ディープガード』と『高度なモニタリング』の両方が有効な環境下


818 名前:デフォルトの名無しさん [2009/12/19(土) 13:30:00 ]
とりあえず、おめ!
なるほど、そっちか

819 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:41:50 ]
セキュリティかよw
確かに最近のセキュリティソフトは色々とガチガチだからな

820 名前:デフォルトの名無しさん [2009/12/22(火) 16:23:38 ]
なるほどー

821 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:08:05 ]
ググってもなかったんで、質問させてください。

fortranのプログラムみてると、ccccccc 〜〜 ccccccc
って感じでcに囲まれてる文字があるんだけど、このcの意味ってなんなんですか?

すいません。教えてください

822 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 00:28:15 ]
>>821
1桁目が 'C' かアスタリスク '*' の行はコメント行。
だから 'CCC…' はプログラム上は意味はないけど、
人間が読む時に処理の内容や区切りをわかりやすくするため等によく使われる。

823 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 00:32:45 ]
>>822
ありがとうございます。
コメントは「!」とどこかでみたので、cは違うのかと思ってました。
本当にありがとうございました



824 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 04:29:33 ]
>>823
! で始まる部分をコメントとするのは,Fortran 90 以降の自由形式で書かれるソースコード。
この場合は ! は必ずしも1桁目でなくても良い。
2桁目以降でも良いし,実行分の後ろに付けるのでも構わない。

一方,1桁目が C か * で始まるのをコメント行とするのは,FORTRAN 77 の固定形式ソースコード。


825 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 09:11:20 ]
↑[訂正]
× 実行分
○ 実行文

826 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 22:37:19 ]
>>824
丁寧にありがとうございます。
すごい勉強になりました!
今日、入門用の本を買ってきたので、頑張って勉強したいとおもいます。

827 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 08:29:13 ]
すみません,ちょっとスレ違いな質問で申し訳ないのですが‥‥
ここにならご存知の方が誰かいるかもしれないと思ったので,
質問させていただきます。

Fortran の後継言語として Sun が開発中だった Fortress は
今はどうなってるんでしょうか? お蔵入りなのでしょうか?

828 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 09:14:52 ]
とりあえずサイトはここ
ttp://projectfortress.sun.com/Projects/Community/

829 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 14:04:39 ]
>>828
ありがとうございました。

830 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 17:33:31 ]
オラクルに買収されたけど、Sunの手から離れたから関係ないのかな?

831 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 20:11:52 ]
質問です。あるファイルが存在したらそのファイルをread、
存在しなければ別の処理をする、という分岐を作りたいのですが
どうすればよいでしょうか?ファイルの有無で0か1を返すような
関数があれば手っ取り早いんですが、見つかりませんでした。

832 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 21:03:52 ]
>>831
stat() を使ってゴニョゴニョとできんじゃろうか?

833 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 21:22:06 ]
open文でerr=指定子を使うのがfortran流だろう。



834 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 23:28:24 ]
INQUIRE(FILE='hage.dat', EXIST=LHOGE)

835 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 18:43:43 ]
>>832-834
最後のinquire使うのが王道かのぅ。

logical lhoge
character*100 fname
do i = 1, 100
write(fname,'(i5.5,''.dat'')') i
inquire(file=fname,exist=lhoge)
if (lhoge) then
read.....
else
nanka....
endif
enddo

とか、いろいろ。
ERR子はたしか返す値がシステムごとに違った記憶があるから怖い。
・・・気のせいな気もするけどね。

836 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 17:11:51 ]
いままでコンパイルを行うとき、サブルーチンとmainファイルを同じディレクトリに置き
* ifort.f90 でコンパイルしていたのですが,
サブルーチンを別ディレクトリにし,コンパイルするにはどうしたらよいのでしょうか。

たとえばサブルーチンをSubというディレクトリに置き、
mainファイルをMainというディレクトリに置いて実行ファイルを作るにはどうしたらよいのでしょうか。

837 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 20:17:18 ]

ifort90 main.F90 Sub/sub1.F90 Sub/sub2.F90 ...

でいいんじゃね?あと Makefile 書いちゃうとかかな。

何をムズカシイと思っているのかがよく分からない。

838 名前:デフォルトの名無しさん [2010/01/13(水) 15:03:32 ]
>>837
そうしたいのですが,mainファイルをコンパイルしようとするとサブルーチンが定義されていないと言われ,
サブルーチンをコンパイルしようとするとmainファイルがないとエラーがでるんです

839 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 15:47:14 ]
>>838
ifort90ってどこのコンパイラ?
-c付けて.oファイルがどこにできるか確認してみたら?
intel fortranだが普通にカレントディレクトリに全部の.oが出てくるけど

840 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 17:41:05 ]
unixでのコンパイルに耐えられずに、VisualStdioとintelのコンパイラを教官殿に買ってもらった俺と比べてみんな偉いな

841 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 22:27:24 ]
>>839
> ifort90ってどこのコンパイラ?

ifort のことだろうけど、OS は何なんだろうな。どうにも挙動が変態だ。
Windows だと変な動きするとかあるんだろうか?

842 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 02:46:42 ]
前に、担当の人が気を利かせてaliasというかいくつかオプションをつけたコマンドを作ってくれていて
それが他のと干渉して・・という事があった気がするけど、そのifort90 もそれの類の匂いがするが、
いかがか?

843 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 17:02:34 ]
>>838皆様のレスのおかげで解決できました、ありがとうございます
ifort90はifortの打ち間違えです、申し訳ない



844 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 13:52:51 ]
なんという・・・w

845 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 18:18:14 ]
打ち間違え?
じゃあ command not found って出てたはずだよな・・・

まぁ、頑張ってくれや

846 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 18:52:40 ]
すみません
インテル Visual Fortranコンパイラ9.1を使用したいのですが、インストール後
サンプルプログラム(int_sin.f90)をコンパイルしようとしたのですが、下記のエラーがでてしまい、うまくできません。
エラー内容:
ifort: error: unable to run '<Microsoft VC++ Dir>\\Bin'

Microsoft Visual C++ 2008 Express Editionはインストール済みです。
OSはVista Home premium32bitです。
どなたか助けてくださいorz

847 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 01:04:43 ]
>>832,833,834,835
大変遅くなりましたがありがとうございました。
inquire文で行けそうです。
もう一つ質問ですが、動的配列を宣言するときにある次元だけ固定って
できますか?まあ別にそうする必要は無いといえばないんですが、
宣言部を見ただけでどこが動的である必然性があるのか分かった方が
自分としてはスッキリするので。ちなみに

DOUBLE PRECISION,allocatable::a(10,:,:)

allocate (CS(10,10,10))

とやったら金比羅にしかられました。
よろしくおねがいします。


848 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 04:18:14 ]
>>847
> DOUBLE PRECISION,allocatable::a(10,:,:)
> …
> allocate (CS(10,10,10))
>
> とやったら金比羅にしかられました。

CS ってどこで宣言してんだ?

どう呵られたのかはしらんけども、こっちでも呵られた。
ということで無難に

DOUBLE PRECISION,allocatable::a(:,:,:)

としておけば良いと思う。それで問題になることは無いだろうから。

849 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 04:52:48 ]
>>848
すいません、CSじゃなくてaですね。中途半端にコピペしてしまった…
やっぱそうするべきみたいですね。コメントでもつけてそうしておきます。
ありがとうございました。

850 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 17:46:26 ]
一瞬、金比羅って何って思ってしまった
中国系の上司の名前かとw

851 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 17:38:45 ]
下記のようにimplicit none 付きで、
算術関数 cos 及び derf に関する実験をしているのですが、
cosはreal(8) derf のような宣言が必要ないのはなぜでしょうか。
derfに関しては宣言をしないと、コンパイラ(pgf95 ,7.2-4)に文句を言われます。

program main
implicit none
real(8) derf
real(8) x
x = dble(0.7)
print*,derf(x)
print*,cos(x)
end

よろしくお願いいたします。

852 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 22:53:26 ]
>>851
COSはFORTRANの規格で規定されているINTRINSICな関数で、COSは総称名になっている。
引数の型で関数の値の型も決まる。
ただ、66時代の互換性などから、個別の型をあらわに指定するDCOSなどもある。
しかし77時代以降は総称名を使うのが推奨されていたはず。

さて、ERFの方だがこれはFORTRANの規格にはないベンダーの提供する独自関数である。
したがってその実装や用法はベンダーに依存する。
たとえばINTEL FORTRANの場合は、REAL(8)の宣言無しにDERFが使える。
PGIでは、外部関数扱いで、関数の型を宣言しておく必要があるのだろう。

なお、ERFというのはUNIX系の多くのFORTRANで使えた関数で、半ば標準化している。
Fortran2008ではそれらのエラー関数、ベッセル関数などが正規の規格に入ることになっている。




853 名前:851 mailto:sage [2010/01/19(火) 00:21:02 ]
>>852
大変分かりやすい解説をしていただき、ありがとうございました。
derfもintrinsicな関数だと思い込んでいました。



854 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 13:55:21 ]
>>852
>しかし77時代以降は総称名を使うのが推奨されていたはず。
マジ?
律儀にD*使ってた・・・

855 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 14:00:42 ]
人のデータ使う場合、単と倍精度が入れ乱れるし・・・
普通にd* で明示してもいいと思うけどな。
単精度に揃えたい!とかはコンパイルオプションで出来るし。

856 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 21:03:41 ]
やっぱ総称名って使わないほうがいいの?

857 名前:デフォルトの名無しさん [2010/01/19(火) 21:21:43 ]
インテル Visual Fortranコンパイラ9.1を使っているんですが、インストール後
サンプルプログラム(sample.for)をコンパイルしたところ、下記のエラーがでてしまい、うまくできません。
エラー内容:
ifort: error: unable to run '<Microsoft VC++ Dir>\\Bin'

このため、.objファイルは出力されるのですが、exeファイルが出力されません。
よろしくお願いします。


858 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 23:41:44 ]
>>857
MSのSDK入れろ


859 名前:デフォルトの名無しさん [2010/01/24(日) 21:39:26 ]
"2500/500"のような文字を読み込んで、
2500 / 500 = 5
を計算したいのですが、下のコードでは
"/"が読み込めないみたいです。
改善方法を教えていただけないでしょうか?

できれば、"2500"や"500"の部分を任意の桁数でできると幸いです。
コンパイラはG95です。

IMPLICIT NONE
CHARACTER :: A*5, B, C*5
REAL*8 :: Num1, Num2
PRINT*, "Input"
READ*, A, B, C
PRINT*, "A=", A, " B=", B, " C=",C
READ(A(1:), *) Num1
READ(C(1:), *) Num2
PRINT*, Num1/Num2
END

よろしくお願いします。

860 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 22:12:58 ]
>>859
FortranのI/Oでは「/」は改行を意味している。
よって文字と解釈していなのだろう。

前にもそんな事を聞いていた奴がいたような・・・

回避する方法は、わからん。
文法書のI/Oのところをじっくり読んで自分で考えてくれ。


861 名前:860 mailto:sage [2010/01/24(日) 22:27:59 ]
>>859
しらべたw
READ文にFORMAT指定をすればよろし。
READ '(3A)', A,B,C
とすれば多分おk


862 名前:859 mailto:sage [2010/01/24(日) 22:57:22 ]
>>860

"/"を文字として認識することができました。
ありがとうございます。

863 名前:860 mailto:sage [2010/01/25(月) 00:38:43 ]
>>859
おk。

任意の桁数でやるには
INTEGER :: kslash
CHARACTER(128) :: text
READ '(A)', text
kslash = INDEX(text, '/')
READ( A(1:kslash - 1), * ) num1
READ( C(kslash + 1:), * ) num2

という感じだろう。TRIMでtextの尻の空白を切ったほうがいいかもしれん。
むろん任意と言ってもREALの範囲内の数だが・・




864 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 00:39:52 ]
訂正www

READ( text(1:kslash - 1), * ) num1
READ( text(kslash + 1:), * ) num2

865 名前:859 mailto:sage [2010/01/25(月) 07:35:21 ]
>> 863

おお!重ね重ねありがとうございます。
無事に作ることができました。

866 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 20:32:37 ]
初心者すぎて笑われるかもしれませんが平面上の3点の座標で三角形つくるときの面積を求めたいのですが
当然ながらヘロンの公式でやりました
辺の長さが出てる場合であればうまくいくのですが長さの計算も入れようとするとどう座標を扱えばいいかちんぷんかんぷんで
X(I)とY(I)で1〜3まで動かしかたがわからないというか…その考えが間違ってるのかもわからないです

867 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 20:57:24 ]
>>863
Fortran兄貴降臨!いつもお疲れさまっす。

ただ、Fortranの思想的に>>859みたいなことは、やるべきではないとは思う。
perlでもpythonでもシェルでもいいが、Fortran実行ファイルを適当なラッパーで
くるむほうが、素直で良いと思う。

868 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 21:11:49 ]
>>866
君なりのソースをここに書けば直して貰えると思うよ。

869 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 21:54:30 ]
>>866
数学がわからんの?
Fortranがわからんの?

上の方も書いてるけど、わかってるところまでのソースを書くとよろし。

870 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:04:31 ]
>>867
Fortranでパーサー書こうぜ!
再帰があるから、77時代ほど難しくないはず・・・


871 名前:デフォルトの名無しさん [2010/01/26(火) 14:19:14 ]
>>870
とてもうろ覚えだけど・・・
DECのVMSってFortranでかなりの部分は書かれていたような。
IMEというか英語を日本語に変えるやつは堂々Fortranだったような。
・・・とてもうろ覚えだけど。

872 名前:デフォルトの名無しさん [2010/01/29(金) 08:26:49 ]
はじめまして。初心者ですがよろしくお願いします。
突然ですが、この問題を解ける方いらっしゃいますか。
学校の宿題なのですが、どうしても分からないのでここにきました。
お願いします。

問題こちら↓
階乗 n! を計算する関数を作成し,
順列
 n個の異なるものからr個取り出して並べる。
 このときの順列の総数をnPrとあらわす。
 nPr=n(n-1)(n-2)・・・(n-r+1)
を計算する関数を作成し,

組み合わせ
 異なるn個からr個取り出して組を作る。
 このときの組合せの総数をnCrとあらわす。
 nCr = nPr/r!

を計算するプログラムを作成しなさい。(問題終わり)

よろしくお願いします。

873 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 18:29:35 ]
Permut[n_, r_] := Pochhammer[1 + n - r, r]
Permut[n, r]/r!



874 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 19:47:54 ]
オープンしている特定のファイルのバッファを
フラッシュする方法はありますか。コンパイラはifortです。
出来ればクローズしないでフラッシュしたいのですが、
どうしてもバッファにたまってしまいます。
よろしくお願いします。

875 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 01:06:31 ]
872の丸投げぶりはすごいな。
途中まで書いたソースコードでもここに貼ったら?



876 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 01:14:32 ]
C/C++の宿題スレが丸投げだからその流れがこちらまで来たか

877 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:34:15 ]
初秋の青空を連想するくらいのすがすがしい
丸投げw

878 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:23:48 ]
>>874
CALL FLUSH(ユニット番号)

879 名前:874 mailto:sage [2010/01/31(日) 04:55:24 ]
できました! >>878
ありがとうございます!

880 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 21:11:44 ]
プログラムで値を入力して計算結果を得たいのですが、結果を出力するとNaNが出てしまいます。
NaNが出力される原因だけでもいいのでわかる方いらっしゃったら宜しくお願いします。
ttp://www.dotup.org/uploda/www.dotup.org610825.txt
長いのでろだに上げました。テキストファイルですみません…

881 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 21:24:10 ]
丸投げ、流行ってるな。

882 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 09:17:59 ]
ifort -g -check all traceback
とかでNaNにかぎらず異常値が発生したらその行を教えてくれるような実行ファイルをつくってくれる
オプションがあるはずだから、マニュアルよんでみよう。
>>878
それ、よさそうだね。
ログ生成がゆっくりの場合、あるていど溜るまでディスクには書かれないから不便な事がおおかったけど、
いろいろと助かりそうだ。参考にするよ!

883 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 18:38:34 ]
へぇそんなんあったんだ



884 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:00:51 ]
>>880
66スタイルで何やってるかわからんなw
NUMPACK使っているところを見ると、富士通、名大・九大・京大あたりの流れか。
ライブラリ関数が無いから実行することもできないしもっと詳しく書いてくれないと誰も答えられないだろう。

まぁ定数や関数の一部が単精度のままなので倍精度にしている意味がない可能性が高い。
その辺かな?w


885 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:04:41 ]
>>882
FLUSHはFortran2003で導入された命令。
IntelのHELPはF2003命令がいまいち入ってなかったりしてアレなので、
文法解説書を買って学ぶがよろしい。



886 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 09:14:48 ]
>>885
そうなんだ。何年か前に g77 でサブルーチン版の flush をつかったことあがった。
今確認したら、やっぱり使えた。因みに g95 だと関数版の flush が使えた。関数
版だと戻り値でエラーチェックできるから有り難い。

887 名前:デフォルトの名無しさん [2010/02/07(日) 15:54:15 ]
FFTについて質問させてください。

大学の講義で、離散フーリエ変換のプログラムについて勉強中です。
講義の最後に、「バイオリンの音のデータをフーリエ変換し、
フーリエ変換した結果を横軸:周波数、縦軸:振幅としてグラフ化せよ」
という課題が出ました。
配布されたデータの読み込みを試みたのですが、どう読み込ませたらいいのかが分かりません。
配布されたデータは2列で構成されており、左の列が時刻データ、右の列は音の振幅を表しています。

↓にプログラムを書きます。よろしくお願いします。

888 名前:デフォルトの名無しさん [2010/02/07(日) 15:56:08 ]
--前半--

program fft

implicit none
!========================================================================
include "fftw_f77.i"
integer*8 ::plan
!========================================================================
!サンプリング条件の設定
!サンプリングデータ数N , aの数Ma , bの数Mb
!サンプリング間隔dt = 1/44100 [s] , サンプリング周波数 f0 = 44100 [Hz] , N, Ma, Mb
!周波数分解能df=1/(N・dt)
integer,parameter:: N=10000,Ma=5000,Mb=4999
real(8),parameter:: df=44100/dble(N) , dt=1.0d0/44100
!入力波形のデータの設定fin=100Hz
real(8) ::fin,a0
!作業用の変数
complex(8):: in(N),out(N),c(0:n-1)
integer ::i
real(8) ::t,a(0:Ma),b(1:Mb),x,y

889 名前:デフォルトの名無しさん [2010/02/07(日) 15:57:26 ]
--後半--
!入力データの設定
write(*,*) 'Input data:'
open(unit=11,file='violin.dat')
do i=1,N
※ここが分かりません!※
end do
close (11)
!========================================================================
!ライブラリを利用したフーリエ変換(作業領域作成と実行)
call fftw_f77_create_plan(plan,N,FFTW_FORWARD,FFTW_ESTIMATE) !準備
call fftw_f77_one(plan,in,out) !実行
!========================================================================
!結果の変換
c(0:N-1)=out(1:N)
a(0)=c(0)
a(1:Ma)=dble( c(1:Ma)+c(N-1:N-Ma:-1) )
b(1:Mb)=dble( (c(1:Mb)-c(N-1:N-Mb:-1))*(0.0d0,1.0d0) )
!========================================================================
!結果の出力
write(*,*) 'Output data after forward FFT:'
open(unit=22,file='ab-.csv')
open(unit=21,file='c-.csv')
do i=1,N
write(21,'(i6,'','',1pe16.8,'','',1pe16.8)') i,out(i)
end do
write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') 0.0,a(0),0.0
write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') (i*df,a(i),b(i),i=1,Mb)
if (Ma/=Mb) write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') Ma*df,a(Ma),0.0
close (21)
close (22)

890 名前:デフォルトの名無しさん [2010/02/07(日) 15:59:09 ]
--ラスト--

!========================================================================
!フーリエ変換(作業領域消去)
call fftw_f77_destroy_plan(plan)
end program fft

891 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:29:00 ]
>>889
クラスの友達に聞いた方が早いよ。


892 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 20:20:13 ]
むしろ、データファイルの中身が必要なんじゃね?

893 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 20:37:52 ]
>>891
きっとボッチなんだよ。



894 名前:デフォルトの名無しさん [2010/02/07(日) 22:48:06 ]
そうなんすよ。
彼女と遊びすぎて留年しちゃったもんで・・・。

895 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:02:40 ]
お前はこのスレを敵にまわした。

896 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:10:16 ]
>>894
教えようと思ったがやめた

897 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 03:48:18 ]
自分が今いるサブルーチンの名前を取得する方法ってありますか?
デバッグするときにどのサブルーチンで止まってるか確かめたいんですが。

898 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 07:30:51 ]
終了したのが
なんていうサブルーチンで何行目か、とか
ソースファイルの何行目だったか、とか教えてくれるようにする
オプションってあったと思うけどなぁ。というわけでマニュアルを読もう!

Fujitsuだと超最適化かけてもこの機能はついてくるのが素晴らしいが
PC向けではなかったような・・・。出してくれんかねぇ

899 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 07:59:22 ]
>>898
いえ、それがめんどくさいことに終了せずにどこかで停止してるんですよ。
write文の中身をいちいち変えてもいいんですけど、
出来るだけコード汚さないように書きたいので。

900 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:25:45 ]
すみません、もう一つ。subroutineの最後に

return
end

って書くのはなんででしょう。サブルーチンでのendってreturnと
同じ意味じゃないんでしょうか?returnが無いと困るケースってあります?

901 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 12:13:11 ]
ヒント: returnはサブルーチンの最後である必要は無い。

902 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 13:12:13 ]
大昔はEndSubroutineが無かったから、
このEndはサブルーチンのですよ、とチェックをいれる意味で
推奨されてた名残だね。ぶっちゃげ無くてEndだけでもいい。
Returnはサブルーチン抜けを意味するのだからメイン階層では絶対出てこないので。

903 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 18:54:13 ]
900じゃないけどreturnとか使った事ありませんでした
勉強になるスレです



904 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 22:05:26 ]
>>897
__FILE__ を使って後はゴニョゴニョとよくやってた。
Fortran 自体を使わなくなって数年(足を洗ったので)。

905 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:08:56 ]
>>899
Fortranにはそういう命令はない。
しかしコンパイラのtracebackオプションを使えばいい。
大抵のコンパイラにはそういう機能がある。
だがそれは、処理系に依るのでマニュアルでオプションを調べるしか無い。

コンパイラの種類とバージョンを言えばわかる可能性はある。



906 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:13:26 ]
__LINE__使えるんじゃないの?

907 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 00:35:53 ]
>>906
標準のFortranにはないべ。
Unix系のプリプロセッサの機能だろ。方言のなまりがきつすぎる。


908 名前:ごめんなさい、お願いです。 [2010/02/10(水) 00:51:22 ]
このプログラムを
明日までに作ってください!!お願いします。

Fortranで,

階乗 n! を計算する関数を作成し,

順列
n個の異なるものからr個取り出して並べる。
このときの順列の総数をnPrとあらわす。
nPr=n(n-1)(n-2)・・・(n-r+1)
を計算する関数を作成し,

組み合わせ
異なるn個からr個取り出して組を作る。
このときの組合せの総数をnCrとあらわす。
nCr = nPr/r!
を計算するプログラムを作成してください。
おねがいします。

909 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 01:55:59 ]
>>908
最近勉強しているのでFortran95 で書いてみた。
たぶん君が求めているのはF77ヴァージョンだろうw

MODULE m_2chan
IMPLICIT NONE
CONTAINS

ELEMENTAL INTEGER FUNCTION factorial(n)
INTEGER, INTENT(IN) :: n
INTEGER :: i
factorial = PRODUCT( (/ (i, i = 1, n) /) )
RETURN
END FUNCTION factorial

ELEMENTAL INTEGER FUNCTION permutation(n, r)
INTEGER, INTENT(IN) :: n, r
INTEGER :: i
permutation = PRODUCT( (/ (i, i = n, n - r + 1, -1) /) )
RETURN
END FUNCTION permutation

ELEMENTAL INTEGER FUNCTION combination(n, r)
INTEGER, INTENT(IN) :: n, r
combination = permutation(n, r) / factorial(r)
RETURN
END FUNCTION combination

END MODULE m_2chan
!


910 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 01:57:29 ]
PROGRAM twochannel
USE m_2chan
IMPLICIT NONE
INTEGER :: n, k
PRINT *, 'INPUT n and k'
READ *, n, k
PRINT *, 'nCk = ', combination(n, k)
STOP
END PROGRAM twochannel

77育ちの俺様は、暗黙の型に従っていないのですげー気持ち悪いぜwww


911 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:27:41 ]
>>908
数学的にチューニングすべきだが、提示された式のとおりに作った。PROGRAMは改行多杉になるので省略
integer function factorial(n)
implicit none
integer i, n
i = n
factorial = 1
do while(i .gt. 0)
factorial = factorial * i
i = i - 1;
end do
end
integer function permutation(n, r)
implicit none
integer n, r, i
i = 1
permutation = 1;
do while(i .le. r)
permutation = permutation * (n - i + 1)
i = i + 1
end do
end
integer function combination(n, r)
integer n, r, factorial, permutation
combination = permutation(n, r) / factorial(r)
end


912 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 08:48:40 ]
908の人気に嫉妬

913 名前:デフォルトの名無しさん [2010/02/10(水) 08:58:43 ]
>>901
>>902
あ、そうなんですか。別に書かなくてもいいってことですね?

>>904
>>905
>>906
ありがとうございます。でも、エラーが出て終了するんじゃなくて、
ジョブは走ってるんですけどどこかで止まってるっぽいんですよ。
出力ファイルが計算途中で更新されなくなるんです。
で、どこまで進んでどこでどうなってるか調べたいのでいちいちwrite文挟んでるんですが…
tracebackって終了したときしか使えないですよね?



914 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 10:05:57 ]
デバッガー無いのか? アタッチ出来れば楽勝だな。

915 名前:908です。 [2010/02/10(水) 11:57:13 ]
みなさん、ありがとうございました!!(泣

916 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 23:09:07 ]
>>913
仰る通り Traceback は異常終了しないとでない。
しかし、望みの機能が存在しないのは、世の中の人がその機能を欲していないということなので
がんばってPRINT文をばらまいて解決しなさいw

プログラム相談員とか、そういう人に聞くのも、連中の人を小馬鹿にしたような寝言を我慢しないと
駄目だが、有効w


917 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 13:16:13 ]
>>916
>連中の人を小馬鹿にしたような寝言を我慢しないと駄目だが
ワロタw
あの目線はどうにかならんのか

918 名前:デフォルトの名無しさん [2010/02/11(木) 22:18:28 ]
ちょっとお聞きしたいのですが、
fortranでguiプログラミングはできないのでしょうか?

919 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 23:26:53 ]
>>918
C用のライブラリのAPIを呼びまくるという形ではできる。







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

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

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