Fortran

このエントリーをはてなブックマークに追加
1パッキー
Fortran90をただでコンパイルする方法はないでしょうか?
2デフォルトの名無しさん:01/10/16 15:47
ゼルビス
激しく糞スレ
4パッキー:01/10/16 17:45
なんとなく上げ
5たかじん:01/10/16 17:51
カレッジにて。
6ものすごくやさしい人:01/10/16 17:53
>>1 >>4
google で free の Fortran90 用のコンパイラを探せば、できますよ。
http://www.google.com/
7質問???:01/11/12 03:06
FORTRANのコンパイラでDEBUGとRELEASEってのがあるんですが、大事な計算結果が変わってしまうんですけど、これってどちらの精度がいいかってわからないもんなんですか?
もし知っておられるなら教えて欲しいです。
また、計算結果がわかっていない計算をしてるので、確かめようがないので困ってます。
お願いします。
計算方法がまちがっている。
>>7
都合のよい方で、良しとしよう
10デフォルトの名無しさん:01/11/16 13:55
>>7 ではありませんが、同じようなデバッグとリリースで結果が変わります。
何か考えられる原因はないですかね?
>>10
変数を初期化していない。
1210:01/11/16 14:18
実は実際に Fortran でプログラムを作っている人間ではないで確認してませんが、
初期化していない変数を、そのまま出力したりすれば値は変わると思い
ますが、計算結果を代入すれば初期化していないことは結果には関係
ないですよね?
13デフォルトの名無しさん:01/11/16 17:13
DEBUG, RELEASEって最適化レベルのフラグか何か?
そうだったとして、

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

一般的にはこの順番で怪しい
>>12
計算で使用している変数の初期化をしていなかったら?
ロジックが誤っていて変数に代入している部分をスキップしていたら?
1510:01/11/16 17:32
どうもありがとうございます。

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

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

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

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

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

man f77

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

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

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

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

#昔のSunにはf2cが入ってたけど、それじゃないよね。
>29 JISの規格書なら買えるでしょ。一万位だったか?
34かじりたてオーとキャド:02/01/11 22:09
フォートランに関して是非御教授してもらいたいことがあります。

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

おいらが前引いた時は、Fortran77 subset対応っぽい奴しか
見当たらなかったけど。
37デフォルトの名無しさん:02/01/12 01:35
>>34
昔ホストプログラムのやつを手打ちでつくったことあるよ。サブルーチン300個ぐらいのやつ(藁
3820:02/01/15 23:31
>34 FLOPPY/FLOW はだめ?
ttp://www.netlib.org/floppy/contents.html
39デフォルトの名無しさん:02/01/16 22:11
age
4036:02/01/16 22:47
>>38 あ、それそれ。
http://www.cs.utk.edu/f2j/
Fortran 2 Java(f2j) Project
43デフォルトの名無しさん:02/02/20 21:27
2度と出てこなそうなスレなのであげ
44デフォルトの名無しさん:02/03/13 18:33
富士通フォートランで扱える行列のサイズはどのくらいですか?
教えてください.
漏れはAIX-FORTRAN〜HPFだから知らん。

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

fatal error C1007:

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

READ文、WRITE文を使えばOK。

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

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 です。
文字化けした中身を、od -xc か dump で表示してコピペしたら?
>61
文字1個で上手くいくならループを回して1文字ずつ送れば良いような。
と思ったが、ちこっと調べてみたら、
最後のNULL文字以降を殺しておくこと(NULL文字以降も一緒に送られてしまうから)
for (i = strlen(<文字列>); i >= <配列長>; i++){
<文字列>[i] = ' ';
}
とやっておく、或いは、fortran側で、
<文字列> = <文字列>(1:<配列長>-1)
とやるか。

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

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

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

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

「エラーメッセージは正確に」って、さっき言われたでしょ?
67のと:02/06/24 20:49
ごめんなさい、エラーは、以下のとおりです。

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
>65
おそらくそんなに早くは実のあるレスがつかないと思われるので
気長に待ちなされ。
69のと:02/06/24 20:59
>68
はい、わかりました。
>>67
> run-time error M6201: MATH
> - exp: DOMAIN error
は、exp() のドメイン (引数の有効範囲) を逸脱したってことだから、
exp() の引数がおかしくなってると思う。 (でも、マイナス方向は -∞ まで、
行っても大丈夫だし、プラス方向はオーバーフローエラーになるような気がする
が...。初期か忘れとかで浮動小数点として認識できないような値なんだろう
か ?)

とりあえず、問題の行は 00430649 番地にあるから、それを見直してみれば ?
(MAP ファイルの出し方と見方はわかるかな ?)
71のと:02/06/24 21:41
>70
レスありがとうございます。
MAPファイルってぜんぜんわからないんですよね。。。
VisualFortran特有のものですか?
7270:02/06/24 22:36
>>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 ファイル自体は、一般的な用語。コードとか、グローバル変数なんか
がどの番地に配置されているかの対応表のこと。
73デフォルトの名無しさん:02/06/24 23:47
俺、そのあたり いにしえの IBM 5550 MS-Fortranでしかやった事ないけど(ワラ
C言語で言うところの matherr.h みたく、
浮動小数点例外をハンドリングするルーチンってFortranで書けなかったっけ(処理系依存 or IEEE規格)?

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

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

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

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

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

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

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

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

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

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

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

80のと:02/06/25 23:00
>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でも
問題ありませんし、ここでエラーになる要素がないような気がするのですが…。
81デフォルトの名無しさん:02/06/25 23:05
linuxのfortranはネームリストの読み込みが変だ(った)
8270:02/06/25 23:44
>>80
とりあえず、その直前で YP (実数型だよね) の値を出力してみたら ?

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

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

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

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

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

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

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

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

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

VisualFortranのヘルプで”浮動小数点環境”って検索してみれば、
なにやらいろいろ書いてあります。日本語版ヘルプはコンパックのホームページからダウンロードできます。
105デフォルトの名無しさん :02/06/28 04:23
>>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を区別して、前者の場合は正しく動くが、後者
の場合は正しく動かないというのは、プログラムのロジックに問題があると
思うぞ。誤差の問題に関して脳天気なプログラムと推察する。この観点から
プログラム全体を見直すべし。
106デフォルトの名無しさん:02/06/28 04:25
>>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を区別して、前者の場合は正しく動くが、後者
の場合は正しく動かないというのは、プログラムのロジックに問題があると
思うぞ。誤差の問題に関して脳天気なプログラムと推察する。この観点から
プログラム全体を見直すべし。
107105:02/06/28 04:33
スマソ。何故か連続投稿。???
108のと:02/06/28 17:21
>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文に入れることはできないですよね。
でも本当はそうしたいわけなので、根本的解決になっていないような気が
するのですが…。
とんちんかんなことを言っていたらごめんなさい。
109デフォルトの名無しさん:02/06/28 18:44
本当の0だけを取り除いて、0に非常に近いけど0じゃない値は
使いたいということでしょうか?
浮動小数点の値はどんな感じのビットになっていて、0の場合だけを
ビット演算ではじくとははどうでしょう?
0の場合のビットパターンを用意して、判定したい値とXORとって
ビットが全部0なら0、一つでも1があったらビットパターンが違ってたってことで0でないというのはどうでしょう?
自分でやってみた訳じゃなくて、単なる思いつきだからどうなるかは判りませんが・・・
110105:02/06/28 18:53
>>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とは区別して計算したいのですか? こういう区別を
しなければならないようなプログラムには根本的な問題があると思うわけです。
111デフォルトの名無しさん:02/06/28 18:56
コンパックFORTRANに付属のBitViewerというツールで
浮動小数点の中身がみれます。
112デフォルトの名無しさん:02/06/28 19:00
コンピュータって2進数で近似してるわけだから、
あんまり細かいところ見ても意味がないのではないでしょうか?
113のと:02/06/28 19:01
>109

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

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

自信ないのでsage
118デフォルトの名無しさん:02/06/28 19:27
>>117
C++でGMP使う。
以上。
119のと:02/06/28 19:33
>117

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

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

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

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

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

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

>>134
一応、F77のしばりはありますね。DO-ENDDOくらいは使っちゃいますけど。

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

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


136syukudai:02/07/03 00:16
線形回帰のソースおちてるところ知りませんかね?
自分で探してもみつからないので・・
http://www.netlib.org/ あたりで
linear regression でサーチ は?

138あの・・:02/07/05 00:58
基本的な質問させてください。
フォートランの場合は配列を引数とするためには、サブルーチン側ではど
のように書けばよいのですか?
subroutine 名前 (x(i),y(i))
みたいな書き方で良いのでしょうか?それとも添え字は要りませんか?
subroutine 名前 (x,y)
140あの・・:02/07/05 02:12
>>139
わかりました。
もうひとつききたいんですが、そのサブルーチンの後に
subroutine namae (x,y)
dimention x(100)
dimention y(100)
みたいな宣言も必要ですか?
141デフォルトの名無しさん:02/07/05 05:54
>>140
当然配列宣言は必要。宣言がないと通常変数と区別がつかない。
あと、ディメンションじゃなくてディメンジョンね。スペルが
チョト違うYO!
まあ普通は、REAL*8 X(100),Y(100)のように型宣言で配列宣言
も兼ねる書き方をするけど。
それにしても英小文字で書くとFORTRANじゃないみたいだなあ。
頭の固い漏れだけか?(爆
>>141
> それにしても英小文字で書くとFORTRANじゃないみたいだなあ。
禿同。
143140:02/07/05 12:03
あやうくスペル間違いでコンパイルとおらないところでした。感謝します!
しつこいようですがもうひとつ聞きたいのですがメインプログラムで配列を渡す時は
サブルーチン名(X,Y)でいいですか?それからメインでは、渡す配列は20までしか
確保していないのですが、受け取るほうのサブルーチンで21以上にもアクセスできますか?
subroutine(x,y)
RWAL*8 x(100),y(100)
do 10 i=1,50
z=x(i)+y(i)
みたいなことが書きたいのです・・文法あってるかな・・
そりゃむりだろ・・
なんでワザワザそんなことを。
146デフォルトの名無しさん:02/07/05 18:01
fortranを実行するときにwfl386とwfc386の2種類があるけど
どう違うの?
147デフォルトの名無しさん:02/07/05 20:34
>>143
自殺願望か?
できますよ。
RWAL型ならできるかも。ナンチテ
149C:02/07/06 00:51
>>143
無理でないかい。
多分コンパイルエラーか、x(20)以上にアクセスするときに何か実行時エラーが出ると思う。
C言語なら、動くよ。ただ確保したところ以外にいじるとどうなるかは
わからないが。
Fortran最近始めたばかりで余りよく知らないんだが、
関数のなかでもx(100)とかやらなくちゃならないってことは
関数には配列のコピーが渡されるって事か?
150141:02/07/06 04:59
>>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
subroutine hoge (x,y)
RWAL*8 x(1),y(1)
余談&常識なんだけど、
引数に多次元配列を渡す場合は、
配列の形状を共有するために、
内側N-1次元分の配列サイズも
引数で渡す。
153デフォルトの名無しさん:02/07/09 23:57
fortranで書かれた、連立一次方程式を解くプログラムと
逆行列を求めるプログラムが
欲しいのですが、これらをを自分で作らずに手に入れる方法などを
どなたかご存知ありませんか?
やはり、自分で作るしかないのでしょうか?
よろしくお願いします。
154デフォルトの名無しさん:02/07/10 00:40
>>153
本屋でタチヨミすれば?
逆行列程度ならネットにおちてる可能性も・・
しかしC言語等に比べるとネットに落ちてる確率は低い。
物理屋さんしか使わないからな・・
>>153
その類の数値解析パッケージは、探せばくさるほど転がってるけど。
英語読めるか? 137あたり参照。
156デフォルトの名無しさん:02/07/10 12:32
CのプログラムをFORTRANに変換するツールってあります?
157ショボ鯖缶:02/07/10 17:21
研究でSUNのマシンを買ってきたんだが、
FORTEなんたらってうFORTRANのコンパイラCDがついてたけど
ライセンスは別途購入する必要があるの?

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

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

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

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

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

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

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

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



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

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

とうぶんFORTRAN77でいきます...。
某ライブラリが何かを書けば解決するかもしれないね



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

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

これじゃ,なんか駄目っぽい.
どこが駄目か教えていただけるとありがたいのですが.
>187
まず読み込むbmpの色深度によって1ピクセルのデータのサイズが変わるけど
その処理をしてないと思った。これはフルカラー(24bit)だったらR,G,B
それぞれ1バイトずつだからまあ24bit限定にすればよいと思うけど。
あと、bmpフォーマットは上下逆(右下?がデータの先頭に来る)
だけどその辺知ってるのかなという気がした。
何をしたいのか書いてくれないと説明のしようがないと思われ。
189187:02/07/23 02:17
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の標準の組み込み関数であるが,
>その値は機種に依存することになる.

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

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

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

スマソ
これだとbmpの55バイト目から204バイト目を十進で出力するプログラムだね。
cが150取ってなかったら落ちるだろ。
192187:02/07/23 13:44
>>191
cの配列のサイズは十分大きくとってあります.

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

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

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

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

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

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

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

どうもお世話になります.
195192:02/07/23 17:30
>>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も知らんでしゃしゃり出てスマソだが。
196193:02/07/23 17:39

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

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

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

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

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

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


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

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

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

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

>>216
lapackは数値計算にとっても便利だよ。

212のまちがい。

222名無しさん:02/08/15 02:42
ふざけたプログラムを作ってみました.

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」使いでした.
223名無しさん:02/08/15 02:43
あれ,タブで飛ばしたのに左ツメになってしまった.
224名無しさん:02/08/15 17:01
s/$ gcc/$ g77/
寝ぼけていました.逝ってきます.
225デフォルトの名無しさん:02/08/21 21:22
私の持っている本には乱数発生の関数が載っていなかったのですが、
そのようなものはないのでしょうか?
組み込み関数として用意されているのでしょうか?
くわしい方いましたら、教えてください。
>>225
コンパイラによるぞ
コンパイラはVisualFortran(6.6 UpdateA)です。
228226:02/08/22 21:33
ran()

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

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

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

↑にも日本語のマニュアルがある
>>234
あ、6.0の日本語マニュアル出てたんだ。気が付かなかったサンクスコ。
やっと出たか
237デフォルトの名無しさん:02/08/30 19:10
>>205

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

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

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

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

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

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



しかもFortranスレだという罠
240のと:02/09/01 17:58
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はない)、どうしてこんな設定になってるんで
しょうか?
どなたかわかる方いましたら教えてください。
>>240
プロジェクトフォルダごとコピーしたんじゃない?

新規プロジェクトで
ソースファイルだけコピーしてみ
242のと:02/09/02 15:33
>>241
解決しました。
ありがとうございます。
243デフォルトの名無しさん:02/09/06 22:56
乱数を300ふって、それの分布をチェックしたいんですけど、
うまくいかないんです。誰か助けて。
0〜800くらいまでの乱数を25刻みでいくつづつカウントされるか
チェックしたいんですけど、if文がうまく書けてないみたいで・・・
244243:02/09/07 12:25
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とかいっちゃって、
乱数が一様に分布されなくなっちゃいます。
一様になるはずなんです。
どこが違いますか?
245デフォルトの名無しさん:02/09/07 20:22
Y(i)ってInteger宣言になってないとまずいと思うんだけど、
もちろんそうなってるんですよね?
246デフォルトの名無しさん:02/09/08 09:12
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
247デフォルトの名無しさん:02/09/10 16:10
擬似逆行列を解くルーチンってどっかにないでしょうか?
LAPACKだとこれが出来ないっぽいんですが。
何かヒントいただければお願いします。
入力した5つの定数の中から最大値を出力するプログラムおしえてくだせえ!
最大値を出すやりかたがわからないんですが・・
249デフォルトの名無しさん:02/09/11 15:34
そんなもん max(x1,x2,x3,x4,x5) ってやってやればどれか分かると思うんだが。
250デフォルトの名無しさん:02/09/24 19:50
if(条件)文1
文2
とあるとき、if文の影響範囲は文1と文2の両方に及びますか?
thenがあるときとないときでは違うのでしょうか?
251デフォルトの名無しさん:02/09/25 07:03
>>250
おやおや、無視されていますね。
FORTRANから離れて大分経つので自信はないが、私なりの回答を。

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

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

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

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

でいいのでしょうか?
256名無しさん:02/10/04 22:59
>>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
257デフォルトの名無しさん:02/10/05 00:45
>>256
そういう読みやすい書き方を紹介してくれる
書籍かサイトご存知ないでしょうか?
258デフォルトの名無しさん:02/10/05 00:57
>>256
END DOってどのコンパイラでも通るのか?
まぁFORTRANは77しか使ったこと無いから90,95とかはわからんが.

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

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

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

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

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

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

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


おぉブレーネリ 私の居場所はどこ?
268名無しさん@XEmacs:02/10/10 15:52
IF ( A NE 0 ) THEN
A = SQRT(ABS(A))
ELSE
A = 0
ENDIF
だっけ?
269デフォルトの名無しさん:02/10/11 01:16
IF ( A .NE. 0 ) THEN
 A = HAGE
ELSE
 A = MAGE
ENDIF

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

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

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

FORTRANでビット演算は出来ないという理解は正しいでしょうか?
275271:02/10/20 15:35
>>272,273,274
コンパイル時にビッグエンディアンを読み込みするオプションつけたら
うまくいきました。ありがとうございました。
276デフォルトの名無しさん:02/10/23 01:08
ビット演算は一応出来るはず。
LSHIFTとかANDとかあるんだが,
富士通とSunとGNUでは存在を確認した
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)のイメージ |

(つづく)
(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)
279デフォルトの名無しさん:02/10/26 15:24
みなさん、はじめまして。
以前FORTRAN77を勉強し、最近、構造型が便利だということでF90を
勉強しだしていますが構造型で少しわからないところがあります。

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

としておき、さらに

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

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

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

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

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

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

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

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

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

書き忘れましたが環境は、VineLinux2.5にAbsoftのProFortran7.5をインストールしています。
>>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
284デフォルトの名無しさん:02/10/26 18:28
>>283

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

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

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

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

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

何度もすみませんm(_ _)m
289デフォルトの名無しさん:02/10/27 00:27
>287

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

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

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

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

c comment

のことでしょうか?
「Fortran77の本」とは具体的に何と言う本か?
「普通の画面」とは何のこと?
「うちの環境」とはどんな環境?
「駄目」とはどういう状態のこと?
291デフォルトの名無しさん:02/10/27 14:34
>>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をインストールしています。
>>291
> 説明不足でご免なさい。出力を改行させたくない場合、
> write(*,'+','kaigyousimasenn')
> と言う用にすれば出来ると
> の本に書いてあったんです。
> このようにしてみたのですが、そのまま画面と言うかターミナルに表示されてしまいまして。

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

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

問題自体はあれで解決しました。
お付き合いいただき、どうもありがとうございます。
294デフォルトの名無しさん:02/10/27 20:20
295デフォルトの名無しさん:02/10/29 18:04
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列目以降にはかかれていません。
こぴぺしたものなので・・・。
>>295
Salfordのお試し版とg77なら
cとdが未初期化だゴルァ
と怒られた以外、ちゃんとコンパイルできたぞ。
297デフォルトの名無しさん:02/10/29 22:11
バッファリングされているFortran記録を、ファイルにフラッシュ
させるにはどうしたらいいのでしょうか?
いかにもOSあるいはコンパイラに依存しそうですが。
Visual Fortran だと、FLUSH あるいは COMMITQQ なんてのがありますが。
使用コンパイラのリファレンスを見るべし。
299デフォルトの名無しさん:02/10/30 17:19
>>295さん、どうもありがとう。異常終了が起こるのは、やっぱり、マシンがだめなのかなぁ・・・。
300デフォルトの名無しさん:02/10/30 17:20
これも、どこが違うかわらからないので、教えていただけませんか。ずうずうしくてすみません。
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
>>299
I/O の番号を変えてみるってのは?
>>300
> これも、どこが違うかわらからないので、教えていただけませんか。ずうずうしくてすみません。

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

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

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

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

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

307306:02/10/30 23:30
304を読んでなかった。
レポートかぁ。
書かなきゃよかったかな。

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

>>308
クラッシュする位置を特定してどうしてそこでクラッシュするか考える

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

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

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

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

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

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

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

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

ご教授ください宜しくお願いします.
324デフォルトの名無しさん:02/11/20 17:34

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

>>316 >>317
ありがとうございました。これってFORTRAN使いの方(に限らない?)にはあたりまえの事なんですね。
こんなこと聞いてアホかと怒られました。勉強させていただきました。
326デフォルトの名無しさん:02/11/24 12:35
AIX上のXLFortran使っている方がいれば教えてください。
KAP or VAST-2 最適化プリプロセッサって、
シングルスレッドのプログラムでも有効ですか?
数値解析のプログラムを使っているんですが、
もしかしたら必須アイテム?
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
を参照のこと
328デフォルトの名無しさん:02/11/28 16:33
>>327
よろしかったら数値計算部をC++からFORTRANに乗り換えられた理由を教えて
いただけないでしょうか?
C++だと遅くてやってられないからです。
まあ、配列の仕様が違うので仕方ないですが、
CやC++は数値演算には向きませんね。
>>329
「数値演算」といっても規模によるだろうけど、
具体的には C/C++ とどの程度の差がでるものなの?

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

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

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

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

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

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

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

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

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

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

335デフォルトの名無しさん:02/11/29 11:14
呼び出し側に行列演算結果を渡すのに値コピー

呼び出し側に行列演算結果を返すのに値コピー

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

どうせ宿題なんだろ。問題文全部晒してみ。
350デフォルトの名無しさん:02/11/30 19:54
>>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
351デフォルトの名無しさん:02/11/30 19:54
続き
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時くらいまでは起きているので、親切な方、ご教授ください。よろしく御願いします。

まだ意味不明なのだが・・・
353デフォルトの名無しさん:02/11/30 21:10
>>352
どのあたりが不明ですか?
問題文は書いたのですが。
354デフォルトの名無しさん:02/11/30 21:26
最適化について。

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

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

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

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

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

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

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

何がわからないかというと、配列と、
入力データに何を入れるか。
b,dはわかるけど、あとが・・・。
0.2
0.4
0.6
っていれていくのかなぁ。
357デフォルトの名無しさん:02/12/01 00:57
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のスレは貴重だから、あげ。
>>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 使えたっけ?
359デフォルトの名無しさん:02/12/01 05:12
>>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 の位置もわからないです。
   こんな感じでは、だめなのでしょうか。????や、直すべき点をご教授ください。
  御願いします。ちなみに、パラメーター表記も未習です。

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

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

違ったら、指摘お願い。
361(_ _)/:02/12/01 12:26
>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
以下略
>359
358 のように親切じゃないですが、
Do ループの変数を、実数でまわすのは止める習慣を
つけた方がいいっす。

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

あと、プログラミング自体が苦手ではない感じ
なのはソースを見ればわかるのですが
10 continue の位置がわからないとか配列宣言が不明とか
極めて基本的な事なんで、言語リファレンスないし
初心者向けの本に1回ぐらいは目を通した方がいいと思います
363デフォルトの名無しさん:02/12/01 13:59
dimensionのところは何をかけばいいのでしょうか?
>>363
配列にしたいものを並べればよろしいかと.
362さんが言うように,まずは参考書を読みましょう.
一行ずつ聞くつもりですか?
>>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ループ内で計算させて、
全ての計算が終わった後に配列の内容を出力すれば良いのではないでしょうか。
366デフォルトの名無しさん:02/12/01 15:26
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
とエラーが出てしまうのですが、どのように解決すればよいのですか。
>>366
もう一度362を読む.
368デフォルトの名無しさん:02/12/01 15:53
>>367
Do ループの変数を、実数でまわすのは止める
ってやつですか?
この意味もわかりません。

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

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

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

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

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

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

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

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

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

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

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

なんかコンピューターのプログラミング教えるのって、
融通が利かない&特別な能力を持つ「変人」へどう指示出すか、
っていうマネジメント教育みたいですね。
374訴人:02/12/01 19:59
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の使い方は大丈夫?
375デフォルトの名無しさん:02/12/01 20:47
みなさん、ご親切にありがとうございます
今、いろいろやってみてるんですけど、やはり・・・・。
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は何回使ってもよいのですか。

『土木情報処理の基礎』という本を教科書に使っています。
これを参考にしているのですが、説明が不足しているような気がします。
ご教授ください。御願いします。
376デフォルトの名無しさん:02/12/01 23:56
>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 コンパイラー
に付いての情報もあった方がいいと思います。
377デフォルトの名無しさん:02/12/02 00:30
>376
ご指導ありがとうございます。
1)に関して。暗黙の型宣言でiは実数だからsにしたんですけど、
それだけじゃだめなんですね。
まったく同じものにみえてます、はい。
0.2を1/5にするとか・・・・・・・はぁ。
2)に関して。配列ですか。
配列は、dimensionしか習ってないので、たぶん、これしか使えないんですよね。
きっと。

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

追伸でご指摘があったので。
CPad for Salford FTN77
というコンパイラーを使ってます。
実行もしてくれるので、便利かなと。
>377
1)
暗黙の型宣言は使わないほうがいいです
Integer やRealで明示的型宣言を使うようにしましょう
ちなみに,1/5は0です…コンパイラによるけど
2)
parameter N=15
real h(N)
なら動くはずです。f77使わないのでうろ覚えだけど
Fortran77のprogram文内には固定サイズ配列しか
置くことが出来ないのです。
質問の内容を見ていると、いろいろと基本的な概念が理解できて
いないようです。がんばって学んでください
・エラーがでたら,その部分に注目しよう
 例えば,
  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構文を入れる→テスト.
   フルループを回す→テスト.
全ての判断要素を入れる→テスト.
 慣れた人でも,いきなり全てべた書きできるわけではありません.天才でもない
 限りは,このように少しずつ組み上げていきます.
レス番入れ忘れた…
>379は>377さん宛てでふ
381デフォルトの名無しさん:02/12/02 02:08
>380さん。
アリガト!(´▽`)。
少しずつがんばってみます。
けど、提出期限もあったり。あわわわ。

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

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

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

僕は多分 Arccos ではまっていると思いますね。
388名無しさんに接続中…:02/12/02 17:11
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

こんなのを作ったら、下のようなエラーがでました
389388:02/12/02 17:12
次のようなエラーがでました
(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
390デフォルトの名無しさん:02/12/02 18:05
よくみてないけど,
integer m,m,wasa,...

integer m,n,wasa,...
391<_ _>:02/12/02 18:11
これなんだ?>389

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


stop
end
393388:02/12/02 18:55
以下のようなエラーです。
■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
394388:02/12/02 19:16
388
write(*,*) "m =?"
write(*,*) "n =?"
を消したら、実行できました。
でも、使うときにわかりにくいなぁ。
395デフォルトの名無しさん:02/12/02 21:14
>write(*,*) "m =?"

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

396デフォルトの名無しさん:02/12/02 22:28
>>395
です。
397388:02/12/02 22:47
>>395
できました。本当にありがとうございました。
398デフォルトの名無しさん:02/12/02 23:05
>write(*,*) "m + n = ",wa
ていうかこれも実行できたのか?
WRITE(6, '(A,F10.0)') 'm+n=', wa
あたりじゃないと苦しくない?
waよりもiwaとかにしたほうが良いだろうけど
399デフォルトの名無しさん:02/12/03 14:04
サブルーチン法で解いてもらいたいのですが・・・
よろしくお願いします!
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
400デフォルトの名無しさん:02/12/03 15:28
すっかりFortran宿題スレになってしまう予感。
宿題教えてくんが来るまでは大人な雰囲気のすれだったのに。
みんな親切に教えてあげすぎかも。
401デフォルトの名無しさん:02/12/03 17:26
↓宿題手伝いますYO!
http://pc3.2ch.net/test/read.cgi/tech/1038024989/
ってことで

>399
サブルーチン法ってなんすか?
>399
つーか、よく見たらガウスの消去法じゃねぇか
なにをサブルーチンにしたいんだよ
サブルーチンの定義から勉強してこい
403デフォルトの名無しさん:02/12/03 17:38
ガウス消去法の部分をサブルーチン化するんでしょうけど。。。
サブルーチン側で整合配列?使うのかなぁ
404デフォルトの名無しさん:02/12/03 18:12
拡張子を「.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

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

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

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

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

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

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

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

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

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

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

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

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

ましてやFortran77。

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

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

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

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

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

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

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

なんかFortranから離れてきてるな

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

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

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

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

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

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

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

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

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

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

あああああああかきなおしたい
>>433
激しく板違い
最近の大学でもFortranで情報処理の授業するんですかねぇ
437デフォルトの名無しさん:02/12/08 14:28
age
438デフォルトの名無しさん:02/12/08 15:40
c言語ってフリーじゃないですよね?
439デフォルトの名無しさん:02/12/08 19:17
>>438
スレ違いですよ。フリーのCコンパイラの話題なら↓でどうぞ。

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

ところで、Windows用のフリーで使えるForran90/95コンパイラは
>>324 のF言語(?)だけなのでしょうか?
g77 や Watcom などFORTRAN77のコンパイラなら見つかったのですが…。
4401024:02/12/10 17:48
正規分布の確率密度を
ある点Xから無限まで積分で
求めるプログラムを教えてください。
できれば、シンプソンと台形公式(2重積分)の2通り
お願いします。
>>440
スレチガイ
宿題手伝いますYO!!
http://pc3.2ch.net/test/read.cgi/tech/1038024989/
442デフォルトの名無しさん:02/12/12 22:11
age
443デフォルトの名無しさん:02/12/14 01:38
一つ質問です.
FORTRAN 77 で OpenMP を使いたいのですが,
なにか良い書籍かサイトありますでしょうか?
444未熟者m(__)m:02/12/19 10:22
いきなりなんですが、
『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)よろしければ訂正もしく新たなプログラム教えてください。
445未熟者m(__)m:02/12/19 10:24
上のものです
書き忘れありました。プログラムはfortran77です
>>444
RTFM
マニュアルを読みましょう.
>>444
課題は、Fを求めるんだよね?
上のソースはその課題の一部だな。
ソースを見る限り、degreeとradianを混同させている可能性があり、
デタラメな値を返すことが予想されるが、動かないなんて事はないと思う。

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


448未熟者m(__)m:02/12/20 07:39
なんとか無事計算結果が出ました!!
>>448
結局何が原因で,どうしたら解決したのか
書かないのですか?
450未熟者m(__)m:02/12/20 16:48
角度の部分をラジアンに変えるということを知らずそこをいじったらちゃんと計算しました
こんな感じです↓
−−−−−−−
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
−−−−−−−
451デフォルトの名無しさん:02/12/21 00:03
突然ですが
visual fortranでcpuの最適化は可能ですか?
cpuの最適化…出来たら面白いな…
453デフォルトの名無しさん:02/12/21 11:09
>>451-452
確かにできたら凄いな(w
「特定のCPUに合わせた最適化」なら
オンライン・マニュアルで「/architecture」を検索しる!
>>452-453
> cpuの最適化…出来たら面白いな…

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

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

とあったのですがこれが何を意味するのかさっぱりわからんのです.
DF コマンド行で実行可能ってあるのですが,DF コマンド行とはなんでしょうか?
456デフォルトの名無しさん:02/12/21 18:50
>>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」とすればコンパイルしたマシンに合わせて最適化してくれる(はず)
457451:02/12/22 02:38
>>456
どもありがとうございます.
早速実行してみます.
458デフォルトの名無しさん:02/12/23 13:07
>>455
IDEからでもプロジェクトの設定で、
FORTRAN - Code Generation
FORTRAN - Optimizations
で設定できるかと
459451:02/12/25 03:10
最適化できたのはいいが1/40計算するのに5500sかかった・・・
こんなんざら?
>>431
>>421 ではなくて、 一行しかいていない 愚痴っぽい >>426 のことを言っているんですよ。勘違いして余計なことを気にしていますね。余計なこと書かない方がよかったかな。


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

FORTRAN77はソースコードの解読が比較的楽だから、俺は、もしFORTRANで書かれた短いサンプルプログラムを参考にしてプログラムを作れという課題を出されたらすべでCかJavaに書き直す。
461デフォルトの名無しさん:02/12/28 04:09
プログラムド素人なんですけど、
FORTRAN77で書かれたプログラムをFORTRAN90,95用のコンパイラーで
コンパイルするにはどうしたら良いのでしょう?
ちなみにVISUAL FORTRANというコンパイラーをつかってるのですが。
462デフォルトの名無しさん:02/12/28 04:58
>>461
そのままコンパイルするだけでOK。
463デフォルトの名無しさん:03/01/08 14:28
CプログラムからFortranのサブルーチンを呼んでいるのですが、そのCプログ
ラムと同等(のつもり)のFortranプログラムとの挙動が一致しないんです。厄
介なのは、パラメータによって一致するときとしないときとがあるんです。正
しい結果のときもあるのでCからFortranサブルーチンを呼ぶ方法は大きく間違っ
てはいないと思っているのですが、何か注意すべき点などありますでしょうか?
 ヒントをいただけるとありがたいです。コンパイラはgccとg77です。
464IP記録実験:03/01/08 21:28
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を提出することがある。



   ひろゆきは帰った?wwwww
ニュー速への流民が増えそうですね
2ちゃんねらが全員誹謗中傷行為をやってると勘違いしてる模様。
本当にそうだったらんなコピペされんでも皆消えとるわ。
468デフォルトの名無しさん:03/01/09 08:09
>463
添字が2つ以上の配列を値渡しとアドレス渡ししている差では?
職場、学校、座敷牢から気兼ねなく書き込みでける
ってゆってたのにー
プンスカ!!
======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
────────────────────────────
素朴な疑問ですが、どうしてこの板だけスレストされるのですか?
IPとってる板

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

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

 非常に勝手です。
 私に力を頂けますでしょうか>皆さん
復活した模様
2ちゃんねる が衰退していく

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

http://ascii24.com/news/reading/causebooks/2002/07/01/636911-000.html
>>910

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

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

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

C<>Fortran の多次元配列渡しで
添字順序が違うとなると、添字順序の
マニュアル最適化は面倒ですね。
486fortrun初心者:03/01/11 08:41
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
初心者の自分にお教え下さい。宜しくお願い致します。

>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

これまでのあらすじは あたりに誰かお願い。
======2==C==H======================================================

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

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

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

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

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

んじゃ!

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

っていうか、それくらいしないとこれから苦労しますよ。
まあ今回1回だけの宿題のつもりなら調べる気は
起きないでしょうが。
IP12!
はぁ。もうテンプレ張るのやめた。
継続には付けないことが多いよ
具体的には「某」というコテハンの人だと思う。
11 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:16 ID:rLfxQ17l
全レスです。
2ちゃんねるも現実ですよ。
あらまぁお二人で(w

こいつ、気合い入ってるな
IP取られてるのになぁ・・
ネタスレを記事にするためとりあえず富山のほうに通報したんだな産経は。
ひろとしハゲワロタ
一定期間のログ取得は当時のガイドラインにも明記されており
その期間はセキュリティーの問題上公開されておりませんでした。
今でもそうですが。

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

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

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

エラーメッセージは

run-time error M6201: MATH
- sqrt:DOMAIN error

・ ここらへんはファイル名がとかが表示されてます

Incrementally linked image--PC correlation disable

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

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

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

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

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

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

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

∵.☆:*・∵.゜.☆.・∴.,★ :*・∵.:☆.。.:*・:* ・∵.+:*・∵.゜ http://jsweb.muvc.net/index.html
★☆★幸福になりたーい!!★☆★
538デフォルトの名無しさん:03/02/03 01:49
ファイルからデータを読み込んで変数に格納しようとしたが、もうファイル
の最後で読み込みができないということ。
(例)
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を使った経験がないので
確かではないですが。)
を確かめてみるとよろしいのではないでしょうか?
>>538
fujitsuFortranてlinuxじゃなかったっけ?使ったことも見たこともないんですが。
まさかvppFortranじゃないよね、PCって書いてあるし…

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

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

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

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

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

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

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

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

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

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

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

とりあえず、自宅でFortran90/95がコンパイルできる環境が手に入ったので
しばらくこれで遊んでみます。
それにしても、スレタイからして、こんな息の長い良スレ(真面目なスレ)に
なるとは思わなかったな(藁
>>554
Simple is best. ってことだな。
556549:03/02/11 15:05
http://g95.sourceforge.net/
ってのもあるらしいですなぁ。早く完成しないかなぁ。
557質問です:03/02/16 05:40

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

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

コンパイラを疑うより先に、まず自分自身を疑え。
559デフォルトの名無しさん:03/02/16 10:20
>>558
> コンパイラを疑うより先に、まず自分自身を疑え。
いい言葉だねぇ。

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

横レスすまん。
Double?
Double Precision?
>>559
しかし、ユーザーからは、
ユーザーの誤入力を咎めるよりも、まずは誤入力を誘うような設計を何とかしれ。
と切り返される罠。
562デフォルトの名無しさん:03/02/16 13:38
コンパイラー様は神様です。
563質問です:03/02/16 15:52
>>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となるんです。
564質問です:03/02/16 15:57

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

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


567デフォルトの名無しさん:03/02/16 23:41
>>565
同意。77だけではきつい。

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

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

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

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


569質問です:03/02/17 06:25

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

>>569
手元のMinGW GCC 3.2.1 ではサポートされていませんでした。
572質問です:03/02/19 03:30
>>571
ありがとうございました。
573デフォルトの名無しさん:03/02/20 10:33
>571さんありがちょ、Fortran90はフリーは無いですよね?
574デフォルトの名無しさん:03/02/20 12:32
>>573
Linuxならあるよ
free non-commercial unsupported Intel(R) Fortran Compiler 7.0
FORTRANってCAE、流体、熱解析でつかえるんだ。
>574 >575のやつがそうでつか?
578577:03/02/21 02:25
>>577
Yes
579デフォルトの名無しさん:03/02/21 13:47
FILE *fp1;
int *fluid;
fscanf(fp1,"%*s %d",fluid);
上のをFORTRANで書きたいんだけどどうやるんス?
よろしくおながいします
  STOP
  END
581デフォルトの名無しさん:03/02/23 20:20
IntelのFortran Compiler 7.0 for Linux入れました。Fortran90いい!
getargとかiargcとか使うのに -Vaxlibオプションつけんの面倒だけど
(設定の仕方?)、いい!90はいい。とりあえず型宣言は慣れたから次は
whereとかselsect caseだな(ただだから使えないとかないですよね?)。
77がだめだとは思わないけど、90に慣れたらおそらく離れられなくなりそう。
582デフォルトの名無しさん:03/03/04 14:55
age
何故Fortranなんですか?
584デフォルトの名無しさん:03/03/04 19:49
サブルーチンっていう響きがよいですね。

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

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

596デフォルトの名無しさん:03/03/12 23:55
>>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なんて普通です.
あ〜〜〜読みにくいよ!教授!
597デフォルトの名無しさん:03/03/13 04:00
4649 CONTINUE
598デフォルトの名無しさん:03/03/19 19:24
windowsでFortranを使う必要性がでてきたんですけど
何かいいエディターないですか?
色がカラーじゃないと見にくいんです
599デフォルトの名無しさん:03/03/19 22:52
>>598
秀丸でも使ったら?
変色用ファイルダウンロードして
>>599
あんな高いものを使えと言うのですか!?
601デフォルトの名無しさん:03/03/19 23:11
>>600
そんなに高いかなぁ.学生?学生とかフリーじゃなかったっけ?
やなら,Windows用のemacsってあるだろ.あれ使ったら変色するんじゃね?
>>600
maedow
603デフォルトの名無しさん:03/03/19 23:15
写メール対応。やらせ・バイト一切無し。女性も安心♪♪ 地域別、不倫・エッチ希望☆
私はここでセフレにしてもらいました♪一緒にH♪ワリキリと☆エッチ♪
          ■http://pink7.net/yhst/
604デフォルトの名無しさん:03/03/19 23:33
>>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ばかり使ってたりして。
gvim もおっけーよん。
au! BufRead,BufNewFile *.f95 let b:fortran_do_enddo=1
au! BufRead,BufNewFile *.f90 let b:fortran_do_enddo=1
なんて設定しておけば f77 以外でも安心。
606598:03/03/20 03:42
結構参考になりました
サンクス
607デフォルトの名無しさん:03/04/08 22:44
Visual FortranのIDEのエディタで、コメントなど2バイト文字が
72-73カラム目にかかったとき、文字化けするのは
何とかならないだろうか?
608デフォルトの名無しさん:03/04/09 14:28
Fortran かなつかしぃ。
プログラムカード売ってるお店なんてもうないだろうなぁ
609デフォルトの名無しさん:03/04/09 23:06
「609、お前プログラム組むときは、やっぱりこれ使った方がいいぞ。ほれ。」
ボスはそう言って黄ばんだN○CのFORTRANコーディングシートを棚から引っ張り出し、
僕に渡してくれました。
一月ほど前のことです。
冗談かと思ったのですが、顔が大真面目でした。
610デフォルトの名無しさん:03/04/10 03:51
Fortranの参考書でみたことあるな、穴の開いたカード
あれってどんな使い方するの?
プログラミングに影響するわけ?
>>610
昔のコンピュータはね、高くて巨大でしかも遅かったからみんな、
カードをもって順番に使ってたの。
そのための整理券なんだよ。






とりあえず、こんなんでいい?
俺が使ってたのは、マークシートみたいなやつだったけどな。
613デフォルトの名無しさん:03/04/11 21:47
やーっふぉー、やっふぉ、ふぉーとらんらんらん♪
>>612
消しゴムで修正できると言う甘えがバグを作るんだ。
本物のプログラマは一発で正しいプログラムを書くから、穿孔パンチでいいんだ。
615山崎渉:03/04/17 15:30
(^^)
616デフォルトの名無しさん:03/04/18 07:12
age
617sage:03/04/18 07:31
会話がプログラマ板だ
プログラマ板にfortranスレないしな〜
FORTRANプログラマは今や絶滅危惧生物だから、どうすれば生き残れるかが
重大関心事で、レスがプログラマ板風になるのは仕方ないと思われ。
>>619
だったら、プログラマ板に立てればいいんじゃない ?
621山崎渉:03/04/20 03:09
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
622山崎渉:03/04/20 03:44
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
623デフォルトの名無しさん:03/04/26 00:01
フリーの Fortran 95 コンパイラ G95
http://g95.sourceforge.net/
こんなのがあるんでつね。まださなぎ状態(pupal state)とのことでつが。
>>619
早く絶滅して欲しいと思ってますが、何か?
ホント早く絶滅して欲しい。
こんなクソ言語使わされる身にもなってくれ。
Fortranも使いこなせないとは。。。プッ。
時代は Haskell 98 だよ。
それ以外の言語は糞。
>>626
Fortran95を使うべし。
もしくはF言語。
B,C,D はあるけど、E はあるのー?
631デフォルトの名無しさん:03/04/26 21:17
趣味なら自分の好きな言語を使えるだろうが、
業務だとね.......

せいぜい、密かにじわりとFORTRAN90/95へ移行とか
固定フォーマットで書けば、どうせだれにもわからん
632デフォルトの名無しさん:03/04/28 02:53
Fortranで関数ポインタって使えるんですか?
どーも検索してもロクに引っかからなくって、引っかかるのは
意味不明な記述のみでして…
   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
   ! 関数でなくサブルーチンの時は戻り値の型の指定は不要
トーシロ質問スマソ 以下の認識あってる?

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

これが真実。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ただ、古いコンパイラだと complex がサポートされてないことがあるので、
面倒なのはその時ですね。
まぁ、その時は complex ヘッダを適当なところからパクってきて、
それを使えばいいでしょう。
テンプレート使って実装してあれば、ヘッダファイルだけあれば使ます。
ライセンス関係まずければ自分で実装しないといけませんが、
どうせ実装法を変えようが無いので
適当にプログラミングの癖を変えておけばいいでしょう。
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)
646デフォルトの名無しさん:03/05/03 02:13
Fortranは最速と聞いたけどほんとかな?
たしかに90が出てから並列化がカスタマイズできるよになったけど
他言語はそうはいかないのか?
647デフォルトの名無しさん:03/05/09 22:44
ttp://www.salford.co.uk/compilers/ftn77pe/perequest.shtml
を落としてみたんだけど、コンパイルできません。
XPに対応してないなんてことありますか?
WinMeでやってみたら問題なく動いたのですが。
648デフォルトの名無しさん:03/05/10 05:15
>>646
>>634-644あたりの話題が参考になるかと。

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

サンクス
651デフォルトの名無しさん:03/05/10 16:52
ところで頻繁に出てきてる
77だとか90ってのはどう違うの?
途中に.EQ.が使えないなんてレスが
あったような気がするけど、じゃイコールは
どうすりゃいいの?
.EQ.が使えないのはFじゃネーノ?
653デフォルトの名無しさん:03/05/10 20:18
.LT. <
.LE. <=
.EQ. ==
.NE. /=
.GT. >
.GE. >=
654デフォルトの名無しさん:03/05/10 20:47
>>650
649に追加
http://www1.jpn.hp.com/products/software/development/dvf/visual/jfaq.html
を読んでみて
だめだったら知らん

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

FORTRAN専用スレッド
http://pc.2ch.net/test/read.cgi/prog/1052290911/
660デフォルトの名無しさん:03/05/12 08:48
最近僕はエロいことに興味がなくなってきました。どうしたらいいのでしょう?
661動画直リン:03/05/12 09:13
>>657
Fortran90 だと使えるみたいね。
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
664デフォルトの名無しさん:03/05/13 02:48
今から20年ほど前に作られたFortranソースコード見たら全部大文字だった・・・・・

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

Javaにリプレースをたくらんでいるのでf2jで全部Javaに変換した方が早いかな?    
665デフォルトの名無しさん:03/05/13 20:37
オプションで指定しない限り大文字と小文字の区別は無い.
大文字の中の人も大変だな。
667デフォルトの名無しさん:03/05/17 11:39
: 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
-------------------------^


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

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

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

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

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

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

幸運にも先輩がFortran90を使って書いていたら
F O R T R A N 7 7 の こ と は 忘 れ な さ い
676675:03/05/28 00:33
#途中で書き込んじゃった…
×とりあえず
○とりあえずFORTRAN77を覚えてから
大は小を兼ねる。

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

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

それはともかく、正直構造体がないのは辛いんで、
Fortran90(または95)覚えた方がいい。
Fortran90 を覚えとけば
FORTRAN77 も読めるんで損はないっしょ。
678山崎渉:03/05/28 12:32
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
679デフォルトの名無しさん:03/05/29 01:20
緊急age
680デフォルトの名無しさん:03/05/30 12:35
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には対応していないのでしょうか?
681デフォルトの名無しさん:03/05/30 18:09
>>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
682_:03/05/30 18:09
683デフォルトの名無しさん:03/05/31 12:05
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
が出てしまいます.
684大坊:03/05/31 12:07
F90でunterminated block exists って言われてしまいます

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

Visual Studio上ではVC++とVisual FORTRANのソースコードを共存させて
コンパイルできますが、DCOSやDSINを呼び出してその値を返す関数副プロ
グラムを記述すると計算時間が30秒と元の木阿弥に。。。
687デフォルトの名無しさん:03/05/31 15:58
あーっ!! 1億回じゃなくて10億回でした。失礼しました。
10億回でこの程度の差ならまァいいか。。。
手元のVisual Fortranで d=1.0*cos(cta)+2.0*sin(cta) の計算式を
/asmfile で出力させたらライブラリ呼ばずにインライン展開してた。
おまけに角度が同じなので FSINCOS命令を使ってsin/cosの値を
同時に計算してる。
数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() の計算と四則演算だけでできるよ。
690684:03/05/31 19:22
どなたか私の質問にもお答えを。。。
691アノニマス:03/05/31 20:36
初めまして。この春から学校で少しだけフォートラン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
692デフォルトの名無しさん:03/05/31 20:44
<<688
d=1.0*cos(cta)+2.0*sin(cta)の計算式をloopするだけではFORTRANが計算を
さぼってしまうので正確には別の計算式も含まれているんですが、、、略。

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

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

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

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

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

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

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

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

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

ってことでよろしいか?

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

# 現に,今コンパイルが通らず苦戦中...
703702:03/06/08 12:12
あっ,でも,,,

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

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

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

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

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

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

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

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

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

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

>>708
氾濫計算とかの一回分
並列化に期待してデュアルかな
問題にによるが
713デフォルトの名無しさん:03/06/13 16:29
がんばってクラスタ買え。
並列化コンパイラと一緒に、か?
並列化効率良くないと意味ない罠がありそうだけど。
しぬきでへいれつかりつをあげろ
おれはしにそうだ
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」にはどのような意味があるかわからないでしょうか?
ご存知の方いらっしゃればよろしくお願いします。
717デフォルトの名無しさん:03/06/15 20:02
C
 6001 CONTINUE
    EZ(JEL)=(1.0-2.0*POIS)/YM*(SIGMAX(JEL)+SIGMAY(JEL))
   1    -(EPSX+EPSY)

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

g95 は完成までまだもうちょっとかかりそうだし。
727722:03/06/16 05:44
>>724 >>725さんが代弁してくれました.

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

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

しっかりした解説となると, web では寂しいですね.
728デフォルトの名無しさん:03/06/16 05:48
>>727
Windows版は・・・だろ?Linux版ならC++コンパイラとともにFortranコンパイラの非商用版があったはず。
729デフォルトの名無しさん:03/06/16 05:50
http://pc.2ch.net/test/read.cgi/linux/1007024009/
それに関するスレ
/opt以下に入れようとするのが激しくむかつく・・・
730デフォルトの名無しさん:03/06/16 05:53
731730:03/06/16 05:57
違う違う。それは体験版だ(汗
これ
http://www.intel.com/software/products/compilers/flin/noncom.htm
733732:03/06/16 05:59
なんでこんな時間にかぶるかな。。
734デフォルトの名無しさん:03/06/16 19:47
HP, Compaq Visual Fortran をインテルへ移管。
Intel Visual Fortran V8.0 は10月販売予定。
http://www1.jpn.hp.com/products/software/development/dvf/intel/transition.html
>>727
適当な本で適当に文法を理解しておけば、
あとは別言語からの勘と試行錯誤で何とかなる。
736722, 727:03/06/18 00:31
>>735
処理系依存のものは,知らないで使うのと知っていて使うのでは
大きく違うと思うのです.
計算しか行なわないとなれば,処理系依存は少なさそうですが,
上のレスに「77 の仕様が少ない」とか記述がありますので,
やはり便利な構文があったり無かったりするのでしょう (か?).

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

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

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

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

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

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

ところでIntel Visual Fortran 8.0 (?) は単独でIDEが使えるのでしょうか?
Intel Fortran と VC++ .Net 2003 Std 買おうと思ってたんだけど、
10月まで待った方がいいのかな?
745なんでだろう?:03/06/23 11:11
プログラムのバグ?コンパイラのバグ?(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が入ってしまうことがあります。
これはプログラムの問題でしょうか?それとも、コンパイラの問題でしょうか?
また、これを回避する為のコンパイルオプションがあるでしょうか?
746なんでだろう?:03/06/23 11:12
プログラムのバグ?コンパイラのバグ?(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には前プログラムで書き込んだ値と異なる値が出力されたのには驚きました。
どう、考えてもプログラム自体、おかしいところはないと思うのですが?
747デフォルトの名無しさん:03/06/23 23:57
>>745
経験的には、プログラムの問題のほうが圧倒的に可能性が高いだろうね


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

デバッグモードで実行してる?
>>745-746

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

でも、Fortran77環境下といってるのに、Fortran90以降の書式が
混在しているように思えるのは、私だけだろうか…
749なんでだろう?:03/06/24 11:19
>>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です。
750デフォルトの名無しさん:03/06/24 11:21
私とうとう脱いじゃった♪
http://alink3.uic.to/user/angeler.html
751なんでだろう?:03/06/24 11:38
訂正します。
>>749の文の中のwriteはreadの間違いです。お詫びします。
752デフォルトの名無しさん:03/06/24 20:55
>>749
それってただ単に、書き込み側と読み込み側で
バイナリデータの互換性がとれてないだけなん
じゃないの?

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

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

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

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

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

やはりメモリ壊してる可能性大、と
COMMONで変数書く順番が違ってたなんてオチだったりして。
1日2000ステップ書けば
1人でも2〜3週間あれば書き直せますな。
765デフォルトの名無しさん:03/06/26 02:10
READ文で、FORMATを行で参照するときに、
READ (8, 100, END = 20) CODE(NUM), DATA(NUM)
ではなく、
I = 100
READ (8, I, END = 20) CODE(NUM), DATA(NUM)
とすることはできますか?
家にコンパイラがないので実際にすることができないんです
766そんな低レベルな話よりも:03/06/26 02:19
しかし、さっきの話は
ここが発端だったんだね
いろんな意味ですごいもんだ
http://strangeworld-honten.com/cgi-bin/bbs.cgi
767デフォルトの名無しさん:03/06/26 06:19
>>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
768なんでだろう?:03/06/26 11:32
>>758-759,>>764
そんなこと言ったって、何本もありますよ。第一、客先の意向もあるし、会社が「無駄なことすんな」で
許可してくれないでしょう。
>>761
会社の都合もあるしね・・・(苦笑
769デフォルトの名無しさん:03/06/26 11:35
こんなところで質問できるほど余裕があるんだな
770デフォルトの名無しさん:03/06/26 17:23
>>759
そういうことはスキルをつけてから言いな!!
早くF77絶滅しないかなー。
使いまくりです。
基本的なことかもしれませんがお願いします。
Fortran77で1桁目に「'」と書くのはどう言う意味なんでしょうか?

プログラムには
---------------------------------------------



  200 CONTINUE
C
      RETURN
      END
'←ここです
C
C
      SUBROUTINE TEST
      COMMON/A/ A,B,C,D

-----------------------------------------------
のようになるのです。
774773:03/06/27 05:25
追記
これをFortran90のソフトで書くと、
「'」以下のSUBROUTINEが青色に変わらず、無効になってしまいます。
つづりは間違っていないので、「'」なければ当然青色になります。
どなたかご助言ください。お願いいたします。
775デフォルトの名無しさん:03/06/27 13:12
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

って警告が出てまともにファイルから読み込めないんですが
どこかおかしいところありますか?
776デフォルトの名無しさん:03/06/27 18:27
>>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).
777773:03/06/27 21:30
凡人に用はないです.ROMっててください.
778デフォルトの名無しさん:03/06/27 22:55
二次関数で解の公式を用いて解を求めるまでの軌跡のプログラムでax^2+bx+cのa,b,cを係数とおくにはどうすればいいのですか。調べてみましたが分かりません。教えてください。お願いします。
宿題は自分でやりな、坊や。
common continue go to stop format
781753:03/06/28 12:41
>754
print デバッグで消える、というのは嫌っすね。
common で、配列サイズの基底がぐちゃぐちゃ
なのは体験したことがありますが。。。

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

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

783_:03/06/28 12:59
784_:03/06/28 14:32
785_:03/06/28 15:42
786_:03/06/28 17:09
しるかアホアホ
788デフォルトの名無しさん:03/07/09 16:38
今日の名古屋大学の講義・・・
某教授が企業ではFortrun77が良く使われるっていってんですけど
本当ですか?
うそです
790デフォルトの名無しさん:03/07/09 20:01
>>788
どんな企業だよ?
791デフォルトの名無しさん:03/07/09 20:42
>>788
Fortran90ならよく使われている。
792デフォルトの名無しさん:03/07/09 22:10
>>788
うち
普通は C89 じゃね?
あとは分野によって C++, Java, VB, アセンブリ言語, SQL, Fortran90, ... が使われてる。
そして、新言語覚える気力のない人か
古いコードのメンテをさせられてる人か
Fortran90 使いたいけどコンパイラ買う金がない人が
FORTRAN77, COBOL を使っている。
>>776
遅レスながらありがとうございました。
手元にあるテキストはFORTRAN77のものなのですが、「'」の記載がなくて意味があるのか
コメントとして使っているのかがわからなかったのです。
ありがとうございました。
ソフト名はVisualFortran6でした。説明不足ですみません。
この点も勉強させていただきありがとうございました。
>>788
阪大の某教授も同じ事を言っておられました。
なんでも、企業のシステムにはまだまだFortranで書かれたものが多く、
それをCなどに書き換えるだけでも膨大なコストがかかる。
従って、未だに企業の資産?にはFortranで書かれたものが多いんだそうです。
そこで、Fortranを専門に知っておく必要はないが、文法ぐらいは一通り勉強しておいて損はない。
とのことです。
同じ原理でFortran77のものも結構あるんでしょうね。
僕は講義を受けてただけで、阪大生じゃないんでこれ以上なんともいえないんですけどねw
しかし、本屋にもテキストが置いてないし勉強しにくいです・・
796:03/07/11 20:50
今、他人の作った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)
^^^^^^^^^^^^^^\\コンパイルの結果\\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
文字化けを直すより、ソースを読んで、修正する方が早いんじゃないの?
798デフォルトの名無しさん:03/07/12 05:38
文字コードが違うだけってわけじゃなくて?
>> 798
まさか…、それなりに名の通ってるエディター使ってれば、大抵の文字コードに
対応してるしそんなことは無いんじゃないの?

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

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

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

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

797さんや799さんの言う様に、何とかやってみます。
803_:03/07/14 09:18
804山崎 渉:03/07/15 09:47

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
フォートランは

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

やーーっほー、

フォートランランラン、やっほっフォートランランラン、やっほっ
フォートーランランラン、やっほっほ♪
809デフォルトの名無しさん:03/07/24 11:17
FortranでMP3エンコーダ作ってる人がいる…

http://members.tripod.co.jp/kitaurawa/
810_:03/07/24 11:21
811_:03/07/24 11:22
>>809
Fortran が隆盛を振るっていた頃は
その程度のものはいくらでもあったんじゃないかと。
813山崎 渉:03/08/02 02:23
(^^)
814デフォルトの名無しさん:03/08/07 21:45
fortranの名に釣られて、まじまじとスレ読んじゃいました.
前半の丁寧な対応もうびっくり!荒らしも入ることができないほど.

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

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





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

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

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

http://www.amazon.co.jp/exec/obidos/search-handle-url/index=books-us&field-keywords=Numerical%20Recipes&bq=1
820sage:03/08/16 19:50
>>819さんくす!

思ったほど高くない.むしろ安い!驚きじゃぁ〜〜

さげ違いスマソ
PDF だけど無料で手に入る。
Google Directory の Fortran のページ
ttp://directory.google.com/Top/Computers/Programming/Languages/Fortran/
の一番上の Numerical Recipes のサイトからたどってください。
>>822
すごいよ!
824デフォルトの名無しさん:03/08/19 15:05
インターネット上に、やさしいフォートラン講座というのがありまして、
消費税の計算のプログラムが出ています。

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

では、プログラムを実行して、ためしに商品の値段を”50”円と
入力して、Enterキーを押してください。
  DOSプロンプトウィンドウを起動して、コンパイルのコマンドを入力する
とあります。コンパイルのコマンド入力を教えてください。
やさしいフォートラン講座 http://www.g.dendai.ac.jp/lecture/fortran/
その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
827デフォルトの名無しさん:03/08/19 15:16
>825
読んでも細かいことは書いてない(?)ので教えてください。
>>824
コンパイラによって違う。
コンパイラのマニュアルを読め。

[c:\unko] f77 消費税.for
>>824
マルチポストうぜー
>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)
//
831デフォルトの名無しさん:03/08/19 15:29
爺か?
832デフォルトの名無しさん:03/08/19 19:17
そういや、コンパックフォートランってなくなるらしい

インテルはいってるになるらしい
833デフォルトの名無しさん:03/08/19 19:21
AVではなくその辺を歩いていたら間違いなく女子校生で通用しそうなロリフェース。
にもかかわらず乱れる乱れる。しっかりビラビラ周りを剃りあげたオマンコにバイブが入っていく様子は圧巻です。
3Pシーンでも乱れまくり喘ぎまくりの菜月ちゃんです。
無料ムービーを観てね。
http://66.40.59.78/index.html
834デフォルトの名無しさん:03/08/20 00:32
>>832
これのこと? → >>734
835デフォルトの名無しさん:03/08/20 23:06
がいしゅつ。。。すまそ
836デフォルトの名無しさん:03/08/21 10:30
会話型プログラミング言語に CRADEか GRADEというのがあるそうですが、どちらが
正しいのですか。わたしはビギナーです。教えてください。
>>836
Fortranで出来なければ、アセンブリー言語でやってみろ。
アセンブリー言語で出来なければ、やる意味がない!
>>836
> 正しいのですか。わたしはビギナーです。教えてください。

また...
> わたしはビギナーです。教えてください。

このフレーズ見ただけで、無いようによらず答える気無くなるよな。
その辺が分かってないんだろな。
あぁ、これ見たら、初心者なんだから、なおさら自分で調べるなり
努力しなさいと言いたくなる。
840デフォルトの名無しさん:03/08/27 20:50
windowsXPで動くfortranのコンパイラを探しています。
だれか教えて下さい。
>>840
Intel... は言い飽きたので

Absoft Pro Fortran
http://www.hulinks.co.jp/software/pf_win/

Lahey/Fujitsu Fortran 95
http://cij.jp/lahey/index.html

やっぱり商用コンパイラは高いなぁ
Cygwin か MinGW 入れて g77 を
>>840
やさしいフォートラン講座 http://www.g.dendai.ac.jp/lecture/fortran/
現在FORTRAN77からFORTRAN90に移行中です.

program test
call sub
call sub
end program test
subroutine sub
integer(kind=4) :: i=0
i=i+1
write(6,'("i=",i2)') i
end subroutine sub

これをCompaq Digital Tru64 UnixのFORTRAN90コンパイラで
コンパイルして実行すると
i= 1
i= 2
となります.subroutine subにおける,i=0での初期化は
最初にcallされた時しか行われていないようです.
不思議に思いましたが,そのような言語仕様なのでしょうか.
i=i+1の前にi=0を挿入すれば
i= 1
i= 1
となります.
845デフォルトの名無しさん:03/08/28 01:15
Salford FTN77 Personal Editionがダウンロードできないのです。
なぜでしょう?
846デフォルトの名無しさん:03/08/28 02:19
>>844
コンパイラの仕様かな
変数宣言にautomatic属性付けるとどうでしょう。

いまvisualfortranのオンラインマニュアル眺めてたら
/automaticてコンパイルオプションがあったけどこういうの
でもいいのかな?
>>845
サーバが停止してるから
>844
FORTRAN90の初期値の設定は77のDATA文相当でしょ。

サブルーチンに入るたびに初期化されたら困るじゃん。
849847:03/08/28 10:32
補足
77風に書くと
subroutine sub
integer*4 i/0/
i=i+1
write(6,'("i=",i2)') i
end
だよね。
850デフォルトの名無しさん:03/08/28 21:00
>844
私は、Cに移行中です。

フォートランのサブルーチンがCの関数に例えられるけれど、
Cは、fortranみたいに参照渡しじゃないのに正直驚き。
ポインタがそれを解決?

とはいえ、数値計算はやっぱfortranかな?と思います。
なにあれ、powって関数・・・。げんなり、げんなり、えなりかずきっ
>>850
>ポインタがそれを解決?
その通り。
Fortran から入ると
そのポインタの使い方がすんなり受け入れられて、
楽なのやもしれませんね。
C++ だと参照ってやつも使えます。
>>844
integer(kind=4) :: i=0
だとプログラム起動時にiのメモリを確保して,iに0を入れる.

integer(kind=4) :: i
i=0
だとsubが呼ばれると,iのメモリを確保して,i=0を実行し,
subを抜けるとiを開放する.
ってなるんじゃなかった?
Fortran 95 コンパイラ
http://www.fortran.com/

Open Watcom Fortran Compiler
http://www.openwatcom.org/

Fortran 95 コンパイラ G95
http://g95.sourceforge.net/

Fortran 77 コンパイラ G77
http://gcc.gnu.org/

Salford FTN77 Personal Edition
http://www.salford.co.uk/compilers/ftn77pe/perequest.shtml

FCompiler
http://www.fortran.com/F/compilers.html

Intel® Fortran Compiler for Linux
http://www.intel.com/software/products/compilers/flin/noncom.htm
Compaq Visual Fortranの日本語版オンライン・ヘルプ
http://www1.jpn.hp.com/products/software/development/dvf/visual/jhelp.html

Intel Fortran Compiler 日本語オンライン マニュアル
http://www.xlsoft.com/jp/products/intel/download.html

Numerical Recipes in Fortran
http://directory.google.com/Top/Computers/Programming/Languages/Fortran/
の一番上の Numerical Recipes のサイトからたどってください。

Fortran90から追加された機能については↓
http://www.ip.media.kyoto-u.ac.jp/edu/lec/htomita/f90.html
855デフォルトの名無しさん:03/08/29 22:45
なんか最近盛り上がってるね.ここ
856850:03/08/29 23:12
>>851
サンクス!
Cの勉強は一度K&Rで挫折したので入門書を購入し、ひもときました。
そのあとK&Rを読み返すと”あら不思議・・・”言っていることの意味分かるデないの。
しこしこ、演習プログラムかいていますが、K&Rはおいておいて
今度はC++の入門書にチャレンジしてみようと思います。

ところで、fortranでプログラム書いているお方は「GUI」なんて、どうでもいいのでしょうが
(実際私も実務で使うときはwin2000でdos窓)ちょっとした非線形の解算出なんかで
ウインドウに数値を入れて「ジュドーーン」と表示されるようなことしたいときどうしているのでしょうか?

なんとなく気が付いているのは、F77であってもvisual fortranというくらいだから、CだのC++だの
関係なくできるんでしょうね・・・。やり方知らんけど。

そっちの勉強のほうが先?  かな。。。
857デフォルトの名無しさん:03/08/29 23:42
>>848, 848 ほか
わしも知らんかった。
必ず初期化されると思ってた。
>>856
グラフを描いてくれるソフトウェア向けのデータを
出すプログラムを作るのじゃダメかな?
859デフォルトの名無しさん:03/08/30 01:34
>>858
言いたいことがよく分かりません。「きれたコミュニケーション」
>>826
であげられているGUIって「特殊」なもんでしょ?
ビジュアル ビジュアル!
これ簡単にしたい気持ちわかるけど、できん
860デフォルトの名無しさん:03/08/30 02:55
10月ごろに出る新コンパイラって
Intel Fortran Compiler 8.0 = Intel Visual Fortran 8.0 (旧 Compaq Visual Fortran)
なんですか?
それとも別々のプロダクトになるのでしょうか?
教えて>エライ人またはxlsoftの営業
>>860
http://www.xlsoft.com/jp/products/intel/support/status_update.html


>インテル Visual Fortran のみご購入いただいても動作いたしません。
>MS VC++ .NET 2002 または 2003 が必要になります。
開発環境は無しか・・・
>>861
開発環境というかリンカすら含まれていないのか
863デフォルトの名無しさん:03/08/30 19:05

そりゃないでしょ。(ごめソ 釣りだった?)

コンパイルできれば言うことなし!
みんな使ったことある?インテルf
スゲーハイェー
コンパックの2倍は早い
インテルハイッテルだからこそできること
>>863
なんだそのつっこみどころ満載なレスは
おまいは上のページのQ&Aを見てないのか?

Q5. インテル Fortran コンパイラには、Microsoft Visual C++ .NET スタンダード版2002 または 2003、あるいは Visual Studio .NET プロフェッショナル版2002 または 2003 が必要ですか。
A5. はい。インテル Fortran コンパイラは Microsoft Visual C++ のリンカを使用するために上記ソフトウェアが必要になります。

くっ、これが釣りというものか…
コマンドラインでコンパイルするだけでもVC++.NETがいるのか・・・
まあ、スタンダード版でもOKなのがせめてもの救いか。
866デフォルトの名無しさん:03/08/31 16:04
>>864正直スマンカッタ
VCインスコされていたので、コマンドラインコンパイル時
exe一丁あがりだったもので
インテルF速い あっという間に計算終了の巻
868デフォルトの名無しさん:03/09/05 17:56
FORTRANのプログラムでRAND()を使って1から10までの
乱数を発生させるのってどうやるんですか?かなり初心者
なもので誰か教えていただけませんか?
>868
いたるところにマルチポストかよ。
いい度胸してんな。
>>868
自分なりに考えてどんなコードを書いたかくらい出せ。
そもそも「1から10までの乱数」ってのがあいまい。
実数なのか、整数なのか。
1以上、10未満なのか、1以上、10以下なのか。
#普通は0以上にすると思うが
871デフォルトの名無しさん:03/09/06 12:20
>>868
   PROGRAM HAGE
   R = RAND()
   WRITE(*,*) R
   STOP
   END

   REAL FUNCTION RAND()
   WRITE(*,*) '1から10までの適当な実数を入力して下さい。'
   READ(*,*) RAND
   END
872デフォルトの名無しさん:03/09/07 01:14
教えてください。
WinでCompac Visual FORTRAN6.1を使ってます。
1行が長くなるときって、どうやったら
前の行の連続って認識してくれるんですか?
以前(MacでFortran使用)のときは、
次の行の6文字目に#を打ってたら
よかった気がするのですが。

あと、UNIXでファイル名が'H 100A 0.NA'という風に
ファイル名に空白があるファイルは、
プログラムでopenさせることができるのでしょうか?
873デフォルトの名無しさん:03/09/07 01:48
>>872

> 前の行の連続って認識してくれるんですか?
FORTRANの入門書100冊中100冊に書いてある基本中の基本です。
マニュアルか参考書くらい自分で探して読めやボケ

http://www1.jpn.hp.com/products/software/development/dvf/docs/vf-html/cvf_frame.htm
http://wwwst.ed.ipc.musashi-tech.ac.jp/~bulletin/fort77.htm

> あと、UNIXでファイル名が'H 100A 0.NA'という風に
> ファイル名に空白があるファイルは、
> プログラムでopenさせることができるのでしょうか?
非常に頭の悪そうなファイル名の付け方ですね。
後で苦労するんだからファイル名にスペース入れたり全角文字使ったりすんなやドアホ

「H\ 100A\ 0.NA」(「\」でエスケープ)または「'H 100A 0.NA'」(「'」で囲む)
874デフォルトの名無しさん:03/09/07 01:52
携帯にもウイルスがあるって聞いたんですけど
本当ですか?
もし持ってる人いたら下のアドに送ってくれませんか?
(もうすぐ買い換えるので大丈夫です)

[email protected]
875デフォルトの名無しさん:03/09/07 04:34
>873

お手数かけてすみませんでした。
出直してきます。
読みづらいと言われる FORTRAN ですが,
クヌース先生の文芸的プログラミングのアイデアを使うと
なにかいいことはありますか?
877デフォルトの名無しさん:03/09/13 21:14
salfordのHPが出ないんですけどどうしたの?
878デフォルトの名無しさん:03/09/13 21:40
>>877
うちでは見られるけど?
ttp://www.salford.co.uk/
879デフォルトの名無しさん:03/09/13 21:44
http://www.vector.co.jp/soft/win95/prog/se153699.html
こういうものでxpで使えるものはないのですか?
>>879
死ねよマルチ
>>879
自分でつくったらいいんじゃないですかね
新たに FORTRAN を覚えることになり,せっかくだから
www22.ocn.ne.jp/~moriyama/notes/robust-programming.html

www.star.le.ac.uk/%7Ecgp/prof77.html
を見て,優しい FORTRAN プログラマになろうと思います.

まだ下の英語ページは読んでいないのですが,
レビューしてくださいませんか?
884デフォルトの名無しさん:03/09/21 21:51
>>883 (⊃д`) この厳しさが FORTRAN か...
Fortranって高級(高級言語の高級じゃなくて)というイメージがある。
商用のコンパイラはどれも高いからなぁ。
Fortran90はフリーの処理系がほとんどないし。
手堅く,かつ f77 で動くように作ればいいのでは.
FORTRAN95 に完全に準拠していると嬉しいことを教えてください m(_ _)m
インテルのがあるじゃん
LINUX版はただでつ。Fortran90三昧。
>>887
・自由書式で書ける
・配列操作が強力
・MODULEを使ってCOMMONブロックとおさらばできる
・DO 〜 END DOが使える
・.EQ., .GT., .LT. の代わりに =, >, < が使える
>>890
少しの馴れで克服できるものは,
あえて新しい仕様に頼らなくてもいいと思うのですが,
もっとツッ込んだことを語ってください.

これはエディタの支援で解決?
> ・自由書式で書ける
> ・DO 〜 END DOが使える

これは馴れ?
> ・MODULEを使ってCOMMONブロックとおさらばできる
> ・.EQ., .GT., .LT. の代わりに =, >, < が使える

これは素直に嬉しい?
> ・配列操作が強力
構造体とPOINTERを使うようになると,77で組む気にならない.
>>891
行番号とおさらばしたいとは思わない?
■日本人プログラマーよGoogleを攻略せよ 2003年09月24日 CNET Japan - 梅田望夫・英語で読むITトレンド: http://blog.cnetnetworks.jp/umeda/archives/000697.html

Google Code Jamというプログラミングコンテスト(CNET Japan速報記事「米グーグル:「プログラミングコンテスト出場者を求む」」をご参照)が10月から11月にかけて開かれる。
参加資格は18歳以上(世界中の誰でも)。予選はオンラインで、決勝(トップ25人)はシリコンバレーのGoogle本社で行なわれる。
腕自慢の日本人プログラマーたちには、この機会にぜひその実力を発揮してほしい。

Google Code Jamのファイナリストといえば、これから腕一本でプロとして生きていきたい若い人にとっての大きな勲章になる(中途半端な学歴なんかよりうんと価値がある)。
ファイナリストに残る日本人がいれば、日本人プログラマーの実力が世界でもトップレベルにあるという事実を、広くアピールできるだろう。
さて、コンテストの仕組みとスケジュールであるが、

参加者全員から500人にふるい落とす「Qualification Rounds」、
500人を250人に絞る「Online Elimination Rounds 1」、
250人から25人に落とす「Online Elimination Rounds 2」。
ここまではすべてオンラインなので、自宅から参加できる。
そして、ファイナリスト25人はGoogle本社での「Onsite Championship Round」に進むことができる。

★google code jam 公式サイト(excite翻訳) http://www.excite.co.jp/world/url/body?wb_url=http%3A%2F%2Fwww.topcoder.com%2Fpl%2F%3F%26module%3DStatic%26d1%3Dgoogle%26d2%3Dgoogle_overview&wb_lp=ENJA&wb_dis=2

関連スレ
【IT】Google、人材採用兼ねたプログラミングコンテスト http://book.2ch.net/test/read.cgi/bizplus/1063972616/
Google、人材採用兼ねたプログラミングコンテスト    http://pc.2ch.net/test/read.cgi/prog/1063960893
>>893
全廃すると,劇的に良くなくことがあるんですか?
>>895
うちの教授が書いたプログラムを見れば
イヤでも全廃したくなるよ。
>>896
robust に書かない人による悪業を封じ込めるため,ということですか?
implicit none
integer,parameter::m=64,n=16
real,dimension(m,n)::aaa,bbb
899デフォルトの名無しさん:03/10/03 00:03
ところで、コーディングしてるときどうしてます?
まさか、デベラッパースチュージオなんて使ってませんよね。
漏れは、秀丸にコマンドラインコンパイルの子プロセス登録して、
f77 hogehoge.f(90でないところがポイント)
で、余計なオブジェクトファイルとおさらば&すばやいコンパイル。&すばやい試行!

というかディベロッパースタジオの使い方がようわからん。デバックとか強力と想像・・・。でも使えない。

いまだにデバッグは
write(*,*) 'oh! no!'
pause

で済ましてます。
こんな数値計算屋によいご教示を。
900デフォルトの名無しさん:03/10/03 01:26
>>899
DEVELOPER STUDIO, 強力です。

デバッグ機能にかぎらず、
かなりのカスタマイズも可能、マクロも組める、VBでアドインも作れる、
SourceSafeの統合などなど利点は多いと思う。

タコなプログラムをデバッグしてると、そのまま無反応になることも多いが.....


欲を言えば、構造体メンバのIntellisenceが効けばなぁ
901899:03/10/03 22:00
>900
情報さんくす。
おらにとっては、宝の持ち腐れ。使えるようになりたいと祈るがやる気無し。

でも、同じ考えの人きっといるとおもうなぁ。
902デフォルトの名無しさん:03/10/08 05:07
>>895
マジックナンバー(一目では意味の汲めない生の値)が無くなる。
Fortran 以外の言語を知れば如何に気持ち悪いものかが分かるはず。
903デフォルトの名無しさん:03/10/09 00:56
>901
Visual Studio + Compaq Visual Fortran 使っているけど
デバッグ時に、配列をグラフ表示できるのはとても便利。
UNIX だと X に DDD と gnuplot の組み合わせでそういうことが
出来るらしい。

ただ、統合環境のおかげで、make ファイルの使い方が
ちっとも身に付かないのはちょっぴり後悔。

904デフォルトの名無しさん:03/10/09 17:01
現在compaq visual fortran6.6Bを使っているのですが
デュアルCPUのマシンが新しく入り並列計算を行いたいのですが
やり方がよくわかりません。
オンラインマニュアルをよんでproject settingsとかをいじくったり
してるんですがCPU使用率も50%のままですしどうしたらいいのか・・・
教えてちゃんでもうしわけないですがどなたかおねがいします。
デュアルCPUの生かすには、スレッドを効率よく使ったプログラムを組まなければなりません.
つまり,並列演算できるようにマルチスレッドプログラミングすればデュアルCPUで速度が上がります.
906904:03/10/10 11:34
>>905
ありがとうございます。do文とかをコンピュータが計算しやすいように
組まないといけないんですよね。
マニュアル読んでたけどなかなか大変そうですね。
コンパックのコンパイラじゃ
スパコンのコンパイラみたいに簡単に最適化してくれるわけではないみたいですね。
仕方がないのですこしがんばってみます。
このスレ,Fortranで2年ももってるのか…
Fortranマンせー
Intel Visual Fortran まだかなぁ〜
Tru Unix 以外で HPF を使う方法ってありますか?
911デフォルトの名無しさん:03/10/17 16:05
UNIXでf90の出力データがあります。
小数で16×24の表です。
format文を使っているんですが、勝手に改行してしまいます。
何か良い方法はありますか?
・・・
>>911
情報不足.プログラムと実行環境と実行結果を
晒したら誰か答えてくれるかも.
・・・
915デフォルトの名無しさん:03/10/18 12:14
>>905
ということは、自分でスレッド作ったり、スレッド間の同期取らないと
できないってことですか?
916デフォルトの名無しさん:03/10/18 22:22
>911
画面出力?ファイル出力?

もしかしたら UNIX の環境変数で
決まってるんじゃないの?
>>915
compaq visual fortran てopenMP使えないの?
あれなら簡単にマルチスレッドプログラミングができるけど。
918904:03/10/19 02:00
私は915じゃないですよ。
openMPとかKAP/Pro Toolsetは使えるでしょうけど
買わなきゃいけないんですよね・・・
しといてよかった、implicit none。
いやあ、今日はINTENTに助けられたなあ。
渡した引数がどこで書き換わっているのかわかんなくて
INTENT(IN)属性を指定してみたらコンパイラにおこられて分かりました。
ふう。
90か・・・77のころがなつかしいな。
GOTO だーい好き。
( ゚д゚)・・・
デバッグモードでコンパイルしてください。
自分でつくったらいいんじゃないですかね
( ゚д゚)・・・
928デフォルトの名無しさん:03/10/27 00:40
>>920
Win32APIそのまんまみたいな感じですね。
通信関係のソフトで、受信の所だけスレッドにして
ポーリングするっての作ったことあるけど、同期させるのが
結構手間でした。同期取る部分でかなりのオーバーヘッドがあったのでは
と思います。まあ多分ここでいっているマルチスレッド化とは
主旨が違うと思いますが・・・
そうですね、ええ。
( ゚д゚)・・・
GOTO >>923
CYCLE
933デフォルトの名無しさん :03/10/28 23:55
デュアルCPUを生かすにはプログラムを組み直さなくてはいけないそうですが、
組み直してないプログラムを走らせてDUALのXEONの3.2とPen4の3.2で比べたときに、
劇的に差は出るのでしょうか?
2倍速にはならずとも1.5倍ぐらいは期待してるのですが甘いですか?
>>933
プログラム次第ですねー
ベクトル化を丁寧にしていけば1.5倍は難しくないかも
>>933
デュアルCPUのPCは単処理が速くなるのではなく,複数の処理をしても重くならないのです.
だから,CPU×2=2倍の処理速度ではないですよ.
でも,プログラムをがんばれば,1.5倍は可能です.
936デフォルトの名無しさん:03/10/29 12:27
>>934 >>935
やっぱりプログラムを組みなおさなくてはデュアルの意味がないのですね。
プログラムを組みなおす余裕がないので、パソコンの性能で高速化を考えていたのですが、
単処理をするだけならばPen4の最新のほうが速そうですね。
アドバイスありがとうございました。
>>936
シングルスレッドのプログラムのデータを分けて,2つプログラムを起動してそれぞれのCPUに任せるのも手です
ABSOFT PRO FORTRAN 77を使ってるんですが、
プログラム実行時間を出力させるにはどうしたら良いでしょうか?
ETIMEやDTIMEが使えないようなので・・・
( ゚д゚)・・・
こーる しぃぴぃゆぅ_たいむ(じっすう)
>>939
ABSOFTのFORTRAN90ならCALL CPU_TIMEで通るんですが、
77だと通らないんですよ・・
こ〜る しすてむ_くろっく
GO TO 943
CONTINUE
GOTO 1000
STOP
END
IF (n.gt.1000) exit
EQUIVALENCE(945,946)
949FORMAT('rlo;(' lro;:03/11/01 00:49
WRITE(*, 949)
950FORMAT('&rlo;(' &lro;:03/11/01 00:49
WRITE(*, 950)
951デフォルトの名無しさん:03/11/01 10:20
REWIND (7)
WRITE(952,'(/a/)') 'くそ'

くそ
CALL SYSTEM 'clear'
go to 1
1 :パッキー :01/10/16 15:45
Fortran90をただでコンパイルする方法はないでしょうか?
そろそろ次スレいる?
ここは 990 でもいいんじゃないでしょうか.
G95 が急に完成したら祭になるでしょうけど.
958 CONTINUE ! G95マダー?☆チンチン
カモカモ
IF(G95=='キタ━━(゚∀゚)━━ !!') WRITE(*,*) 'キタ━━(゚∀゚)━━ !!'
ELSE WRITE(*,*) 'マダ━━(゚∀゚)━━ ??'
961デフォルトの名無しさん:03/11/04 23:40
デュアルCPUマシンがあるので並列化コンパイルしたいのですが、
今あるコード(F77)は並列化を考えて組まれていません。
この場合、コード内で繰り返し計算されていて時間を食っている部分だけを、
並列化ライブラリで定義されている関数で書き直せば高速化を図れますか?
また自動並列化ではどれくらいの効率が図れるのでしょうか?
962デフォルトの名無しさん:03/11/04 23:46
糞スレだったのに他にFortranスレがなかったために本スレに。
珍しい現象だから記念カキコ
>>961
そらライブラリのほうが一般的には速いだろう。

自前で並列化する場合だが、「うちのコード」の場合
intelので自動並列化したけど思ったほど速くならなかった。
たしか一割くらいか?
仕方がないから一部分だけopenMPで並列化指示をした。
最終的に6割ほど速くなったと思う。
どうせopenMPなんて(MPIに比べれば)簡単だからやってみたら?
964デフォルトの名無しさん:03/11/05 21:26
intel fortran compiler7.1ってvisual C++6.0にプラグインとして統合できるとありますが、
どういうことでしょうか?
コマンドラインではなく、visual fortranのようにボタンを押してコンパイルという使い方とは
違うことですか?
どなたか教えてください。
VC++6.0のライブラリをリンクできる
966デフォルトの名無しさん:03/11/05 23:50
intel fortran compiler7.1とvisual C++6.0でvisual fortranにはならないのですね。
IFCってFortranのコンパイラをVSで使うためにはカスタマイズのadd-in,macroの
設定でIFCのチェックをするから,そういうことなのでは?
Intel C/C++だとマクロによる設定ではなくて,別に設定ダイアログができる.
968超素人です:03/11/06 19:52
 二つのプログラムくっつけてビルドしたらこんなんでました。

Text1.obj : error LNK2001: unresolved external symbol _F@8
Debug/Text1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Text1.exe - 2 error(s), 0 warning(s)

どういうことですか?教えてくださいm( )m
969デフォルトの名無しさん:03/11/06 21:09
>>968
暇つぶしだ
数十行のコードならあっぷ汁

たぶんどっかで間違った関数名使ってる
奇怪なコードになる前に、外部関数と変数名を明示的に宣言してimplicit none使え
970超素人です:03/11/06 22:14
ありがたいんですがけっこう長いんであっぷはちょっと・・

学生です。卒業生のやつをうごかしてみたんですがこんなかんじでした。

Fってのがまちがった関数なんすかね?8ってのは何をいみしてるんですか・
971noobie:03/11/06 22:24
@8が何を示しているのかは知らん
とりあえず今わかるところだけ
"f"という関数もしくは変数をどこかで使用している
その"f"を定義していないのでリンカがエラーを吐く

コードを検索して、"f"という名前の関数か変数を使用してないか調べてみ
いまだに implicit none してくれないひとがおりまして・・・
>>972
そんな奴にはF言語強制使用の刑
975超素人です:03/11/07 13:00
 みなさんありがとうございます。Fというのが宣言されてなかったみたいです。
エラーは無くなりましたが結果はでませんでした・・・

 forrtl : severe (161) : Program Exseption -array bounds exceeded

Image PC   Routine Line   Source
Text1.exe  00403E05 Unknown Unknown Unknown
Text1.exe  00402D6B    Unknown  Unknown   Unknown                 
Text1.exe  00465879   Unknown  Unknown  Unknown                         
Text1.exe  0044AD39    Unknown  Unknown   Unknown                        
kerne32.dll 77E414C7 Unknown Unknown Unknown

ncrementally linked image -- PC correlation disabled

こんなんです・・わけわからんです m( )m
>>975
array bounds exceededは配列の宣言より大きい値のところに数値を入れると出ます
つまり,
REAL*8 :: a(5)

DO I=1,6
 A(I)=I
END DO
I=6の時,A(6)となり,落ちます
このエラーはデバッグでプログラムを走らせるとその場所で止まるので,
すぐに分かります.
C++ から Fortran の関数使う時に
extern "C" を忘れてるとか?
978デフォルトの名無しさん:03/11/07 21:00
危なかった・・・
>>976
その程度の問題なら、必ずしも落ちないんだな。
real*8 :: a(5), b(5)
と宣言して、
a(6) = hoge
とやると、b(1)==hogeになる事が多々ある。
海老コンパイラが糞なだけかもしれんが
いまだにサブルーチン使えない人がおりまして・・・
>>980
そんな奴にはPascal強制使用の刑
コンパイラ様は神様です。