トップページ⇒tech
836コメント331KB

Fortran

■ このスレッドは過去ログ倉庫に格納されています
0001パッキーNGNG
Fortran90をただでコンパイルする方法はないでしょうか?
0002デフォルトの名無しさんNGNG
ゼルビス
0003デフォルトの名無しさんNGNG
激しく糞スレ
0004パッキーNGNG
なんとなく上げ
0005たかじんNGNG
カレッジにて。
0006ものすごくやさしい人NGNG
>>1 >>4
google で free の Fortran90 用のコンパイラを探せば、できますよ。
http://www.google.com/
0007質問???NGNG
FORTRANのコンパイラでDEBUGとRELEASEってのがあるんですが、大事な計算結果が変わってしまうんですけど、これってどちらの精度がいいかってわからないもんなんですか?
もし知っておられるなら教えて欲しいです。
また、計算結果がわかっていない計算をしてるので、確かめようがないので困ってます。
お願いします。
0008デフォルトの名無しさんNGNG
計算方法がまちがっている。
0009デフォルトの名無しさんNGNG
>>7
都合のよい方で、良しとしよう
0010デフォルトの名無しさんNGNG
>>7 ではありませんが、同じようなデバッグとリリースで結果が変わります。
何か考えられる原因はないですかね?
0011デフォルトの名無しさんNGNG
>>10
変数を初期化していない。
001210NGNG
実は実際に Fortran でプログラムを作っている人間ではないで確認してませんが、
初期化していない変数を、そのまま出力したりすれば値は変わると思い
ますが、計算結果を代入すれば初期化していないことは結果には関係
ないですよね?
0013デフォルトの名無しさんNGNG
DEBUG, RELEASEって最適化レベルのフラグか何か?
そうだったとして、

自分のプログラムのバグ
浮動少数値演算で最適化レベルにより計算結果が違ってくる現象
コンパイラのバグ

一般的にはこの順番で怪しい
0014デフォルトの名無しさんNGNG
>>12
計算で使用している変数の初期化をしていなかったら?
ロジックが誤っていて変数に代入している部分をスキップしていたら?
001510NGNG
どうもありがとうございます。

>>13
Windows 上の Visual Fortran のデバッグビルドとリリースビルドですが、
最適化のレベルということになるのだと思います。
で、MSDN を見てみたら、
> コンパイラを最適化すると、予期しなかったようにコードが変化する場合があります。
なんていうのがありました。どうしたら良いのかは書いてないみたいですが。

>>14
なるほど。それはそうですね。それも調べてみないとか。
VC++ なら警告レベルを上げればエラーになりそうですが、Visual Fortran
でもできるのかな。
001613NGNG
最適化レベルを上げると演算精度を犠牲にした最適化が行われる場合がある。
ゆえに、DEBUG状態の方が安全だと思う。
0017デフォルトの名無しさんNGNG
Fortran総合スレとして再利用しましょう

で・・・
Fortran関係のWeb掲示板ってどっかにある?
探してもあんまり見当たらないんだけど・・・
0018デフォルトの名無しさんNGNG
ナボナはお菓子のFortranです。
0019デフォルトの名無しさんNGNG
DEBUG と RELEASEのコンパイルオプションが自分で定義できるはず.
コンパイルスイッチをチョコチョコ変えて原因を探るべし
キット/O2とかそんなところでかかる
0020デフォルトの名無しさんNGNG
Visual Fortranを使用していますが、私の場合、
必ず /fltconsistency を使用します。

/fltconsistencyまたは/Opオプションは,Intelシステムでの
浮動小数点演算の一貫性を改善します。
0021初心者NGNG
LINUX MLD3 を使っているのですが。XeditでFORTRANプログラムをつくったのですが
f77 -o exsamp78.out exsmp78.fとやってもa.outができないのですがどうしてなんですか?
教えてください。
0022Kusakabe YouichiNGNG
In article >>21, 21 初心者 wrote:

> LINUX MLD3 を使っているのですが。XeditでFORTRANプログラムをつくったのですが
> f77 -o exsamp78.out exsmp78.fとやってもa.outができないのですがどうしてなんですか?

man f77

# っていうかふつうratforつかうぞ(って、Linuxのディストリビューションでによ
# ってはratforはいってないのもあるのかなあ)
0023デフォルトの名無しさんNGNG
連立一次方程式をガウス・ジョルダン消去法で解きたいのですが、対角成分が0になった時のピボット選択の部分はどういう風にプログラムすればいいのですか?
0024Kusakabe YouichiNGNG
In article >>23, デフォルトの名無しさん/23 wrote:

> 連立一次方程式をガウス・ジョルダン消去法で解きたいのですが、対角成分が0になった時のピボット選択の部分はどういう風にプログラムすればいいのですか?

IF文つかえばいいですね。
0025デフォルトの名無しさんNGNG
>>24
この説明で理解できる?
0026デフォルトの名無しさんNGNG
>>25 理解できない。
>>23 対角成分が非0になるように列を入れ替える。
>>7 Intel Inside な場合、Intel仕様とIEEE仕様の違いかも。
   i8087 (いしにえのIntel系FPU)の場合、
   IEEE math と Intel math という二つのモードがあって、
   IEEE で決まっている例外割り込み(桁あふれ等)を有効にするには、
   精度の低い IEEE math を使う必要があったと思われ。

#って誰の役にもたっていない...
0027デフォルトの名無しさんNGNG
*****クサカベ警報******
このスレは間も無く駄スレになります。
0028デフォルトの名無しさんNGNG
FORTRANをマターリ語ろうよ!
0029デフォルトの名無しさんNGNG
日本語の言語仕様書が欲しい・・・
0030デフォルトの名無しさんNGNG
どの版?>>29
0031デフォルトの名無しさんNGNG
>>30
Sunのf77あたり。PDFのはみっけたんだけど、書籍になってるのが欲しいッス。
根性で印刷するして、製本するしかない?
0032デフォルトの名無しさんNGNG
Sunのf77って使ったことないです。ごめんなさい。

#昔のSunにはf2cが入ってたけど、それじゃないよね。
0033デフォルトの名無しさんNGNG
>29 JISの規格書なら買えるでしょ。一万位だったか?
0034かじりたてオーとキャドNGNG
フォートランに関して是非御教授してもらいたいことがあります。

ユニックス・フォートランー>PCフォートランにコンバート作業中なのですが、
ユニックス上で組まれているフォートラン・プログラムの
各ソースプログラムからのサブルーチン経路がわかるようなモノ(ツリー)を
出力することは可能でしょうか? お願い致します。
0035デフォルトの名無しさんNGNG
頼むからカタカナで書かないでくれい。
ちなみに俺はそんなもん知らないヘタレですが。
0036デフォルトの名無しさんNGNG
ググールにて、"FORTRAN ftree" 引いてみそ。

おいらが前引いた時は、Fortran77 subset対応っぽい奴しか
見当たらなかったけど。
0037デフォルトの名無しさんNGNG
>>34
昔ホストプログラムのやつを手打ちでつくったことあるよ。サブルーチン300個ぐらいのやつ(藁
003820NGNG
>34 FLOPPY/FLOW はだめ?
ttp://www.netlib.org/floppy/contents.html
0039デフォルトの名無しさんNGNG
age
004036NGNG
>>38 あ、それそれ。
0041デフォルトの名無しさんNGNG
http://www.google.co.jp/search?q=%83t%83H%81%5B%83g%83%89%83%93%83%89%83%93%83%89%83%93&hl=ja&lr=
0042デフォルトの名無しさんNGNG
http://www.cs.utk.edu/f2j/
Fortran 2 Java(f2j) Project
0043デフォルトの名無しさんNGNG
2度と出てこなそうなスレなのであげ
0044デフォルトの名無しさんNGNG
富士通フォートランで扱える行列のサイズはどのくらいですか?
教えてください.
0045デフォルトの名無しさんNGNG
漏れはAIX-FORTRAN〜HPFだから知らん。

配列の次元数上限ならまだしも、サイズ上限って、、、
OSや環境依存でないの?
0046デフォルトの名無しさんNGNG
>>45
初心者ですいません.そうです,配列の次元数上限のことです.
いくらぐらいまで正常にプログラム回りますか?
0047デフォルトの名無しさんNGNG
整数型から文字型、文字型から整数型へ簡単に変換する方法はないでしょうか?
0048デフォルトの名無しさんNGNG
現在でも、使ってます。やはり大量データの計算処理は
fortranが早いから、使ってます。ところで算術比較で.EQ.とかって
あるけど==とか、<=とかはfortran90から使えるの??
誰かおしえてー。
0049デフォルトの名無しさんNGNG
>48 
そういった記号はf90から使えるよ。
自由書式(132桁まで)にも対応してるので
すごく使いやすくなった。
0050デフォルトの名無しさんNGNG
さげ
0051デフォルトの名無しさんNGNG
Fortran Powerstation(Win)を使っています。
つい最近Fortranを再インストールしたら

fatal error C1007:

というエラーがでてコンパイルできなくなりました。
誰か対策方法教えてください〜。お願いします。
0052デフォルトの名無しさんNGNG
↑自分で解決しました。環境変数がうまく設定していなかったようでした。
0053デフォルトの名無しさんNGNG
Compaq Visual Fortran で、COMサーバ作っている人いないかな
0054デフォルトの名無しさんNGNG
漏れの研究室、ひそかにfortranでプログラム使ってる。
欝山車脳。
0055デフォルトの名無しさんNGNG
うちの部署は堂々とFORTRANでWinアプリを作っていますが、何か?
とはいえ、鬱だ。
0056デフォルトの名無しさんNGNG
漏れの先生の主張は一つの言語を使いこなせれば、応用が利くから大丈夫。
とは言え少々欝だ
0057デフォルトの名無しさんNGNG
Fortran使いこなしても、応用利く言語ってかなり少なそう。
0058デフォルトの名無しさんNGNG
Fortran95だと別にAdaあたりとほとんどかわらんけどな。
構造体もポインタも使えるし。
0059デフォルトの名無しさんNGNG
>>47
> 整数型から文字型、文字型から整数型へ簡単に変換する方法はないでしょうか?

READ文、WRITE文を使えばOK。

こんな感じ
READ(INUM, 'I4', CNUM)
でいいと思った。(しばらく、FORTRAN使ってないので、細かいところで
間違っている可能性あり。)
0060デフォルトの名無しさんNGNG
>>47, 59 補足
文字型=>整数型 READ(CNUM, '(I4)') INUM
整数型=>文字型 WRITE(CNUM, '(I4)') CNUM
ですかね。
0061デフォルトの名無しさんNGNG
スレ違いかもわかりませんが、ちょい質問です。

FORTRAN サブルーチンを C(C++) から呼び出すとき、
文字列の配列はどうやって渡せば良いのでしょうか?

ええと、FORTRAN の CHARECTER C(3)*10 みたいな要素に、
C 側から放り込むやり方についてです。一応、自分でも試しました。

C++ で同じ文字列長の char 配列を複数用意し、
ポインタ配列を使って (配列*文字列) を表現したあと、

extern "C" fsub_( int& 配列数, char* 配列, int 文字列長 );

な関数宣言をしておいて、

SUBROUTINE FSUB( arr, cha )
integer arr
character cha(arr)*(*)

といった感じのサブルーチンに渡してみたのですが、
まともに動いてくれません。何故か文字化けします。
単純な一個の文字列ならうまく行ったんですけど…。

これが出来るようになると、ウチの研究室で FORTRAN を使う必要が
なくなって、非常に助かります。誰か偉いひと、ご支援ください。

ちなみに、コンパイラは g77 & g++ (2.96) on linux です。
0062デフォルトの名無しさんNGNG
文字化けした中身を、od -xc か dump で表示してコピペしたら?
0063デフォルトの名無しさんNGNG
>61
文字1個で上手くいくならループを回して1文字ずつ送れば良いような。
と思ったが、ちこっと調べてみたら、
最後のNULL文字以降を殺しておくこと(NULL文字以降も一緒に送られてしまうから)
for (i = strlen(<文字列>); i >= <配列長>; i++){
<文字列>[i] = ' ';
}
とやっておく、或いは、fortran側で、
<文字列> = <文字列>(1:<配列長>-1)
とやるか。

> これが出来るようになると、ウチの研究室で FORTRAN を使う必要が
> なくなって、非常に助かります。誰か偉いひと、ご支援ください。
fortran使いがまた減るのか・・・
006461NGNG
…解決しました。自分、アホでした。
ポインタ配列×文字列なんぞ使ってたのが悪かったわけで、
素直に char c[3][5]; とか宣言したらすんなり動きました。

>63
Cでメインルーチン組んだ方が応用ききますからねえ。
でも、細々としたところでは、まだ頼る必要があります。
0065のとNGNG
あるプログラムをVisualFortranで動かそうとしているのですが、動くときと動かないときがあります。
具体的な条件は以下のとおりです。

1.VisualFortran6.6(最新)付属のコマンドプロンプト上では動かない。
2.VisualFortran6.6のデバッカつきのもので動かすとちゃんと走る。
3.VisualFortran(バージョン97)では付属のコマンドプロンプトでも動く。

というものです。ちなみに1の動かないところでは「MATH〜」とエラーメッセージが出ます。
ですので、0割りなどが考えられるのですがそれならば2、3のケースでも動かないはずですよね?
ということで本当によくわかりません。
どなたかわかる方がいましたら教えてください。
抜け落ちている情報がありましたら指摘していただければすぐに書きます。
0066 NGNG
>>65
> 抜け落ちている情報がありましたら指摘していただければすぐに書きます。

「エラーメッセージは正確に」って、さっき言われたでしょ?
0067のとNGNG
ごめんなさい、エラーは、以下のとおりです。

run-time error M6201: MATH
- exp: DOMAIN error
Image PC Routine Line Source
pipe.exe 00430649 Unknown Unknown Unknown
pipe.exe 004304A7 Unknown Unknown Unknown
pipe.exe 00430601 Unknown Unknown Unknown
pipe.exe 00432998 Unknown Unknown Unknown
pipe.exe 0043240E Unknown Unknown Unknown
pipe.exe 00458AEC Unknown Unknown Unknown
pipe.exe 00452BE8 Unknown Unknown Unknown
pipe.exe 0042B919 Unknown Unknown Unknown
pipe.exe 00401672 Unknown Unknown Unknown
pipe.exe 0045C869 Unknown Unknown Unknown
pipe.exe 0044DCC4 Unknown Unknown Unknown
KERNEL32.dll 77E5D326 Unknown Unknown Unknown
0068デフォルトの名無しさんNGNG
>65
おそらくそんなに早くは実のあるレスがつかないと思われるので
気長に待ちなされ。
0069のとNGNG
>68
はい、わかりました。
0070デフォルトの名無しさんNGNG
>>67
> run-time error M6201: MATH
> - exp: DOMAIN error
は、exp() のドメイン (引数の有効範囲) を逸脱したってことだから、
exp() の引数がおかしくなってると思う。 (でも、マイナス方向は -∞ まで、
行っても大丈夫だし、プラス方向はオーバーフローエラーになるような気がする
が...。初期か忘れとかで浮動小数点として認識できないような値なんだろう
か ?)

とりあえず、問題の行は 00430649 番地にあるから、それを見直してみれば ?
(MAP ファイルの出し方と見方はわかるかな ?)
0071のとNGNG
>70
レスありがとうございます。
MAPファイルってぜんぜんわからないんですよね。。。
VisualFortran特有のものですか?
007270NGNG
>>71
ごめんよ、俺は VisualFortran つー奴は使ったこと無いので、ヘルプ
ファイルしか読んでないんだけど、Project Settings の Fortran タブ
のRun Time カテゴリにある Generate Traceback Information を
チェックしてビルドしてみてちょうだい。これで現象が再現したら、
トレースバック情報が...

forrtl: severe (24): end-of-file during read, unit 10, file ...
Image     PC    Routine Line   Source
teof.exe   004011A9 AGAIN  21    teof.for
teof.exe   004010DD GO    15    teof.for
teof.exe   004010A7 WE    11    teof.for
teof.exe   00401071 HERE   7    teof.for
teof.exe   00401035 TEOF   3    teof.for
teof.exe   004013D9 Unknown Unknown Unknown
teof.exe   004012DF Unknown Unknown Unknown
KERNEL32.dll 77F1B304 Unknown Unknown Unknown

と言うようにでるから、エラーメッセージのすぐ下の行の LineNo が問題
の行です。

これで再現しないなら、さっきチェックした Generate Traceback
Information のチェックボックスをクリアして、今度は同じ Fortran
タブの その他 カテゴリにある Generate Link Map チェックボックスを
チェックしてビルドしてね。そうすると、pipe.map (この名前が嫌なら、
Link タブの Debug カテゴリの Mapfile Name テキストボックスに好き
な名前を入れれば変更できます。) って言うファイルが作られます。
それには、関数の名前と開始アドレスが載ってるから問題の関数までは
これでわかる。(念のため再度実行して、エラーのアドレスを再確認のこ
と。) その関数に複数の exp() が使われてるなら、ヘルプで
/MAPINFO:LINENO を調べて、それを指定する。そうすると MAP ファイル
に行番号毎のアドレスが出力される。

> MAPファイルってぜんぜんわからないんですよね。。。
> VisualFortran特有のものですか?

MAP ファイル自体は、一般的な用語。コードとか、グローバル変数なんか
がどの番地に配置されているかの対応表のこと。
0073デフォルトの名無しさんNGNG
俺、そのあたり いにしえの IBM 5550 MS-Fortranでしかやった事ないけど(ワラ
C言語で言うところの matherr.h みたく、
浮動小数点例外をハンドリングするルーチンってFortranで書けなかったっけ(処理系依存 or IEEE規格)?

C言語なら、浮動小数点例外の発生したオペレーション名と引数(最大2つ)を構造体で取れるので、
forrtl: DOMAIN error: exp(NaN) (NaN = 0xffffffffffffffff)
みたいな表示をする事も可能だよ。
つうか、デバッガーの上で走らせる...と問題なく動くんだっけ(汗

007473 (横に逸れますが)NGNG
って事で、処理系のマニュアル or ヘルプファイル検索したら、
浮動小数点例外(やその他のエラー)を、人間様が判る形で表示する方法が
解説されてると思うよ。
#ちなみにIBM 5550の MS-Fortran 1.0のエラーハンドラーは、関数呼び出しタイプが _pascal だったような(汗
# i80286時代の標準言語って、pascal〜ADAだったんだよねー (遠い目

しかし、>>72の end-of-file during read って懐かしー。
FortranのREADって(Cのと同じく)トラブルのスクツだよねー。
Kernighan & Plauger が RATFORで Cモガキやったのもむべなるかな。

007570NGNG
> FortranのREADって(Cのと同じく)トラブルのスクツだよねー。
まあ、どんな言語でもそうだよね。つーか、人間でも言葉喋るより聞く方が難し
いよね。出力は、(大体) 自分の思うとおりできるけど、入力は相手次第だから
ねぇ。

ところで、のと の問題は解決したのかなぁ。
0076のとNGNG
>70
レス遅れてごめんなさい。
ちょっと忙しかったのでまだ言われたとおりにやってみていません。
でも、アドバイスありがとう。
もうすぐやるつもりです。
0077のとNGNG
>70
やってみました。
VisualFortranをさわったことないのに調べていただいて
ありがとうございます。
Generate Traceback Informationをチェックして〜というのは、
はじめにも書きましたがデバッカモードでやらせるとプログラムは
問題なく走るので原因究明にはなりませんでした。
Generate Link Map チェックボックスを チェックして〜というのは
その他のタブ、が見つけられなかった(日本語はないと思うのですが)ので、
やれませんでした。
しかし、いずれにせよこのケースは上のようにプログラムは走ってしまうと
思います。
走らないのは付属のMSDOSプロンプトを使ったときだけなので。

007870NGNG
>>77
> デバッカモードでやらせるとプログラムは問題なく走るので原因究明に
> はなりませんでした。
使ってないんでよくわからないけど、「Generate Traceback
Informationをチェックして」作った実行ファイルを「付属のMSDOSプロン
プト」で実行できないの ?

> その他のタブ、が見つけられなかった
う〜〜〜ん、ヘルプファイルにははっきり「その他」って書いてあるんだ
よなァ...。俺も変だとは思ったんだけどね。じゃあ Others とか
Miscellaneous とか言うカテゴリはないの ?

> しかし、いずれにせよこのケースは上のようにプログラムは走ってしま
> うと思います。
基本的にそんなことはない。Generate Link Map と言うのは、あくまでも
MAP ファイルを作るだけで、実行ファイルは同じものができる。
極端な話、他のオプションが変わってないなら、MAP ファイルだけ作って
00430649 がどの関数か当たりをつけると言うこともできるはず。

とりあえず Generate Link Map がわからないであれば、Project
Options: って言う所 (/include "Release" とかいっぱい書いてあると
ころ) の最後に /MAP /MAPINFO:LINES を入れてビルドし直してみて。
0079不器用ですから...NGNG
>>67
PowerFortran使った事ありませんが... (MS-Fortranだったもので)

>run-time error M6201: MATH
>- exp: DOMAIN error
>Image PC Routine Line Source

てのが、デバッガーでは出ないつうのは、
デバッガーでは例外検出しないモードか、
あるいは例外検出しても計算続行するモードになってるんじゃないのかなー?

0080のとNGNG
>70
やってみました。
>使ってないんでよくわからないけど、「Generate Traceback
>Informationをチェックして」作った実行ファイルを「付属のMSDOSプロン
>プト」で実行できないの ?
ナイスアイデアですね!
というか当たり前なのでしょうか?
しかし、実際やってみると不思議なことにexeファイルを作らずに
やってしまうみたいです。デバッカモードは。
なので、DOS窓で/tracebackというコンパイルオプションをつけて
やってみました。
すると以下のようになりました。

run-time error M6201: MATH
- exp: DOMAIN error
Image PC Routine Line Source
pipe.exe 00430A69 Unknown Unknown Unknown
pipe.exe 004308C7 Unknown Unknown Unknown
pipe.exe 00430A21 Unknown Unknown Unknown
pipe.exe 00432DB8 Unknown Unknown Unknown
pipe.exe 0043282E Unknown Unknown Unknown
pipe.exe 00458F0C Unknown Unknown Unknown
pipe.exe 00453008 Unknown Unknown Unknown
pipe.exe 0042BD39 Unknown Unknown Unknown
pipe.exe 0040D64E SMGSGS 2966 pipe.f
pipe.exe 00401672 MAIN 139 pipe.f
pipe.exe 0045CC89 Unknown Unknown Unknown
pipe.exe 0044E0E4 Unknown Unknown Unknown
KERNEL32.dll 77E5D326 Unknown Unknown Unknown

この139行目はサブルーチンSMGSGSをCALLしているところで、2966は
CF=1.D0-EXP(-YP/26.5D0)
というコードになっています(すみません、すべては見せられないので)。
たしかにEXPが使われているところで、あやしいのですがEXPは引数が0でも
問題ありませんし、ここでエラーになる要素がないような気がするのですが…。
0081デフォルトの名無しさんNGNG
linuxのfortranはネームリストの読み込みが変だ(った)
008270NGNG
>>80
とりあえず、その直前で YP (実数型だよね) の値を出力してみたら ?

> ここでエラーになる要素がないような気がするのですが…。
>>70 にも書いたけど、確かに exp() の定義域は -∞〜+∞ だから DOMAIN
error になるのは、YP がおかしいような気がする。

> DOS窓で/tracebackというコンパイルオプションをつけてやってみました。
よくわからんのだけど、DOS 窓でコンパイルしないとだめと言うことか ?
0083デフォルトの名無しさんNGNG
visualfortranのウォッチにはバグがある
0084デフォルトの名無しさんNGNG
YPの値が知りたい。必ず落ちるのか、特定の値のときだけ落ちるのか・・・
008584NGNG
すまそ。リロードしないで書き込んだらかぶってしまいまいた。ROMってます。鬱
0086のとNGNG
みなさん、レスありがとうございました。
YPの値はNahでした。
それだとEXPはだめなんですかね。
ただいまどこからNahが出てくるのか探しています。

83さんのコメントが気になるのですが本当ですか?
0087デフォルトの名無しさんNGNG
最適化をやめさせるとか。
最高レベルの最適化をするとコードが動かないこと多し。
0088のとNGNG
最適化というのはどのようなことですか?
コンパイルするときにレベル、というのは決定するのですか?
0089デフォルトの名無しさんNGNG
メニューのプロジェクトー設定タブかなんかにありませんか?
0090デフォルトの名無しさんNGNG
f90でcのマクロ定義#defineに相当するようなものってあるのでしょうか?
visualFortranのhelp探してるんだが、それらしきのが出てこない。
同じ定数をいろんな関数の中で使ってるのだが、桁数が多くて
間違いの元になりそうだから、#defineで定義できれば楽になると思ったんですが。

それとFortranって変数に数値ぶち込むときdoubleだったらいちいち
1.d0とかやらないとだめなんですね。cだったら単に1でいいのに。
型チェックがきびしいんでしょうか。
0091デフォルトの名無しさんNGNG
>>86
Nah ? Nan (Not a Number) じゃなくて ? どういう値なんだろうか...。
まあ、地道に追っていくしかないかな。頑張ってね。

>>87
そうそう、最適化するとお前みたいなへたれの書いたプログラムは動かんことが
多いよね。

>>90
数値定数でいいんなら、PARAMETER 文でいいと思うけど。
0092デフォルトの名無しさんNGNG
>>91
>数値定数でいいんなら、PARAMETER 文でいいと思うけど。
んで、複数ファイルに同じパラメータ書くのは冗長だから、
パラメータは共通ファイルに書いといて、
!include ディレクティブとか #include で取り込みたいものですね。

c   んで、UNIXのF77で fppとかcppとかm4とかsedとか使ってプリプロセスしてやると、
c   F77爺に「処理系依存するソースコード書くなゴラァ」とか怒られる罠。
c   F77爺って、一体この25年間ナニやってたのか、25分程問い詰めてみたい気分
009391NGNG
>>92
> include ディレクティブとか #include で取り込みたいものですね。
VisualFortran とかならできますけど、それが何か ?
0094デフォルトの名無しさんNGNG
ん、F77爺にF77互換で書けって言われなくて幸せですね。
0095デフォルトの名無しさんNGNG
helpでinclude検索してみました。
Fortranでもこんなことできるんですね。
昔のF77fortranに比べたらf90って、いろんなほしいなって思った
ものが実装されてるんですね。
なんだかC,C++のまねのような気もしますけど。
0096素人NGNG
プログラムファイルをコンパイルする時,
インクルード文も一緒にコンパイルするんですか?
0097デフォルトの名無しさんNGNG
たぶん、includeで指定されてるファイルをそこに展開するんだと思うが。
コンパイラへの命令みたいなものじゃないでしょうか。
0098素人NGNG
>>97
すんません,展開するってのはプログラムファイルが入っている
フォルダに入れる ってことでいいんでしょうか?
0099のとNGNG
みなさん、いろいろありがとうございました。
解決、までには至ってないですが、エラーの原因はつきとめました。
結局、アルゴリズムが悪かったようです。

Aという倍精度の実数をIF文で0の場合をはじいておいても、
A=AQRT(A)
とするとどうやらA=0となってしまうことがあるようです。
なので、そのあとでB/Aをすると0割りによりNanになるみたいです。
0割りを防ぐにはどのようにIF文などをつければいいのでしょうか?
案があれば聞かせてください。
0100デフォルトの名無しさんNGNG
AQRTってなんですか?
0101のとNGNG
すみません、SQRTの間違いです。
打ち間違えました…。
0102デフォルトの名無しさんNGNG
Aで割る前にIFでAのチェックをするとか
0103のとNGNG
ごめんなさい、間違えました。
というか↑の状況なら何も難しいことはないですよね。

IF文でAを0より大きいか0かで分岐させても、表示させると
どうやらA=0でもIF文の中に入ってしまうことがあるのです。
ちゃんと0として入らないときもあるのですが。
とても小さい値のときにIF文に入ってしまうようで、しかし
そのあとAで割るとNanになってしまいます。
IF文のところを0でなく1.0D-307とすると大丈夫なのですが、
(倍精度は307桁まであるようです)そのままではコードとして
あまりに決まりが悪いので、何か方法はないでしょうか?
0104MNGNG
a=1/∞みたいな感じの値で割ってしまって結果の値が∞になって爆発してるとかじゃないでしょうか?
確か浮動小数点の場合0はある程度幅を持っていたような気がします。

VisualFortranのヘルプで”浮動小数点環境”って検索してみれば、
なにやらいろいろ書いてあります。日本語版ヘルプはコンパックのホームページからダウンロードできます。
0105デフォルトの名無しさん NGNG
>>103
そもそも実数型に対して、.GE.だとか、.EQ.だとか、等号を問題にする
ような判定式を用いるのはまずい。例えばAが0かどうかを判定するのに、
A.EQ.0.0D0とは書かずに、DABS(A).LT.DEPS(DEPSはDATA文で1.0D-10などと
定義しておく)という風に書くのはFORTRANではごく普通のやり方。
「コードとして決まりが悪い」などということはない。
というか、値が1.0D-100とか1.0D-307(w とかいうのはもうゼロと同じ
なのであって、これと0.0D0を区別して、前者の場合は正しく動くが、後者
の場合は正しく動かないというのは、プログラムのロジックに問題があると
思うぞ。誤差の問題に関して脳天気なプログラムと推察する。この観点から
プログラム全体を見直すべし。
0106デフォルトの名無しさんNGNG
>>103
そもそも実数型に対して、.GE.だとか、.EQ.だとか、等号を問題にする
ような判定式を用いるのはまずい。例えばAが0かどうかを判定するのに、
A.EQ.0.0D0とは書かずに、DABS(A).LT.DEPS(DEPSはDATA文で1.0D-10などと
定義しておく)という風に書くのはFORTRANではごく普通のやり方。
「コードとして決まりが悪い」などということはない。
というか、値が1.0D-100とか1.0D-307(w とかいうのはもうゼロと同じ
なのであって、これと0.0D0を区別して、前者の場合は正しく動くが、後者
の場合は正しく動かないというのは、プログラムのロジックに問題があると
思うぞ。誤差の問題に関して脳天気なプログラムと推察する。この観点から
プログラム全体を見直すべし。
0107105NGNG
スマソ。何故か連続投稿。???
0108のとNGNG
>105

>というか、値が1.0D-100とか1.0D-307(w とかいうのはもうゼロと同じ
>なのであって、これと0.0D0を区別して、前者の場合は正しく動くが、後者
>の場合は正しく動かないというのは、プログラムのロジックに問題があると
>思うぞ。

すみません、理解力がないためか、前者と後者とは何を指すのでしょうか?
もし1.0D-100とか1.0D-307のことを指しているのなら、どっちもちゃんと
動きますよ。動かないのは0.0D0としたときだけです。
何を言いたいのでしょうか?

>誤差の問題に関して脳天気なプログラムと推察する。この観点から
>プログラム全体を見直すべし。

言われたとおりそうします。
しかし、

>DABS(A).LT.DEPS(DEPSはDATA文で1.0D-10などと
>定義しておく)という風に書くのはFORTRANではごく普通のやり方。

とありますが、このごくふつうのやり方ではDEPSより小さくて0.0D0より
大きい値をIF文に入れることはできないですよね。
でも本当はそうしたいわけなので、根本的解決になっていないような気が
するのですが…。
とんちんかんなことを言っていたらごめんなさい。
0109デフォルトの名無しさんNGNG
本当の0だけを取り除いて、0に非常に近いけど0じゃない値は
使いたいということでしょうか?
浮動小数点の値はどんな感じのビットになっていて、0の場合だけを
ビット演算ではじくとははどうでしょう?
0の場合のビットパターンを用意して、判定したい値とXORとって
ビットが全部0なら0、一つでも1があったらビットパターンが違ってたってことで0でないというのはどうでしょう?
自分でやってみた訳じゃなくて、単なる思いつきだからどうなるかは判りませんが・・・
0110105NGNG
>>108
前者…1.0D-100や1.0D-307
後者…0.0D0
要するに1.0D-100や1.0D-307は0.0D0と同じものと見なすべきだと
言いたかったわけです。

>とありますが、このごくふつうのやり方ではDEPSより小さくて0.0D0より
>大きい値をIF文に入れることはできないですよね。
>でも本当はそうしたいわけなので

ここが一番気になるところ。「そうしたい」というのは、DEPSより小さくて
0.0D0より大きい値は、0.0D0とは区別して「正しく」処理したいということ?
それだとA.NE.0.0D0などと書くのと同じで、DABS(A).GT.DEPSというように
Aを0とみなす範囲を広くとった意味がまるでなくなることになる。
本当に1.0D-20などを0.0D0とは区別して計算したいのですか? こういう区別を
しなければならないようなプログラムには根本的な問題があると思うわけです。
0111デフォルトの名無しさんNGNG
コンパックFORTRANに付属のBitViewerというツールで
浮動小数点の中身がみれます。
0112デフォルトの名無しさんNGNG
コンピュータって2進数で近似してるわけだから、
あんまり細かいところ見ても意味がないのではないでしょうか?
0113のとNGNG
>109

えっとですね、ちょっと単語が難しくてわからないところも
あるんですが、基本的に「本当の0だけを取り除いて、
0に非常に近いけど0じゃない値は使」うということは
IF文でできるんですよ。
しかし、そのIF文のなかで
1.0D0/A
とすると(0かそうでないかでわけた実数をAとしました)、
値がNanになってしまうというのが問題点なんですね。
そうならないためにはどうすればよいか、と悩んでいるんです。

使いたい
0114デフォルトの名無しさんNGNG
うーん、このスレは全プログラマの数パーセントといわれる
数値解析プログラマの集まりと見た。
それだけに他の情報処理系は入ってこられないから荒れない
な。
0115のとNGNG
↑「使いたい」っていうのは間違って入っただけです。
意味ないですm(__)m
0116デフォルトの名無しさんNGNG
この板の住人は理系出身者ばかりであると
断言できる。
0117デフォルトの名無しさんNGNG
>倍精度実数型は、コンピュータ内での数値表現を実数型(4バイト)の倍(8バイト)使うことによって、
>より正確に表現するものです。表現可能な数値の範囲は、
>正の最大値で1.7976×10+308、正の最小値で4.9406×10-324です。
という記述をネットで発見。
最小値の逆数は10+324のオーダーになるがこれは倍精度実数型に収まらないんじゃ・・
でもこれって、のと氏のいう範囲とも食い違うし間違いかも。

自信ないのでsage
0118デフォルトの名無しさんNGNG
>>117
C++でGMP使う。
以上。
0119のとNGNG
>117

貴重な情報をありがとう。
私の1.0D307という情報のソースは古〜い本なので、
それこそ間違っているかもしれません。
というかむしろ近くてあってるのかなと感じたのですが(^_^)
ちょっとun理系チックな考え方ですけど。

1.0D307というのはfortranで扱える最大の桁数(もちろん倍精度)
みたいで、実際1.0D307とか打ってコンパイルするとエラーが
出ますよ。
Visual fortranだけかもしれないですが。。
0120デフォルトの名無しさんNGNG
たまにステップ実行でデバッグして変数見てると、
+0とか−0とか言う値が出てくるが、これって0に非常に近いけど
0じゃない、でも0と見なすって数なのか?
0121デフォルトの名無しさんNGNG
わかりやすく言うと(この時点で眉唾)、8桁の電卓があるとしよう。
最大正の値が99999999。最小正の値が0.00000001(最初の0は表示なし)。
123.5678は表示できても12.3456789は表示できない。
(これが10進の浮動小数点っつことだよな。)

0で割れないのは数学上当たり前なので÷0はできないようにした。
じゃ、100を0.0000003で割ったらこの電卓は表示できるかね?
0122デフォルトの名無しさんNGNG
試しに0で割るとNaNになるの?Infじゃなく。
0123MNGNG
Fortran使ってる人まだこんなに居るんだ。
やっぱ地球科学系の数値計算とかでしょうか?
まさかWinのアプリケーションFortranで作ってるとかいう人は居ないと思いますが。
0124デフォルトの名無しさんNGNG
なぜ地球科学(ワラ
0125デフォルトの名無しさん NGNG
>>123
>まさかWinのアプリケーションFortranで作ってるとかいう人は居ないと思いますが。
>>55の鬱が悪化するかも(藁
0126105NGNG
>>121
浮動小数点をそういう電卓に喩えるのはまずい。
1.234D56のように仮数部と指数部に分けて表現する、これが浮動小数点の
基本概念。仮数部で有効桁を、指数部でオーダーを表すわけです。
「100を0.0000003で割ったら」、0.3333333333D9などとなり、これは
勿論(有効桁分は)正確に表現できます。
したがって>>のとさんのように1.0D-200は0ではないちゃんとした値であって、
きちんと計算出来て欲しいというのはもっともです。実際その値そのものは
正確に保持しているわけですからね。しかしこの考えはプログラミングの
観点からは非常に危なっかしい。この値がどこから出てきたのかというのが
問題になります。最初から例えばプランク定数で定義され、素粒子の世界だけ
で閉じている計算から出てきたものであればまあ一応OK(一応と付け足した
のは、これでも問題があるからですが、これは後回しにします)。しかし
現実に相手にしているのは有限要素法なんかだとmmとかμmとかの世界であって、
せいぜいD-10程度のオーダー。こういうオーダーの計算を行っている途中に
D-200などのオーダーの値が出てきたら、これはもうゼロ以外の何の意味も
持ちません。その辺りの考え方がアバウトなようで、心配なわけです。
と、ここまで書いて本当にここら辺りの問題をうまく伝えられるのかが疑問に
思えてきた(苦笑
まあ、のとさんも色々試行錯誤しているようで、その結果待ちということに
しましょう(w
0127デフォルトの名無しさんNGNG
>>126
指数部が桁足りないんじゃないっす?
0128C->F90NGNG
Fortran90のポインタ使ったことある人いますか?
Cのポインタと同じく変数のアドレスを持っている32bitの整数ということなのか
と思ったけど、本で調べてもアドレスなんてこと全く書いてなかった。
Cのポインタと同じようには使えないんでしょうか?
012970NGNG
>>99
それは、当たり前。コンピュータの実数って所詮近似値だから、非常に小さい値の
sqrt() を取ったら 0 になってしまうことがある。
また、非常に小さい値に対して 1.0D0/A 等とやると結果が有効範囲に収まれない
ことも充分ありえる。
どうしてもこれを避けたいなら、逆に 1.0D0/A の結果が NaN になった事を検出
すると言う方法の方が簡単だと思う。ヘルプで、ISNAN(x) 関数を調べてみて。
ただ、実際問題としてそのような状況になるのはロジックに問題があるような気が
するけど、それは大丈夫 ?
0130のとNGNG
>105
親切にいろいろありがとうございました。
126にかかれていることはよ〜くわかりましたよ。
大丈夫です、わかりやすかったです。
よく考えたら非常に小さな値をセンシティブに扱っても
意味はないですね。
先生ともディスカッションして(実は大学院生(^_^))
あまりに小さい値は0としようということになりました。
本当にありがとうございまず。

>70
70さんもいろいろありがとうございました。
ロジックは大丈夫です。
いろいろな要因が重なるうちに(主に小さい値どうしの掛け算)
値が小さくなっていってしまったりするだけです。
ここの人はみんな親切で助かりました。

いろいろあって忘れてしまったのですが(すみません)、
tracebackのことを教えてくれたのが一番助けになりました。
ありがとうございました。

ただ、まだプログラム自体は完成してないのでまた聞くかも
しれません(^_^)
0131デフォルトの名無しさんNGNG
>>55
winのアプリケーションFORTRANで作るっていっても、関数だけFortranで作って
メインのところはVC++とかで作っているんですよね?
まさかWinMainから全部Fortranで作ってるとか・・・
013255NGNG
確かに、根っこ部分はCですけどね。
FORTRANのイベントループ(のようなもの)、
見てるだけで目眩がします。算術GOTO文の嵐。
0133デフォルトの名無しさんNGNG
某高校のFORTRANはBASICで動いてる。
Breakキーを押すと「Break in 685」と表示される…。
う”〜〜〜ん。
0134デフォルトの名無しさんNGNG
>>132
F77で書くようにとか仕様があるんですか?
F77でwhile(){ }とかdo{ }while();とか実現しようとすると、goto使わざるを得ないからいやだな。ifとgotoでループ作ってる人が居てびっくり。

0135デフォルトの名無しさんNGNG
>>134
一応、F77のしばりはありますね。DO-ENDDOくらいは使っちゃいますけど。

VFは、今度は HP Visual FORTRAN になるのでしょうか?
MPS=>DVF=>CVFと、バージョンあげるたびにメーカーが変わっているような気が......

次バージョン是非、エディタにIntelliSense付けて欲しいな。
あ、FORTRAN.Net になるのか?


0136syukudaiNGNG
線形回帰のソースおちてるところ知りませんかね?
自分で探してもみつからないので・・
0137デフォルトの名無しさんNGNG
http://www.netlib.org/ あたりで
linear regression でサーチ は?

0138あの・・NGNG
基本的な質問させてください。
フォートランの場合は配列を引数とするためには、サブルーチン側ではど
のように書けばよいのですか?
subroutine 名前 (x(i),y(i))
みたいな書き方で良いのでしょうか?それとも添え字は要りませんか?
0139デフォルトの名無しさんNGNG
subroutine 名前 (x,y)
0140あの・・NGNG
>>139
わかりました。
もうひとつききたいんですが、そのサブルーチンの後に
subroutine namae (x,y)
dimention x(100)
dimention y(100)
みたいな宣言も必要ですか?
0141デフォルトの名無しさんNGNG
>>140
当然配列宣言は必要。宣言がないと通常変数と区別がつかない。
あと、ディメンションじゃなくてディメンジョンね。スペルが
チョト違うYO!
まあ普通は、REAL*8 X(100),Y(100)のように型宣言で配列宣言
も兼ねる書き方をするけど。
それにしても英小文字で書くとFORTRANじゃないみたいだなあ。
頭の固い漏れだけか?(爆
0142名無しさん@カラアゲうまうまNGNG
>>141
> それにしても英小文字で書くとFORTRANじゃないみたいだなあ。
禿同。
0143140NGNG
あやうくスペル間違いでコンパイルとおらないところでした。感謝します!
しつこいようですがもうひとつ聞きたいのですがメインプログラムで配列を渡す時は
サブルーチン名(X,Y)でいいですか?それからメインでは、渡す配列は20までしか
確保していないのですが、受け取るほうのサブルーチンで21以上にもアクセスできますか?
subroutine(x,y)
RWAL*8 x(100),y(100)
do 10 i=1,50
z=x(i)+y(i)
みたいなことが書きたいのです・・文法あってるかな・・
0144デフォルトの名無しさんNGNG
そりゃむりだろ・・
0145名無しさん@カラアゲうまうまNGNG
なんでワザワザそんなことを。
0146デフォルトの名無しさんNGNG
fortranを実行するときにwfl386とwfc386の2種類があるけど
どう違うの?
0147デフォルトの名無しさんNGNG
>>143
自殺願望か?
できますよ。
0148デフォルトの名無しさんNGNG
RWAL型ならできるかも。ナンチテ
0149CNGNG
>>143
無理でないかい。
多分コンパイルエラーか、x(20)以上にアクセスするときに何か実行時エラーが出ると思う。
C言語なら、動くよ。ただ確保したところ以外にいじるとどうなるかは
わからないが。
Fortran最近始めたばかりで余りよく知らないんだが、
関数のなかでもx(100)とかやらなくちゃならないってことは
関数には配列のコピーが渡されるって事か?
0150141NGNG
>>149
>関数には配列のコピーが渡されるって事か?
NO。FORTRANの引数はすべてアドレス渡しで、cのような値渡しの
仕組みは一切ない。したがって、
>関数のなかでもx(100)とかやらなくちゃならない
というわけではない。実際、SUBROUTINE側では配列の長さが分から
ないので、REAL*8 X(1) などと宣言したりする。
要するに配列である旨をコンパイラに教えるだけの意味。
まあオプションでOut of Rangeのチェックができるコンパイラもある
けどね。現実的にはそんなチェックをかけたら、使い物にならない(爆

>>143
>メインでは、渡す配列は20までしか確保していないのですが、受け取る
>ほうのサブルーチンで21以上にもアクセスできますか?
>>144-149の言うとおり、できるわけがない。実体(実引数)は必要な
だけ確保しておかなければならないのは当たり前です。
コーリングシーケンスはそれでOK。CALL NAMAE ( X, Y ) などとやる。
勿論配列宣言と型宣言も必要。この場合の配列宣言とは、単に宣言だけ
でなく、領域実体の確保も意味することに注意。
うむ、これでほんとに分かってもらえるかな。ま、とにかく、がんがれ!(w
0151デフォルトの名無しさんNGNG
subroutine hoge (x,y)
RWAL*8 x(1),y(1)
0152デフォルトの名無しさんNGNG
余談&常識なんだけど、
引数に多次元配列を渡す場合は、
配列の形状を共有するために、
内側N-1次元分の配列サイズも
引数で渡す。
0153デフォルトの名無しさんNGNG
fortranで書かれた、連立一次方程式を解くプログラムと
逆行列を求めるプログラムが
欲しいのですが、これらをを自分で作らずに手に入れる方法などを
どなたかご存知ありませんか?
やはり、自分で作るしかないのでしょうか?
よろしくお願いします。
0154デフォルトの名無しさんNGNG
>>153
本屋でタチヨミすれば?
逆行列程度ならネットにおちてる可能性も・・
しかしC言語等に比べるとネットに落ちてる確率は低い。
物理屋さんしか使わないからな・・
0155デフォルトの名無しさんNGNG
>>153
その類の数値解析パッケージは、探せばくさるほど転がってるけど。
英語読めるか? 137あたり参照。
0156デフォルトの名無しさんNGNG
CのプログラムをFORTRANに変換するツールってあります?
0157ショボ鯖缶NGNG
研究でSUNのマシンを買ってきたんだが、
FORTEなんたらってうFORTRANのコンパイラCDがついてたけど
ライセンスは別途購入する必要があるの?

SUNのコンパイラ入れればやっぱ処理速いんですか?
教えてキボンヌ。
0158ショボ鯖缶NGNG
研究でSUNのマシンを買ってきたんだが、
FORTEなんたらってうFORTRANのコンパイラCDがついてたけど
ライセンスは別途購入する必要があるの?

SUNのコンパイラ入れればやっぱ処理速いんですか?
教えてキボンヌ。
0159ショボ鯖缶NGNG
研究でSUNのマシンを買ってきたんだが、
FORTEなんたらってうFORTRANのコンパイラCDがついてたけど
ライセンスは別途購入する必要があるの?

SUNのコンパイラ入れればやっぱ処理速いんですか?
教えてきぼん
0160ショボ鯖缶NGNG
ウワ 二重カキコになってる。申し訳ありませんでした。
0161デフォルトの名無しさんNGNG
三重カキコじゃん
0162デフォルトの名無しさんNGNG
>>160
三重でした。氏んできます
0163デフォルトの名無しさんNGNG
VisualFortran6.xの後続って出るのかな?
VisualStudio.NET対応のVisualFortran.NETとか
HPと合併してFortran止めちゃったりしたら悲しい・・・
0164デフォルトの名無しさんNGNG
intel fortran はどう?
0165デフォルトの名無しさんNGNG
>>164
結構良さそうだね、IntelFortran
でもIntelのって初めて聞いた。アカデミックソフトのカタログにも載ってないし。
これって本当にコンパイラだけみたいだね、開発環境はVisualStudioが必要みたい。
0166デフォルトの名無しさんNGNG
俺も大学の頃はFortranなんて死に絶えているだろうと思ってC/C++で
シコシコ数値懐石やってたさ。ところがどっこい、流体計算ではまだ現役。
しかも3000行のソースの中に"go to"が100箇所以上あるスパゲティ・ソース。
構造化プログラミングから入った俺には読解自体がかなりつらい。
0167デフォルトの名無しさんNGNG
本当にFortranはCより早いのか?最近のCPUのアーキテクチャに
あわせてコンパイラに最適化コード吐かせたCより早いのか?
(という実験をそのうちやろう)
0168デフォルトの名無しさんNGNG
fortranをcやc++やjavaで書き直す必要ってあるの?
また実際そういう流れってあるの?
必要性が無くても流れで移植とかがはやってるってこと無い?
0169デフォルトの名無しさんNGNG
>>168
Cはともかく、Javaは無理じゃないか?書き直すことは出来るが
速度や、数学関数の精度が低いだろう。Cでも現場によっては
今ひとつと言われてしまうかもしれない。
その前に、古い時代のスパゲティ・ソースをFortran77や90の
仕様を使った構造化プログラミングに直すのがまず先決のゆな
気がするぞ。
0170デフォルトの名無しさんNGNG
「最近はハードウェアが高速で安くなったから、コードは効率よりも
保守性を重視して....。」という話も、スパコンの中で数十時間解析
してる世界だと通じない場合があるよなぁ。「じゃ、あと10億で
クラスターを一台増やしましょう!」なんて気軽にはいえん。
0171デフォルトの名無しさんNGNG
>>168
Fortranの問題というより、汎用機の時代から
世間のプログラミング作法の常識とはかけ離れて
可読性の低いソースが書きつづけられていることが
問題だとおもふ。
0172デフォルトの名無しさんNGNG
>>170
なんにでも特例はある。というかスパコン自体特例なような。
一度使ってみたいが。
0173デフォルトの名無しさんNGNG
>>171
いまさら40前後の上司に"go toつかわず、関数作って、CPUに
あわせた最適化コード吐かせて高速化"なんていえんわな......。
0174デフォルトの名無しさんNGNG
C++移行したいらしいが研究者がC++を使えない罠
0175デフォルトの名無しさんNGNG
FORTRANの方がCより速い、とか言われる理由

・再帰関数書けないFORTRANは、引数がヒープ上にあり、大域変数としてアクセスされる
・ベクター計算機用ライブラリは、FORTRANの方が普及してる
・FORTRANしか使えない人にとって、Cを覚えながらプログラム書くより、早く結果が出る
0176名無しさん@カラアゲうまうまNGNG
>>175
> ・再帰関数書けないFORTRANは、引数がヒープ上にあり、大域変数としてアクセスされる
レジスタ渡しのほうが速かったりしない?

> ・FORTRANしか使えない人にとって、Cを覚えながらプログラム書くより、早く結果が出る
それは「速い」理由じゃなくて「早い」理由。
0177デフォルトの名無しさんNGNG
Fortranでプログラム書いている人って、だいたいが大学の研究者
とかで、ソースコードにしても基本的に自分さえわかればいいって
感じで書いているから、ソース渡されても解読するのが非常に困難。
ドキュメントなんてまず書かないし、関数のヘッダとかも付けないし、
doループifブロックのインデントないし、とにかく流れが読みにくい。

Fortran77にCの機能くっつけたようなF90にしても、周りの人ほとんどか
古式ゆかしいF77使っていて、F90使っている人なんて皆無に近い。

0178名無しさん@カラアゲうまうまNGNG
Fortran用のindentみたいのはないのかね?
0179デフォルトの名無しさんNGNG
>>177
禿同
0180デフォルトの名無しさんNGNG
>>178
インデントなんて、ifとかループの範囲の行を少し引っ込ませれば
いいだけだから、Fortran用のインデントも何もないと思う。
F77の場合1行64文字位までしか書けないから詰めてるんじゃないかな。
f90ならもっとたくさん書けるけど、まだまだ77信者が多いから
F77形式でやらなくちゃならない。
0181デフォルトの名無しさんNGNG
正直、フォートランは大文字で書いて欲すぃ。
0182デフォルトの名無しさんNGNG
FORTRAN77 使ってます。
別に信者というわけではなく、商用コンパイラでしか動かないコードがあり、
うちの研究費では 77 と 90 両方を買うことができないため 77 が優先されました。

せんせー、科研費当てて Fortran90 コンパイラ買ってください...。
0183デフォルトの名無しさんNGNG
>>182
無料のコンパイラじゃダメか?
DECのとかintelのとか?
0184デフォルトの名無しさんNGNG
>>183
Intelのコンパイラって、無料だったっけ?



といいつつあげてみる
0185182NGNG
Intelは評価用ライセンスで試してみました。
しかし、今まで使ってきた商用コンパイラでコンパイルされた
某ライブラリとのリンクしなければならないため、
困ったちゃんな状態に。

Intelでライブラリをコンパイルし直せばよいのですが、
あっちでwarning、こっちでerrorという状態になり(誰だよ、このコード書いたのは..)
あきらめてしまいました。

とうぶんFORTRAN77でいきます...。
0186デフォルトの名無しさんNGNG
某ライブラリが何かを書けば解決するかもしれないね



などと書いてみるテスト。
ちなみにわたくしただいまintel fortranでOpenMPの修行中です。ハァハァ
0187デフォルトの名無しさんNGNG
板のレベルについていけない初心者です.

Visual Fortran 5.0でbitmap画像を処理してみたい.
各座標のRGB値を読み取って,10進数で配列に納めたいんですが...

OPEN(10,FILE='01.bmp',ACCESS='DIRECT',recl=1)
OPEN(6,FILE='data.dat')
DO m=1,150
READ(10,rec=m+54) c(m)
WRITE(6,*) m,ichar(c(m))
ENDDO

これじゃ,なんか駄目っぽい.
どこが駄目か教えていただけるとありがたいのですが.
0188デフォルトの名無しさんNGNG
>187
まず読み込むbmpの色深度によって1ピクセルのデータのサイズが変わるけど
その処理をしてないと思った。これはフルカラー(24bit)だったらR,G,B
それぞれ1バイトずつだからまあ24bit限定にすればよいと思うけど。
あと、bmpフォーマットは上下逆(右下?がデータの先頭に来る)
だけどその辺知ってるのかなという気がした。
何をしたいのか書いてくれないと説明のしようがないと思われ。
0189187NGNG
bmpフォーマットについては,調べてみましたので大丈夫だと思います.

フルカラーを想定しているので,まずヘッダの54バイトを読み飛ばす.
55バイト以降は,BMPの左下からRGB値がBGRの順で並んでて,

配列C(m)は,CHARACTER*1で宣言していますので,

c(1)には最左下のB値
c(2)には最左下のG値
c(3)には最左下のR値
c(4)には最左下の一つ右のピクセルのB値

がそれぞれ文字型で入っていって,

それを,ichar(c(m))で,10進数に直せば

c(1)=120,c(2)=20,・・・
といった具合に,各座標のRGB値を10進数で取り出せるのでは?と思ったわけです.
ところが,バイナリエディタで開いた値とは,違う値が返ってくる.

>文字コードを返すICHAR関数はFORTRANの標準の組み込み関数であるが,
>その値は機種に依存することになる.

ってのが関係してたりするのかな?などと考えて頭がこんがらがって
きたので,ここで質問した次第であります.
===============================================
なんか,見当違いなこと書いちゃってるかもしれませんが,
よろしくお願いします.
0190187NGNG
あ,途中ちょっと修正

×間違い
 c(1)=120,c(2)=20,・・・
 といった具合に,・・・

○正解
 ichar(c(1))=120, ichar(c(2))=20,・・・
 といった具合に,・・・

スマソ
0191デフォルトの名無しさんNGNG
これだとbmpの55バイト目から204バイト目を十進で出力するプログラムだね。
cが150取ってなかったら落ちるだろ。
0192187NGNG
>>191
cの配列のサイズは十分大きくとってあります.

おっしゃる通り,
「bmpの55バイト目から204バイト目を十進で出力する」
というのを意図したプログラムです.

ところが,出力されてくる値が,バイナリエディタで開いて見た値と
異なっている.もうなんでなんだと.

BMPファイル的にはフルカラーなんですが,元画像は白黒CCDカメラで撮った
ものなので,バイナリエディタで開くと,20,20,20,13,13,13,55,55,55・・・
といった具合に,3つ同じ値が連続しています.

ところが,ichar(c(m))で返ってくる値は19,20,20,24・・・
みたいなかんじで,バイナリエディタで開いた値とは異なる.
意味がわからん.といったわけです.
=======================================================
毎回,情報の小出しになっちゃって申し訳ないですが,
よろしくお願いします.
0193デフォルトの名無しさんNGNG
Compaq Fortranのサイトだから違うかもしんないけど、

http://www.compaq.co.jp/products/dvf/docs/vf-html/pg/pg04_01_07.htm#byterecl

を見ると
>/assume:nobyterecl を指定すると,書式なしファイルの RECL 値が 4 バイト
>(ロングワード) 単位であることを指定したことになります。これが基本設定です。
なんてことが書いてあるから、コンパイルオプションを確認するといいかも。
0194187NGNG
>>193
ちょっと僕のキャパを超えました.
まださらっと見ただけですが,リンク先,あまり理解できませんヽ(´-`)ノ

所要で外出のため,
明日にでもじっくり読んで考えます.

どうもお世話になります.
0195192NGNG
>>194

http://wwwoa.ees.hokudai.ac.jp/people/numa/enshu/fileio.html

にもあるけど、recl指定がByte単位のコンパイラ(g77とか)とワード(4Byte)単位の
ものがあると。おなじrecl=1でも前者は1Byte,後者は4byteだと。で、Compaq
fortranはどうやらコンパイルオプション/assume:bytereclを明示的に指定しないと
後者扱いになるよっていう話みたいね。自分はByte単位のコンパイラしか使ったこと
ないんでいまいちわからんが。もし後者だとすると

READ(10,rec=m+54) c(m)
の時点でm=1の場合(1+54)*4=220バイト目から読んでることになるんでないかと。
今回のような用途の場合、54バイトなんて言うバイト単位の読み飛ばしをしたければ
/assume:byterecl をつけた上で

OPEN(10,FILE='01.bmp',FORM='UNFORMATTED',ACCESS='DIRECT',recl=1)

とOPENしてやる必要があるんじゃないでせうか。UNFORMATTEDも明示した方が
確実ではないでせうか。VisualFortranも知らんでしゃしゃり出てスマソだが。
0196193NGNG
↑
すんまへん上の名前の192は193の間違いですた。
0197デフォルトの名無しさんNGNG
UNIX上で使っていたアーカイブ・ライブラリ(拡張子.aのやつ)って
Windows上でも利用できますか?
古いワークステーションのプログラムをWindows上で走らせたいのですが、
アーカイブ・ライブラリになってるんです…。
0198デフォルトの名無しさんNGNG
普通無理だす
0199デフォルトの名無しさんNGNG
>>197
アーカイブは勿論オブジェクトモジュール(コンパイル済みの奴)の集まりなのでしょう?
それをUNIXからWindowsにそのままコピーして動くなんて、理屈から言っても、
ぜ〜〜〜〜ったい無理だと思う。Javaじゃないんだし。そんなことができたら、
ビルおじさんは赤鬼みたく激怒するのでは? 少なくともソースのリコンパイルは
必要でしょう。それで正しく動くかどうかもかなり怪しいと思われるが…。

で、全く話題が変わるが、「くだ質スレ」でint table[256]の各配列要素にすべて32を
初期設定する方法について盛り上がっていたのだが、FORTARNでは次にようにできた
と思うのだが、これでOKでしたっけ?
INTEGER*4 TABLE(256)
DATA TABLE/256*32/
考えてみれば*は乗算の演算子なわけで、256*32の計算結果が1個だけセットされる
ような気もする。DATA文の中では演算子は使えなくて、やはり上のコーディングで
OK? FORTRANから離れて大分経つので、自信がない。誰か詳しい人ヨロピク♪
0200デフォルトの名無しさんNGNG
>>199
>DATA TABLE/256*32/
でOKだと思います。DATA文って「宣言文のような見かけの立派な実行文」ですよね。
新しい規格からは削除されるみたいですが、大丈夫。新しい規格でコーディングする
くらいなら誰もFortran使いませんって(笑)。
0201デフォルトの名無しさんNGNG
まったく同意。
FORTRANの様な言語は言語仕様を拡張したり文法をいじる必要はない。
開発補助ツールを充実させればいいだけのこと。
0202187NGNG
>>195
どうも報告遅くなりますた.

理解もそこそこに,おっしゃる通りにOPENしてみました.
んで,みごと解決!

いや,お世話になりました.感謝感謝です.
0203195NGNG
>>202
そりは大変良かったですね。自分もWebで調べただけなんで自信なぞこれっぱかも
ありませんですた。でもCompaq Fortranのサイトは細かいとこまで載ってるんで
とっても(・∀・)イイ!発見。
0204デフォルトの名無しさんNGNG
数値計算なんかにFortranが愛用されている理由に
Cなんかより速いって理由があるらしいけど、
何でCよりFortranの方が速いんですか?
コンパイラの最適化とかですか?
それとも言語の仕様とか
0205FORTRANマンセー!NGNG
>>204
パソコンレベルの話だとFortranの速度の優位性は特に無いと思いますよ。
今時のコンパイラだとCもFortranも大して変わらないか、むしろCのほうが
速いことも実際あります。スパコンレベルだとFortranユーザーばっかり
なのでメーカーもそれなりにFortranには力を入れているんだと思いますが。

あとこれは聞いた話ですが、Fortranの最適化がCより優れている点は
タコいコードを書いてもそれなりに最適化してくれることだとか。
数値計算する人って計算そのものを研究する人と計算を応用に使う人の
2種類に分けられますが、前者はともかく後者はプログラムに関しては
素人がそろっているのでこういう点では助かるのではないかあと。

まあ、実際そんなことよりもアカデミックならFortranマンセーだろうがっ!
という感じでFortranを使ってる人がほとんどな気が。私だけ?(わら
0206デフォルトの名無しさんNGNG
数値計算をする人たちはプログラムには大して興味ないからだろ。
FORTRANで用が足りるのになんでわざわざC?ってかんじなんだろ
0207デフォルトの名無しさんNGNG
プログラムには大して興味ない数値計算をする人たちがかつて作った
プログラムをメンテしなくてはならない私は、やはりFORTRANが嫌い。


自分が作ったプログラムは、FORTRANでも好きだけど。
0208デフォルトの名無しさんNGNG
Fortranの入門書でまともそうな本ってありますか?
本屋行っても、時代遅れのような本しかなくて・・・
0209デフォルトの名無しさんNGNG
>>208
入門書が時代遅れって

内容が時代遅れ→Fortran自体が時代遅れなのでヨシ
装丁が時代遅れ→Fortran関連の本なんて古いのしかないんだからヨシ

ですが何か?そうでない入門書って
http://www.pearsoned.co.jp/washo/prog/wa_pro40-j.html
こういうのか?いきなりf90でも良いけど他人のF77コードを読むのが
苦痛になるという諸刃の剣。用途によってはお勧めできない。
0210デフォルトの名無しさんNGNG
fortran の本は大学の本屋に行けばたくさん売ってると思う。
その辺のPC関連の書籍扱ってる店では全然ないね。
0211名無しさんNGNG
必ず
IMPLICIT NONE
を宣言して,変数を全て自分で型を宣言しないと気が済まない人って
いますか?
0212デフォルトの名無しさんNGNG
LAPACK使いこなしてる人います?
0213デフォルトの名無しさんNGNG
>>211
Cの方を先にやってたから、その方が普通だと思っている。
CからFortranの関数呼び出すとき、値がまともに返らないと思って
いて、関数名の先頭の文字にIを使っていたので、Rか何かくっつけたら
きちんとdoubleが返ってきた。
関数の宣言で、double precision Iなんとか(......)と
やってもimplicit none しない限りだめなの?
0214デフォルトの名無しさんNGNG
FORTRAN用のXPテストユニットってないのかな
0215デフォルトの名無しさんNGNG
部長が、私が作ったソース内にimplicit none を発見して私に怒りました。
「fortranには暗黙の型宣言があって、みんなそれを使ってプログラム組んでるのだから、
お前一人がそんな勝手なことをするとわけがわかんなくなる」ということだそうで。。
個人的な好みから、小文字でソース書いてるのですが、「これfortranか?」とも。。
退職が頭をかすめました。
0216デフォルトの名無しさんNGNG
>>215
それはfortranではありません
FORTRANです
0217デフォルトの名無しさん NGNG
>>215
そんなことでいちいち「退職」なんて考えてたら、体がいくつあっても
足りんぞ(藁
部長のお叱りはもっともと思われ。君がコーディングしたものを、他人が
読む羽目になることはよくあること。自分だけの基準を勝手に決められた
のでは、読まされる方はたまったものではないよん♪
そもそも>>213がおかしい。
>関数の宣言で、double precision Iなんとか(......)と
>やってもimplicit none しない限りだめなの?
んなこたぁない。Iなんとかの部分をきちんと書いていないと
思われ。大体IをRに変えたら「real」でなく「double」に
なったというのも怪しい…。
0218デフォルトの名無しさんNGNG
>>215
退職しる。そもそもそんな奴がFORTRANを使うような職場にいるのが間違い。
CやPascalを書くときならともかく、LXXXXがRealだろうか、とか考えたくもない。
だいいち他の奴のソースとギャップが大きすぎてかえって読みづらいだろ。
0219デフォルトの名無しさんNGNG
>>215
IMPLICIT NONEはなるべく、というか必ず宣言すべきでは?

これを勝手に宣言し、さらに各変数の(変数名はそのままに)型宣言するだけでも怒られるの?
その上司はデバッグしたことないのでしょうか???

0220デフォルトの名無しさんNGNG
>>216
lapackは数値計算にとっても便利だよ。

0221デフォルトの名無しさんNGNG
212のまちがい。

0222名無しさんNGNG
ふざけたプログラムを作ってみました.

program test
cimplicit none
integer*4 i
i=10
write(6,'("i=",i10)') j
stop
end

実行環境 Debian GNU/Linux i386
g77 2.95.4-16

$ gcc -o test test.f
$ ./test
i= 134522604
値は実行環境に依るでしょう.
implicit noneのコメントを外せば,
jが宣言されていないからコンパイル出来ません.
「fortran」使いでした.
0223名無しさんNGNG
あれ,タブで飛ばしたのに左ツメになってしまった.
0224名無しさんNGNG
s/$ gcc/$ g77/
寝ぼけていました.逝ってきます.
0225デフォルトの名無しさんNGNG
私の持っている本には乱数発生の関数が載っていなかったのですが、
そのようなものはないのでしょうか?
組み込み関数として用意されているのでしょうか?
くわしい方いましたら、教えてください。
0226デフォルトの名無しさんNGNG
>>225
コンパイラによるぞ
0227デフォルトの名無しさんNGNG
コンパイラはVisualFortran(6.6 UpdateA)です。
0228226NGNG
ran()

tp://ftp.compaq.co.jp/products/dvf/cvf-help.zip

↑に日本語のマニュアルがある
0229デフォルトの名無しさんNGNG
ありがとうございました
0230225NGNG
もうひとつ質問したいのですが、擬似乱数ではなく本当の乱数
というのはないのですか?
0231デフォルトの名無しさんNGNG
>>230=225
「本当の」乱数というものは現実には存在しないでしょう。
サイコロを振っても「本当の」乱数になるかどうかは疑わしい。
あるところで妥協せざるを得ない。
ただし乱数度を表す指標みたいなものがあって(例えば周期の長さとか)、
どういうロジックで(擬似)乱数を作り出したかにより、その乱数の
「質」の良さ、ひいてはそのロジックの優秀さが判定できるでしょうが。
0232デフォルトの名無しさんNGNG
M系列
0233225NGNG
>>231
そうですね、ありがとうございました。
0234デフォルトの名無しさんNGNG
ran()

http://www.xlsoft.com/jp/products/vtune/download.html

↑にも日本語のマニュアルがある
0235デフォルトの名無しさんNGNG
>>234
あ、6.0の日本語マニュアル出てたんだ。気が付かなかったサンクスコ。
0236デフォルトの名無しさんNGNG
やっと出たか
0237デフォルトの名無しさんNGNG
>>205

行列演算になるとFORTRANの方が速い(2倍以上高速になることはザラ)
同じ数値計算アルゴリズムをVC++6プロフェッショナルとVisualFORTRAN6
の両方で比較したことがあったが、FORTRANの方が4〜6倍速くて鬱になった
ことがある。

>あとこれは聞いた話ですが、Fortranの最適化がCより優れている点は
>タコいコードを書いてもそれなりに最適化してくれることだとか。

禿げしく同。C++では注意深くコードを書かないと糞みたいに遅くなる
こと有。

FORTRAN77:言語が単純なので数値計算の問題に集中できる。
C++ :言語が複雑で完全にマスターするのが大変。
数値計算の問題に集中できない。気が散る。

C++を諦めてFORTRANに戻ろうかとも考えている。

でも、あのC++の柔軟性やSTLの便利さは捨て難いけどなぁ。
0238デフォルトの名無しさんNGNG
話がCからC++にスレかわっててゴメン。



0239デフォルトの名無しさんNGNG
しかもFortranスレだという罠
0240のとNGNG
windows2000 & VisualFortran6.6で動くプログラムをwindowsXP環境に
すると、次のようなエラーになりコンパイルできません。

/subsystem:console
/entry:mainCRTStartup
/igonore:505
/debugtype:cv
/debug:minimal
/pdb:none
C:\DOCUME~1\dfor.lib
libc.lib
dfconsol.lib
dfport.lib
kernel32.lib
/out:test.exe
LINK : fatal error LNK181: cannot open input file "C:\DOCUME~1\dfor.lib"

きっとリンクするときにC:\DOCUME~1\dfor.libの箇所がだめなんだと思うんですが
(実際そのフォルダにはdfor.libはない)、どうしてこんな設定になってるんで
しょうか?
どなたかわかる方いましたら教えてください。
0241デフォルトの名無しさんNGNG
>>240
プロジェクトフォルダごとコピーしたんじゃない?

新規プロジェクトで
ソースファイルだけコピーしてみ
0242のとNGNG
>>241
解決しました。
ありがとうございます。
0243デフォルトの名無しさんNGNG
乱数を300ふって、それの分布をチェックしたいんですけど、
うまくいかないんです。誰か助けて。
0〜800くらいまでの乱数を25刻みでいくつづつカウントされるか
チェックしたいんですけど、if文がうまく書けてないみたいで・・・
0244243NGNG
dimension T(i),Y(i) T(i)に乱数が入ってて、
do j=1,25  箱25個
Y(j)=0 カウント数の箱の初期化
end do

do i=1,300
if(T(i).gt.0.and.T(i).lt.25)
Y(1)=Y(1)+1
else if(T(i).gt.25.and.T(i).lt.50)
Y(2)=Y(2)+1
・・・・・・・・・
・・・・・・・・・
else
Y(25)=Y(25)+1
end if
end do

do ii=1,25
write(*,*)Y(ii)
end do

これじゃY(1)にカウントが150とかいっちゃって、
乱数が一様に分布されなくなっちゃいます。
一様になるはずなんです。
どこが違いますか?
0245デフォルトの名無しさんNGNG
Y(i)ってInteger宣言になってないとまずいと思うんだけど、
もちろんそうなってるんですよね?
0246デフォルトの名無しさんNGNG
Tに実数型の値(乱数)が入っているのなら、勿論INTEGER宣言する必要もないのだが、
Yは明らかに整数型のつもりで使っているらしいから、当然TもINTEGER宣言してある
のでしょう。
いずれにせよ、>>244のコーディング通りなら正しく出ると思います。正しく出ない
原因は(1)実際のコーディングが>>244の通りでない (2)Tに正しい一様乱数が
入っていない。実数で入っている乱数をEQUIVALENCE的に整数型で受けているといった
場合もこの(2)に含まれる。
考えられる原因はこれくらいですかね。
それよりも>>244のロジックに注文をつけたくなります。これだとelseifのネストが
25個もできることになりますよね。これはいかにもかったるいでしょう。
私なら次のようにします。
DO I=1,300
J=T(I)
J=(J-1)/25 + 1
IF ( J .GT. 25 ) J=25
Y(J)=Y(J)+1
END DO
0247デフォルトの名無しさんNGNG
擬似逆行列を解くルーチンってどっかにないでしょうか?
LAPACKだとこれが出来ないっぽいんですが。
何かヒントいただければお願いします。
0248デフォルトの名無しさんNGNG
入力した5つの定数の中から最大値を出力するプログラムおしえてくだせえ!
最大値を出すやりかたがわからないんですが・・
0249デフォルトの名無しさんNGNG
そんなもん max(x1,x2,x3,x4,x5) ってやってやればどれか分かると思うんだが。
0250デフォルトの名無しさんNGNG
if(条件)文1
文2
とあるとき、if文の影響範囲は文1と文2の両方に及びますか?
thenがあるときとないときでは違うのでしょうか?
0251デフォルトの名無しさんNGNG
>>250
おやおや、無視されていますね。
FORTRANから離れて大分経つので自信はないが、私なりの回答を。

ifは文1にしか影響しない。文2はただの独立した文。
if(条件)文1  が、一つの「if文」と見なされるでしょう。
THENをつけた場合は、ELSEかENDIFかが出てくるまでの間がまとめて、
一つの「THEN節」として処理されるのではないでしょうか?
以上、酔っぱらいながらの、昔を思い出しての回答。
間違っているところがあったら、誰か訂正よろしくね♪
0252デフォルトの名無しさんNGNG
>>210
大学の本屋にいけないひとは
こういうとこで買うしかないのかな。
http://www.bidders.co.jp/item/10533308

 
近所の古本屋でも見かけないし
0253デフォルトの名無しさんNGNG
watcom fortran 11.0cをwindows XPで使いたいんですが、どうすれば良いでしょうか?
0254デフォルトの名無しさんNGNG
>>253
サポートに電話しる!
0255デフォルトの名無しさんNGNG
引数を1つ、出力は配列(3)を2つ出すプログラムをつくりたいです。

READ(5,*)引数
DIMENTION 配列a(3)
DIMENTION 配列b(3)
Z = hoge(引数)
(略)
END

FUNCTION hoge(引数)
DIMENTION 配列a(3)
DIMENTION 配列b(3)
なんたらかんたら
RETURN
END

でいいのでしょうか?
0256名無しさんNGNG
>>255
読みにくいです.

PROGRAM TEST

REAL*4 A(3),B(3)
INTEGER*4 I
INTEGER*4 J
READ(5,'(1I)') I

CALL HOGE(I,A,B)

WRITE(6,'("A:",3(1X,F5.2))') (A(J),J=1,3)
WRITE(6,'("B:",3(1X,F5.2))') (B(J),J=1,3)

STOP
END

SUBROUTINE HOGE(I,A,B)
INTEGER*4 I
REAL*4 A(3),B(3)
INTEGER*4 J

DO J=1,3
A(J)=FLOAT(I*J)*0.5
B(J)=FLOAT(I)*2./FLOAT(J)
ENDDO

RETURN
END
0257デフォルトの名無しさんNGNG
>>256
そういう読みやすい書き方を紹介してくれる
書籍かサイトご存知ないでしょうか?
0258デフォルトの名無しさんNGNG
>>256
END DOってどのコンパイラでも通るのか?
まぁFORTRANは77しか使ったこと無いから90,95とかはわからんが.

>>257
じゃぁせめて配列サイズも引数に渡してあげましょう.
引数爆発起こしますが変更に耐えられません.
0259デフォルトの名無しさんNGNG
おぉブレーネリあなたのお家はどこ?

私のお家はもー無いの 去年火事で燃えちゃった

ヤッホー Frotranランラン ヤッホー Frotranランラン
ヤッホー Frotranランラン ヤッホー Frotranランラン

ヤッホー Frotranランラン ヤッホー Frotranランラン
ヤッホー Frotranランラン ヤッホッホー!!
0260デフォルトの名無しさんNGNG
tast
0261デフォルトの名無しさんNGNG
>>259
なつかすぃなあ。デバッグで行き詰まったりしたとき、
ヤケクソでヤッホー フォートランランラン…♪なんて
やってごまかしたこと数知れず(爆
ところで、>私のお家はもー無いの 去年火事で燃えちゃった
っていうのは故意の替え歌? あと「Frotran」も、わざと?
意味が分からん(汗

>>257
そういうのはセンスと経験(慣れ)の問題で、本を読んだだけで身に付くもの
ではないと思いますよ。とにかく実践ありき。ゴリゴリコーディングして、
経験豊かな人にボロクソにけなされるうちに、コツが分かってきます。
FORTRANに限らず、どんな言語でもそうですけどね♪
0262デフォルトの名無しさんNGNG
♪の人キタ━━━━(゚∀゚)━━━━ッ!!
0263デフォルトの名無しさんNGNG
替え歌連続書き込みしまくって、疎んじられてるヤシが吸い寄せられてきた事だし、
今日のfortranスレはお開きって事で。
0264デフォルトの名無しさんNGNG
>>258
DO 10 I=1,10
WRITE(6,'(1I2)') I
10 CONTINUE

ですか?
0265デフォルトの名無しさんNGNG
>>264
うん.ラベル管理が死ぬほど億劫だがそうしてる.
gnuと,最近のSunのコンパイラは通るらしいけど,
古めのWSで通らなかった痛い経験があるので使わないことにしてる.
規格厨じゃないが規格外だし
0266デフォルトの名無しさんNGNG
F77以前で規格外ですか?
0267259NGNG
綴り間違えた

火災保険は入っていたけど、子供は天国へ逝っちゃった。
かみさんとも別れちゃった。


おぉブレーネリ 私の居場所はどこ?
0268名無しさん@XEmacsNGNG
IF ( A NE 0 ) THEN
A = SQRT(ABS(A))
ELSE
A = 0
ENDIF
だっけ?
0269デフォルトの名無しさんNGNG
IF ( A .NE. 0 ) THEN
 A = HAGE
ELSE
 A = MAGE
ENDIF

比較演算子と論理演算子はドットで囲まないと
0270名無しさん@XEmacsNGNG
10年やっても2年やらないと忘れるもんだな・・
0271デフォルトの名無しさんNGNG
書式なしで書かれたバイナリデータを、違うコンパイラで
読む方法はないでしょうか?

同じソースでもコンパイラによってはerror during read と出て
読み出しすらできない場合や、読めるけど中身のデータがおかしく
なる場合があります。
readの際にrecl、convert等を適当に指定したりしてみたのですが駄目でした。

書き込みをしたコンパイラを使えばいいのですが、計算時間より
転送時間の方が何十倍も時間がかかってしまうという環境なので
できれば手元のマシンで処理したいのです。
0272デフォルトの名無しさんNGNG
それぞれのマシンの機種は?
エンディアンが違うんじゃないのかねえ。
0273デフォルトの名無しさんNGNG
Compaq Alphaのワークステーション(リトルエンディアン)の
FORTRANだと、コンパイルする時にオプションを指定すれば
ビッグエンディアンのデータをそのまま読めた。
--convert bigendianだったかな。
0274デフォルトの名無しさんNGNG
>>271
odとか、バイナリエディタ(bviとか)でデータの並びを確認しては
どうでしょうか?

FORTRANでビット演算は出来ないという理解は正しいでしょうか?
0275271NGNG
>>272,273,274
コンパイル時にビッグエンディアンを読み込みするオプションつけたら
うまくいきました。ありがとうございました。
0276デフォルトの名無しさんNGNG
ビット演算は一応出来るはず。
LSHIFTとかANDとかあるんだが,
富士通とSunとGNUでは存在を確認した
0277デフォルトの名無しさんNGNG
Fortran90の枠組みで、指定したバイト数からなる、任意型のデータ
を書き出すにはどうすればいいのでしょうか。

Cで言えば、
struct SomeType x ;
FILE* fp ;
fwrite( (void*)&x , sizeof( SomeType ) , 1 , fp ) ;
ということがやりたいです。これには、構造体 SomeTypeを
1バイトポインタにキャストできる必要があります。


・書式なし逐次記録で書くと、先頭にバイト長が入ってしまう
REAL*8 :: X(3)
OPEN(98,'a.dat',FORM='UNFORMATTED',ACCESS='SEQUENTIAL)
WRITE(98) X

16進Dump

18 00 00 00 | x(1)のイメージ | x(2)のイメージ | x(3)のイメージ |

(つづく)
0278デフォルトの名無しさんNGNG
(277のつづき)
・FORTRAN77が引数の型を調べないことを利用して、INTEGER*1の配列として
任意の型を受け取って書く。
 以下のようにコーディングできるが、正当な書き方ではない。

SUBROUTINE BWRITE( UnitNo , Buf , N , POS )
INTEGER :: UnitNo , N
INTEGER*1 :: Buf(N)
INTEGER :: I
DO I=POS,POS+N-1
WRITE(UnitNo,REC=I) Buf(I)
END DO
END SUBROUTINE BWRITE

CALL BWRITE(98,X,24,1)
0279デフォルトの名無しさんNGNG
みなさん、はじめまして。
以前FORTRAN77を勉強し、最近、構造型が便利だということでF90を
勉強しだしていますが構造型で少しわからないところがあります。

たとえば
TYPE MyClass1
real :: rdum
integer :: idum
END TYPE MyClass1

としておき、さらに

TYPE MyClass2
TYPE(MyClass1) , ALLOCATABLE :: tdum(:,:,:)
END TYPE
とするとエラーが起こります。
このように自分が作成したTYPEの中でALLOCATABLEを宣言することは無理なのでしょうか?
もし解決方法をご存知の方がいらっしゃったら教えていただけないでしょうか?
よろしくお願いします。

それでは失礼します。
0280デフォルトの名無しさんNGNG
そりゃあ、構造体のサイズは一定でないとまずいでしょ。
POINTER使えば?
0281デフォルトの名無しさんNGNG
ちょっとお知恵をお貸し下さい。

LINUX上のコンソールで走らせるプログラムを書いているんですが、

  Input reading file name > ここのファイル名を入力

とかいう風にやりたいんですが、

write(*,1000)
read(*,1010) FILE

1000 format('Input reading file name > ')
1010 format(A16)

と言う風にやると、“Input reading file name > ”のところで改行されてしまうんです。
この改行を抑制する方法って無いでしょうか。
0282デフォルトの名無しさんNGNG
>281

ぎゃぁ!!
固定Formatで書いてるつもりなのに………(汗)
上のソースは固定formatです。

書き忘れましたが環境は、VineLinux2.5にAbsoftのProFortran7.5をインストールしています。
0283デフォルトの名無しさんNGNG
>>281
$を付けると改行しません.
HP FORTRANだけの独自拡張だと思っていたのですが,
Linux上のf2c,g77-3.2どちらでも使用できました.
g77-2.95は試していません.

program test
implicit none
integer*2 i

write(6,'("Input number: ",$)')
read(5,'(i2)') i
write(6,'("The number is ",i2)') i

stop
end
0284デフォルトの名無しさんNGNG
>>283

ありがとうございます!
試したところうまくいきました。

ところで、これってFortran77/90/95とかの規格には含まれてないんですよね?
0285デフォルトの名無しさんNGNG
>>284

また脊髄反射でレスをカキコしてしまった………。
私は、ProFortranを使ってはいますが、未だに固定フォーマットでプログラムを書いてますし、
Fortran77の教科書で書いてます。
でも、もう卒業だからFortranをこれ以上使うとも思えないんですよね………。
0286デフォルトの名無しさんNGNG
>>281
構造体のサイズはいじれないんですね。
POINTERですか、一度勉強してみます。

とりあえずできないことが確認できただけでもよかったです。
どうもありがとうございました。
0287デフォルトの名無しさんNGNG
>>284
> ところで、これってFortran77/90/95とかの規格には含まれてないんですよね?

HP FORTRANのマニュアルにはFORTRAN77にはない拡張だと書いてありましたが,
FORTRAN90や95の規格に含まれているかどうかは分かりません.
ちなみにCompaq FORTRANでも有効でした.
0288デフォルトの名無しさんNGNG
>>280
やってみたんですがPOINTERを使ってもターゲットになる構造体のサイズに依存するんで
構造体の内部変数の配列のサイズを変更した構造体を作ることはできないのでは
ないのでしょうか?

何度もすみませんm(_ _)m
0289デフォルトの名無しさんNGNG
>287

そうですか………。
Fortran90の本を読んでもでていないんで、多分拡張ですよね。

それにしても、Fortran77の本に書かれていた、各行一文字目での制御って
普通の画面でも有効なんでしょうか。
<うちの環境では駄目でした

今更(只今M2で就職決定済み)でFortran覚えても意味無い気がして来たけど趣味
でやってます(笑)
0290デフォルトの名無しさんNGNG
>>289
> それにしても、Fortran77の本に書かれていた、各行一文字目での制御って
> 普通の画面でも有効なんでしょうか。
> <うちの環境では駄目でした

意味が分からないのですが、

c comment

のことでしょうか?
「Fortran77の本」とは具体的に何と言う本か?
「普通の画面」とは何のこと?
「うちの環境」とはどんな環境?
「駄目」とはどういう状態のこと?
0291デフォルトの名無しさんNGNG
>>290

説明不足でご免なさい。出力を改行させたくない場合、
write(*,'+','kaigyousimasenn')

と言う用にすれば出来ると

ttp://www.amazon.co.jp/exec/obidos/ASIN/4627839812/qid=1035696552/sr=1-3/ref=sr_1_0_3/250-6779604-7744248
ttp://www.amazon.co.jp/exec/obidos/ASIN/4563007455/qid=1035696494/sr=1-19/ref=sr_1_0_19/250-6779604-7744248

の本に書いてあったんです。
このようにしてみたのですが、そのまま画面と言うかターミナルに表示されてしまいまして。

普通の環境とか普通の画面とか言うのはただの私の先入観です。
駄目というのは、改行させないと言う効果が得られず、制御文字(この場合は+)がそのまま
コンソールに表示されてしまったと言うことです。
本には『プリンタ制御』と書かれていたので、コンソールには無効なのかな、と思っています。

環境はLinuxにAbsoftのProFortran7.5をインストールしています。
0292デフォルトの名無しさんNGNG
>>291
> 説明不足でご免なさい。出力を改行させたくない場合、
> write(*,'+','kaigyousimasenn')
> と言う用にすれば出来ると
> の本に書いてあったんです。
> このようにしてみたのですが、そのまま画面と言うかターミナルに表示されてしまいまして。

283に書かれたやり方で良いのではないでしょうか?
それでは問題があって、他のやり方を探していると
いうことでしょうか?
0293デフォルトの名無しさんNGNG
>292

いえ、正直なところ、ただの好奇心の範囲でして。
お騒がせして申し訳ありません。

問題自体はあれで解決しました。
お付き合いいただき、どうもありがとうございます。
0294デフォルトの名無しさんNGNG
http://yahooo.s2.x-beat.com/
0295デフォルトの名無しさんNGNG
fortran77なんですけど、コンパイルができません。
どこが違っているのか、おしえてください。おねがいします。

c ex 2.1.1 *** wa,sa,seki,sho,bekijyou no keisan ***
implicit double precision(a-h,o-z)
open(15,file='date211.inp')
open(25,file='date211.out')
read(15,*) a,b
wa = a+b
sa = a-b
seki = a*b
sho = a/b
beki = a**b
c
write(25,*) 'a = ',a, 'b = ',b
write(25,*)
write(25,*) 'wa = ',wa,'sa= ',sa,'seki = ',seki,'sho = ',sho,
& 'beki = ',beki
c
write(6,*) 'a = ',a, 'b = ',b,'c = ',c,'d = ',d
write(6,*)
write(6,*) 'wa = ',wa,'sa = ',sa,'seki = ',seki,'sho = ',sho,
& 'beki = ',beki
stop
end

ちなみに、頭が全部そろってますが、cや&は7列目以降にはかかれていません。
こぴぺしたものなので・・・。
0296デフォルトの名無しさんNGNG
>>295
Salfordのお試し版とg77なら
cとdが未初期化だゴルァ
と怒られた以外、ちゃんとコンパイルできたぞ。
0297デフォルトの名無しさんNGNG
バッファリングされているFortran記録を、ファイルにフラッシュ
させるにはどうしたらいいのでしょうか?
0298デフォルトの名無しさんNGNG
いかにもOSあるいはコンパイラに依存しそうですが。
Visual Fortran だと、FLUSH あるいは COMMITQQ なんてのがありますが。
使用コンパイラのリファレンスを見るべし。
0299デフォルトの名無しさんNGNG
>>295さん、どうもありがとう。異常終了が起こるのは、やっぱり、マシンがだめなのかなぁ・・・。
0300デフォルトの名無しさんNGNG
これも、どこが違うかわらからないので、教えていただけませんか。ずうずうしくてすみません。
c ex 2.2.3 addition of angle
implicit double precision(a-h,o-z)
integer dg1,sc1,dg2,sc2,dg,sc
date pi/3.141593/
write(25,*) 'input dg,mn,sc'
write(6,*) 'input dg,mn,sc'
open(15,file='date223.inp')
open(25,file='date223.out')
read(15,*) dg1,mn1,sc1
read(15,*) dg2,mn2,sc2
r=pi/180.0
c
rd1=((sc1/60.0+mn1)/60.0+dg1)*r
rd2=((sc2/60.0+mn2)/60.0+dg2)*r
rd=rd1+rd2
c
wk=rd/r
dg=wk
wk=(wk-dg)*60.0
mn=wk
sc=(wk-mn)*60.0+0.5
write(25,*) 'rad1= ',rad1, 'rad2 = ',rad2,'rd=',rd
write(25,*)
write(25,*) 'angl1 = ',dg1,'deg ',mn1,
& 'min',sc1,'sec'
write(25,*) 'angl2= ',dg2,'deg',mn2,
& 'min ',sc2',sec'
write(25,*) 'total=',dg,'deg',mn,
& 'min',sc,'sec'
stop
end
0301デフォルトの名無しさんNGNG
>>299
I/O の番号を変えてみるってのは?
0302デフォルトの名無しさんNGNG
>>300
> これも、どこが違うかわらからないので、教えていただけませんか。ずうずうしくてすみません。

「違う」って何でしょう。お使いの環境が不明。
コンパイルに失敗するのか。それともコンパイルは
出来ても実行結果が意図と違うのか。

気付いたところ。
openでstatusを指定していない。
scは整数型として宣言しているのにsc=...の文は60.0を
乗じたり0.5を加えたりしている。更に倍精度実数wkから
整数mnをキャスティングなしで引いている。
0303デフォルトの名無しさんNGNG
closeしなくていいの?
pi=4.*atan(1.)のほうがよくない
0304デフォルトの名無しさんNGNG
状況を説明してなくて申し訳ないです。
コンパイル時に、エラーがでるのです。
教科書は、型宣言をしておらず、dateから始まっています。
だから、型宣言が違うということでしょうか。
あまり詳しいことを学ばないまま、レポートが出てしまったので、困っています。
どのように直せばよいのでしょうか
ご指導のほど、お願いします。
0305デフォルトの名無しさんNGNG
>>304

dateはいかがなものか。
0306デフォルトの名無しさんNGNG
>>300
コンパイラのエラーメッセージ読んでみれば?
もしかしたら、HITACのようなTSS環境だと、メッセージでないのかな?
(ううなつかしい)
あるいは授業のハンドデバッグの宿題だったりして。

で、まじれす
4行目 date でなく、dataでしょう。
22行目 出力変数は、rad1,rad2ではなく、rd1, rd2 でしょう。
27行目 sc2のあとのアポストロフィの位置が間違えてます。

当然、'date223.inp'に適切なデータが記述されていないと
ランタイムで落ちます。

0307306NGNG
304を読んでなかった。
レポートかぁ。
書かなきゃよかったかな。

いずれにせよ、業務上であれば、300のようなコードかいてきたら、
殴ります。
0308デフォルトの名無しさんNGNG
>>306 ありがとうございました。ちゃんとコンパイルできました。
しかし、実行段階でやはり、コアダンプします。
学校のPCのため、設定はいじれないんですが…。
どうすればよいのでしょうか

0309デフォルトの名無しさんNGNG
>>308
クラッシュする位置を特定してどうしてそこでクラッシュするか考える

やりかたとしては
プログラムをよく読んで脳内で実行
もしくはデバッガをつかう
デバッガが使えなければいちいち write して、
各時点で各変数の値がどうなっているか、どこでクラッシュするか確認する
0310デフォルトの名無しさんNGNG
>>308
設定でなくて,プログラム自体が間違っているのでしょう.
図書館でFORTRANの参考書を借りるとかして下さい.
このスレを参考書にするのはどうかと思います.
0311デフォルトの名無しさんNGNG
>> 298
ありがとうございます。処理系に依存するとは知りませんでした。
実際に僕が使っているFujitsu Fortranでは、サービスルーチン
として(つまり組み込みでない)FLUSH()関数が用意されていました。
0312デフォルトの名無しさんNGNG
せめて、
open(15,file='date223.inp', status='OLD') くらいは
かいてみそ
date223.inp が無いんじゃないの?

0313デフォルトの名無しさんNGNG
やりすぎ
0314デフォルトの名無しさんNGNG
fortranでreal*8の変数zに1.1を代入して、
それをc++のdowbleの変数に渡したとき、1.10000002384186という値に
化けてしまいます。この数値の再現性は100%です。
なんでごみが混じってしまうのでしょうか。それへの対応法はありますでしょうか?
アドバイスお願いします。
0315デフォルトの名無しさんNGNG
スペルdoubleですね。恥ずかしい
VF6.5、VC++6でやってます。
0316デフォルトの名無しさんNGNG
FORTRAN上で、zに単精度の1.1を代入していませんか?

コンパイラオプションにもよりますが、単純に 1.1 と書くと、通常、
単精度になりますから、せいぜい10進数では7桁程度の精度しかありません。

Z=1.1D0 と書けば、倍精度になりますから、15桁くらいの精度になります。

0317デフォルトの名無しさんNGNG
倍精度拡張オプションをつかえばいいのかな?
0318デフォルトの名無しさんNGNG
C言語ソースからPAD図を生成するツールはあるけど。
fortranソースからフローチャート生成するツールって
ないっすか?検索したけどみつからない。個人的に
ツール作成した神はいませんか?
0319デフォルトの名無しさんNGNG
>>318

>>34-38 は?
0320デフォルトの名無しさんNGNG
あーいうのじゃなくて簡単に
操作ができるツールみたいなの探してる。
やっぱねぇのかなぁ?ベクターさんではみつからないし。
>>319
0321デフォルトの名無しさんNGNG
フォートランで、C言語で作ったDLLファイルを使いたいんですが、
それを勉強するのに適した本とか、WEBページとかありますか?
0322デフォルトの名無しさんNGNG
>>321
Windowsであれば、まずはVisualFortranのヘルプとか
ttp://www.compaq.co.jp/products/dvf/visual/jhelp.html
「言語が混在したプログラミング」として、少しばかり記述がある。
「勉強」には少々貧しい内容だが。

このヘルプ、VFもっていなくても
ランゲージリファレンスとして有効だと思うんだけど。
0323デフォルトの名無しさんNGNG
教えていただきたいのですが

Fortranでの計算結果をアニメーションで表したいと思っています.
(例えば振り子の運動など)
どのような方法がありますでしょうか?
Fortranには
Visual Fortran 6.0を用いております.

ご教授ください宜しくお願いします.
0324デフォルトの名無しさんNGNG

 fortran95の無料コンパイラって
http://www.fortran.com/
ぐらいしかないかな。
0325315NGNG
>>323
fortranで計算結果を適当に書き出して(DATとか)それをVBとかで表示じゃだめ?
俺はそうしてますた・・いちばん簡単だと思う。

>>316 >>317
ありがとうございました。これってFORTRAN使いの方(に限らない?)にはあたりまえの事なんですね。
こんなこと聞いてアホかと怒られました。勉強させていただきました。
0326デフォルトの名無しさんNGNG
AIX上のXLFortran使っている方がいれば教えてください。
KAP or VAST-2 最適化プリプロセッサって、
シングルスレッドのプログラムでも有効ですか?
数値解析のプログラムを使っているんですが、
もしかしたら必須アイテム?
0327デフォルトの名無しさんNGNG
fortranスレあったんですね
最近、数値計算メインをC++からFortran95に乗り換えました
F77->QB->Pascal->C->C++,VB->C++,VB,perl->LabView,F95,C++,VB,ruby
で、結局fortranに帰ったと  Fortran95(・∀・)イイ!!

安いコンパイラと安い解説書があればもっと流行るのになぁ

>323
VFならQuickWinが付属していますので、それを使ってください。
ただし、汎用性もなくなるのでお勧めできませんが。
ヘルプで
Using QuickWin->Displaying Graphics Output
を参照のこと
0328デフォルトの名無しさんNGNG
>>327
よろしかったら数値計算部をC++からFORTRANに乗り換えられた理由を教えて
いただけないでしょうか?
0329デフォルトの名無しさんNGNG
C++だと遅くてやってられないからです。
まあ、配列の仕様が違うので仕方ないですが、
CやC++は数値演算には向きませんね。
0330デフォルトの名無しさんNGNG
>>329
「数値演算」といっても規模によるだろうけど、
具体的には C/C++ とどの程度の差がでるものなの?

俺は C/C++ で数値計算をずっとやっててそれしか知らないので
ちょっと興味がある。
0331デフォルトの名無しさんNGNG
C++はvector使ったら遅いかもしれんけど、Cは速いとおもうけどなあ。
アセンブリ出力見てみれば?
0332デフォルトの名無しさんNGNG
メモリの使われ方とかをちゃんと理解している人が書いた
(真っ当な) C プログラムよりも Fortran のプログラムって速いのかな?

関数呼び出しのオーバヘッドとかが違うとしても、
劇的に速度が向上するとは思えないんだけど。
0333デフォルトの名無しさんNGNG
>328
CとFortranの速度差はせいぜい5%程度です(経験的).C++は作りにもよりますが、
Cより遅くなります.速度を上げるために設計に頭を使うというのはどうかと.

C++から乗り換えた理由は,F95がCと同等以上のことが出来るためです.
実際使ってみると,すごくいい.Cよりもよく出来てる(新しいから当然).
特に配列の拡張がすばらしいと思います.また,並列命令がある.

元々Cが数値計算に向かない点として
・配列の添え字が0から始まる(ほとんどの数学ルーチンは1から始まる)
・階乗がない
・複素数がない
・商用ルーチンがいまいち
というのがありましたから,移るのにためらいはありませんでした.
なんで今まで移らなかったかというと,解説書がなかったから(昔はDECのしかなかった)

F77で書くくらいなら,多少遅くてもCを使いますがね.
0334デフォルトの名無しさんNGNG
328です.レスが遅くなってごめんなさい.

C++をC的な使い方をしているかぎり,基本的にFORTRANの参照渡しと同じです
から行列計算でもそれほど遅くならないと思います.行列計算の最適化に対する
ノウハウの差が若干でる程度かと...

C++で行列計算をやるときに悲惨なのは,行列クラスを作ってC=A*Bの行列演算
ができるように=演算子や*演算子を書き換えた(オーバーロードした)ときです.
関数(サブルーチン)内で定義した作業用の行列やC++が裏側で勝手につくる行列が,
関数が呼び出されるたびに生成され,また関数から呼び出し側に戻るときに破壊さ
れるような事態が発生しうるのです.しかも,呼び出し側に行列演算結果を渡すの
に値コピーが行われるのです.1000 x 1000の行列だと1000000個のデータの
コピーが...確かに,下手なプログラムを作ると遅くなってしまいます.

でも,FORTRAN77が嫌だったのでは,プログラムが読みにくいのとバグが見つけ
にくく,見つけるのに1ヶ月もかかった経験があるからです(今から考えると
それはプログラムの設計が悪かったからでしょうが).

確かに,fortran95は改善されていますね.でも,この前95で作られたコード
をみたんですが,サブルーチンなんか引数が多いし,やっぱりアレルギー反応
を起こしてしまいました.

で,C++を続けるかfortran95に戻るか迷い中だったものですから...

0335デフォルトの名無しさんNGNG
呼び出し側に行列演算結果を渡すのに値コピー
↓
呼び出し側に行列演算結果を返すのに値コピー

の誤りでした.
0336デフォルトの名無しさんNGNG
>334
fortran95のプログラムには旧形式と新形式があるので,一見F77の
プログラムに見えるものもあります.F95は基本的にはCと同等ですから
引数が多いのはしゃーないです.Cも多いですし.構造体を使って
変数をパッケージすればいくらか改善できるでしょうが

fortran2000ではついにオブジェクト指向が導入されたということなので
期待しているんだけど,いつ実装されるんだか^^

f95の時は実装が97-98年,大型に入ったのが00年,本が出始めたのが
昨年くらいからですからね.他の言語と比べるとゆっくりしてるなぁ

HPFは2000の規格を実装するんだろうか?知ってる人がいたら教えてくらさい
0337デフォルトの名無しさんNGNG
うーむ...ついに,Object fortranの出現ですか.
ある有名な学者が「究極の言語はObject Fortranだ!」
と言ったとか...

でも,Object fortranの実装には少し時間がかかるだろうなぁ.
C++だってクラスとか継承とか仮想関数だとかで結構複雑になって
ますからねぇ.かなり機能を限定するのでは?
0338デフォルトの名無しさんNGNG
計算機によりますが、CとFortranの差は5%程度ですまないことも多いのです。

Cのサブルーチンだと、配列を2つ引数にとったときに、
その2つの配列が重なっている可能性があるために、最適化が制限されます。
並列計算機のアーキテクチャによっては、この制限が致命的になります。

また、整合配列が使えないので、汎用的な行列計算ルーチンを書くのが面倒な
のも大きな欠点です。
0339デフォルトの名無しさんNGNG
>>338
C99のrestrictと整合配列で解決。
0340デフォルトの名無しさんNGNG
 普段進化的アルゴリズムで数値計算してるモノですが,
CとFORTRAN77では計算速度に最高30%近い差が出ましたよ.
残念ながら(?)GNUよりもFujitsuやSun等の商用コンパイラの方がかなり速いですね.

FORTRAN77の引数やグローバル変数などの問題はもう割り切るしかないです.
0341デフォルトの名無しさんNGNG
30%!それは黙って見過ごす違いではないな。
ぜひFORTRAN77のアセンブリ出力を拝みたいものだ。C以上にいかなる
手段を持って最適化しているのか、後学のために拝見したい。
0342デフォルトの名無しさんNGNG
おそらくそう画期的な最適化は無いと思います.
最高約30%の差が出るのは私が使っている問題の性質と思います.
解を出すために遺伝子座が数千の個体が数十個出来ますし,
その操作手順も数千ステップとかなり煩雑です.
おそらく小さな最適化が積もり積もった結果と思います.
0343デフォルトの名無しさんNGNG
fortran77での質問です。
hが0から3まで0.2ずつふえていき、
0<h≦1のときは、p,1<h≦2のときはq,2<h≦3のときはr
となるようなプログラムの作成の仕方を教えてください。
また、配列と入力データには何を入れればわからないので教えてください。
御願いします。
0344デフォルトの名無しさんNGNG
>>338
>Cのサブルーチン

いかにもふぉーとらんスレですね。。。
0345デフォルトの名無しさんNGNG
いろいろ面白い情報をいただきありがとうございました.

今までfortranやC言語に抵抗があったのですが,ようやくその理由が
わかりました.要するに,私は

「サブルーチン,関数の引数の数が多くなり,また引数を渡す際の記法が
煩わしい言語が嫌い」

なのです.COMMON文やグローバル変数を使えば回避できますが,これが
バグの温床になりがちで昔さんざんひどいめにあいました.

でも,これは「スイカに塩をかけて食べる奴が嫌い,トマトに醤油をか
けて食べる奴が嫌い」といった好みの問題だから,言語論をふりかざし
ても決着はつきませんよね.

>>343
申し訳ないけど,質問の意味がわかりません.

p,q,rは何でしょう? 何がp,q,rになるのでしょう?
hはdoループの制御変数と思いますが,h がp,q,r
になるのなら,doループは正常に作動しないと思います.

>配列と入力データには何を入れればわからないので教えてください。

もっと詳しく書いてくれないとこれも理解できないです.
0346デフォルトの名無しさんNGNG
>>345
>でも,これは「スイカに塩をかけて食べる奴が嫌い,トマトに醤油をか
>けて食べる奴が嫌い」といった好みの問題だから,言語論をふりかざし
>ても決着はつきませんよね.
むしろFORTRAN77は,
言語に対する理想論はとりあえずおいといてって感じで割り切って使える人でなければ
使うのは難しいと思います.
計算機丸一日回すのが当たり前というような速さがとにかく欲しいという人向けと思います.
0347デフォルトの名無しさんNGNG
>>345
P=r*g*h
Q=r*g*b
みたいなかんじです。

rやgは定数としてはじめに宣言しています。
0348デフォルトの名無しさんNGNG
>347
うーん。有限範囲を持つ物体の逆2乗の重力計算ですかね。
h を素直に do ループで増分して、
if で場合分け程度で解決出来ませんか。

0349デフォルトの名無しさんNGNG
>>343, >>347
FORTRANの前に日本語での説明の仕方を勉強した方がいいぞ。
h の状態に応じて b の値を変えたいの?
この説明だけでは配列とか入力データとか言われてもわからないよ。

どうせ宿題なんだろ。問題文全部晒してみ。
0350デフォルトの名無しさんNGNG
>>348
はい、宿題です(笑。
では、お言葉に甘えて。よろしく御願いします。
hは0から3までの範囲で、0.2おきに示す表を作成するんです。
で
0<h≦1のとき
x=dacos(1-2*h/d)
a1=(x-cos(x)*sin(x))*d**2/8
px=ro*g*b*h**2/2
pz=ro*g*a1*b
zc=2*h/3
xc=p**(zc+cos(x)*d/2)/pz

1<h≦2のとき
x=dacos(2*h/d-1)
a1=(pi-x+cos(x)*sin(x))*d**2/8
px=ro*g*b*h**2/2
pz=ro*g*a1*b
zc=2*h/3
xc=p**(zc-d/2)/pz
0351デフォルトの名無しさんNGNG
続き
2<h≦3のとき
a1=pi*d**2/8
ax=b*d
hg=h-d/2
px=ro*g*a*hg
pz=ro*g*a1*b
z=(3*h*d-2*d**2)/(b*h-3*d)
zc=h-z
xc=px*(h-hg-z)/pz
です。ro=1000、pi=3.141593、g=9.8とはじめにdata文で定義しました。
b,dは入力ファイルから読み込むようにしようと思っています。
問題文では、b=5,d=2と与えられているのですが、はじめからこの数字を使ったほうがいいのですか?
px等の変数については配列を用いること とありますが、これもいまいちわかりません。
今日は2時くらいまでは起きているので、親切な方、ご教授ください。よろしく御願いします。

0352デフォルトの名無しさんNGNG
まだ意味不明なのだが・・・
0353デフォルトの名無しさんNGNG
>>352
どのあたりが不明ですか?
問題文は書いたのですが。
0354デフォルトの名無しさんNGNG
最適化について。

例えば、gccでは、未だにソフトウェアパイプライニングも
ベクトル化も並列化も実装されていませんよね。

また、restrictを利用すれば最適化できるのかもしれませんが、
gccでは実装されていません。だから、配列に関するCのコードは
ひどいです。
0355デフォルトの名無しさんNGNG
>351
問題を出した人は、なんのつもりで配列使用の縛りを
入れたんだろう。

f90 で配列演算をさせるつもりなのか、
単に出力表を配列に格納させるつもりなのか。
単に出力するなら配列使わなくてもいいのにねぇ。。。

これって、プログラム自体が目的の宿題っていう感じじゃないね。
なんのアルゴリズムというか手順を修得させる気なんでしょう。

いずれにせよ。。。以下の2点が分からないので
352をはじめ、だれもやる気起きないような気がしマフ
1)この問題の意図は何か?特に配列との関係
2)この問題を受け取った人は、何が分からないのか

というか、単に出力させるだけなら、もう答え出ているじゃん。。。
0356デフォルトの名無しさんNGNG
>>355
えーっとですね、fortran77です。はい。

この問題の意図は・・・
多分、doとif文の練習???みたいな。

何がわからないかというと、配列と、
入力データに何を入れるか。
b,dはわかるけど、あとが・・・。
0.2
0.4
0.6
っていれていくのかなぁ。
0357デフォルトの名無しさんNGNG
ttp://www.amazon.co.jp/exec/obidos/ASIN/0521524083/qid=1038628573/sr=1-5/ref=sr_1_2_5/249-8599757-6664354#product-details
に、
Object Oriented Programming in Fortran 90/95
J. E. Akin (著)
という書籍があるんだけど、F90やF95でOOPは可能なんだろうか?

MODULE自体は、メンバ変数とメンバ関数を持つことが可能で、PRIVATEやPUBLIC属性
を指定できるから、OOPぽくできるんだと思うんだけど、
CONSTRUCTORなどはないようだしなぁ。

MODULEをクラスと等価であると見ると、そのクラスのインスタンスは、グローバルのような気がする。
USEすれば、どこでも、そのMODULEにアクセスできるから。

なんかF90のMODULEってOOPから見ると、何か変。。。
俺も変。。。

シミュレーション板でも、F90はOOPとか言う意見があるけど、本当かな???

まぁ、F90/95のスレは貴重だから、あげ。
0358デフォルトの名無しさんNGNG
>>356
とりあえず、DO, IF文と配列を使う演習問題風にするとこうかな?
後は自分で()の中を書き足して下さい。

PROGRAM HOGE
PARAMETER (RO=1000.,PI=3.141593,G=9.8)
REAL H(N),A1(N),PX(N),PZ(N),XC(N),ZC(N)
(BとDを入力)
DO 100 I=(N回まわす)
H(I)=I*0.2
IF (0≦H(I)≦1) THEN
(0≦h≦1のときの計算)
ELSE IF (1≦H(I)≦2) THEN
(1<h≦2のときの計算)
ELSE IF (2≦H(I)≦3) THEN
(2<h≦3のときの計算)
END IF
100 CONTINUE
WRITE(*,'(6A12)') 'H','A1','PX','PZ','ZC','XC'
(表を出力)
STOP
END

FORTRAN77って ELSEIF 使えたっけ?
0359デフォルトの名無しさんNGNG
>>358
dimension ????????????????
data ro/1000/, g/9.8/, pi/3.141593/
open(7,file='input.txt')
open(8,file='output.txt')
read( 7,*) d,b,number
write(6,*) d,b,number
?????????????????
do 10 k=1,number,0.2 (hが0.2ずつ増えていくことをいいたいんですが、初期値等わかりません。)
?????????????
0<h≦1の範囲のとき
if ((h .gt.0).and.(h .le. 1)) then
x=dacos(1-2*h/d)
a1=(x-cos(x)*sin(x))*d**2/8
px=ro*g*b*h**2/2
pz=ro*g*a1*b
zc=2*h/3
xc=px*(zc+cos(x)*d/2)/pz
   else if
以下略で。
b,d の値と、データの個数nをinput.txtから読み込ませようと思っています。
  ????????????となっているあたりと、10 continue の位置もわからないです。
   こんな感じでは、だめなのでしょうか。????や、直すべき点をご教授ください。
  御願いします。ちなみに、パラメーター表記も未習です。

  
0360デフォルトの名無しさんNGNG
>>357
F90/95 のMODULEって、インスタンスを一つしかもてないのでは?
(インスタンスという言葉を使っていいのかわかりませんが)
あっしは「メンバ関数を持つコモン」「スコープを持つサブルーチン群」
のようなものと解釈しております。

なので、実際にMODULEを使ってOOのようなことをやろうと思うと
すぐ行き詰まるような気が。

違ったら、指摘お願い。
0361(_ _)/NGNG
>359 こういうことを言いたいのかな?。358さんのに追記。

PROGRAM HOGE
PARAMETER (RO=1000.,PI=3.141593,G=9.8)
REAL H(N),A1(N),PX(N),PZ(N),XC(N),ZC(N)

 read( 7,*) d,b,number
 write(6,*) d,b,number

 dx=0.2
 k2=number/dx+1

DO 100 I=1,k2
 H(I)=I*0.2

 IF (0≦H(I)≦1) THEN
  (0≦h≦1のときの計算)
 ELSE IF (1≦H(I)≦2) THEN
  (1<h≦2のときの計算)
 ELSE IF (2≦H(I)≦3) THEN
  (2<h≦3のときの計算)
 END IF
100 CONTINUE
以下略
0362デフォルトの名無しさんNGNG
>359
358 のように親切じゃないですが、
Do ループの変数を、実数でまわすのは止める習慣を
つけた方がいいっす。

358 の様に整数変数に実数刻みを掛ける方が
将来的に、「安全堅牢」な態度が身に付きます。

あと、プログラミング自体が苦手ではない感じ
なのはソースを見ればわかるのですが
10 continue の位置がわからないとか配列宣言が不明とか
極めて基本的な事なんで、言語リファレンスないし
初心者向けの本に1回ぐらいは目を通した方がいいと思います
0363デフォルトの名無しさんNGNG
dimensionのところは何をかけばいいのでしょうか?
0364デフォルトの名無しさんNGNG
>>363
配列にしたいものを並べればよろしいかと.
362さんが言うように,まずは参考書を読みましょう.
一行ずつ聞くつもりですか?
0365デフォルトの名無しさんNGNG
>>363
dimension 名前(要素数1 [, 要素数2, …])
が知りたい訳じゃないですよね?

「何を書けば」と聞かれても「どの様にしたいか」によって答えが変わってきますが
>358 の例なら

H(1)=0.2, A1(1)= hが0.2(=H(1))の時のa1(=pi-x+…)の値, PX(1)= hが0.2の時のpx, …
H(2)=0.4, A1(2)= hが0.4の時のa1の値, PX(2)= hが0.4の時のpxの値, …
H(3)=0.6, A1(3)= hが0.6の時のa1の値, PX(3)= hが0.6の時のpxの値, …
 …

といった具合に計算結果を保存したいので
> REAL H(N),A1(N),PX(N),PZ(N),XC(N),ZC(N)
として H,A1,PX,PZ,XC,ZC がそれぞれ要素数N の配列になる様に宣言しています。

後はこれらの配列が上記の内容になる様に DOループ内で計算させて、
全ての計算が終わった後に配列の内容を出力すれば良いのではないでしょうか。
0366デフォルトの名無しさんNGNG
real h(n),x(n),a1(n),px(n),pz(n),xc(n),zc(n),hg(n),z(i)
data ro/1000/, g/9.8/, pi/3.141593/
open(7,file='input.txt')
open(8,file='output.txt')
read( 7,*) d,b,n
write(6,*) d,b,n
h(i)=0.0
do 10 i=1,n,0.2
h(i)=h(i)+i
c-----0<h≦1の範囲のとき
if ((h(i) .gt.0).and.(h(i) .le. 1)) then
x(i)=dacos(1-2*h(i)/d)
a1(i)=(x(i)-cos(x(i))*sin(x(i)))*d**2/8
px(i)=ro*g*b*h(i)**2/2
pz(i)=ro*g*a1(i)*b
zc(i)=2*h(i)/3
xc(i)=px(i)*(zc(i)+cos(x)*d/2)/pz(i)
    以下略。
にしたのですが、
do 10 i=1,number,0.2でThird parameter of DO statement must not be zero
*Invalid DO statement
x(i)=dacos(1-2*h(i)/d)で* DACOS is an intrinsic function used with invalid argument(s)
elseif ((h(i) .gt. 2)). and.((h(i) .le.3)) thenで* Invalid IF or ELSEIF statement
とエラーが出てしまうのですが、どのように解決すればよいのですか。
0367デフォルトの名無しさんNGNG
>>366
もう一度362を読む.
0368デフォルトの名無しさんNGNG
>>367
Do ループの変数を、実数でまわすのは止める
ってやつですか?
この意味もわかりません。

教科書読んでみたんですが、やっぱりわからないので、質問したのですが。
第一行目のz(i)はz(n)のミス。けど、それでも、
そこでエラーが出てるし。
0369デフォルトの名無しさんNGNG
>>368
整数型変数iに,整数でない0.2の増分を与えてループさせるのがおかしい.
361を読むべし.
0370デフォルトの名無しさんNGNG
>>366
> (x(i)=dacos(…でエラー)
DACOS関数の引数の型と現在のプログラムを比較してみましょう。

なぜここだけ明示的に「DACOS」なのかも疑問ですが。
使用するデータ型の指定は無かったのですか?

> (elseif …でエラー)
括弧の対応

>>378
>(1行目でエラー)
配列の要素数が不定なのが原因。
「hは0から3までの範囲で、0.2おき」と指定があるのなら
必要なデータ数は決まってくるのでは?
0371デフォルトの名無しさんNGNG
使った教科書や Fortran コンパイラがなんなのか不明ですが...

1)変数の型、特に数値は整数、実数の区別をはっきり”意識”する
  意識するのが面倒ならば、コンパイラにさせるよう
  最初に型宣言しておく
→Do でのエラー

2)数学上の逆関数 Arccos が Fortran でどうなっているか
  (言語リファレンスで)確認する。特に注意書きを読む。
→DACOS でのエラー

3)2)同様 IF 及び ELSEIF の言語リファレンスを読む
→IF or ELSEIF のエラー

4)配列の宣言を教科書または言語リファレンスで確認する。
  特に大きさをどうやって宣言するかはしつこく確認。
→z(n) でのエラー

5)コンパイラーのメッセージ内英単語は、簡単な単語なので
  辞書を引く
0372デフォルトの名無しさんNGNG
>355
学生に問題を出すときに制限を付けることはよくあります.配列使用
の縛りは,配列を用いたループの使い方を習得させるためじゃないかな.
特に,代入,初期化,判断文,ループの概念をなかなか理解できない
ようですから.
プログラミングって大学で教えるような技術じゃないんですよね.
単にデータフローを作ってるだけだし.
だから,数値アルゴリズムの授業がメインとなってしまう…

>357
CでもOOPは可能ですから、f90/95でも出来ますよ。
構造体に変数と関数ポインタをパックすればいいので
ただ、OOP言語っていうのは、言語仕様に含まれるという意味だと
個人的に思っているので,f90/95はOOPではないと思いますね
0373デフォルトの名無しさんNGNG
>372
うーん。プログラミング教えるのなんか大変そうですね。

数値アルゴリズムだけだと、構成的な解析分野の数学の証明
、つまるところ逐次近似みたいになるのですかね。

なんかコンピューターのプログラミング教えるのって、
融通が利かない&特別な能力を持つ「変人」へどう指示出すか、
っていうマネジメント教育みたいですね。
0374訴人NGNG
do 10 i=1,number,0.2 →整数で回すべし。361を参照。
x(i)=dacos(1-2*h(i)/d)で* DACOS  →dacos(倍精度実数型)でいいの?acosじゃないの?
elseif ((h(i) .gt. 2)). and.((h(i) .le.3)) thenで*  →Ifの使い方は大丈夫?
0375デフォルトの名無しさんNGNG
みなさん、ご親切にありがとうございます
今、いろいろやってみてるんですけど、やはり・・・・。
do文でiをsに変えてみたんですけど、何も変わらず。
*** PZ has non-integer subscript(s)
などとでてきます。
また、一番初めに*** An adjustable array is only allowed in a subroutine or function
てでてくるのですが、これは
real h(n),x(n),a1(n),px(n),pz(n),xc(n),zc(n),ax(n),hg(n),z(n)
が、問題なのでしょうか。
nはhが0から3まで0.2ずつ増えていくので、n=15なのですが、
nはデータの個数で、h<3のときは、計算自体をSTOPさせるようにしたいのですが、
どうすればいいのでしょうか。
さらに、0<h≦1での計算のプログラム、
hがそうでなかったら、1<h≦2の計算のプログラム、
hがそうでなかったら、2<h≦3の計算のプログラム、
hがそうでなかったら、3<hでSTOPさせようと思っているのですが、
その際に、elseifは何回使ってもよいのですか。

『土木情報処理の基礎』という本を教科書に使っています。
これを参考にしているのですが、説明が不足しているような気がします。
ご教授ください。御願いします。
0376デフォルトの名無しさんNGNG
>375

うーん。本があまり良くなさそうだね。
まあ Fortran なら、 google れば日本語の解説もあるんじゃない。

そうすれば以下の問題は解決する。

1)PZ has non-integer subscript(s)
→変数型の問題。もしその本が変数の型について
 触れてなければ直ちに Fortan と付いた別の本も買う。

 なお、 do 10 s=1,number,0.2; h(s)=s* x と
 do 10 i=1,number; h(i)= i*0.2 * x が同じように
 感じるならば徹底して別の本を読み直す事を
 おすすめする。
 最初の例の h(i) が変なのはなぜか?
 h(i) を計算する右辺は、数学的に同じなハズなのに違うのはなぜか?
 勝手に変形してはいけません。

2)An adjustable array ...(以下略)
→これは配列の宣言の話。もしその本が配列の宣言について
 いろいろな具体例のみならず間違い例が無ければ
 やっぱり別の本が必要。

追伸
ここはプログラム系と云う事なので、 Fortran コンパイラー
に付いての情報もあった方がいいと思います。
0377デフォルトの名無しさんNGNG
>376
ご指導ありがとうございます。
1)に関して。暗黙の型宣言でiは実数だからsにしたんですけど、
それだけじゃだめなんですね。
まったく同じものにみえてます、はい。
0.2を1/5にするとか・・・・・・・はぁ。
2)に関して。配列ですか。
配列は、dimensionしか習ってないので、たぶん、これしか使えないんですよね。
きっと。

問題に関してもいくつか不明な点もあるので、先生に聞こうと思ってますが。

追伸でご指摘があったので。
CPad for Salford FTN77
というコンパイラーを使ってます。
実行もしてくれるので、便利かなと。
0378デフォルトの名無しさんNGNG
>377
1)
暗黙の型宣言は使わないほうがいいです
Integer やRealで明示的型宣言を使うようにしましょう
ちなみに,1/5は0です…コンパイラによるけど
2)
parameter N=15
real h(N)
なら動くはずです。f77使わないのでうろ覚えだけど
Fortran77のprogram文内には固定サイズ配列しか
置くことが出来ないのです。
0379デフォルトの名無しさんNGNG
質問の内容を見ていると、いろいろと基本的な概念が理解できて
いないようです。がんばって学んでください
・エラーがでたら,その部分に注目しよう
 例えば,
  real h(n),x(n),a1(n),px(n),pz(n),xc(n),zc(n),hg(n),z(i)
 の行だけでエラーがでませんか?
・値が怪しいときは,値の変化を追いかけよう.例えば
   write(*,*) h(i)
 の一文をループに入れて,値を確認しよう(こういう行為をデバッグといいます)
・どれを入力にして,どれを出力して,どれを保持するのか?これはプログラミング
 の大きな要素です.よーく考えてください.
・フルプログラムをいきなりべた書きするのは止めよう
 自分の能力に自信が持てるまでは,少しずつデバッグを繰り返しながらプログラムを
 作り上げる癖をつけましょう.この問題なら,
 1.変数宣言だけをつくる→テスト
 2.変数を初期化するとこまでつくる→テスト
 3.配列h(i)に値を入れる部分と配列h(i)を出力する部分を作る.まず
   do i=1,2
として,上手く動くか確かめる→テスト.次に,h>3.0でループが
   止まる構造を考える→テスト.
 4.ループをi=1,2に戻して,if構文を入れる→テスト.
   フルループを回す→テスト.
全ての判断要素を入れる→テスト.
 慣れた人でも,いきなり全てべた書きできるわけではありません.天才でもない
 限りは,このように少しずつ組み上げていきます.
0380デフォルトの名無しさんNGNG
レス番入れ忘れた…
>379は>377さん宛てでふ
0381デフォルトの名無しさんNGNG
>380さん。
アリガト!(´▽`)。
少しずつがんばってみます。
けど、提出期限もあったり。あわわわ。

ちなみに、既習事項。
dimension
implisit文
if文
do文
組み込み関数
open及びwrite文
このくらいですかね。
これだけでもできるんですかねぇ。
0382デフォルトの名無しさんNGNG
>381
プログラミングに必要な知識は
 変数宣言 integer, real,dimension
 演算子 +-*/ **
 判断 if elsif else .ge. .eq. ...
 繰り返し do do while
 入出力 open close read write
たったこんだけです.大規模プログラムには,
 ユーザーサブルーチン・関数
が加わります.これで,おしまい.どんなものでも作れます.
これは,どんな言語でも同じです.逆に,これらが理解できないと
何も作れません.

初心者は必要な知識が少なすぎて困惑するのかも知れないなぁ
0383デフォルトの名無しさんNGNG
なんとかコンパイルはできました。
しかし!!!
実行できません。
コンパイルはできているのに、実行できないってあるんですか。
どうすればいいんだああああああーーーーーーーーーーーー。
すみません。取り乱してしまいました。
0384デフォルトの名無しさんNGNG
>>383
OSとコンパイラは何?
0385デフォルトの名無しさんNGNG
>383
頼むから,>379を読んでください
・まず,実行できないという表現はありえません
・最も簡単なプログラム write(*,*) "test" は実行できますか?
 実行できないなら,そもそもリンク作業を行っていません
 実行ファイルの作り方から復習してください
・エラーが起きていますか?
 それなら,
  ・0で割った(overflow,ゼロ割)
  ・配列のサイズを超えたアクセス(segmentation fault,f77で起きるかどうかしらん)
 が考えられます.適当な行に write(*,*) "koko" という文を入れて,そこまで実行
 されるかどうか確かめてください. エラーが起きた行を捜します 
・単に出力がでないという意味なら,無限ループの可能性が高いです
 ループに write(*,*) h(i) という文を入れて,ループが予期した通りに動いているかどうか
 確かめましょう

なんか釣られている気がしてきた…
0386デフォルトの名無しさんNGNG
>>384
OSは、Me,
コンパイラーはCPad for Salford FTN77です。
>>385
いろいろとありがとうございます。
今日、また確認作業をやってみます。
0387デフォルトの名無しさんNGNG
>385

僕は多分 Arccos ではまっていると思いますね。
0388名無しさんに接続中…NGNG
integer m,m,wasa,seki,sho,amari
real x,y
WRITE(*,*) "n =?"
read(*,*) n
write(*,*) "m =?"
read(*,*) m
wa = m + n
sa = m - n
seki = m * n
sho = m / n
amari = m = n*sho
write(*,*) "m + n = ",wa
write(*,*) "m - n = ",sa
write(*,*) "m * n = ",seki
write(*,*) "m / n = ",sho
write(*,*) "amari = ",amari
c
write(*,*) "x =?"
read(*,*) x
write(*,*) "y =?"
read(*,*) y
write(*,*) "x*y = ",x*y
write(*,*) "x/y = ",x/y
stop
end

こんなのを作ったら、下のようなエラーがでました
0389388NGNG
次のようなエラーがでました
(0003)のエラーの意味ってなんでしょうか?


■C:\Documents and Settings\Owner\My Documents\fcpad231\Fortran> ftn77 /link 面積.for
[Salford FTN77/Win32 v4.03, Copyright (c) Salford Software Ltd. 1988-1998]
Licensed to: FTN77 Personal Edition
Department: Non-commercial use only
0001) integer m,m,wasa,seki,sho,amari
WARNING - M has already been declared with this data type
0003) WRITE(*,*) "n =?"
*** An alternate return specifier is only allowed in a CALL statement

^C
0390デフォルトの名無しさんNGNG
よくみてないけど,
integer m,m,wasa,...
↓
integer m,n,wasa,...
0391<_ _>NGNG
これなんだ?>389

amari = m = n*sho
0392388NGNG
388です。もっとシンプルなのにしてみても同じエラーが出てしまいます。
integer m,n
write(*,*) "m =?"
read(*,*) m
write(*,*) "n =?"
read(*,*) n
wa = m + n
write(*,*) "m + n = ",wa


stop
end
0393388NGNG
以下のようなエラーです。
■C:\Documents and Settings\Owner\My Documents\fcpad231\Fortran> ftn77 /link ydfg.for
[Salford FTN77/Win32 v4.03, Copyright (c) Salford Software Ltd. 1988-1998]
Licensed to: FTN77 Personal Edition
Department: Non-commercial use only
0002) write(*,*) "n =?"
*** An alternate return specifier is only allowed in a CALL statement
0004) write(*,*) "m =?"
*** An alternate return specifier is only allowed in a CALL statement
0007) write(*,*) "m + n = ",wa
0008)
0009)
*** """ found where not expected
*** Invalid input/output list
4 ERRORS [<MAIN@>FTN77 Ver 4.03]

*** Compilation failed

^C
0394388NGNG
388
write(*,*) "m =?"
write(*,*) "n =?"
を消したら、実行できました。
でも、使うときにわかりにくいなぁ。
0395デフォルトの名無しさんNGNG
>write(*,*) "m =?"

Fortranではwrite(*,*) 'm =?'じゃなかった?(もう、覚えてないよー!)

0396デフォルトの名無しさんNGNG
>>395
です。
0397388NGNG
>>395
できました。本当にありがとうございました。
0398デフォルトの名無しさんNGNG
>write(*,*) "m + n = ",wa
ていうかこれも実行できたのか?
WRITE(6, '(A,F10.0)') 'm+n=', wa
あたりじゃないと苦しくない?
waよりもiwaとかにしたほうが良いだろうけど
0399デフォルトの名無しさんNGNG
サブルーチン法で解いてもらいたいのですが・・・
よろしくお願いします!
parameter(N=3)
dimension A(N,N),b(N),x(N)
data a/2,1,4,4,-1,1,6,5,-2/
data b/28,7,21/


do k=1,N-1
do i=k+1,N
p=a(i,k)/a(k,k)
do j=k+1,N
a(i,j)=a(i,j)-p*a(k,j)
end do
b(i)=b(i)-p*b(k)
end do
end do

do i=n,1,-1
temp=0.0
do j=i+1,n
temp=temp+a(i,j)*x(j)
end do
x(i)=(B(i)-temp)/a(i,i)
end do
0400デフォルトの名無しさんNGNG
すっかりFortran宿題スレになってしまう予感。
宿題教えてくんが来るまでは大人な雰囲気のすれだったのに。
みんな親切に教えてあげすぎかも。
0401デフォルトの名無しさんNGNG
↓宿題手伝いますYO!
http://pc3.2ch.net/test/read.cgi/tech/1038024989/
ってことで

>399
サブルーチン法ってなんすか?
0402デフォルトの名無しさんNGNG
>399
つーか、よく見たらガウスの消去法じゃねぇか
なにをサブルーチンにしたいんだよ
サブルーチンの定義から勉強してこい
0403デフォルトの名無しさんNGNG
ガウス消去法の部分をサブルーチン化するんでしょうけど。。。
サブルーチン側で整合配列?使うのかなぁ
0404デフォルトの名無しさんNGNG
拡張子を「.for」から「.f90」に変更して
program program1
parameter(N=3)
dimension A(N,N),b(N),x(N)
data a/2,1,4,4,-1,1,6,5,-2/
data b/28,7,21/

call gauss();
print *,(x(i),i=1,N)

contains
subroutine gauss()
do k=1,N-1
do i=k+1,N
・・・
x(i)=(B(i)-temp)/a(i,i)
end do
end subroutine
end program program1

なんちゃって
0405デフォルトの名無しさんNGNG
f90にはcontainsがあるんですねぇ。時代は進んでしまった。
でも、a,b,xが大域的配列だとすると、このcontainsは何のために
あるんでしょうか? 'データ晒しあげ'の感がするんですけど。
0406デフォルトの名無しさんNGNG
C公開の影に隠れてる Watcom の FORTRAN コンパイラはどうですか?
GNU, Sun, Fujituのコンパイラではすんなり通るソースも Watcom でまともにコンパイルできたこと無いから
速いのかどうかすら分かりません・・・
http://www.openwatcom.org/

inte lのはなぜか FORTRAN95 規格でコンパイルしてしまい,ワーニング出まくるので調べ中です.
0407デフォルトの名無しさんNGNG
>405
containsは複雑な入力ルーチンの隔離やmodule内サブルーチンに使いまふ

program main
use UTIL
implicit none
...
call func();
...
end program

module UTIL
real :: grobalVar;
...
contains
subroutine func()
...
end subroutine
end module
0408デフォルトの名無しさんNGNG
>>406
ifcはコンパイルoption付けるとワーニング消えるよ
0409yuuNGNG
 初めて書き込みします。自分は卒研でfortranを使っているのですが、
まだ経験が浅く根本的によくわかっていなく、色々と勉強をしている
のですが数ヶ月勉強しただけではわからないことが多すぎて頭がおか
しくなりそうで教えていただきたいのですが、LAPACKの使い方がよく
わかりません。
 LAPACKのルーチンをすべてコンパイル時にリンクすることは可能なの
ですか?
 リンクの仕方もあまりよくわからないバカものなのですが、LAPACKの
うまい使い方を教えて頂けたらうれしいです。
 具体的には非対称固有値問題(NEP)ルーチン名は ZGEEVX を使おうと
思っているのですが、なにかアドバイス頂けたらありがたいです。
0410デフォルトの名無しさんNGNG
>>408
そのコンパイルオプションを探してるんですけど,見つからないんです・・・
0411デフォルトの名無しさんNGNG
>>409
コンパイラはVisual Fortranですか?それともgccのf77ですか?
Visual Fortranじゃなかったら残念ながら(私には)答えることができません。
あなたが使っているコンパイラに詳しい人がいたらいいんですけど。。。

>LAPACKのルーチンをすべてコンパイル時にリンクすることは可能なの
>ですか?

理解が少し間違っていると思うけど、希望のルーチンはリンクできます。

リンクの仕方には2通りあって、Windowsの場合?、静的なリンク(*.libのファイル
を使う)と動的なリンク(*.dllのファイルを使う)があります。
0412デフォルトの名無しさんNGNG
>>409
LAPACKの配布パッケージ内のソースだけで完結しているはず。
ただし、BLASも必要(BLASはLAPACKの配布パッケージにも入っている?)

いきなりルーチンを使うのは無謀だから、まずは、付属の
テストルーチン(ZGEEVXであれば、ZCHKEE.f)の動作確認。

その後、zchkee.fの中から呼び出されるZDRVVXがZGEEVXのドライバ
になっているので、ZDRVVXあたりを見ながら使用法をマスター。
0413412NGNG
おっと、411さんの回答がありましたね。
ちなみに、圧死もVisualFortranでした。
0414yuuNGNG
>>411
返事していただきありがとうございます!
コンパイラはAbsoft Pro Fortran for windows 7.5です。
担当教官がほとんどコンパイラの使い方がわかってない
という最悪な状態なので、なのにいつも結果をだせしか
言いません。LAPACKについても分からないらしくここに
きたしだいです。
 例えば自分が使いたいZGEEVXのルーチンの中にCALL文が
ある場合は、そのCALLされているルーチン全部リンクさせなければ
いけないのですか??
 
0415yuuNGNG
>>412
ありがとうございます!
BLASで検索かけたところ blas.lib f77blas.lib cblas.lib
などがありました。BLASという言葉は今日の昼間色々調べていて
知ったばかりです。計算の精度をよくするようなことが書いてあって
ような。programやり始めて3ヶ月ぐらいであんまり専門用語が分からなく
をうしわけないです。
LAPACK利用手引を見ながらやっているんですが、ZDRVVXのルーチンの説明
がありません。なんとか調べてみたいと思います。
 動作確認というのはコンパイラによってやり方がことなるのですか?
まったくやり方がわからない素人にでも、簡単に説明できたら教えてください!
0416デフォルトの名無しさんNGNG
宿題手伝いますYO!
http://pc3.2ch.net/test/read.cgi/tech/1038024989/
0417デフォルトの名無しさんNGNG
>415
>担当教官がほとんどコンパイラの使い方がわかってない
>という最悪な状態
最悪じゃありません 普通です(  ̄ー ̄)
ちなみにそういうときの解決法
1.先輩に聞いてみる(そういう研究室には研究実行部隊がいる)
2.学内で他に使っている人を探す(意外といるもんです)
3.Web検索をかける(←最近はもっぱらこれ)

>動作確認というのはコンパイラによってやり方がことなるのですか?
異なります 説明書を読むしかないでふ うちはVFなので知らない
0418デフォルトの名無しさんNGNG
>>415
プログラム組まされるような学部に在籍しながら
>programやり始めて3ヶ月ぐらい
つーのと
>担当教官がほとんどコンパイラの使い方がわかってない
>という最悪な状態
つーのはどっこいどっこいな気が・・・

>まったくやり方がわからない素人にでも、簡単に説明できたら教えてください!
 御願いだからまず図書室にでも行ってそれなりの入門書を真剣に読んでください.

電算機室のUNIX端末でg77かf77かfrtあたりのコマンドあるか試して見てください.
たいてい
g77 source.f -o binary
のようなコマンド引数でコンパイルできます.
0419デフォルトの名無しさんNGNG
>418
一番最悪なのは
 担当教官がある言語の使い方しか分からなくてそれを強制される状態
です^^。
しかし、プログラミングの勉強なんか2週間もあれば足りると思うけどなー

ましてやFortran77。

会社だと1〜2週間くらいしか時間くれないよね…
それで出来ない人は無能って感じだし まぁ、危機感の違いかね
0420デフォルトの名無しさんNGNG
fortranの必要な会社って・・・
0421デフォルトの名無しさんNGNG
>担当教官がほとんどコンパイラの使い方がわかってない
>という最悪な状態なので、なのにいつも結果をだせしか
>言いません。LAPACKについても分からないらしく.....

キツイかもしれないけど、思うところがあったとしても
「それを言っちゃぁー、オシマイよ!」。

私は、学校の教官です。自分もその中の一人です。

「どうして大学、高専の先生は見てるだけで、何も言わ
ないんだろう?学生とプログラマが直接、接触してしま
うことが問題なのに。一部の先生は見てるはずだけど。。。」
と思うことはあります。(C/C++と違ってFortranの場合、
プログラマは少ないと思いますが)
0422デフォルトの名無しさんNGNG
>421
なんで問題なんすか?
昔はそもそも大学の先生もプログラミングがよく分からなくて(言語の遷移が
早すぎたので仕方ない)、独学で覚えていたけど。いろいろ本も読んだし、
当時のプロの人に聞いたりもした。別に問題があったとは思えないなぁ。
就職関係?
0423デフォルトの名無しさんNGNG
>就職関係?
。。。?

0424デフォルトの名無しさんNGNG
教官さんの日本語がよくわからない・・・
0425421NGNG
>423
学生と会社の接触というと、青田刈りを思い浮かべてしまった
0426デフォルトの名無しさんNGNG
日本語の不自由な人がいるスレ
0427デフォルトの名無しさんNGNG
>担当教官がほとんどコンパイラの使い方がわかってない
それは教官がFORTRANを使いたいという意欲がないだけでしょう。
本当は他の言語を使いたいけれど学ぶ暇が無いか、効率よく学ぶ方法をしらないか、とっつきにくてなかなか他の言語で授業をできない、とか。

そういうときこそ、教官は高級言語に詳しそうな学生に頼るべきである、と思う。

>>426
あんた、ほかのスレッドでも同じようなこと書いて回っているようだが、何が言いたいのかな?
荒らしというわけでもないがどうしようもない暇人か?
不自由感じて不満ならどうして欲しいか説明するこった。

0428デフォルトの名無しさんNGNG
なんかFortranから離れてきてるな

大学では未だFortran77が主流なのかね
研究なら分かるけど、授業はどうなんだろう
アメリカではプログラミング授業の90%以上がC,C++,Javaになったと聞いた

ただ、Cを使って初心者用セミナーなんかやると、言語の基本を教えるなら
BasicやFortranの方がいいと思った(最初の数時間くらいは)
プログラムエントリが自由な言語は初心者には向かない
0429412NGNG
>>420
そういうところも.....あるといえばある。
0430412NGNG
ちなみに、55=412
0431デフォルトの名無しさんNGNG
>>427
昔は情報系の先生が他学科から要請を受けてfortranを出張講義することが
多かったけど、その当時、学生だった私は「Fortranなんか。。。」という
教官の露骨な態度を感じました(もちろん、情報系の先生がすべてそう、と
いうわけではない)。しかし、私のときの教官には、a=a+1の意味や配列の
概念ぐらいきちんと教えてほしかった、という思いが今でもあります。

421 != 426 だけど、421のことを言っているんでしょうか?

>荒らしというわけでもないがどうしようもない暇人か?

まぁ、そうかもしれませんね。もう書き込みをいっさい止めようかと考え
始めています(といって、あちこちに書き込んでいたわけではない)。
掲示版に書き込むことは結構つらいし。。。

プログラマの方は(一流のプログラマを目指す)新入社員を指導教育される
立場でもあるから、どうしても新入社員の教育という基準から発言しがち
です。でも、掲示版の質問者は全てがプログラマを目指しているわけでは
ありません。(本当を言うと、私を含めて)学校の先生がもっと積極的に発言
したり、質問に回答してくれればな、と思います(でも、無理だろうなぁ。)
0432まNGNG
>428
僕が扱っている Fortan ソースコードはアメリカの大学で
最近作ったものです。
後、歴史のあるソースだと Fortran を引きずる事が
多いそうです。

もちろん F77 です。抜けられませんね。

まあプログラム言語もさることながらプログラミング書式作法
やプログラムの設計自体にももっと注目されてほしいです。
なんか悪文を読んでいる感じがするソースコードでちょっと辟易。
0433もNGNG
ソフト開発を生業とはしていない会社の、それでも数値解析などが必要となる
ような部門で、そのアプリを面倒を見ているような部署(=うち)では、
プログラムに関する勉強してきたやつなんてそもそも採用していないものだから、
ごくふつーの理系のお勉強をしてきたやつが入れ替わり担当する。

数値解析系プロは、過去の遺産を引きずっているので必然的にFORTRAN
が多いのだが、まぁ、教養課程でFORTRANくらいは触ったことあるはずだから、
大丈夫だろう、ということでプログラムの開発・メンテナンスの仕事を
与えられる。しかし所詮ド素人なので、滅茶苦茶なコードを書き残して、
しばらくすると他部署へ移動と相成る。

結果として、プログラミングをよく知っていればいるほど
恐ろしくて手が出せなくなる、悪い冗談のような、
かといって廃棄もできないプログラムが受け継がれる。

あああああああかきなおしたい
0434デフォルトの名無しさんNGNG
>>433
激しく板違い
0435デフォルトの名無しさんNGNG
最近の大学でもFortranで情報処理の授業するんですかねぇ
0436デフォルトの名無しさんNGNG
>>435
結構あるようです。
http://www.google.co.jp/search?q=%E8%AC%9B%E7%BE%A9%E5%86%85%E5%AE%B9+FORTRAN77
0437デフォルトの名無しさんNGNG
age
0438デフォルトの名無しさんNGNG
c言語ってフリーじゃないですよね?
0439デフォルトの名無しさんNGNG
>>438
スレ違いですよ。フリーのCコンパイラの話題なら↓でどうぞ。

タダで最強!フリーC/C++コンパイラ
http://pc3.2ch.net/test/read.cgi/tech/1035882599/

ところで、Windows用のフリーで使えるForran90/95コンパイラは
>>324 のF言語(?)だけなのでしょうか?
g77 や Watcom などFORTRAN77のコンパイラなら見つかったのですが…。
04401024NGNG
正規分布の確率密度を
ある点Xから無限まで積分で
求めるプログラムを教えてください。
できれば、シンプソンと台形公式(2重積分)の2通り
お願いします。
0441デフォルトの名無しさんNGNG
>>440
スレチガイ
宿題手伝いますYO!!
http://pc3.2ch.net/test/read.cgi/tech/1038024989/
0442デフォルトの名無しさんNGNG
age
0443デフォルトの名無しさんNGNG
一つ質問です.
FORTRAN 77 で OpenMP を使いたいのですが,
なにか良い書籍かサイトありますでしょうか?
0444未熟者m(__)mNGNG
いきなりなんですが、
『F=sin(x)+cos(x)のとき、x=0,45,90,180の値を求めよ』
って問題なんで、こんな感じで作ったのですが
−−−−−−−−
IMPLICIT NONE
REAL A,Y

WRITE(*,*)'A= '
READ(*,*) A

Y=SIN(A)

WRITE(*,*) Y

STOP

END
−−−−−−−−
動きません(T_T)よろしければ訂正もしく新たなプログラム教えてください。
0445未熟者m(__)mNGNG
上のものです
書き忘れありました。プログラムはfortran77です
0446デフォルトの名無しさんNGNG
>>444
RTFM
マニュアルを読みましょう.
0447デフォルトの名無しさんNGNG
>>444
課題は、Fを求めるんだよね?
上のソースはその課題の一部だな。
ソースを見る限り、degreeとradianを混同させている可能性があり、
デタラメな値を返すことが予想されるが、動かないなんて事はないと思う。

7カラム目から書いてなかったら跳び蹴りモノだが。


0448未熟者m(__)mNGNG
なんとか無事計算結果が出ました!!
0449デフォルトの名無しさんNGNG
>>448
結局何が原因で,どうしたら解決したのか
書かないのですか?
0450未熟者m(__)mNGNG
角度の部分をラジアンに変えるということを知らずそこをいじったらちゃんと計算しました
こんな感じです↓
−−−−−−−
IMPLICIT NONE
INTEGER DEG
REAL A,C,S,R,X,F,D

WRITE(*,*)'角度は?'
READ(*,*) D
R=3.14159/180.0
DEG=D
X=R*REAL(DEG)
S=SIN(X)
C=COS(X)
F=S+C

WRITE(*,'(2F8.4)') F

END
−−−−−−−
0451デフォルトの名無しさんNGNG
突然ですが
visual fortranでcpuの最適化は可能ですか?
0452デフォルトの名無しさんNGNG
cpuの最適化…出来たら面白いな…
0453デフォルトの名無しさんNGNG
>>451-452
確かにできたら凄いな(w
「特定のCPUに合わせた最適化」なら
オンライン・マニュアルで「/architecture」を検索しる!
0454デフォルトの名無しさんNGNG
>>452-453
> cpuの最適化…出来たら面白いな…

そう言う研究は、昔からあるよ。
最近は、FPGA が大規模化してきたから、そのうち実用になるかも。
0455451NGNG
オンライン・マニュアルでは,

/tune オプションを使うと,生成される最適化されたコード形式を指定す
ることができます。特定の実装に合わせてチューニングを行うことで,実
行時性能を向上させることができます。また,特定の目的に合わせてチューニングされたコードは,他の目的では実行速度が低くなることがあります。

とあったのですがこれが何を意味するのかさっぱりわからんのです.
DF コマンド行で実行可能ってあるのですが,DF コマンド行とはなんでしょうか?
0456デフォルトの名無しさんNGNG
>>455
# 今手元にVisual Fortranがないのでマニュアルだけ見て説明すると

> DF コマンド行
「DF」はコマンドライン・コンパイラ。
例えばPentium4で実行したときに一番速くなる様にしたければ
コマンド プロンプト(MS-DOSプロンプト)で

C> df /tune:pn4 hoge.f90

の様に「/tune」オプションでCPUの種類を指定してやれば
Pentium4用に最適化してくれる。(他のCPUでも実行はできる)

またそのプログラムをPentium4でしか実行しない場合は

C> df /arch:pn4 /tune:pn4 hoge.f90

の様に「/arch」オプションを使うと、そのCPU特有の機械語命令を使って
最適化してくれる。(互換性のない他のCPUでは実行できない)

Microsoft ビジュアル開発環境なら「Project Settings」ダイアログボックスの
「Fortran」タブにある「Project Options」のところに「/tune:pn4」等と書き加えればいい。

自分が実行したいマシンのCPUが解らない場合はとりあえず
「/tune:host」とすればコンパイルしたマシンに合わせて最適化してくれる(はず)
0457451NGNG
>>456
どもありがとうございます.
早速実行してみます.
0458デフォルトの名無しさんNGNG
>>455
IDEからでもプロジェクトの設定で、
FORTRAN - Code Generation
FORTRAN - Optimizations
で設定できるかと
0459451NGNG
最適化できたのはいいが1/40計算するのに5500sかかった・・・
こんなんざら?
0460デフォルトの名無しさんNGNG
>>431
>>421 ではなくて、 一行しかいていない 愚痴っぽい >>426 のことを言っているんですよ。勘違いして余計なことを気にしていますね。余計なこと書かない方がよかったかな。


FORTARANやるんだったらMathematicaやMATLABのほうが使い勝手が良いかなっておもう。

FORTRAN77はソースコードの解読が比較的楽だから、俺は、もしFORTRANで書かれた短いサンプルプログラムを参考にしてプログラムを作れという課題を出されたらすべでCかJavaに書き直す。
0461デフォルトの名無しさんNGNG
プログラムド素人なんですけど、
FORTRAN77で書かれたプログラムをFORTRAN90,95用のコンパイラーで
コンパイルするにはどうしたら良いのでしょう?
ちなみにVISUAL FORTRANというコンパイラーをつかってるのですが。
0462デフォルトの名無しさんNGNG
>>461
そのままコンパイルするだけでOK。
0463デフォルトの名無しさんNGNG
CプログラムからFortranのサブルーチンを呼んでいるのですが、そのCプログ
ラムと同等(のつもり)のFortranプログラムとの挙動が一致しないんです。厄
介なのは、パラメータによって一致するときとしないときとがあるんです。正
しい結果のときもあるのでCからFortranサブルーチンを呼ぶ方法は大きく間違っ
てはいないと思っているのですが、何か注意すべき点などありますでしょうか?
 ヒントをいただけるとありがたいです。コンパイラはgccとg77です。
0464IP記録実験NGNG
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0465デフォルトの名無しさんNGNG



   ひろゆきは帰った?wwwww
0466デフォルトの名無しさんNGNG
ニュー速への流民が増えそうですね
0467デフォルトの名無しさんNGNG
2ちゃんねらが全員誹謗中傷行為をやってると勘違いしてる模様。
本当にそうだったらんなコピペされんでも皆消えとるわ。
0468デフォルトの名無しさんNGNG
>463
添字が2つ以上の配列を値渡しとアドレス渡ししている差では?
0469デフォルトの名無しさんNGNG
職場、学校、座敷牢から気兼ねなく書き込みでける
ってゆってたのにー
プンスカ!!
0470デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0471デフォルトの名無しさんNGNG
素朴な疑問ですが、どうしてこの板だけスレストされるのですか?
0472デフォルトの名無しさんNGNG
IPとってる板

qb : 2ch批判要望 削除議論 削除要請 削除整理
live2 : ニュース速報
tmp : ニュース極東 ちくり裏事情 政治思想 Download
    厨房! 人権問題 バカニュース 薬・違法
    ゴーマニズム ロビー 最悪 少年犯罪
    違反の潰し方 ペット苦手 なんでもあり 学歴
0473デフォルトの名無しさんNGNG
>141

博之が取って無くても国が取ってます。ルートサーバー全部傍受されて記録されています。
同時に、国家機関に対してプライバシー等元からありません。
つまり、只の嘘なのです、 裏の利権団体が作り出した虚構 それがこのサイトです。
従って、 残念ですがそういった反社会的な犯罪は
 私も自戒しつつ 暴露します。 
すいません。

 非常に勝手です。
 私に力を頂けますでしょうか>皆さん
0474デフォルトの名無しさんNGNG
復活した模様
0475デフォルトの名無しさんNGNG
2ちゃんねる が衰退していく

あるネット関連会社の社長は、
「いずれにしても2ちゃんねるは資金が底をつけば終わり。
あまり知られていないことだが、2ちゃんねる内部関係者によると今、
大手通信会社系が調査費名目で資金提供している。
だが、それが止まれば続けてはいけないだろう」
と証言する。
2ちゃんねるが判決によって力を失った場合、
資金提供の打ち切りも予想される。

http://ascii24.com/news/reading/causebooks/2002/07/01/636911-000.html
0476デフォルトの名無しさんNGNG
>>910

変なのが減っていいと思うけどね
チャット状態の板なんて決ってるでしょ
0477デフォルトの名無しさんNGNG
>>548
誤爆キターーーーーーーーーー!!おまいもどんなのか知らないのか?
0478デフォルトの名無しさんNGNG
・圧縮やなんかでdat落ちした分を省いた=若干落ちてます。正解です。
・報告無しで処理された分を省いた=上記例示183の意見に従っています。恣意的なまとめ反対です。
                  ちなみに名無し★で1年間強活動していました。
・まとめが好きで好きでたまらないまとめ大好きっ子だった=概ね同意です。
http://qb.2ch.net/test/read.cgi/saku/1038125433/8
・まとめをマメにしてみましょう。
★T氏に確認した時に「コツコツ頑張ってるなぁ。」との お言葉を頂きました。

私はつい先日までリアル中卒2年間引きこもり中3の時酒乱の父の暴力で
リコーン母親家に引き取られました(マジ で頭が悪いので
(なぜか某学士号+国家試験数個持っている罠+未だに司法試験浪人中な罠)
お指導をお待ちしております。m(_ _)m。
0479463NGNG
>>468
ありがとう。2次元配列を渡してたんだけど、添字の順序が違うのねえ…。
気がつくまで何日も悩んでいました。鬱だ。

ところでここってFortranスレですよね?
0480デフォルトの名無しさんNGNG
fu-n
0481デフォルトの名無しさんNGNG
>>345
逮捕されるような書き込みをする奴は僅かだろうし
荒らしはどうせ回避策をちゃんと取って来るし
2ちゃんねらは飽きっぽいので今までと変わらんと思う
0482デフォルトの名無しさんNGNG
スレタイの日本語、微妙におかしいね。
0483デフォルトの名無しさんNGNG
あげてみたり。
0484デフォルトの名無しさんNGNG
そういうのは厳しくなりそう
P2Pとかに潜るんでしょう
0485デフォルトの名無しさんNGNG
>479
ということはアドレス渡しですか?

C<>Fortran の多次元配列渡しで
添字順序が違うとなると、添字順序の
マニュアル最適化は面倒ですね。
0486fortrun初心者NGNG
VisualFortranを使ってプログラムを作っているのですが、
txtファイルを読み込んでくれず、エラーが出てしまい
ます。こんなエラーが出てきます.
forrtl:severe (256):unformatted I/0 to unit open
for formatted transfers,unit 2,file d:\E\debug\test.txt
プログラムは、下に書きます。
INTEGER A,B,C,D
OPEN(UNIT=2,FILE='test.txt')
READ(2) A
READ(2) B
READ(2) C
D=A
CLOSE(2)

OPEN(4,FILE='D:REN.TXT')
WRITE(4,*) D
CLOSE(4)
STOP
END
初心者の自分にお教え下さい。宜しくお願い致します。
0487デフォルトの名無しさんNGNG

>1 :ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ :03/01/08 17:13 ID:???
>そんなわけで、qbサーバでIPの記録実験をはじめましたー。

IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/l20

IP記録実験PART2
http://qb.2ch.net/test/read.cgi/accuse/1042020193/l20

これまでのあらすじは あたりに誰かお願い。
0488デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0489デフォルトの名無しさんNGNG
>486
Visual Fortran のヘルプで Read を引いてみて下さい。

っていうか、それくらいしないとこれから苦労しますよ。
まあ今回1回だけの宿題のつもりなら調べる気は
起きないでしょうが。
0490デフォルトの名無しさんNGNG
IP12!
0491デフォルトの名無しさんNGNG
はぁ。もうテンプレ張るのやめた。
0492デフォルトの名無しさんNGNG
継続には付けないことが多いよ
0493デフォルトの名無しさんNGNG
具体的には「某」というコテハンの人だと思う。
0494デフォルトの名無しさんNGNG
11 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:16 ID:rLfxQ17l
全レスです。
0495デフォルトの名無しさんNGNG
2ちゃんねるも現実ですよ。
0496デフォルトの名無しさんNGNG
あらまぁお二人で(w
0497デフォルトの名無しさんNGNG
↑
こいつ、気合い入ってるな
IP取られてるのになぁ・・
0498デフォルトの名無しさんNGNG
ネタスレを記事にするためとりあえず富山のほうに通報したんだな産経は。
0499デフォルトの名無しさんNGNG
ひろとしハゲワロタ
0500デフォルトの名無しさんNGNG
一定期間のログ取得は当時のガイドラインにも明記されており
その期間はセキュリティーの問題上公開されておりませんでした。
今でもそうですが。

その情報をもっているのはISPしか存在しない。
よって答えは一つしか無い。
0501デフォルトの名無しさんNGNG
最近連投規制厳しすぎてスレ立てもまともにできない(;´д`)
5秒ほど待てって…
そんなことしてたらテンプレに割り込みがイパーイ入っちゃう(´Д⊂グスン
0502山崎渉NGNG
(^^)
0503デフォルトの名無しさんNGNG
そうだね。
0504山崎渉NGNG
(^^)
0505デフォルトの名無しさんNGNG
フォートラン77でプログラムが長すぎて動かせないっていうのはあるんですか?

コンパイルでエラーは無いんですが,
動かすと途中の何も問題ない箇所で勝手にエラーが出て止まってしまうんですが…

素人な質問ですいませんけど…
0506デフォルトの名無しさんNGNG
>>505
「エラーが出て止まってしまうんですが」とだけいわれても答えようがない。
どんなプログラムなのかとかエラーメッセージの内容、使った処理系など
が解らないと…。
0507デフォルトの名無しさんNGNG
長いってどのくらい?
0508デフォルトの名無しさんNGNG
>>506
使った処理系やどんなプログラムというとどういう風に答えれば…

エラーメッセージは

run-time error M6201: MATH
- sqrt:DOMAIN error
・
・ ここらへんはファイル名がとかが表示されてます
・
Incrementally linked image--PC correlation disable

となってます.
ネットで検索してみても,このエラーの意味もよく分からない素人なんで…
たぶん,私の説明内容だと全然分からないかと思いますが…
スイマセンです.
0509デフォルトの名無しさんNGNG
>>508
ちゃんとエラーメッセージに原因が書いてあるじゃないの…。
SQRT関数の引数が 0より小さくなってる箇所があって、
実行時エラーで止まってる。
もう一度プログラムを見直した方がいいよ。
0510デフォルトの名無しさんNGNG
>>509
ありがとうございます.
そういう意味だったんですか…
COMPAQのFOTRANのページや本を見ながら何のエラーか調べてたんですが,
よく分からなくて…
プログラム見直してみます.
0511デフォルトの名無しさんNGNG
>>510
 エラーナンバー出てるから,もし電子媒体のマニュアルあるのならば
M6201で検索すればいい.
0512デフォルトの名無しさんNGNG
引き算とかで0になって欲しいところが
数値誤差で微妙に負になってるってことがあるね。
0513デフォルトの名無しさんNGNG
>>510
日本語のマニュアルあるのは知ってる?

ttp://www.compaq.co.jp/products/dvf/visual/jhelp.html
0514510NGNG
あれからSQRT関数のところからたどって行って,
プログラムと格闘した結果,なんとかミスを探し出して,動かすことができました.
いろいろお世話になりました.

>>513
ええ,知ってました.
それと本を見ながらやってたんですが,M6201のエラーが書いてなくて…

もっとFORTRAN勉強せねば・・・
0515デフォルトの名無しさんNGNG
FORTRANは初心者多そうだ(僕も含めて)。
ランタイムエラーでは、引数範囲、ゼロ割、
仮引数の配列サイズ>実引数の配列サイズが主なものかな。
0516デフォルトの名無しさんNGNG
parameter文で記号定数を宣言することのメリットって、
メインプログラムの配列宣言で、配列のサイズに記号定数を使用できること以外に
なにかあるんですか?
イマイチピンとこない。
0517デフォルトの名無しさんNGNG
c#とfortranでソフトの開発をしたいのですが、VisualStudio.NETでfortranの開発をするにはどういう設定をしたらいいでしょうか?
0518デフォルトの名無しさんNGNG
>>517
本当知らん
ふぉんとしらん
フォートラン
0519デフォルトの名無しさんNGNG
>>516
・物理定数や換算係数などの文字通り「定数」として使う。
S=3.1415926536D0 * D**2 / 4.0D0 → S=PI * D**2 / 4.0D0

・プログラムを書いた本人しか解らない(本人でさえ時間がたつと忘れてしまう)
 「魔法の数字」をなくすために使う。
SIZE = 80 * 25 → SIZE = SCRN_WIDTH * SCRN_HEIGHT

>>517
コンパックに頼み込む。(今はHPか)
0520デフォルトの名無しさんNGNG
>>516
パラメータの設定を別個のファイルに置いといて、
Include で各関数で読み込むが吉。
0521デフォルトの名無しさんNGNG
CをFORTLANに書き換えるソフトってありまつか?
0522デフォルトの名無しさんNGNG
↑ FORTRAN の間違い(;´Д`)
0523デフォルトの名無しさんNGNG
フォーミュラートランスレーション
0524デフォルトの名無しさんNGNG
>>521
こんなのがある(使ったことないけど)
ただし、変換先はFortran90

c2f
ttp://www.unics.uni-hannover.de/rrzn/gehrke/c2f.html
0525デフォルトの名無しさんNGNG
FORTRAN77の大学の課題です。
Z(x)=Σ[1,∞]1/n^xと定義する。nについての無限和をもっともらしい
上限(理由を議論する)を決めて有限和とすることにより、2≦x≦4
の範囲でZ(x)のグラフを書きなさい。またこのとき数値的に
∫[2,4]1/Z(x)dxをの値を求めよ。
0526525 NGNG
できたところ。以下
real n,x,s,i
write(*,*) 'n=?'
read(*,*) n
write(*,*) 'x=?'
read(*,*) x
s = 0
do 100 i = 1,n,1
s = s + 1/i**x
100 continue
write(*,*) 'ans=',s
stop
end
0527デフォルトの名無しさんNGNG
>>525
ふ〜ん、それで。
0528デフォルトの名無しさんNGNG
>>525
FORTRAN77、懐かしいねぇ。ACOS77
0529デフォルトの名無しさんNGNG
おっ?手応えのありそうな問題♪
0530山崎渉NGNG
(^^)
0531デフォルトの名無しさんNGNG
n や i をREALにするのはいかがなものか。
0532デフォルトの名無しさんNGNG
暗黙の型宣言じゃないとやです。
0533デフォルトの名無しさんNGNG
倉庫行き危機回避age
0534デフォルトの名無しさんNGNG
モジュール副プログラム
形状引き継ぎ配列を引数にもつ副プログラム
をCやFortran77から呼ぶことはできるのでしょうか?
Fujitsu Fortranを使っていますが、このことには触れられて
いないので教えてください
0535デフォルトの名無しさんNGNG
>525
計算機固有の問題である桁落ちを考慮して、
逆数の足し算をした方が良いように思われ
0536デフォルトの名無しさんNGNG
以前Unixのf77で実行していたプログラムをPCのFujituFortranで実行すると
line 573 an endfile record was detected in a READ statement...というエラーが出て動きません。
読み込みファイルのエラーのようなんですが、全くの素人なものでどうすれば動くか教えてください。
0537デフォルトの名無しさんNGNG
∵.☆:* ・∵.゜.☆.・∴.,★ :*・∵.:☆.。.:*・:* ・∵.+:*・∵.゜ ">*・.:.。.:*・:*・

∵.☆:*・∵.゜.☆.・∴.,★ :*・∵.:☆.。.:*・:* ・∵.+:*・∵.゜ http://jsweb.muvc.net/index.html
★☆★幸福になりたーい!!★☆★
0538デフォルトの名無しさんNGNG
ファイルからデータを読み込んで変数に格納しようとしたが、もうファイル
の最後で読み込みができないということ。
(例)
HOGE.TXT
--------
10
20
30
PIYO.F
------
INTEGER I,CNT
OPEN(99,FILE='HOGE.TXT')
DO CNT=1,4
READ(99,*) I
END DO
などと書くと、ファイルには3整数しか書いてないのに、4回読み込んでいる
ので、このエラーが起こる。
 すでに、動いていたプログラムのようなので、
1。適切な入力ファイルであるか?
2。UNIXとDOSの改行コードの違いのために、そのままファイルを持ってくると
一行と解釈してくれないかもしれない(DOSのFORTRANを使った経験がないので
確かではないですが。)
を確かめてみるとよろしいのではないでしょうか?
0539デフォルトの名無しさんNGNG
>>538
fujitsuFortranてlinuxじゃなかったっけ?使ったことも見たこともないんですが。
まさかvppFortranじゃないよね、PCって書いてあるし…

>>587の人は情報が少なすぎますよ。せめてREAD文周りをさらしてみるとかしないと。
まあ、読ませるファイルがぶっ壊れてる/間違ってる可能性が高いと思われますが。
0540536NGNG
>>538,539
WindowsのfujitsuFortranですが
改行コードの変え方がわからずどうしようもないので
fortranをはじめからすこし学習することにしました。
ありがとうございました。
0541デフォルトの名無しさんNGNG
読み込ませるファイルの改行コードを変えたら?
0542デフォルトの名無しさんNGNG
>>540
ブラウザで開いて、テキスト形式で保存するのが手っ取りばやい、
後は、どっちも読めるエディタを使うとか。
0543デフォルトの名無しさんNGNG
仮想メモリについておしえてくださいです!

今fortran90でプログラムしてるんですが、実装以上のメモリを使おうとするとかってにHDD上に仮想メモリとるんですか?
それともエラーになっちゃいますか?
今allocateでたくさん確保しようとしてるので;;;
どうかおねがいします。
0544デフォルトの名無しさんNGNG
>>543
OSが仮想メモリをサポートしていれば普通、仮想メモリを確保しに行くでしょう。
どこまで確保できるかはOSと処理系によると思いますが。
0545デフォルトの名無しさんNGNG
>>544
レスありがとうございます!!
OSかくのわすれてました;;;win2000でpentium4です。
やはり仮想メモリいきますよね;;;

もし仮想メモリにいってほしくなかったらwin2000の設定で仮想メモリ無しにするしかないのかな・・

0546デフォルトの名無しさんNGNG
コンパイルが通らんのじゃないのか?
コンパイラは何?
0547デフォルトの名無しさんNGNG
最近Fortran90/95使い始めたけどいいですね、これ。
行列の計算が簡単に書けるし、ちゃんと構造化できる(w
昔習ったFORTRAN77とはえらい違いだ。

でも90/95の普及率ってどんな感じなんだろう。
大学の研究室とかだと、未だにF77が現役なのかな?
0548デフォルトの名無しさんNGNG
>>547
フリーの Fortran90/95 のコンパイラってある?
これが無いからあんま普及しないってのはあるのではないかと
思ったり思わなかったり。気軽に試してみる事が出来ないって
のは結構痛い所だと思うんだけど・・・
0549548NGNG
http://www.fortran.com/F/compilers.html

げ、最近ってこんなのあるんだね・・・知らなかった・・・
g77 が g90 になればもちっと流行ると思うんだけど、
コレとかの知名度が上がればまぁそれなりに普及するんじゃないかなぁ。
0550デフォルトの名無しさんNGNG
すみません、質問させて下さい。
>>549 のFコンパイラを試してみたのですが、
ダウンロード・解凍して、binディレクトリにPATHを通したのですが
コンパイルしようとすると
Cannot create output file: No such file or directory

と出てコンパイルできません。
MinGW同梱版のほうも試してみたのですが、同じでした。
なにか他に設定がいるのでしょうか?

OSはWindows XP Homeです。
0551549NGNG
>>550
Linux では使えたんですが・・・
という事でcygwin版をインストールしてみました。
とりあえず、F.exeのあるパスの一個上に tmp というディレクトリを作ってみ
るとそのエラーは出なくなると思います。
# ただ、リンカエラーが出るなぁ、ウチだと・・・

とりあえずこれって c へのトランスレート& gcc でコンパイルをしてる
みたいですねぇ・・・

他に何かフリーのfortran90/95のコンパイラってないんでしょうか?
0552549NGNG
Mingw版も入れてみたんですが、コレ gcc とか込みなんですね。
どーりでデカいと思った・・・
で、Mingw版の方はpathの設定と tmp ディレクトリの相対位置さえ合ってれば
無事動きました。
ご参考になれば。
0553550NGNG
>>549
ご指摘の通りtmpディレクトリを作ってみたところ、使えるようになりました。
ありがとうございました。

早速、いくつか小さいプログラムをコンパイルしてみたのですが、
必ず変数宣言が必要だったり、.EQ. などの演算子が使えなかったり、
シングルクォートでくくった文字列が使えなかったりと
全てのFortran90/95のソースがそのままコンパイルできる訳ではないようですね。

とりあえず、自宅でFortran90/95がコンパイルできる環境が手に入ったので
しばらくこれで遊んでみます。
0554デフォルトの名無しさん NGNG
それにしても、スレタイからして、こんな息の長い良スレ(真面目なスレ)に
なるとは思わなかったな(藁
0555デフォルトの名無しさんNGNG
>>554
Simple is best. ってことだな。
0556549NGNG
http://g95.sourceforge.net/
ってのもあるらしいですなぁ。早く完成しないかなぁ。
0557質問ですNGNG

フリーのg77をつかっているんですが、型宣言でDoubleとしてるんですが

繁栄されないんです。フリーだからこんなもんなんですか?
0558デフォルトの名無しさんNGNG
>>557
どういう状況なのか書かれていないので、一般的な回答しかできないが
 1. 書式なしで結果を出力している。(WRITE(*,*) )
   →書式を指定して、結果を確認してみる。
 2. 単精度の定数を代入している。(a=3.1415926536)
   →a=3.1415926536D0 等とする。
 3. 実は倍精度変数を使用していない。(変数名の綴り間違い)
   →変数名が正しいか確認する。

コンパイラを疑うより先に、まず自分自身を疑え。
0559デフォルトの名無しさんNGNG
>>558
> コンパイラを疑うより先に、まず自分自身を疑え。
いい言葉だねぇ。

ついでに、ユーザーには
プログラムのバグを疑うより先に、まず自分の入力データを疑え。
と言いたい。

横レスすまん。
0560デフォルトの名無しさんNGNG
Double?
Double Precision?
0561デフォルトの名無しさんNGNG
>>559
しかし、ユーザーからは、
ユーザーの誤入力を咎めるよりも、まずは誤入力を誘うような設計を何とかしれ。
と切り返される罠。
0562デフォルトの名無しさんNGNG
コンパイラー様は神様です。
0563質問ですNGNG
>>558
implicit none
double precision x,y,amean,gmean
write(*,*) 'input x , y;'
read(*,*) x, y
amean = (x+y) / 2.0D+0
gmean = (x*y)**0.5D+0
write(*,*) 'Artihmetival mean =', amean
write(*,*) 'Geometric mean =', gmean
end
たとえばなんですが、このプログラムでx=4.1,y=6.5 と入力しても
出力が5.3と5.1623638となるんです。
0564質問ですNGNG

うえのをwrite(*,'(d25.16)') で指定したらいけました。

ごめいわくおかけしました
0565デフォルトの名無しさんNGNG
このごろ g77とかf77とかコマンド打ってコンパイルしてるけど、ソース内には
implicit noneだとかdo-end doだとかdo while-end doだとか90の要素満載です。
完全にFORTRAN77で書けっていわれたら泣くだろうなあ。
0566デフォルトの名無しさんNGNG
>>561
賛成。
 また、データの誤入力を誤入力と指摘できないプログラムは、
そのこと自体がバグだと思うんですね。
 Fortranは、ユーザ=プログラマであることが多いので、
この辺りの設計がおざなりになりがちだと思う。で、他の
人間が使い出すと途端に問題が噴出したりして、結局「なんだよ
この使えねえプログラムはよぉ」ってことになるんだよなあ。


0567デフォルトの名無しさんNGNG
>>565
同意。77だけではきつい。

最近は制御文のみならず
IF (ASSOCIATED(TARGETOBJECT)) THEN
TEMP => TARGETOBJECT
てなソースを躊躇無く書いている自分に気づく。

どうせ自分しかソース触らないから、まぁいいか
0568デフォルトの名無しさんNGNG
>>561
ユーザのデータエラーのみならず、エラー処理あたりって、
意外にいいかげんだったりするんですよね。

統括的なエラー処理の手法(ログシステム、リターンコードの規約などなど)
がまず確立されていて、それから本体のコーディングに入れれば
まだ良いんだろうけど、実際には後付けの場合が多いから、
なんとなくいいかげんになりがち。

結局、ユーザーから文句が来て、デバッガレベルでエラーの原因
を探す羽目に。
「さっきの異常終了の件ですが、データが2カラムずれてます」


0569質問ですNGNG

 すんません。
g77の奴って4倍精度はないんでしょうか?
0570デフォルトの名無しさんNGNG
windowsでfortranってできますよね?
0571デフォルトの名無しさんNGNG
>>570
出来ます。
FORTRAN77で良ければ g77, Salford, Watcom など
フリーの物も配布されています。

>>569
手元のMinGW GCC 3.2.1 ではサポートされていませんでした。
0572質問ですNGNG
>>571
ありがとうございました。
0573デフォルトの名無しさんNGNG
>571さんありがちょ、Fortran90はフリーは無いですよね?
0574デフォルトの名無しさんNGNG
>>573
Linuxならあるよ
0575デフォルトの名無しさんNGNG
free non-commercial unsupported Intel(R) Fortran Compiler 7.0
0576デフォルトの名無しさんNGNG
FORTRANってCAE、流体、熱解析でつかえるんだ。
0577デフォルトの名無しさんNGNG
>574 >575のやつがそうでつか?
0578577NGNG
>>577
Yes
0579デフォルトの名無しさんNGNG
FILE *fp1;
int *fluid;
fscanf(fp1,"%*s %d",fluid);
上のをFORTRANで書きたいんだけどどうやるんス?
よろしくおながいします
0580デフォルトの名無しさんNGNG
  STOP
  END
0581デフォルトの名無しさんNGNG
IntelのFortran Compiler 7.0 for Linux入れました。Fortran90いい!
getargとかiargcとか使うのに -Vaxlibオプションつけんの面倒だけど
(設定の仕方?)、いい!90はいい。とりあえず型宣言は慣れたから次は
whereとかselsect caseだな(ただだから使えないとかないですよね?)。
77がだめだとは思わないけど、90に慣れたらおそらく離れられなくなりそう。
0582デフォルトの名無しさんNGNG
age
0583デフォルトの名無しさんNGNG
何故Fortranなんですか?
0584デフォルトの名無しさんNGNG
サブルーチンっていう響きがよいですね。
0585デフォルトの名無しさんNGNG

f2cで作成される*.cソースは、do_fio()等の関数のように、f2cライブラリに依存する内容になってしまいますが、
f2cライブラリをリンクせずに*.cに変換する簡単な方法Orソフトウェアはないのでしょうか?
0586デフォルトの名無しさんNGNG
手で書き直すしかないかと。
0587デフォルトの名無しさんNGNG
>>586
やっぱりそれしかないですか。。。ありがとうございます。
GOTOだらけの上、ノーコメントなソースの変換は鬱になります。。。
0588デフォルトの名無しさんNGNG
しかしなんで「おれフォートランできるんだよ」っていうおじさんのかくプログラムは
何のまえぶれもなく1234 continueとかでてくんの?ん、これってdoループの
終端文? それともgo toとのコンビでループさせてんの? それともどっかから
とんでくんのか? だとしたらどっかにdo 1234 i=1,nとかgo to 1234が...ない...
なのでFortranじゃなくてFORTRANができるヒトはいやだ。
0589デフォルトの名無しさんNGNG
黙れ青二才
0590デフォルトの名無しさんNGNG
その程度のソースも追えないのか?アタマ弱いんじゃねぇか?
0591デフォルトの名無しさんNGNG
>>588
まあ、そういう方々はたいていプログラムを作ることが本業ではなく
「正しい計算結果さえ出ればそれでよし」という考え方でやってますからね。

そういえば昔、学校の先生が
「プログラムはあまり長くなると見難くなるから、メインプログラムが
1000行位になったらサブルーチンを使うといいよ」
って教えてくれたっけ。
あの先生、まだ数値計算の授業教えてるのかなぁ…。
0592デフォルトの名無しさんNGNG
>>588
「本物のプログラマー」気取りだからさ。
0593デフォルトの名無しさんNGNG
>>588
きっと COME FROM文を使ってるんだよ。
0594デフォルトの名無しさんNGNG
>>588
 自分も、昔の先輩が組んだソース見て、「なんでこんなに読みにくいプログラムの組み方してる
んでしょうね?」って聞いたら、「昔は、メモリの節約や実行速度の向上を頭に入れて作ってい
たからね」と言われました。
 なんだか、いいくるめられたような、だまされたような気分です。
0595デフォルトの名無しさんNGNG
>>593
マニアだな

0596デフォルトの名無しさんNGNG
>>588
     IF (A .EQ. B) GOTO 12234
     A = C
     IF (C .EQ. D) GOTO 4989
     C = A
4989  CONTINUE
     B = C + A
12234 CONTINUE
     A = SUB(5)

みないなソースは日常ですが何か?

GOTOの行き先がGOTOなんて普通です.
あ〜〜〜読みにくいよ!教授!
0597デフォルトの名無しさんNGNG
4649 CONTINUE
0598デフォルトの名無しさんNGNG
windowsでFortranを使う必要性がでてきたんですけど
何かいいエディターないですか?
色がカラーじゃないと見にくいんです
0599デフォルトの名無しさんNGNG
>>598
秀丸でも使ったら?
変色用ファイルダウンロードして
0600デフォルトの名無しさんNGNG
>>599
あんな高いものを使えと言うのですか!?
0601デフォルトの名無しさんNGNG
>>600
そんなに高いかなぁ.学生?学生とかフリーじゃなかったっけ?
やなら,Windows用のemacsってあるだろ.あれ使ったら変色するんじゃね?
0602デフォルトの名無しさんNGNG
>>600
maedow
0603デフォルトの名無しさんNGNG
写メール対応。やらせ・バイト一切無し。女性も安心♪♪ 地域別、不倫・エッチ希望☆
私はここでセフレにしてもらいました♪一緒にH♪ワリキリと☆エッチ♪
          ■http://pink7.net/yhst/■
0604デフォルトの名無しさんNGNG
>>598
FORTRAN77の固定形式のソースを編集するときは
CPad for Salford FTN77 なんかが便利。
http://www.vector.co.jp/soft/dl/win95/prog/se153699.html

>>601-602
emacs系のエディタにもFortran modeがあったね。
学生の頃以来使ってないから使い方忘れちゃったけど(w

キーワードを色付きで表示させたいだけなら
フリーのエディタが沢山あるから色々試してみて
自分に合った物を使えばいいんじゃない?

#そうゆう自分は最近Visual FortranのIDEばかり使ってたりして。
0605デフォルトの名無しさんNGNG
gvim もおっけーよん。
au! BufRead,BufNewFile *.f95 let b:fortran_do_enddo=1
au! BufRead,BufNewFile *.f90 let b:fortran_do_enddo=1
なんて設定しておけば f77 以外でも安心。
0606598NGNG
結構参考になりました
サンクス
0607デフォルトの名無しさんNGNG
Visual FortranのIDEのエディタで、コメントなど2バイト文字が
72-73カラム目にかかったとき、文字化けするのは
何とかならないだろうか?
0608デフォルトの名無しさんNGNG
Fortran かなつかしぃ。
プログラムカード売ってるお店なんてもうないだろうなぁ
0609デフォルトの名無しさんNGNG
「609、お前プログラム組むときは、やっぱりこれ使った方がいいぞ。ほれ。」
ボスはそう言って黄ばんだN○CのFORTRANコーディングシートを棚から引っ張り出し、
僕に渡してくれました。
一月ほど前のことです。
冗談かと思ったのですが、顔が大真面目でした。
0610デフォルトの名無しさんNGNG
Fortranの参考書でみたことあるな、穴の開いたカード
あれってどんな使い方するの?
プログラミングに影響するわけ?
0611デフォルトの名無しさんNGNG
>>610
昔のコンピュータはね、高くて巨大でしかも遅かったからみんな、
カードをもって順番に使ってたの。
そのための整理券なんだよ。






とりあえず、こんなんでいい?
0612デフォルトの名無しさんNGNG
俺が使ってたのは、マークシートみたいなやつだったけどな。
0613デフォルトの名無しさんNGNG
やーっふぉー、やっふぉ、ふぉーとらんらんらん♪
0614デフォルトの名無しさんNGNG
>>612
消しゴムで修正できると言う甘えがバグを作るんだ。
本物のプログラマは一発で正しいプログラムを書くから、穿孔パンチでいいんだ。
0615山崎渉NGNG
(^^)
0616デフォルトの名無しさんNGNG
age
0617sageNGNG
会話がプログラマ板だ
0618デフォルトの名無しさんNGNG
プログラマ板にfortranスレないしな〜
0619デフォルトの名無しさん NGNG
FORTRANプログラマは今や絶滅危惧生物だから、どうすれば生き残れるかが
重大関心事で、レスがプログラマ板風になるのは仕方ないと思われ。
0620デフォルトの名無しさんNGNG
>>619
だったら、プログラマ板に立てればいいんじゃない ?
0621山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0622山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0623デフォルトの名無しさんNGNG
フリーの Fortran 95 コンパイラ G95
http://g95.sourceforge.net/
こんなのがあるんでつね。まださなぎ状態(pupal state)とのことでつが。
0624デフォルトの名無しさんNGNG
>>556
0625デフォルトの名無しさんNGNG
>>619
早く絶滅して欲しいと思ってますが、何か?
0626デフォルトの名無しさんNGNG
ホント早く絶滅して欲しい。
こんなクソ言語使わされる身にもなってくれ。
0627デフォルトの名無しさんNGNG
Fortranも使いこなせないとは。。。プッ。
0628デフォルトの名無しさんNGNG
時代は Haskell 98 だよ。
それ以外の言語は糞。
0629デフォルトの名無しさんNGNG
>>626
Fortran95を使うべし。
もしくはF言語。
0630デフォルトの名無しさんNGNG
B,C,D はあるけど、E はあるのー?
0631デフォルトの名無しさんNGNG
趣味なら自分の好きな言語を使えるだろうが、
業務だとね.......

せいぜい、密かにじわりとFORTRAN90/95へ移行とか
固定フォーマットで書けば、どうせだれにもわからん
0632デフォルトの名無しさんNGNG
Fortranで関数ポインタって使えるんですか?
どーも検索してもロクに引っかからなくって、引っかかるのは
意味不明な記述のみでして…
0633デフォルトの名無しさんNGNG
   program test
   implicit none ! implicit は諸悪の根源なので無効化
   intrinsic dsin ! 組み込み関数は intrinsic 宣言
   double precision bar ! 型チェックのため、一応戻り値の型を指定しておくのが良い
   external bar ! 自分で定義した関数は external 宣言
    call f(dsin) ! 普通に関数に渡す
    call f(bar)
    stop
   end

   ! 自分で定義した関数
   double precision function bar(a)
   implicit none
   double precision a
    bar = dsin(a)
    return
   end

   subroutine f(func)
   implicit none
   double precision func ! 普通に戻り値の型を指定しておいて、
   double precision pi
   parameter(pi = 3.141592653589793D+0)
    write(*,*) func(pi) ! 普通に呼べばよい
    return
   end
   ! 関数でなくサブルーチンの時は戻り値の型の指定は不要
0634デフォルトの名無しさんNGNG
トーシロ質問スマソ 以下の認識あってる?

 Fortranは構文が単純ゆえ、自動ベクトル化コンパイラが作りやすい
 →数値計算用途では最速プログラムを作りやすい(かけた 人×時間 比較)
  →市販のバカ高シミュレータは殆どFortran
   →よって、Fortran嫌いなプログラマは多いけど滅びない
 
0635デフォルトの名無しさんNGNG
>>634
間違ってる。
Fortranner の洗脳を受けた危険な状態である。

これが真実。

昔はみんな Fortran を使っていた。
→ 研究者は時間がもったいないので他の言語を覚えない。
 → 新しく入ってくる学生はその人たちに Fortran を教えられる。
  → よって、Fortran 嫌いなプログラマは多いけど滅びない。

他の言語覚える気ないもん。みんな。
嫌んなるわ。ホンマ。

> Fortranは構文が単純ゆえ、自動ベクトル化コンパイラが作りやすい
C でもある。
> 数値計算用途では最速プログラムを作りやすい(かけた 人×時間 比較)
C で十分。
Fortran は C よりデバッグが面倒だし、
バグの起こりにくいプログラムを作りにくい。
> 市販のバカ高シミュレータは殆どFortran
ソフトが Fortran で書かれていようが、
自分で作るプログラムまで Fortran にする必要もない。
0636632NGNG
>>633
ありがとうございました!これで少しはFortranと仲良くなれそうです。
あくまで少しですが(w
0637633NGNG
>>636
あまり仲良くならないほうが(w
ただ、だからといって仕事だと仕方ないしねぇ...。
0638634NGNG
>>635
大意 了解。 要するに研究者がメンドクサガリなのねw

一部疑問に再質問スマソ。

>> Fortranは構文が単純ゆえ、自動ベクトル化コンパイラが作りやすい
>C でもある。

VectorCとかパソ用の結構最近のしか知らないんですが
  スパコンとか数値計算用WS、最近だとクラスタ用とかでは、何処からでてます?

>> 市販のバカ高シミュレータは殆どFortran
>ソフトが Fortran で書かれていようが、
>自分で作るプログラムまで Fortran にする必要もない。

MARK とか STAR-CD 使ってて、モデルを細かくいじるときは、
Fortranでサブルーチン書かされてるけど、あれ、数値解析担当(ジジイ)が
C嫌ってるだけでCでも書ける?
0639635NGNG
>>638
>スパコンとか数値計算用WS、最近だとクラスタ用とかでは、何処からでてます?
使う機会が無いのであることしか知らない。
スマソ。

>C嫌ってるだけでCでも書ける?
コンパイラさえあればどんな環境でも書ける。
C から Fortran の関数を呼べるし、その逆も出来る。
関数とかの名前が変わることがあるけどね。
前か後ろかにアンダースコア '_' をつけないといけないことがある。
あと、Fortran は参照渡しなんで、
C から使う場合は全部ポインタで受けるべし。

ただ、複素数を使う場合だけは Fortran の方が便利かもね。
それも C++ を駆使すれば何とかなるかな。
0640634NGNG
>>639
>ただ、複素数を使う場合だけは Fortran の方が便利かもね。
ああ、それ忘れてた。 結構大きい。

>それも C++ を駆使すれば何とかなるかな。
「駆使」しなきゃなんないよね?
 特にシミュレータのサブルーチン書きなんか、ジジイと戦うときに
結構大きなマイナスになりそう

#妥協点はFortran90? 、、、今はFortran77を強いられているが、、、(鬱
0641デフォルトの名無しさんNGNG
俺の大学では強制fortran90だ!
教授曰く「研究機関ではこれが主流」
0642bloomNGNG
http://homepage.mac.com/ayaya16/
0643デフォルトの名無しさんNGNG
>>638
> >> Fortranは構文が単純ゆえ、自動ベクトル化コンパイラが作りやすい
> >C でもある。
>
> VectorCとかパソ用の結構最近のしか知らないんですが
>   スパコンとか数値計算用WS、最近だとクラスタ用とかでは、何処からでてます?

知ってる範囲のスパコン用ではFortranコンパイラとC++コンパイラは構文解析の
部分を除けば同一です。それで最適化オプションなんかは同じで、性能も機能も
ほとんど変わらんと思います。そう考えるとどちらのコンパイラも手がけてるところなら
問題ないのかも。

> 大意 了解。 要するに研究者がメンドクサガリなのねw

まあそうなんですけど、大規模計算に限ればHPFのおかげでFortranのほうが生産性は
高いと思います。

>>641
Fortran95で廃止された文法など古い文法を使うと最適化がかかりにくいコンパイラが
最近はあるらしいのでいいんでは?
あ、そういうことではないか。
0644デフォルトの名無しさんNGNG
>>640
最近では complex クラスがサポートされてることが多いので、
そうであれば complex クラスで受ければ何も問題ないです。
C++ ならポインタで受けずとも参照で受ければいいので、
C より使いやすいです。
extern "C" つけないといけませんが、そんなことは瑣末なことです。

ただ、古いコンパイラだと complex がサポートされてないことがあるので、
面倒なのはその時ですね。
まぁ、その時は complex ヘッダを適当なところからパクってきて、
それを使えばいいでしょう。
テンプレート使って実装してあれば、ヘッダファイルだけあれば使ます。
ライセンス関係まずければ自分で実装しないといけませんが、
どうせ実装法を変えようが無いので
適当にプログラミングの癖を変えておけばいいでしょう。
0645デフォルトの名無しさんNGNG
C**** a.F
   program test
    call cfunc((1D0, 2D0))
   stop
   end

// b.cpp
#include <iostream>
#include <complex>
using namespace std;

// Fortran での識別子の内部名は C とは違うことがある
#define FC(name) name##_

extern "C" // ここで宣言する関数名は C の命名規約で扱うことの宣言
{
 // 本当はちょっと危険な香りのするコードなんですが、
 // complex が仮想関数を持ってたり、
 // real と imag の定義順が逆だったりという変な実装でなければ
 // 大抵大丈夫です。
 void FC(cfunc)(complex<double>& comp)
 {
  cout << comp << endl;
 }
}

# コンパイル・リンク・実行
g77 -c a.F
g++ -c b.cpp
g77 a.o b.o -lstdc++
./a
(1,2)
0646デフォルトの名無しさんNGNG
Fortranは最速と聞いたけどほんとかな?
たしかに90が出てから並列化がカスタマイズできるよになったけど
他言語はそうはいかないのか?
0647デフォルトの名無しさんNGNG
ttp://www.salford.co.uk/compilers/ftn77pe/perequest.shtml
を落としてみたんだけど、コンパイルできません。
XPに対応してないなんてことありますか?
WinMeでやってみたら問題なく動いたのですが。
0648デフォルトの名無しさんNGNG
>>646
>>634-644あたりの話題が参考になるかと。

>>647
SalfordのFTN77 Personal EditionならWin 2k/XPで使ってます。
どの様な問題でコンパイルできないのかわからないけど、
もう一度、設定等を見直してみては?
0649デフォルトの名無しさんNGNG
Salfordつかったことないから知らんけど
2000、XP上でユーザー名に日本語使ってると
海外産ソフトでトラブリがちかと
0650デフォルトの名無しさんNGNG
>>649
なるほど。。。
思いっきりユーザー名日本語だわ。
英語にして試してみます。

サンクス
0651デフォルトの名無しさんNGNG
ところで頻繁に出てきてる
77だとか90ってのはどう違うの?
途中に.EQ.が使えないなんてレスが
あったような気がするけど、じゃイコールは
どうすりゃいいの?
0652デフォルトの名無しさんNGNG
.EQ.が使えないのはFじゃネーノ?
0653デフォルトの名無しさんNGNG
.LT. <
.LE. <=
.EQ. ==
.NE. /=
.GT. >
.GE. >=
0654デフォルトの名無しさんNGNG
>>654
他にも違いは沢山あるので、詳しくは↓を読んでちょうだい。
http://www1.jpn.hp.com/products/software/development/dvf/docs/vf-html/cvf_frame.htm
http://www1.jpn.hp.com/products/software/development/dvf/docs/vf-html/Lr/lr01_04.htm
0655デフォルトの名無しさんNGNG
>>650
649に追加
http://www1.jpn.hp.com/products/software/development/dvf/visual/jfaq.html
を読んでみて
だめだったら知らん

0656デフォルトの名無しさんNGNG
>>644-655
 ありがと、今度試して見る、遅レス スマソ
0657デフォルトの名無しさんNGNG
フォートランって再帰使えんのかよ!?
関数がどうも馴染めん
っつーか再帰使えんならハノイとかどうやって書くんだ?
0658デフォルトの名無しさんNGNG
>657
別に、自分でスタック管理すればハノイの塔くらいはできるだろ。むかしのBasicでもできたし。
0659デフォルトの名無しさんNGNG
マ板に立ってたので報告までに。

FORTRAN専用スレッド
http://pc.2ch.net/test/read.cgi/prog/1052290911/
0660デフォルトの名無しさんNGNG
最近僕はエロいことに興味がなくなってきました。どうしたらいいのでしょう?
0661動画直リンNGNG
http://homepage.mac.com/hitomi18/
0662デフォルトの名無しさんNGNG
>>657
Fortran90 だと使えるみたいね。
0663デフォルトの名無しさんNGNG
F言語のexampleより

module hanoi_module
 public :: hanoi
contains
 recursive subroutine hanoi (number_of_disks, starting_post, goal_post)
  integer, intent (in) :: number_of_disks, starting_post, goal_post
  integer :: free_post
  integer, parameter :: all_posts = 6
  if (number_of_disks > 0) then
   free_post = all_posts - starting_post - goal_post
   call hanoi(number_of_disks - 1, starting_post, free_post)
   print *, "Move disk", number_of_disks, &
        "from post", starting_post, "to post", goal_post
   call hanoi(number_of_disks - 1, free_post, goal_post)
   end if
 end subroutine hanoi
end module hanoi_module
program test_hanoi
 use hanoi_module
 integer :: number_of_disks
 number_of_disks = 4
 call hanoi(number_of_disks, 1, 3)
end program test_hanoi
0664デフォルトの名無しさんNGNG
今から20年ほど前に作られたFortranソースコード見たら全部大文字だった・・・・・

読みにくい。秀丸でto lower case 使ってソースを小文字にしても、
このスレのリンクにあったf90コンパイラで動くんだろか。

Javaにリプレースをたくらんでいるのでf2jで全部Javaに変換した方が早いかな?    
0665デフォルトの名無しさんNGNG
オプションで指定しない限り大文字と小文字の区別は無い.
0666デフォルトの名無しさんNGNG
大文字の中の人も大変だな。
0667デフォルトの名無しさんNGNG
: Error: A specification expression object must be a dumm
y argument, a COMMON block object, or an object accessible through host or use a
ssociation [N]
integer::I,N,xG
-----------------^
: Error: An automatic object is invalid in a main program
. [C]
real,dimension(N)::c
-------------------------^


誰かこのエラーの意味をおしえてくれませんか?
0668デフォルトの名無しさんNGNG
>>667
そのエラーは
   「Nは宣言式にしやがれゴルァ」
という意味です。

http://www1.jpn.hp.com/products/software/development/dvf/docs/vf-html/Lr/lr04_01_07_02.htm
0669デフォルトの名無しさんNGNG
厨な質問でスマソ。
IF文使った場合には絶対にELSEが必要なのでつか??
0670デフォルトの名無しさんNGNG
>>669
FORTRAN に限らず、IF に対して絶対に ELSE が必要な言語って見たことない。
0671669NGNG
>>670
ありがとうございますm(__)m
Visual FORTRANでビルドしてもうまく実行しなかったのは書き方悪かったせいか。。
逝ってきます。。
0672デフォルトの名無しさんNGNG
数年ぶりにFORTRANを使ったけど、すっかり忘れてしまってた。
FORTRAN95の文法にはびっくーり。時代は進んでしまったのね。
0673デフォルトの名無しさんNGNG
まぁ、用途別に言語使い分けるのが一番だろうね…

オイラも、研究室でのシミュレーション解析にはFortran90

個人的に使う小道具にはC++使ってるし…

時々、構文がごっちゃになって、エラー探す時に困ったりもするが(w
平気でC++のプログラム書いてる途中に、integerとか.and.とか書いてて、
コンパイル時にエラーって起こられ、なぜだ〜って一瞬本気で思った
時は、マジでこりゃあかんって思った(w
0674デフォルトの名無しさんNGNG
これからFORTRANを学ぼうという者です。
コンパイラはVisual FORTRANを使います。
本屋に行くとFORTRAN77と90がありますが、どの程度違うものなのでしょうか?
過去の先輩の遺産を引き継ぐことになっているのですが
77と90はどっちを勉強した方がいいのでしょうか?
0675デフォルトの名無しさんNGNG
>>674
Fortran90 … 数値計算向けの普通の言語
FORTRAN77 … オブジェクト指向どころか構造化プログラミングも無用の匠の世界

過去の遺産を受け継ぐのならたぶんFORTRAN77だろうから
とりあえず
可能ならば少しずつF90化していきましょう。

幸運にも先輩がFortran90を使って書いていたら
F O R T R A N 7 7 の こ と は 忘 れ な さ い
0676675NGNG
#途中で書き込んじゃった…
×とりあえず
○とりあえずFORTRAN77を覚えてから
0677デフォルトの名無しさんNGNG
大は小を兼ねる。

というわけで、
C++ から Fortran の関数/サブルーチンを使えばいい。
もちろんその逆も。

なんちゃって。半分本気だけど。俺はそうしてるし。

それはともかく、正直構造体がないのは辛いんで、
Fortran90(または95)覚えた方がいい。
Fortran90 を覚えとけば
FORTRAN77 も読めるんで損はないっしょ。
0678山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0679デフォルトの名無しさんNGNG
緊急age
0680デフォルトの名無しさんNGNG
http://www.fortran.com/F/compilers.html
のFCompilerを使って
http://www.math.sci.hiroshima-u.ac.jp/~daishin/keisanA/1998/fortran.html#f2-2
のプログラムをtest.f90としてコンパイルしてみようとしたんですが
コメントのところでエラーがでたのでコメントをはずしてみたのですが、
integer i,xがある1行目でいきなり

E:\test\fortran>f test
Error: test.f90, line 1: syntax error
detected at <end-of-statement>@INTEGER
[F fatal error termination]

のようなエラーがでます。

F77には対応していないのでしょうか?
0681デフォルトの名無しさんNGNG
>>680
Fortram95から主にFORTRAN77との互換性のために残られている
機能を取り除いたものがF言語。
よってFORTRAN77のソースはそのままでは動かない。
F(Fortran90/95)用に書き直すと以下のようになる。

! Example
!
program example
 implicit none
 integer :: i, x
 do i=1,10
  x = 1.0 / real(i)
  if (x < 0.5) then
   exit
  end if
 end do
 print *, "This program is an example. This program&
      & is an example"
end program example
0682_NGNG
http://homepage.mac.com/hiroyuki43/hankaku06.html
0683デフォルトの名無しさんNGNG
d=1.0*cos(cta)+2.0*sin(cta)の計算(倍精度)を1億回繰り返すと
VC++6.0 professional の math.h の sin, cos では25秒
Visual FORTRAN 6.6Bの組込関数 DSIN,DCOSでは16秒
とFORTRANの方が少し速い。

両方ともPentium内部のコプロセッサ使ってると思うけど
どうして差がでるの?

最後の手として、VC++側からFORTRANのDCOS, DSINを無駄なく呼び
出す方法ってありませんか?(そこまでやるか!と我ながら思うけど)

VC++側で
extern "C" {
double& _stdcall DSIN(double& x);
double& _stdcall DCOS(double& x);
}
としただけではリンカエラー
error LNK2001: unresolved external symbol _DSIN@4
error LNK2001: unresolved external symbol _DCOS@4
が出てしまいます.
0684大坊NGNG
F90でunterminated block exists って言われてしまいます

どうやったらいいのですか?誰か教えて下さい。
0685デフォルトの名無しさんNGNG
>>683
ライブラリは指定してるんか ?
0686デフォルトの名無しさんNGNG
>>685
DSIN、DCOSなど数学組込関数がVisual FORTRANのどのライブラリに入って
いるかがわからんのです。

Visual Studio上ではVC++とVisual FORTRANのソースコードを共存させて
コンパイルできますが、DCOSやDSINを呼び出してその値を返す関数副プロ
グラムを記述すると計算時間が30秒と元の木阿弥に。。。
0687デフォルトの名無しさんNGNG
あーっ!! 1億回じゃなくて10億回でした。失礼しました。
10億回でこの程度の差ならまァいいか。。。
0688デフォルトの名無しさんNGNG
手元のVisual Fortranで d=1.0*cos(cta)+2.0*sin(cta) の計算式を
/asmfile で出力させたらライブラリ呼ばずにインライン展開してた。
おまけに角度が同じなので FSINCOS命令を使ってsin/cosの値を
同時に計算してる。
0689デフォルトの名無しさんNGNG
数II とかやったことないの ?

1.0 * sin(x) + 2.0 * cos(x) = sqrt(1.0 * 1.0 + 2.0 * 2.0) * sin(x + atan(2.0 / 1.0))

sqrt() と atan() は、定数になるから、sin() の計算と四則演算だけでできるよ。
0690684NGNG
どなたか私の質問にもお答えを。。。
0691アノニマスNGNG
初めまして。この春から学校で少しだけフォートラン90を習い始めたのですが,急に課題が難しくなって困っています。
どなたか助けてください。
課題は以下
i,j,kを1以上の整数とする。N=i**2+j**2+k**2としたとき,同じNの値を与える(i,j,k)の組み合わせが何通りあるのかを、
1から100までNについてディスプレイに表示するとともに,ファイルに出力するプログラムを作成せよ。
以上ですが
ヒントによるとdoを4回使うらしいのでうすが…いまいちよく分かりません。
どなたか教えてくださいm(__)m
このような質問が駄目でしたらすいません,m(__)m
0692デフォルトの名無しさんNGNG
<<688
d=1.0*cos(cta)+2.0*sin(cta)の計算式をloopするだけではFORTRANが計算を
さぼってしまうので正確には別の計算式も含まれているんですが、、、略。

FORTRANで直接インライン展開となると、VC++側から呼び出しても効果
ないかもしれませんね。あとはIntel C++お試し版で。。。
ありがとうございました。

<<689
三角関数の合成公式ですか。なるほど。

<<690
FORTRAN90コンパイラの種類と、エラー発生と直接関係した部分に絞りこんだ
ソースコードを提示しないとレスはつかないような。
0693デフォルトの名無しさんNGNG
書き込んでも掲示板に表示されないので再度。かぶってたらごめんなさい。

<<688
d=1.0*cos(cta)+2.0*sin(cta)の計算式をloopするだけではFORTRANが計算を
さぼってしまうので正確には別の計算式も含まれているんですが、、、略。
FORTRANで直接インライン展開となると、VC++側から呼び出しても効果
ないかもしれませんね。あとはIntel C++お試し版で。。。
ありがとうございました。

<<689
三角関数の合成公式ですか。なるほど。

<<690
FORTRAN90コンパイラの種類と、エラー発生に直接関係した部分を絞りこんだ
ソースコードを提示しないとレスはつかないような。
0694684NGNG
>>693
うむむ、携帯からなんでできるだけ頑張ります

   if 〜
^
ここでアンターミネイティッドブロックイグズィストって表示されるんです
そのエラーがでた行を全部消して書き直しても同じエラーが出るんです
0695デフォルトの名無しさんNGNG
>>691
友達いないんだな
0696デフォルトの名無しさんNGNG
>>694
それでも分かり難いんだが・・・。
IF〜END IFの対応が崩れているんじゃないかな?
0697デフォルトの名無しさんNGNG
>>694
696氏が答えているように、
IF 〜 ENDIF
DO 〜 ENDDO
SELECT CASE 〜END SELECT
などのブロック構造となる構文で、
開始と終了の数が一致していないか、
あるいは、ちゃんと入れ子になっていないと考えられる。

こういう場合、エラーメッセージで示される行番号 は
あまり意味が無い。 IF〜の行で表示されるのであれば、
せいぜい、それより手前のIFブロックを
重点的に調べたほうがいい、くらいの意味しかないと
思われ。
0698デフォルトの名無しさんNGNG
>>696>>697
なるほど
以外と簡単なミスかもしれないんですね
ありがとうございました
もいちど確かめてみます
0699デフォルトの名無しさんNGNG
ネットでVisual Fortranを勉強するのによいサイトはないでしょうか?
C言語の時は本より「猫でもわかるプログラミング」が理解しやすかったので
似たようなのを期待してしまいます。
0700デフォルトの名無しさんNGNG
 7 0 0!

>>699
探したけどないね。
リファレンスとか大学あたりのちょっとしたページばかり。
まあ、メジャーなCと比べるのは酷だね。
0701デフォルトの名無しさんNGNG
>>683
FORTRAN と C の速度の違いは
アルゴリズムの微妙な違いか、
さもなくば最適化の違いから、
くるものだと思うよ。
0702デフォルトの名無しさんNGNG
FORTRAN は,アセンブリより移植性が高くて書き易いが遅い.
C よりは移植性が低くて書き辛いが速い.

ってことでよろしいか?

移植性は,低いですよね.
「77 準拠!」って謳ったプログラムよりも,
「自分の処理系でなら (はぁと」なプログラムが多いみたいだし.

# 現に,今コンパイルが通らず苦戦中...
0703702NGNG
あっ,でも,,,

計算に特化した計算機で使うとなれば,
アセンブリじゃ事実上書けないものも出てくるのかな?
それなら,FORTRAN が最も早く書けて速く動くってことになりますね.

配布には向かないようだが...
# 「この(有料)コンパイラでは出来ました.」<--- ゴルァ
0704デフォルトの名無しさんNGNG
>>702-703
一体何が言いたいんだ ?
独り言なら、よそでやってくれ。

> アセンブリじゃ事実上書けないものも出てくるのかな?

なんて書いてるから、電波系の奴か...。
0705デフォルトの名無しさんNGNG
そもそもは、
FORTRAN → 科学計算用
C → UNIX システムプログラミング用
ってだけだろう。
0706デフォルトの名無しさんNGNG
>>702
移植性の高さを測るのにアセンブリ言語を使うなよ!(笑
FORTRAN77 よりは C の方が書きやすいと思うし(構造体があるから)、
FORTRAN は一般的に言って速い部類に入ると思う。

アセンブリ言語は確かに一番速くなる可能性はあるが、
SIMD を使うのでない限り
深い知識のない人が最適化するよりも
コンパイラのする最適化の方が速かったりすることもある。
もしくは、大して変わらなかったり。

移植性が低いプログラムは、ビット演算とかコマンドラインとか使ってるのかな。
これは FORTRAN77 の仕様が少ないのが悪い! と言っておこう。
0707デフォルトの名無しさんNGNG
ソフトウエアネタでなくて悪いのですが、ちょっと質問。

Fortran計算で現在最速のPC組むとしたらCPU何が良いでしょうかね。
後輩がPen4-3.0GHzでも1ケース半日かかるから何とかしてとなきついてきました。
Athlon XP 3200+が早いのか、Xeon3.06をデュアルにしたほうが早いのか・・・

なお、コンパイラはintel FortranかVisual Fortranを使う予定らしいですが、プログラム自体は過去の遺産の手直しで大幅な変更は期間的に出来ないみたいですね。

ちなみに、私はハード購入担当でプログラムはあんまり詳しくないですので、プログラムの中身については聞かないでくださいな。
0708デフォルトの名無しさんNGNG
1ケースってなに?
0709デフォルトの名無しさんNGNG
同じプロセッサーならクロック数が大きい方が速いよ.
0710デフォルトの名無しさんNGNG
>>703-704
10年前の古代知識で恐縮だが、
いわゆるRISC系プロセッサのレジスタ・リネーミング(ウィンドウ)やら、
遅延分岐コードやら、パイプラインの管理やら、
アセンブラーで書くのがしんどいテーマは、
現在のIntel X86系プロセッサでも存在すると思う。

むしろ、FORTRANをコード・ジェネレータにして、
一部コードをインライン・アセンブラに置き換える、ってのが
10年前のメモリ非共有並列機のプログラミングで一般的だったみたい、な。

0711デフォルトの名無しさんNGNG
>>708
氾濫計算とかの一回分
0712デフォルトの名無しさんNGNG
並列化に期待してデュアルかな
問題にによるが
0713デフォルトの名無しさんNGNG
がんばってクラスタ買え。
0714デフォルトの名無しさんNGNG
並列化コンパイラと一緒に、か?
並列化効率良くないと意味ない罠がありそうだけど。
0715デフォルトの名無しさんNGNG
しぬきでへいれつかりつをあげろ
おれはしにそうだ
0716デフォルトの名無しさんNGNG
FORTRAN75のプログラム例に、

C
6001 CONTINUE
EZ(JEL)=(1.0-2.0*POIS)/YM*(SIGMAX(JEL)+SIGMAY(JEL))
1 -(EPSX+EPSY)

とあるのですが、4行目の「1」の意味がわかりません。
行番号と本文の間のスペースに「1」がかかれています。
似たようなもので行番号と本文の間に「C」が書かれているのもあるのですが、同じ意味なのでしょうか?
この「1」や「C」にはどのような意味があるかわからないでしょうか?
ご存知の方いらっしゃればよろしくお願いします。
0717デフォルトの名無しさんNGNG
C
 6001 CONTINUE
    EZ(JEL)=(1.0-2.0*POIS)/YM*(SIGMAX(JEL)+SIGMAY(JEL))
   1    -(EPSX+EPSY)

なぜか書き込むときスペースがきえてしまっていたのでもう一度
0718デフォルトの名無しさんNGNG
C
 6001   CONTINUE
       EZ(JEL)=(1.0-2.0*POIS)/YM*(SIGMAX(JEL)+SIGMAY(JEL))
     1        -(EPSX+EPSY)
です。何度もすみません。
0719デフォルトの名無しさんNGNG
>>716
↓の「基本的事項」
ttp://lilac.ees.hokudai.ac.jp/people/galapen/datab/lec02/ensyu/ex002.htm
0720デフォルトの名無しさんNGNG
>>719
なるほど!とても基本的なことを知らなかったわけですね・・・お恥ずかしい。
的確なアドバイス感謝です!ありがとうございました。
0721デフォルトの名無しさんNGNG
(・∀・)
0722デフォルトの名無しさんNGNG
これから FORTRAN 77 をやるのにイイ本を教えてください.
C で言う K&R のようなのがいいです.
ある程度プログラミング言語を分かっている人向けで,
仕様に含まれているか,そうでないかの詳しいところもあるといいです.
図書館に言ってみたところ, 77 の本は乱立していて,選ぶのが難しい状態でした.
完全な初心者でも無いのでなおさらです (要は,中途半端).
0723デフォルトの名無しさんNGNG
C が使えるなら適当な本でも十分分かるような気も。
0724デフォルトの名無しさんNGNG
>>722
今更77? 90か95にしたら?
それとも何か理由があるん?
0725デフォルトの名無しさんNGNG
無料の90対応のコンパイラがない(´Д`;)
0726デフォルトの名無しさんNGNG
>>725
Linuxが使えるならIntel Fortran Compiler for Linuxがある。
Winは >>549 のFくらいかな。

g95 は完成までまだもうちょっとかかりそうだし。
0727722NGNG
>>724 >>725さんが代弁してくれました.

Intel のはフリーじゃないっぽい...
というわけで,まだまだ 77 のお世話になってしまいます.
g95 に期待です.

下手に他の言語をやっているので,
初めて読むなら定番の良書だろう,と思っているのもあります.
よほどでなければ,日本語の本がいいです.

しっかりした解説となると, web では寂しいですね.
0728デフォルトの名無しさんNGNG
>>727
Windows版は・・・だろ?Linux版ならC++コンパイラとともにFortranコンパイラの非商用版があったはず。
0729デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/linux/1007024009/
それに関するスレ
/opt以下に入れようとするのが激しくむかつく・・・
0730デフォルトの名無しさんNGNG
これ
http://www.intel.com/software/products/compilers/flin/eval.htm
0731730NGNG
違う違う。それは体験版だ(汗
これ
http://www.intel.com/software/products/compilers/flin/noncom.htm
0732デフォルトの名無しさんNGNG
ここ嫁。

ttp://www.intel.com/software/products/compilers/flin/noncom.htm
0733732NGNG
なんでこんな時間にかぶるかな。。
0734デフォルトの名無しさんNGNG
HP, Compaq Visual Fortran をインテルへ移管。
Intel Visual Fortran V8.0 は10月販売予定。
http://www1.jpn.hp.com/products/software/development/dvf/intel/transition.html
0735デフォルトの名無しさんNGNG
>>727
適当な本で適当に文法を理解しておけば、
あとは別言語からの勘と試行錯誤で何とかなる。
0736722, 727NGNG
>>735
処理系依存のものは,知らないで使うのと知っていて使うのでは
大きく違うと思うのです.
計算しか行なわないとなれば,処理系依存は少なさそうですが,
上のレスに「77 の仕様が少ない」とか記述がありますので,
やはり便利な構文があったり無かったりするのでしょう (か?).

仕様のみではどのように辛いか等を知りたいのもあります.
とはいえ,まずは図書館に潜って古き良き本を漁ってみます.

# intel へのポインタを示してくださった方,ありがとうございます.
# 時間の関係で,すぐに取りかかれません...(⊃д`)
0737デフォルトの名無しさんNGNG
>>736
上でも言ったけど、ビット演算とコマンドラインが処理系依存筆頭かと。
ビット演算の使用例としては、擬似乱数の MT 法とか。

人によっては end do 禁止! とまで言う人もいるからなぁ。
end do を禁止されると辛いね。
end do 使えないコンパイラを使ったことがないけど、
未だにそんなコンパイラ使ってるところあるのかな?

あとは implicit none はどうだっけ?
あと、include ってどうなんだろ。
教えて詳しい人。
0738デフォルトの名無しさんNGNG
end do使えないコンパイラなんてあるのか、そりゃつらいな…

>あとは implicit none はどうだっけ?
implicit noneはプログラムやサブルーチン内で、宣言した変数以外は
使っちゃダメっていう制限を付加するもの。これが無いと、変数宣言無
くても、暗黙の型宣言により、自動で変数をinteger型、またはreal型と
して扱う。
1つ注意しなければならないのは、containでプログラム内や、モジュール
内に含めたサブルーチンでは、implicit noneを入れても、一つ上の
フォーカス?での変数を、宣言無しで使えるんだよな…。
詳しい事は、ヘルプ読むなり、自分で簡単なプログラムを作って
チェックしてください。

>あと、include ってどうなんだろう。
includeはよくわからん(w
0739デフォルトの名無しさんNGNG
あっ、そうそう、一つ付けたし。
http://www1.jpn.hp.com/products/software/development/dvf/
知ってる人は、知ってると思うけど、↑Compaq Visual FortranのHPで
落とせる日本語版オンライン・ヘルプは、Fortranの仕様書も含んでるから
これから、Fortranを勉強する人、Fortran95のマニュアルを探してる人
には、重宝するかも。
0740デフォルトの名無しさんNGNG
近々、ConpaqからIntelへ製品移管するから、いつまで落とせるかわからん。
欲しい人は、なるべく早めに落としておいた方がいいかも。
0741デフォルトの名無しさんNGNG
>>739
PDF は英語版しかないの?
しょぼーん。
0742デフォルトの名無しさんNGNG
>>741
XLsoft(Intel製開発ソフトの販売代理店)から
Intel Fortran Compiler 6.0 のオンラインマニュアルが
ダウンロードできる(要メアド、約12MB)。
ここのプログラマーズ・リファレンスとライブラリ・リファレンスはpdf。
http://www.xlsoft.com/jp/products/intel/download.html
0743デフォルトの名無しさんNGNG
>>742
そのページワラタ
エロサイトみたいなことするなよ(上の方を反転させてみれば分かる)
0744デフォルトの名無しさんNGNG
Ctrl + A を押すともっとすごいことに・・・

ところでIntel Visual Fortran 8.0 (?) は単独でIDEが使えるのでしょうか?
Intel Fortran と VC++ .Net 2003 Std 買おうと思ってたんだけど、
10月まで待った方がいいのかな?
0745なんでだろう?NGNG
プログラムのバグ?コンパイラのバグ?(1)

初めてここにお邪魔します。
某社の作成プログラムをCompaq Visual Fortran用にコンバージョンしたときのトラブルを書きます。
Fortran77の環境下であることを、予めお断りしておきます。また、変数名も、コードを特定されるのを
避ける為に変えています。
また、プログラムは、SunのEWS下で動いていました。

dimension a(ndt) , b(ndt)
・
sum = 0.0
do n = 1 , nmx
sum = sum + a(n)*b(n)
end do

上のルーチンを通る前に、a, bの変数を計算する事前処理を行うのですが、入力により、事前処理を
行わずに上のルーチンを通ることがあります。その場合、sumにNaNが入ってしまうことがあります。
これはプログラムの問題でしょうか?それとも、コンパイラの問題でしょうか?
また、これを回避する為のコンパイルオプションがあるでしょうか?
0746なんでだろう?NGNG
プログラムのバグ?コンパイラのバグ?(2)

続いて、もう一つ・・・。
ファイルのI/Oですが、まず、あるプログラムで、次のように書き出したとします。

dimension numb(20) , idat(20,10)
・
write(nun) mxdt, ( num(i), i = 1 , mxdt ),
& ( ( idat(n,m), n = 1 , num(m+3) ), m = 1 , 3 )

上のステートメントで作ったファイルを別プログラムで次のように読み込みます。

dimension numb(20) , idat(20,10)
・
read(nun) mxdt, ( num(i), i = 1 , mxdt ),
& ( ( idat(n,m), n = 1 , num(m+3) ), m = 1 , 3 )

すると、変数idatには前プログラムで書き込んだ値と異なる値が出力されたのには驚きました。
どう、考えてもプログラム自体、おかしいところはないと思うのですが?
0747デフォルトの名無しさんNGNG
>>745
経験的には、プログラムの問題のほうが圧倒的に可能性が高いだろうね


もともと配列壊したりしてない?
ndt < nmx とか。

デバッグモードで実行してる?
0748デフォルトの名無しさんNGNG
>>745-746

うーん。そのコードだけじゃ、よくわからんね。
もちょっと、前から、変数の構造見ないとなんとも…。

でも、Fortran77環境下といってるのに、Fortran90以降の書式が
混在しているように思えるのは、私だけだろうか…
0749なんでだろう?NGNG
>>747-748
この現象に出くわしたのは、2、3年前のことですが、当時の資料を漁ってやっと思い出しました。
結論からいいますと、>>745のケースについては、a,bをゼロに初期化しているのですが、これを
加算または累積計算していくとsumにNaNが入るのです。
おそらく、コンパイラのレジスタの割り当てか何かにバグがあるのでは?という結論になり、
DOループの中で、IF文を使用することで回避する情けない対策をとりました。
これって、コンパイラのバグではないかと思うのですが、こんな現象に出くわした経験者は
いないかと思い、投稿したのです。

>>747さんの質問のndt < nmxはありません。
また、デバッグモードでの実行は実行メモリが大きすぎて出来ませんでした。

>>748
プログラムは、F77で作成されています。従って、SUNのEWSでもF77環境下で動いていました。

>>746のケースは、私が直接タッチした訳でない(同僚が経験した)のですが、書き込み側の
プログラムを作ったのは私です。
この対策は、同僚が読み込みのフォーマットを少し変えることで切り抜けました。
具体的には、
   write(nun) mxdt, ( num(i), i = 1 , mxdt ),
& ( ( idat(n,m), n = 1 , num(m+3) ), m = 1 , 3 )
 ↓
   write(nun) mxdt, ( idum, i = 1 , 3 ),
& ( num(i), i = 1 , 3 ),( idum, i = 7 , mxdt ),
& ( ( idat(n,m), n = 1 , num(m) ), m = 1 , 3 )

これはやはり、コンパイラのバグですよね?
なお、Compaq Visual Fortranのバージョンは6です。
0750デフォルトの名無しさんNGNG
私とうとう脱いじゃった♪
http://alink3.uic.to/user/angeler.html
0751なんでだろう?NGNG
訂正します。
>>749の文の中のwriteはreadの間違いです。お詫びします。
0752デフォルトの名無しさんNGNG
>>749
それってただ単に、書き込み側と読み込み側で
バイナリデータの互換性がとれてないだけなん
じゃないの?

http://www1.jpn.hp.com/products/software/development/dvf/docs/vf-html/pg/pg23_04.htm
0753デフォルトの名無しさんNGNG
いわゆるリトルとビックですよね。

だとすると最初の a(n)*b(n) も変な値が a,b に
セットされているかもしれませんね。
つまりある変数で a(n) もしくは b(n) に NaN
が入っていたりとかね。

もうちょっと print デバッグすれば解消しそうだ
0754なんでだろう?NGNG
>>752,>>753
質問したプログラムは、ある某大手会社(誰もが知っている会社です)の研究所から頂いた
プログラムで、現在、ある研究所で動いているプログラムです。
NaNが入る例等は、他のプログラムでも体験しました。
ゴミプログラムでは再現できませんが、共通していることは、プログラム自体大きく、変数が
てんこ盛り、コモンが沢山ということでした。

>>753のprintデバッグのことですが、私も当然、これを行いました。
しかし、doループの中に入れると、NaNが入る現象が消えてノーマルに終了するので、
なかなか判らなかったのです。
これには、相当参りました。原因究明にどれだけの日時を要したことか・・・。
しかも、実行時間が相当かかるのでネ・・・。
>>752のおっしゃるようなバイナリデータの互換性がとれてないということはありえません。
とにかく、根本的理由が判らないまま、うやむやになっています。
0755デフォルトの名無しさんNGNG
chmod 755 test.sh
0756デフォルトの名無しさんNGNG
プログラムを自分で書き直したほうが、はやいんとちゃうか?
0757なんでだろう?NGNG
>>756
全部で3万ステップ以上あるプログラムを書き直せと・・・(絶句
0758デフォルトの名無しさんNGNG
>>757
たかだか3万ステップでしょ。
私は一人で70万ステップ以上のFEMコード&数値計算ライブラリの構築・維持・アップグレードの面倒みてますよ。
0759デフォルトの名無しさんNGNG
70万ステップの駄コードと比べられても・・・・
0760デフォルトの名無しさんNGNG
エロりんく
http://www.k-514.com/html/erolink.html
0761デフォルトの名無しさんNGNG
>>757
デバッガが使えないのなら、
メモリたくさん積んだ速いマシンで
デバッグオプションを最大限付けて
地道に調べるしか無いかな。
/fpe:3 /debug:full /check:all /math_library:check /traceback /link /incremental:no

0762デフォルトの名無しさんNGNG
>>754
>共通していることは、プログラム自体大きく、変数が
>てんこ盛り、コモンが沢山ということでした。

やはりメモリ壊してる可能性大、と
0763デフォルトの名無しさんNGNG
COMMONで変数書く順番が違ってたなんてオチだったりして。
0764デフォルトの名無しさんNGNG
1日2000ステップ書けば
1人でも2〜3週間あれば書き直せますな。
0765デフォルトの名無しさんNGNG
READ文で、FORMATを行で参照するときに、
READ (8, 100, END = 20) CODE(NUM), DATA(NUM)
ではなく、
I = 100
READ (8, I, END = 20) CODE(NUM), DATA(NUM)
とすることはできますか?
家にコンパイラがないので実際にすることができないんです
0766そんな低レベルな話よりもNGNG
しかし、さっきの話は
ここが発端だったんだね
いろんな意味ですごいもんだ
http://strangeworld-honten.com/cgi-bin/bbs.cgi
0767デフォルトの名無しさんNGNG
>>765
ASSIGN 100 TO I
READ (8, I, END = 20) CODE(NUM), DATA(NUM)
なら出来る。

http://www1.jpn.hp.com/products/software/development/dvf/docs/vf-html/az/az02_26.htm
0768なんでだろう?NGNG
>>758-759,>>764
そんなこと言ったって、何本もありますよ。第一、客先の意向もあるし、会社が「無駄なことすんな」で
許可してくれないでしょう。
>>761
会社の都合もあるしね・・・(苦笑
0769デフォルトの名無しさんNGNG
こんなところで質問できるほど余裕があるんだな
0770デフォルトの名無しさんNGNG
>>759
そういうことはスキルをつけてから言いな!!
0771デフォルトの名無しさんNGNG
早くF77絶滅しないかなー。
0772デフォルトの名無しさんNGNG
使いまくりです。
0773デフォルトの名無しさんNGNG
基本的なことかもしれませんがお願いします。
Fortran77で1桁目に「'」と書くのはどう言う意味なんでしょうか?

プログラムには
---------------------------------------------
・
・
・
  200 CONTINUE
C
      RETURN
      END
'←ここです
C
C
      SUBROUTINE TEST
      COMMON/A/ A,B,C,D

-----------------------------------------------
のようになるのです。
0774773NGNG
追記
これをFortran90のソフトで書くと、
「'」以下のSUBROUTINEが青色に変わらず、無効になってしまいます。
つづりは間違っていないので、「'」なければ当然青色になります。
どなたかご助言ください。お願いいたします。
0775デフォルトの名無しさんNGNG
SalfordのFTN77 Personal Edition
にて

CHARACTER F_NAME*20
WRITE(6,*) 'ファイル名を入力してください'
READ(5,*) F_NAME
OPEN(UNIT=1,FILE=F_NAME,STATUS='OLD')

って書くと

WARNING - PRINT * and READ * will be affected by this OPEN statement

って警告が出てまともにファイルから読み込めないんですが
どこかおかしいところありますか?
0776デフォルトの名無しさんNGNG
>>773-774
「Fortran90のソフト」とか「青色」とか言われても
超能力者でもない限り、状況がわからん。

おそらくF77の方は「1桁目が空白か数字以外ならその行はコメント」
な処理系なんだろう。
で、F90の方は「'」を文字列の始まりとして認識しているんだろう。

>>775
FTN77 User's Guide (p.102)
> by preconnection; the standard input and output are preconnected to
> units 1 and 2 respectively (units 5 and 6 are respective alternatives).
0777773NGNG
凡人に用はないです.ROMっててください.
0778デフォルトの名無しさんNGNG
二次関数で解の公式を用いて解を求めるまでの軌跡のプログラムでax^2+bx+cのa,b,cを係数とおくにはどうすればいいのですか。調べてみましたが分かりません。教えてください。お願いします。
0779デフォルトの名無しさんNGNG
宿題は自分でやりな、坊や。
0780デフォルトの名無しさんNGNG
common continue go to stop format
0781753NGNG
>754
print デバッグで消える、というのは嫌っすね。
common で、配列サイズの基底がぐちゃぐちゃ
なのは体験したことがありますが。。。

コンパイラオプション等でも関係しているのかな。
デバッグモードで見てみましょうかね。。。
0782753NGNG
>753
ああ、後変数初期化なしの挙動はコンパイラ毎に違う
違うんですかね?
常にゼロだとか思わない方がいい気がしますよ。
この場合はオプションで初期化ゼロ設定できたと思います。

ループ入る前に、 a,b 配列を全部出力させないと。。

0783_NGNG
http://homepage.mac.com/hiroyuki44/
0784_NGNG
http://homepage.mac.com/hiroyuki44/
0785_NGNG
http://homepage.mac.com/hiroyuki44/
0786_NGNG
http://homepage.mac.com/hiroyuki44/
0787デフォルトの名無しさんNGNG
しるかアホアホ
0788デフォルトの名無しさんNGNG
今日の名古屋大学の講義・・・
某教授が企業ではFortrun77が良く使われるっていってんですけど
本当ですか?
0789デフォルトの名無しさんNGNG
うそです
0790デフォルトの名無しさんNGNG
>>788
どんな企業だよ?
0791デフォルトの名無しさんNGNG
>>788
Fortran90ならよく使われている。
0792デフォルトの名無しさんNGNG
>>788
うち
0793デフォルトの名無しさんNGNG
普通は C89 じゃね?
あとは分野によって C++, Java, VB, アセンブリ言語, SQL, Fortran90, ... が使われてる。
そして、新言語覚える気力のない人か
古いコードのメンテをさせられてる人か
Fortran90 使いたいけどコンパイラ買う金がない人が
FORTRAN77, COBOL を使っている。
0794デフォルトの名無しさんNGNG
>>776
遅レスながらありがとうございました。
手元にあるテキストはFORTRAN77のものなのですが、「'」の記載がなくて意味があるのか
コメントとして使っているのかがわからなかったのです。
ありがとうございました。
ソフト名はVisualFortran6でした。説明不足ですみません。
この点も勉強させていただきありがとうございました。
0795デフォルトの名無しさんNGNG
>>788
阪大の某教授も同じ事を言っておられました。
なんでも、企業のシステムにはまだまだFortranで書かれたものが多く、
それをCなどに書き換えるだけでも膨大なコストがかかる。
従って、未だに企業の資産?にはFortranで書かれたものが多いんだそうです。
そこで、Fortranを専門に知っておく必要はないが、文法ぐらいは一通り勉強しておいて損はない。
とのことです。
同じ原理でFortran77のものも結構あるんでしょうね。
僕は講義を受けてただけで、阪大生じゃないんでこれ以上なんともいえないんですけどねw
しかし、本屋にもテキストが置いてないし勉強しにくいです・・
0796えNGNG
今、他人の作ったvax fortranをVisual Fortranに移植する作業をしていますが
下記の様に文字化けしたソースが含まれていてコンパイル・エラーがでます。

これを作った当時、外部で作業をして来てpc98からRS232C経由でVAXに転送して
いましたので、恐らくその時点での文字化けだと思います。

この文字化けを元に戻す方法がないでしょうか。
どなたか教えてください。

^^^^^^^^^^^^^^\\ソース・ファイル\\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2000 FORMAT(1H //1H ,20X,'車・関・& 車・民荷 象娚愨 (%) ' //
00000434
* 1H ,10X, ' 関・ ---> ', F10.2 /
00000435
* 1H ,10X, ' 民荷 ---> ', F10.2 /
^^^^^^^^^^^^^\\ソース・ファイル\\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^\\コンパイルの結果\\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:\sm.for(454) : Error: Unrecognized token '#22' skipped
2030 FORMAT(1H0,10X,' NO. .ヨ・.ー.ヤ?,2X,'.ユ.カ.
?9X, 00000450
------------------------------------------------^
Error executing df.exe.

sm.obj - 6 error(s), 0 warning(s)
^^^^^^^^^^^^^^\\コンパイルの結果\\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0797デフォルトの名無しさんNGNG
文字化けを直すより、ソースを読んで、修正する方が早いんじゃないの?
0798デフォルトの名無しさんNGNG
文字コードが違うだけってわけじゃなくて?
0799デフォルトの名無しさんNGNG
>> 798
まさか…、それなりに名の通ってるエディター使ってれば、大抵の文字コードに
対応してるしそんなことは無いんじゃないの?

つーか、ただの文字コードの違いだけなら、普通、それなりのエディターで一度
開いて、確認ぐらいするだろ…。

って、ことで、文字コードの違いでは無いという前提のもので、上に書かれてる
程度のプログラムなら、ソースをざっと眺めれば、そんなに苦労しないで修正
出来ると思うんだけど。つうか、所詮format文なんだし、そのformatを呼び出してる
大元を見れば、すぐ修正できると思うんだが…。
0800デフォルトの名無しさんNGNG
文字化けしてないソースがあるんなら、
もう一度文字化けしないようにコピーすりゃええんでないの?
0801デフォルトの名無しさんNGNG
>>796
VAXでは「DEC漢字」という文字コードが使われていたらしい。
ttp://www.inet-lab.org/ted/program/prog022.html

この文字コードに対応しているWindows用のエディタは
見たこと無いので(VFだからWinですよね?)
コレが原因ではないかな?

変換則も見つけたがよく解らん。
ttp://www.opengroup.or.jp/jvc/cde/convert.html
0802えNGNG
皆さんありがとう!
「DEC漢字」=JIS漢字みたいです。94×94バイトの領域を使ってます。

797さんや799さんの言う様に、何とかやってみます。
0803_NGNG
http://homepage.mac.com/hiroyuki44/
0804山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0805デフォルトの名無しさんNGNG
フォートランは

(・∀・)イイ!
0806デフォルトの名無しさんNGNG
山崎対応age
0807デフォルトの名無しさんNGNG
やっぱ Haskell だろ。
0808デフォルトの名無しさんNGNG
おおフレネリ、あなたのおうちはどこ?
わたしのおうちは、スイスランドよ
きれいなお花で、いっぱいなのよ

やーーっほー、

フォートランランラン、やっほっフォートランランラン、やっほっ
フォートーランランラン、やっほっほ♪
0809デフォルトの名無しさんNGNG
FortranでMP3エンコーダ作ってる人がいる…

http://members.tripod.co.jp/kitaurawa/
0810_NGNG
http://homepage.mac.com/hiroyuki44/jaz08.html
0811_NGNG
http://homepage.mac.com/hiroyuki44/
0812デフォルトの名無しさんNGNG
>>809
Fortran が隆盛を振るっていた頃は
その程度のものはいくらでもあったんじゃないかと。
0813山崎 渉NGNG
(^^)
0814デフォルトの名無しさんNGNG
fortranの名に釣られて、まじまじとスレ読んじゃいました.
前半の丁寧な対応もうびっくり!荒らしも入ることができないほど.

こんな私も、「ニューメリカルレシピ」をfortranに翻訳して使ってます.

あれ、もともとfortranが発祥なのにね.





もちろん、’ピリオド’を使うのは 科学技術計算屋だからよ〜ん ぴりおど
0815山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0816デフォルトの名無しさんNGNG
>814
ニューメリカルレシピをFortran翻訳か…。大変そうだね。
Fortran版ってもう売ってないの?

研究室の先生は持ってるな。
自分のはC版だから、必要な時に借りに行く。
結構ありがたい。
0817デフォルトの名無しさんNGNG
日本語版は C しかないってことじゃないかな?

読み比べてないから分かんないけど、
ソース以外のところは C のとそんなに大きく変わりはないと思うから、
文章はニューメリカルレシピ・イン・シーを読んで、
ソースは Numerical Recipes in Fortran 77 を読むってんじゃあかんのかな?
0818デフォルトの名無しさんNGNG
>>816,817
レスサンクス!
817氏の発言だと原著を買えと?高くないですか?もっともそれが一番よい方法と思いますが
0819デフォルトの名無しさんNGNG
>>818
FORTRAN77だとアマゾンで\8,359-
この手の書籍としては「こんなものかな」と言った値段ですが
感覚的にはやはりちょっと高いですね・・・。

http://www.amazon.co.jp/exec/obidos/search-handle-url/index=books-us&field-keywords=Numerical%20Recipes&bq=1
0820sageNGNG
>>819さんくす!

思ったほど高くない.むしろ安い!驚きじゃぁ〜〜
0821デフォルトの名無しさんNGNG
↑
さげ違いスマソ
0822デフォルトの名無しさんNGNG
PDF だけど無料で手に入る。
Google Directory の Fortran のページ
ttp://directory.google.com/Top/Computers/Programming/Languages/Fortran/
の一番上の Numerical Recipes のサイトからたどってください。
0823デフォルトの名無しさんNGNG
>>822
すごいよ!
0824デフォルトの名無しさんNGNG
インターネット上に、やさしいフォートラン講座というのがありまして、
消費税の計算のプログラムが出ています。

C************消費税の計算******************
WRITE(*,*) '商品の値段?’
    REAC(*,*) PRICE
C   
    VAT = PRICE * 0.05
NPRICE = PRICE + VAT
C
WRITE(*,*) '価格:’,PRICE
WRITE(*,*) '消費税:’,VAT
WRITE(*,*) '消費税込みの価格:’,NPRICE
C
END

では、プログラムを実行して、ためしに商品の値段を”50”円と
入力して、Enterキーを押してください。
  DOSプロンプトウィンドウを起動して、コンパイルのコマンドを入力する
とあります。コンパイルのコマンド入力を教えてください。
0825デフォルトの名無しさんNGNG
やさしいフォートラン講座 http://www.g.dendai.ac.jp/lecture/fortran/
0826デフォルトの名無しさんNGNG
その1−はじめてのプログラム http://www.g.dendai.ac.jp/lecture/fortran/fort01.html
2.2 GUI 開発環境 (CPad)

 FORTRAN コンパイラのインストールが完了しました。これで作ったプログラムをコンパイルして
パソコンで実行できるファイルを生成できる環境を手に入れました。ただ,このままでは,使い勝
手が良くありません。というのも,パソコン上で実行できるファイルを作るには,DOS プロンプト
(DOS 窓)を起動して,コンパイルのコマンドを入力する必要があるからです。コンパイル名やコン
パイルオプションを覚えておく必要があります。また,DOS コマンドを知らない人は困るでしょう。

 そこで,GUI の開発環境を開発&公開されている方がいますので,その方が作った「GUI ベース
の開発環境」(CPad)を使ってみましょう。CPad には開発言語に応じて幾つかの種類があります。
今回は,先程インストールした FORTRAN コンパイラ用の CPad である 「CPad for Salford FTN77」
を使います。以下に URL を書いておきますので参考にしてください。なお,CPad のインストール方
法や使い方は,CPad のホームページやヘルプファイルをご覧ください。これといって難しい作業は
ないと思います。

 ■ CPad : http://hp.vector.co.jp/authors/VA017148/pages/cpad.html
 ┗ CPad for Salford FTN77 : http://www.vector.co.jp/soft/win95/prog/se153699.html
0827デフォルトの名無しさんNGNG
>825
読んでも細かいことは書いてない(?)ので教えてください。
0828デフォルトの名無しさんNGNG
>>824
コンパイラによって違う。
コンパイラのマニュアルを読め。

[c:\unko] f77 消費税.for
0829デフォルトの名無しさんNGNG
>>824
マルチポストうぜー
0830デフォルトの名無しさんNGNG
>824

//ジョブ名 JOB CLASS=A,MSGCLASS=O,MSFLEVEL=(1,1)
// EXEC FORTCLG
//FORT.SYSIN DD *
   FORTRAN ソース プログラム
//GO.FT05001 DD DSN=入力用データセット名,DISP=SHR
//GO.FT05001 DD DSN=出力用データセット名,DISP=(NEW,CATLG),
//      UNIT=SYSDA,SPACE=(TRK,(10,10),RLSE)
//
0831デフォルトの名無しさんNGNG
爺か?
0832デフォルトの名無しさんNGNG
そういや、コンパックフォートランってなくなるらしい

インテルはいってるになるらしい
0833デフォルトの名無しさんNGNG
AVではなくその辺を歩いていたら間違いなく女子校生で通用しそうなロリフェース。
にもかかわらず乱れる乱れる。しっかりビラビラ周りを剃りあげたオマンコにバイブが入っていく様子は圧巻です。
3Pシーンでも乱れまくり喘ぎまくりの菜月ちゃんです。
無料ムービーを観てね。
http://66.40.59.78/index.html
0834デフォルトの名無しさんNGNG
>>832
これのこと? → >>734
0835デフォルトの名無しさんNGNG
がいしゅつ。。。すまそ
0836デフォルトの名無しさんNGNG
会話型プログラミング言語に CRADEか GRADEというのがあるそうですが、どちらが
正しいのですか。わたしはビギナーです。教えてください。
■ このスレッドは過去ログ倉庫に格納されています