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


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

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



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

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


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

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


809 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 20:16:55 ]
>>806
>何かを入力するみたいなんですが
つ READ文
使い方は(ry

>どのように入力すればいいのでしょうか?
アキラ122508030160

>コマンドプロンプト上では日本語入力できなくて
[Alt] + [半角/全角 漢字]

あと >>802 のプログラムは「変数の型」と「FORMAT文」について要復習だ。


810 名前:デフォルトの名無しさん [2007/09/14(金) 23:52:05 ]
>>809
ありがとうございます。

もっとしっかり勉強します!

811 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 23:10:26 ]
www12.plala.or.jp/ksp/formula/mathFormula/html/node8.html

これらの式の右辺部を計算しようとした時に

式の通りに考えて

wa=(1/2)*(n*(n+1))
wa=(1/6)*(n*(n+1)*(2n+1))

のようにしたらうまく計算出来ずにnに何を入れても0が出てしまいます。


wa=(n*(n+1))/2
wa=(n*(n+1)*(2n+1))/6

みたいにしたら出来たのですが。。。
上と下の違いがよくわかりません。括弧などの付け方は間違ってないと思うのですが・・・

変数は
integer n
double precision wa
で設定しました。

812 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 23:40:42 ]
>>811
質問する時は一部だけ示すのではなく、コンパイル出来るソースを
最初から最後まで示すべき。

括弧の中の演算は先に実行されるから、先に(1/2)が計算される。
整数型同士の除算1/2は0となり、0と何が掛けられても0になる。
(1/2)でなく、(1./2.)と書いたら計算結果が変わるでしょ?


813 名前:811 mailto:sage [2007/09/15(土) 23:58:14 ]
質問の仕方が悪かったようで、申し訳ありませんでした。
今後はそのように質問させて頂きます。

問題は無事解決いたしました。どうも有り難うございました。

814 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 23:00:33 ]
素因数分解をするプログラムを組みました。
出力を99=1*3*3*11
みたいに1行に書きたいのですが
99=1
*3
*3
*11
のように複数行にわたってしまいます。これを改行せずに書きたいのですがどのようにしたらいいのでしょう。
文字列であれば
write(*,'(a\)')'hoge'
のように出来るのですが文字列と整数がごっちゃになった場合だとどうしてもうまくいかなくて・・・
アドバイスお願いします。
また、もしwrite文以外でもおかしな所があれば教えてください。

ソース(f90)は次の書き込みで書きます。

815 名前:814 mailto:sage [2007/09/16(日) 23:01:56 ]
  implicit none
  integer n,i,m,k

  write(*,'(a\)')'input n:'
  read(*,*)n

  write(*,*)n,'=1'
  k=n
  i=2
  do while (i<=k)
    m=mod(k,i)
    if(m==0)then
      write(*,*)'*',i
      k=k/i
      cycle
    else if(k==i)then
      exit
    else
      i=i+1
      cycle
    endif
  enddo
end

816 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 23:21:51 ]
write(*,'(A,I4,\)') '*', i

817 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 00:45:50 ]
>>814
program unko
implicit none
integer n,i,m,k
write(*,'(a)', ADVANCE='NO')'input n:'
read(*,*)n
write(*,'(i4, a)', ADVANCE='NO')n,'= 1'
k=n
i=2
do while (i<=k)
m=mod(k,i)
if(m==0)then
write(*, '(a, i3)', ADVANCE='NO') ' *', i
k=k/i
cycle
else if(k==i)then
exit
else
i=i+1
cycle
endif
enddo
WRITE(*, *)
end program unko

FORTRAN90の標準内でやろうとすると、ADVANCE='NO'を使うことになると思う。




818 名前:814 mailto:sage [2007/09/17(月) 03:24:10 ]
>>816
>>817
レス有り難うございます!
解決しました!なるほどそのように書けばよいのですか。

同じ改行しないようにするのでも
標準仕様とか拡張?仕様などによって変わるのですね。

819 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 00:18:17 ]
Visual Studio 2005 + Intel Fortran v10 で、ソース行のトレースバックってどうやって表示させるの?
CVFの時代は、簡単に出来たんだけど。
ソース行が分からないと、実行時エラーが出ても対処がめんどい。


820 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 12:46:28 ]
>>819
Version 9系ならソース行付きトレースバックでる。10と共存できるのでとりあえずそれで見たら?


821 名前:デフォルトの名無しさん [2007/09/20(木) 14:13:16 ]
横に並んでいるデータをエクセルで1つのセルに表示させたいので、列ごとにファイルを出そうと思っているのですが
上手く読み込んでくれません。
わかるかたいたら教えていただきたいと思います。


program example
implicit real*8(a-h,o-z)
dimension x1(1000000),x2(1000000),x3(1000000),t(1000000)
open(200,file='iwayaguchi1023k.dat')
open(100,file='x1.dat')
open(110,file='x2.dat')
open(120,file='x3.dat')
m=16.d0
n=2.0**m
read(200,*)
read(200,*)
read(200,*)
read(200,600) (t(i),x1(i),x2(i),x3(i),i=1,n)
600 format(4f10.3)
do 10 k=1,n
read(300,*) x1(k)
read(300,*) x2(k)
read(300,*) x3(k)
write(100,*) x1(k)
write(110,*) x2(k)
write(120,*) x3(k)
10 continue
pause
stop
end


822 名前:デフォルトの名無しさん [2007/09/20(木) 14:14:33 ]
ちなみにもとのデータは以下のようになっています


2004/10/23 17:56:00 37.2900 138.8000 13.0 6.8
NIG001 38.2584 138.4337 2004/10/23 17:56:21
172960.010 N-S E-W U-D
0.000 -0.023 -0.025 -0.001
0.010 -0.006 0.003 0.009
0.020 0.001 -0.023 0.016
0.030 -0.020 -0.044 0.002
0.040 -0.012 -0.021 -0.001
0.050 -0.005 0.002 0.006
0.060 0.021 -0.004 -0.006
0.070 0.012 -0.004 0.004
0.080 -0.022 -0.020 -0.007
0.090 -0.038 0.018 -0.031
(このようなのがずっと続く)
お願い致します。

823 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 20:36:59 ]
>>821
program hoge
implicit none
character*8 dmy
real*8 t, x1, x2, x3
integer i

open(200, file='iwayaguchi1023k.dat', status='OLD')
open(110, file='x1.txt', status='REPLACE')
open(120, file='x2.txt', status='REPLACE')
open(130, file='x3.txt', status='REPLACE')
do 10 i = 1, 3
read(200, *) dmy
10 continue
20 continue
read(200, fmt=*, end=99) t, x1, x2, x3
write(110, *) x1
write(120, *) x2
write(130, *) x3
goto 20
99 continue
close(200)
close(110)
close(120)
close(130)
stop
end

>横に並んでいるデータをエクセルで1つのセルに表示させたいので、
データファイルを開くときにテキストファイルウィザードで
「元のデータ形式」に「スペースによって右または…」を選択して[次へ]
フィールド区切りの矢印をダブルクリックですべて消して[完了]

824 名前:デフォルトの名無しさん [2007/09/21(金) 12:41:54 ]
>>823
ありがとうございます。
おかげさまで問題解決いたしました。

825 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 13:03:30 ]
解決した、しなかっただけでなく、「どのようにして」のところを書いてほしい。

826 名前:デフォルトの名無しさん [2007/09/24(月) 15:01:57 ]
多重積分で2次元から3次元に拡張しただけなのにunpaired right bracketsが
あることと、truncated lineがあるとエラーが出ました。こうしたエラーの
原因はなんでしょうか?

827 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 16:36:38 ]
>>826
超能力者になれるかな。
1行72文字オーバー



828 名前:デフォルトの名無しさん [2007/09/25(火) 13:34:14 ]
825>
言われたとおりやったら解決いたしました

829 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:52:57 ]
質問させてください.
あるFortranの計算コード群をソースからビルドしライブラリを作成した後,
Cのコードから呼び出そうと考えています.
ここで
 (1) Fortranコンパイラでビルド
 (2) f2cされたコードをCコンパイラでビルド
の2つには有意な性能の差が生じるのでしょうか.
定説があれば教えて頂けると幸いです.


830 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 03:29:22 ]
定説はないので計ってみるしかない
自分の僅かな経験では
(1)Intel Fortran Compilerと(2) f2c + gccについて
自分の書いたソースで比べたところ(1)の方が速かった

831 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 16:42:57 ]
すいません。
計算終了時に何かしら音が出るようにしたいのですが、
何かBEEP音のようなものを出す命令はないのでしょうか。

832 名前:829 mailto:sage [2007/09/28(金) 02:06:46 ]
>>830
経験談ありがとうございます
時間のとれるときにじっくり計測してみたいと思います

833 名前:デフォルトの名無しさん [2007/09/30(日) 01:30:11 ]
メモ帳でプログラムを組んでるんですが、インデントの感じが気に入りません。
Emacsみたいなフリーで手に入ってWindows XPで動くようなエディタはありませんか?

834 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 01:45:58 ]
>>833
気に入らないも何もメモ帳はインデントしてくれないだろ?
Emacsみたいなのが欲しいのなら、windowsで動くemacsクローンはMeadowとかいろいろある。

835 名前:833 [2007/09/30(日) 09:48:23 ]
notepadのインデントはtabをおしたら何行も進むという意味です。

meadowとxyzzyならどっちがいいでしょうか?

836 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:49:56 ]
>>835
手動インデントのことだったのか。てっきり自動インデントのことかと思った。
でも、タブで何行も進む?本当にそれはメモ帳?
835の「いい」の基準が分からないから実際にmeadowとxyzzyの両方を使ってみて気に入った方にすればいい。
慣れとかの点でemacs系を選択しようとしているんだと思うが、
emacsに拘らないのならメモ帳でソース書くよりは全然マシなフリーなエディタはwindowsにいくらでもあるぞ。
FORTRANに特化したものは無くてもFORTRANモード的なものを持ったものは何もemacsだけではない。

837 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:37:01 ]
メモ帳はTABキーを押しても「タブ文字」が挿入されるだけ。



838 名前:833 [2007/09/30(日) 21:19:56 ]
とりあえず、サクラエディタを入れてみました。
質問に答えていただいてありがとうございました。

839 名前:デフォルトの名無しさん [2007/10/02(火) 13:29:19 ]
www.coastal-env.k.u-tokyo.ac.jp/koibuchi/fortran95/fortran77.htm

Fortranを始めようと思ってこのページにある方法でやろうとしているのですが
うまくいきません。

WRITE(*,*) 'TEST'
END
と入力してコンパイルしようとしても
「コンパイルに失敗しました
ファイルC:\.....\fotran.exeは存在しません」
と言われて実行することが出来ません。
これはどうすれば良いのでしょうか?
いますぐFortranを練習する必要があり、困っています。
どなたかお願い致します。


840 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 14:00:49 ]
>>839
fortran.exeがどこにあるか検索してみては?
そんなに急ぐなら、周りの友達に飯でも奢って助けてもらったら?


841 名前:デフォルトの名無しさん [2007/10/02(火) 14:12:49 ]
>>840
fortran.exeの場所はちゃんと指定しています。
コンパイルして作成されるはずの実行ファイルがないと
言われているのですが。
それと
周りにfortranを扱える人はいません。



842 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 14:37:30 ]
コンパイルして作成されるはずの実行ファイルがC:\.....\fotran.exeなの?
それはコンパイラ自身じゃないの?
FORTRAN処理系が何で、どういうインストールの仕方をして、
どこに何というソースファイルを作って、どういうふうにコンパイルをしたか、
詳しく書かないと原因がよくわからない。
単にWindowsのコマンドプロンプトの使い方が分かってないだけの問題ということはない?

843 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 14:44:14 ]
WRITE(*,*) 'TEST'とENDの前に6つのスペース入れていないに1票

844 名前:デフォルトの名無しさん [2007/10/02(火) 15:01:19 ]
>>843
ありがとうございます。
スペースを入れるとうまくいきました。

でも
ace.phys.h.kyoto-u.ac.jp/~tomita/education/fortran90/examples/ex1_1.f90

このページにあるプログラムをそのままコピペして使おうとしても
なぜか同じエラーが出てしまうのですが
これはなぜなのでしょうか?
スペースはちゃんと入っているはずなのですが


845 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 15:10:19 ]
なんでそれで
「コンパイルに失敗しました
ファイルC:\.....\fotran.exeは存在しません」
なんてエラーメッセージがでるんだよw

846 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 15:30:46 ]
>>844
Fortran77のコンパイラでFortran90のコードをコンパイルするのは無理だと思いますよ。
FTN95でもインストールして見てはいかがですか?

>>845
おまい、頭悪いな。>>839がコードのファイル名をfotran.for'として
保存したからに決まってるだろw


847 名前:デフォルトの名無しさん [2007/10/02(火) 15:47:00 ]
Fortran90とFTN95って
どちらの方が新しいのでしょうか?




848 名前:844 [2007/10/02(火) 16:01:30 ]
そんなに特殊な記述を使わない限り90の記述でも
77で使えると聞いたのですが違うのでしょうか?
一体どこの部分を治せばコンパイル可能になりますか?

!----- Ex1_1: 3種類の平均値 -----
PROGRAM Example_1_1
REAL :: a, b, av1, av2, av3
READ *, a, b
av1 = (a + b)/2.0
av2 = (a*b)**0.5
av3 = 2.0/(1.0/a + 1.0/b)
PRINT*, av1, av2, av3
END



849 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:19:57 ]
>>848
REALから始まる行を削除すればいい。

850 名前:デフォルトの名無しさん [2007/10/02(火) 16:24:48 ]
>>849
やってみました。
でもうまくいかないようなんですが・・・


851 名前:デフォルトの名無しさん [2007/10/02(火) 16:45:54 ]
www.silverfrost.com/11/ftn95/ftn95_fortran_95_for_windows.asp
を使ってみましたが
それでもうまくいきません。
なんなんでしょうか?これは?


852 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:51:26 ]
>>846
「コンパイルに失敗しました」はコンパイラの吐くエラーだし
作られたはずの実行ファイルが無いというメッセージはコンパイラが吐くとは思えないんだが

853 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 17:52:13 ]
>>851
普通にそのコンパイラで>>844のコードも>>848のコードも動きました。
付属のPlato3起動して左上のマウスを乗せるとNewを表示される白いアイコンをクリック
出てきたウィンドウでFree format Fortran source fileが選択されてる事を確認してOKを押す
>>844をコピペしたら、左上のマウスを乗せるとStartと表示される青い三角アイコンをクリック
適当なファイル名で保存(拡張子は弄らない) 保存後にウィンドウが出るが気にせずOKをクリック
で動かなければ後は白根山

>>852
実行ファイルが無いというメッセージはCpadが吐いてる。

854 名前:デフォルトの名無しさん [2007/10/02(火) 19:24:31 ]
>>853
丁寧な解説ありがとうございます。

しかし


それと同じことはすでに行っているのですが
sakuratan.ddo.jp/imgboard/img-box/img20071002191043.jpg
のようなコマンドプロンプト画面が出てくるだけでプログラムが始まりません。
OSはXPsp2なのですが、それと何か関係があるのでしょうか?


855 名前:854 [2007/10/02(火) 19:31:26 ]
すいません、解決しました。
数値を入力すれば良かったんですね。
ありがとうございます。


でも
>>848-849
のように>>839のコンパイラでうまくいかないのはなぜなのでしょうか?
実際に使用するのはFortran77なので
77に準拠したコンパイラを使いたいのですが。


856 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 21:53:39 ]
>>855
何をやったのか
どんな結果になってうまくいかなかったのか
エラーメッセージが出たらその内容

くらい書かないと「しらねーよ」としか答えられない。

857 名前:デフォルトの名無しさん [2007/10/02(火) 22:06:47 ]
>何をやったのか
>どんな結果になってうまくいかなかったのか
>エラーメッセージが出たらその内容

全部>>839に書いてあるのですが・・・




858 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 23:04:32 ]
>>857
「コンパイルに失敗しました」と表示されたときに
CPadの下の方のメッセージウィンドウに何か表示されてない?


859 名前:デフォルトの名無しさん [2007/10/03(水) 11:42:56 ]
>>858
■C:\Documents and Settings\....\Fortran> ftn77 /link ttt.for
[Salford FTN77/Win32 v4.03, Copyright (c) Salford Software Ltd. 1988-1998]
Licensed to: FTN77 Personal Edition
Department: Non-commercial use only
0001) !----- Ex1_1: 3種類の平均値 -----
0002) PROGRAM Example_1_1
*** Unexpected continuation line (have you got more than 19?)
0007) PRINT*, av1, av2, av3
0008) END
*** Non-blank label field in continuation line
0008) END
0009)
*** Unexpected end of file (END statement assumed)
3 ERRORS [<MAIN@>FTN77 Ver 4.03]

*** Compilation failed

^C

というエラーが出ています。
どうすればいいんでしょうか?

860 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 11:51:10 ]
>>859
1から6カラムまで開けろや!

861 名前:デフォルトの名無しさん [2007/10/03(水) 12:34:36 ]
>>860

すいません、どういう意味ですか?
開けるというのは何を開けるのですか?


862 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 18:12:30 ]
言っちゃ何だが、FORTRANの文法をよく勉強したほうが
いいんじゃないか?

自分のしたいことをコード化できないようじゃ理論ギャップ
があるのかバグがあるのか判断できないじゃまいか。

863 名前:デフォルトの名無しさん [2007/10/03(水) 18:14:39 ]
勉強はするつもりです。
だからとりあえずコンパイラがちゃんと動くしたいのです。


864 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 18:42:19 ]
じゃあ、エラーメッセージ読んで考えろよw

865 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 03:45:16 ]
>>861
>>843

どんな入門書でも最初の数ページ以内に書いてあるような基本的なことだぞ。
ちゃんとしたプログラムが書けなきゃコンパイラがちゃんと動くかどうかも確認できないぞ。

866 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 11:29:36 ]
>>865
Fortran90と混同しているから、教えるのはかなり大変だぞwwww

教育者としての真価が問われる。 神化しないと切れるだろうwwwwwwwwwww


867 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 03:23:05 ]
もやすみちゃん



868 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 01:50:10 ]
関数をサブルーチンの引数とすることはできるのでしょうか?
サブルーチンの引数として被積分関数や積分範囲等を設定できればと思っています。
どなたかわかる方がいらっしゃいましたら、ご教授いただければと思います。


869 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 09:45:37 ]
>>868
制限付きでできる。
external 指定をすればよろし。マニュアル味噌。


870 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 13:13:54 ]
>>869

868です。ご返信ありがとうございます。
EXTERNALの指定で無事うまくいきました。

途中コンパイルがなかなか通らずどうしたものかと頭を抱えましたが、
「EXTERNALの指定でうまくいく!」という道筋を示していただけたおかげで、エラーの原因を他のところに絞り込むことができました。

871 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 11:56:52 ]
転置行列を書くために

program ex2_19
implicit none
integer n, i, j
real(8) , allocatable :: c(:,:),ct(:,:)
read(*, *) n
allocate(c(n, n))
call random_seed
call random_number(c(:,:))
write(*, *) c
allocate(ct(n,n))
do i = 1, n
do j = 1, n
c(i, j) = ct(j, i)
enddo
enddo
write(*, *) ct(:, :)

end program ex2_19
というプログラムを書いたのですがどうしても出力結果が転置行列になりません。
どうしてでしょうか?誰か親切な方お願いします。

872 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 12:58:33 ]
>>871
代入文をよく見直せ。

873 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 16:23:34 ]
>>871
ct = transpose( c )
でもできる。

874 名前:871 mailto:sage [2007/10/08(月) 18:01:42 ]
>>872
c(i, j) = ct(j, i)
のところでしょうか?

875 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 19:11:47 ]
c が元の行列
ct が転置行列
だよな?

876 名前:871 mailto:sage [2007/10/08(月) 20:18:58 ]
>>875
そうです。
cは適当に乱数で決定されるようにしました。

877 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:50:50 ]
> c(i, j) = ct(j, i)
c(i, j) に ct(j, i) の内容を代入



878 名前:871 mailto:sage [2007/10/09(火) 00:23:13 ]
>>877
わかりました!
なんたる初歩的ミス…、頭の悪い質問ですみません。

ありがとうございました。

879 名前:デフォルトの名無しさん [2007/10/15(月) 17:14:30 ]
   K=0         ← こっちが前?
   DO 100 I=1,10
   K=K+I
10  CONTINUE
   WRITE (6,100) K
100 FORMAT(1H ,i5)  ← こっちが前?


880 名前:デフォルトの名無しさん [2007/10/15(月) 17:16:09 ]
プログラムの「前」ってどっちですか?

   K=0         ← こっちが前?
   DO 100 I=1,10
   K=K+I
10  CONTINUE
   WRITE (6,100) K
100 FORMAT(1H ,i5)  ← こっちが前?

881 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 17:23:19 ]
マルチすんなハゲ

882 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 18:36:36 ]
>>879
前とは先頭のほうだw


883 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:11:01 ]
 googleg
G| o o |g
 | L  |
 \_e__/ <ぐぐれかす



884 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 02:22:47 ]
誘導され
>>57
あたりを読みました
FTN95をインストールしました。
plato3(日本語不使用)でコンパイル実行可能でした

fcpadを利用しては出来ないですか?
コンパイラパス
C:\Program Files\Silverfrost\FTN95\ftn95.exe
と入力
コンパイルは通るもののexeファイルが生成されず
おそらく設定の実行付近をいじると出来るのか?と思っていますが

誰か、ご指導願います・・・。


885 名前:884 mailto:sage [2007/10/16(火) 02:40:35 ]
原因は分かりました。
が、解決方法が分からないので教えていただきたいのですが
/LINKがプログラム名の前に入っているため生成が出来ないようです。

【現在】ftn95 /LINK file.f となってしまう
【解決】ftn95 file.f /LINK としたい

解決方法分かる方よろしくお願いします。

886 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 02:44:09 ]
>>884
>>355

fcpadは自由形式のプログラム編集には使えない(向かない)けどな

887 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 00:47:42 ]
割り算の結果がうまく表示されない現象に悩まされています。
integer a,b
character c

write(*,*)'計算式間にスペースを入れて入力'

read(*,*)a,c,b

select case(c)

case('+')
write(*,*)'=',a+b

省略

case('/')
write(*,*)'=',a/b

endselect
stop
end



888 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:33:51 ]
>>887
a,bをINTEGERで宣言しているので、その割り算は切り捨てになる。


889 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 12:04:30 ]
結果自体が表示されないんですが…。
realで宣言しても同じです

割り算以外の演算は問題なしです

890 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 17:37:05 ]
>>889
どのようにおかしいか、出力例も交えて、もっと情報を提供しなさい。
>>887の内容では誰も答えられない。

891 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 17:51:28 ]
>>887
やってみた。

例えば、 4 / 2
と入力しても、case('/')に入らない。
もし
case default
を用意したら、そこに入る。

代わりに
4 "/" 2
あるいは
4 '/' 2
と入力したら
= 2
を返した。


892 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:00:27 ]
ゲイツにきけwwwwwww

893 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 20:08:28 ]
並び順番 READ 文の規則
ttp://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/lr/lr10_03_01_02.htm
>実行中に斜線 (/) が現れると,READ 文は終了し,残りの入力並び項目は変更されないままになります。

894 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 20:46:18 ]
誰か、Fortranで(いろんな意味で)生産性の高いコードを書くコツみたいの、挙げてくれ
Fortranユーザって他の言語に比べてそういうのあんまり意識しなさそうだけど

895 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 21:59:39 ]
>>894
つ www.mri-jma.go.jp/Project/mrinpd/coderule.html

896 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 22:43:34 ]
速度を犠牲にせずに生産性を上げるってのはなかなか難しいね

897 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 23:12:52 ]
>>891
>>893
ありがとうございました。
FORTRAN学びはじめなので細かいところが分からず



898 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:31:50 ]
FortranのIDEみたいな開発環境あるんでしょうか?

899 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 19:35:15 ]
>>898
色々あることはある。
どういうのが望みだ?



900 名前:898 mailto:sage [2007/10/22(月) 22:47:23 ]
あるんですね。やっぱりFortranコードといえど規模が大きくなるとそういうのは必要ですよね。
Visual Studioみたいなデファクトスタンダートのようなものはあるんでしょうか?

>どういうのが望みだ?
今のとこviでカリカリやってるんですが、とりあえず制御文などのチェック機能(自動ハイライトとか)や行番号の管理とかあると助かります。
(でもこの程度だとIDEなんて大げさなものでなくとも、気の利いたエディタならできるのかも・・・)

規模が大きくなるとサブルーチンの管理とか大変ですよね
皆さんどうやってるんでしょうか?

901 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:10:55 ]
>>900
Intel Visual Fortran は visual studio に対応している。
昔はVisualStudioを別売りで買う必要があったが、今は制限版がIntelVisualFortranに付属している。

LaheyのFortranやSilverFrostのFTN95、PGIのVisuialFortranもVisualStudioに対応している。
ttp://www.lahey.com/
ttp://www.silverfrost.com/
ttp://www.pgroup.com/
他の商用コンパイラメーカーも大抵自作の統合環境をつけている。

EmacsもFortranModeがあってシンタックス・カラーリングとかしてくれる。
EclispのFortran環境にはphotranというのがある。
www.eclipse.org/photran/

他にもフリーの環境はある。
昔ロシア人が貧乏人向けにg77とフリー統合環境と廃版英語Textbookを束ねて配っていたのだが、
最近はもう時代遅れか・・・

902 名前:898 mailto:sage [2007/10/23(火) 02:45:05 ]
>>901
ありがとうございます。
Visual Studioに対応してるとは知りませんでした。ちょっとやってみます。

そういえばこれ、当然ながらWindowsでの開発だと思いますが、
Visual C++みたいな独自拡張とかはあるんでしょうか?
せっかく作ったのにLinuxで動かないとなったら困りますよね・・

903 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 02:51:27 ]
色分けやdo-enddoの自動インデントならvimでもやってくれますね。

904 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:46:22 ]
>>902
.NET対応版とか、Windows API 呼び出しとかしなければ、常識的な範囲でOK。

905 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 15:25:50 ]
vimのfotranの色づけはデフォルトだとイマイチなんすけど
ドキュメント読むの面倒なんで、お勧め設定晒してもらいませんか?

906 名前:905 mailto:sage [2007/10/23(火) 15:26:50 ]
×もらいませんか
○もらえませんか

907 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 18:11:51 ]
Fortran90ではコメント「c」やCOMMONは使えないんですか?
77の(ほぼ)スーパーセットと聞いたんですが、やってみたら駄目でした。

てことは、77のコードをポートするには一般に結構な書き換えを要する、ってことですかやっぱ



908 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 18:17:28 ]
>>907
先頭cコメントを使うためには、固定形式で記述する必要がある。
中途半端に自由形式を導入していないか?
回答者のために、コンパイラー名を書こう。

909 名前:907 mailto:sage [2007/10/23(火) 18:36:30 ]
>>908
レスありがとうございます。
>先頭cコメントを使うためには、固定形式で記述する必要がある。
そうなんですか。Intel Fortran 9.0なのですが、
固定形式か自由形式かはどうやって決まるんですか?
拡張子(というかsuffix)?

COMMONが使えないというのは勘違いでした。
複数行に渡るときの6列目の文字があるせいでした。90だと行末に&なんですね。


結局のところ、「77の(ほぼ)スーパーセット」といのは、77形式できっちり書いた場合の話であって、
90の機能と何でも混ぜていいわけではないんですね。。

910 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 20:44:40 ]
>>909
通常は拡張子が .f .for .ftn の場合は固定形式、 .f90 の場合は自由形式と解釈される。
# ifort は .f95 をソースとして認識しない。
コンパイル時のオプションに -fixed / -free を指定することによって強制的にそれぞれ
固定形式/自由形式の指定をすることも出来る。
また、拡張子を大文字(.F .FOR .FTN .F90)にするとコンパイル前にプリプロセッサで前処理される。

> 90の機能と何でも混ぜていいわけではないんですね。

1つのソースに固定形式/自由形式を混ぜてはいけない。
ただし、別々のファイルにすれば混在させることも出来る。

911 名前:907 mailto:sage [2007/10/23(火) 23:48:50 ]
>>910
ありがとうございます。非常に勉強になりました。

912 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 03:21:45 ]
High Performance Fortranていう仕様があるようですが、どういうところで使われているんですか?
普通のユーザには縁のないものですか

913 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 09:04:39 ]
>>912
90年代に並列プログラミングを考慮した規格として提案された。
日本のスーパーコンピュータメーカはコンパイラをちゃんと作ったが、
アメリカがやる気を見せず崩壊した。

地球シミュレータでもHPFは動いている。というかHPFはESに要求された仕様の一つだったような。


914 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 11:13:06 ]
>>913
崩壊、ですか・・・

推進評議会のサイトを見ると、「ユーザが最小限の指示文によってデータの分割配置の方法を
指定すれば、残る作業(計算の分割と通信の生成)をコンパイラが自動的に行う」とありますが、
分散メモリシステムで必要となる領域分割と通信を自動でやってくれる、ということですか?

今はFortran90+MPIという組み合わせが一般的だと思いますが、これよりも良い性能が出るんですか?

915 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 13:22:45 ]
>>914
MPIはどちらかというと消極的な理由でデファクトスタンダードになった。

ソフトウェア中心主義の視点からは、MPIはハードウェアの抽象度が低いので、
HPFのほうが上位に立つのだが、現実的にはハードウェアへの依存性が高くて逆転する。


ここに過渡期に実務で使った人の比較意見が載ってる。
ttp://grape.mtk.nao.ac.jp/~makino/articles/future_sc/note031.html#rdocsect36

916 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:03:35 ]
>>915
消極的ですか。確かにそんな気もしますね
OOPの可能性にwktkするも、性能とのトレードオフに嘆き、手続き型も含めた現実的な方法に帰着する、という話と似てるかも

ところでそのサイト見ていつも思うんですが、マ○ノさんてすごい人ですよね
ここまでコアな人はなかなかいないと思う

917 名前:912=914=916 mailto:sage [2007/10/24(水) 16:04:56 ]
>>915
スイマセン、お礼言うの忘れてました。
どうも有難うございました。



918 名前:デフォルトの名無しさん mailto:age [2007/10/28(日) 19:52:11 ]
WRITE文で改行しない標準FORMATを使いたいのですがどうすればよいでしょうか?
具体的には、
WRITE(*,*) 'x = ', x
という文を改行なしで表示したいのです。ここで、xはDOUBLEで、
xの大きさによって浮動小数点表示と固定小数点表示をコンパイラが判断して欲しいです。
よろしくお願いします。

919 名前:デフォルトの名無しさん [2007/10/28(日) 22:10:09 ]
>>918
改行しないのはFAQ このスレでも何度も出ている。
Fortran90 では、ADVANCE='NO' 

数値の大きさでフォーマットを変えるのは G Format これが77時代からある。

サンプル

PROGRAM unko
IMPLICIT NONE
REAL :: x, y
x = 0.1
y = 1.234567e11
WRITE(*, '(A, G15.5)', ADVANCE = 'NO') 'x=', x
PAUSE
WRITE(*, '(A, G15.5)', ADVANCE = 'NO') 'y=', y
STOP
END PROGRAM unko


920 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:32:38 ]
COMMONブロックをモジュールに書き換える作業をしております。その際わからないことがあったので質問させてください。
jjoo.hp.infoseek.co.jp/tips/f90/common_to_module.html
のサイトを参考に進めてきました。現在のプログラムの概略は次のような感じです(巨大なため全文ではありませんがご容赦くださいませ)
module sub
integer i,j
end modeule sub
program main
 use sub
 implicit none
call 1
call 2
end program main
subroutine 1
implicit none
integer i,j
(略)
end
subroutine 2
implicit none
integer i,j
(略)
end
この状態でコンパイル及び動作は出来るのですがサブルーチンにおいて変数部を
subroutine 1
use sub
implicit none
(略)
end
とするとコンパイル時に symbol 'rmax' ai (1) is defined in multiple modules というエラーが出てしまいます。
これはどのように解決したらよいのでしょうか。よろしくお願いします。

921 名前:918 mailto:sage [2007/10/29(月) 23:48:47 ]
>>919
欲しい結果が表示されました。ありがとうございます。

922 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 00:56:45 ]
>>920
それはエラーメッセージに書いてあるがごとく、複数のモジュールの中で同じシンボル名を
重複して使っているという事だろう。


コモンブロックに当たるモジュールは1個だけ作って、それをUSEで呼び出せばいい。
コモンのときは全副プログラムにコモンを置かねばならなかったが、もジュールは違う。


923 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 14:05:25 ]
CHARACTER*(*) HOGE のように、配列数が(*)となっているのはどういう意味なんでしょうか
動的に確保するということでしょうか?

924 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 01:18:34 ]
>>923
HOGEの長さは
HOGEが定数の場合、PARAMETER文で指定された文字列の長さ。
HOGEが副プログラムの仮引数の場合、対応する実引数と同じ長さ。
HOGEが関数副プログラムの場合、その関数を使用する側で予め決められた長さ。

925 名前:920 mailto:sage [2007/10/31(水) 05:54:42 ]
>>922
遅くなって申し訳ありません。レス有り難うございました。
なるほど、モジュールは一度読み込めばよいと言うことだったんですか。
そこで、サブルーチン中のuse文を消してみたところ
そのエラーは吐かなくなりました。
その代わり
x0(n)=2.d0*rn
 1
Unexpected array Reference at (1)
と言ったようなエラーが出るようになってしまいました。エラー文では配列の参照がおかしいみたいなことを書いてますがどのようなことなのでしょう。
内容が同じ物をcommon文としてかいた時は問題なく動作したので
配列の宣言がおかしいってこともないと思うのですが・・・

926 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 10:58:31 ]
>>923
FORTRAN90以前では、基本的に変数は参照渡しで、実際には先頭番地しか渡していない。
また呼び出し側と呼び出される側での引数の整合性もチェックしていない。
さらに実行時にも、デバッグオプションをつけない限り、はみだしチェックのようなことはやってない。

したがって、副プログラム側では、引数の大きさはどうでもいいことになる。
このためFORTRAN66あたりまでのプログラムでは、配列にも適当な長さを指定するのが伝統だった。
(文字列は、まだ存在しなかったので・・・というか整数型に突っ込んでいた・・・・質問から外れるが)

というわけで、FORTRAN77規格で、それを明示的に指定した書式が(*)だ。(とおもうw)
長さ『*』は、『適当』という意味だ。文字列のみならず数値型配列の最後の要素にも使える。

Fortran90以後は、色々コンパイル時のチェックが入るようになって、PASCALみたいでうぜぇという人達もいる。
最近のスクリプト言語は、型にゆるいのが多いが、昔のFORTRANに先祖がえりしているのである(嘘w


927 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 11:01:20 ]
>>925
モジュールの宣言は1個で、USEは使うルーチンごと毎回だ。
カスケード的にUSEしているなら、深いほうで1回読んでおけばいい。




928 名前:923 mailto:sage [2007/10/31(水) 18:13:56 ]
どうもありがとうございます。

>>924
>HOGEが定数の場合、PARAMETER文で指定された文字列の長さ。
HOGEをHOGE="hoge"と変数にしたら駄目でした。定数しか駄目なんですね。

>>926
ということは、サブルーチン仮引数の配列は全部*にすれば、配列サイズの違いに悩まされることもないのですよね?
例題などで、配列を10などと明示的に指定しているのを多く見かけるのですが・・・

929 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 23:21:08 ]
>>928
>ということは、サブルーチン仮引数の配列は全部*にすれば、配列サイズの違いに悩まされることもないのですよね?
>例題などで、配列を10などと明示的に指定しているのを多く見かけるのですが・・・
いや、別に10のままでも、本質的には何も変わらない。
どっちにしろ配列の先頭アドレスしか渡さないので、サイズの違いに悩まされることは無い。

あと、多次元配列の場合、最後の次元以外は一応意味があるので、ちゃんと指定しないといけない。
ただ、FORTRAN77では整合寸法を別に引数で送るのが適切とされている。


930 名前:デフォルトの名無しさん [2007/11/01(木) 01:12:57 ]
何が原因かわからないのですいませんがどこが間違ってるのかご指摘お願いします.
縦300横10の配列を読み込んで,ただの列にしたいだけなんです.
エクセルを使えば,FORTRAN使うほどのことでもないのでしょうか?
それも含めて教えてください.


program hairetu
open(30,file='a.dat',status='old')
do 10 j=1,10
read(30,*)(b(i,j),i=1,300)
10 continue
close(30)

open(20,file='b.dat',status='new')
do 50 i=1,300
do 40 j=1,10
write(20,*)b(i,j)
40 continue
50 continue
close(20)

stop
end

931 名前:930 [2007/11/01(木) 01:19:49 ]
付け足しです.このようなエラーメッセージが出ています.


0004) read(30,*)(b(i,j),i=1,300)
*** B is a function name - a function reference is not allowed in a READ
statement list
*** Invalid input/output list
2 ERRORS


932 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 02:20:00 ]
>>930
> どこが間違ってるのかご指摘お願いします.
・配列 b の宣言がない。
・「縦300横10」のデータなら読み込み時の i, j の終値が逆。

> エクセルを使えば,FORTRAN使うほどのことでもないのでしょうか?
これくらいの処理ならExcelでもなんでも結果が出せればおk
ということで。

gawk "{ for (i=1; i<=10; i++) print $i }" a.dat > b.dat

933 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 02:36:36 ]
ちなみにスレ違いだがWindows 2000以降なら以下のようなバッチファイルでも処理できる。

@echo off
if exist b.dat del b.dat
for /F "delims=" %%r in (a.dat) do (
for %%f in (%%r) do echo %%f >> b.dat
)

934 名前:923 mailto:sage [2007/11/01(木) 13:21:29 ]
>>929
>どっちにしろ配列の先頭アドレスしか渡さないので、サイズの違いに悩まされることは無い。
そうなんですか。ちょっと混乱してきたのですが
ということは、仮引数の配列数は結局は関係ないということですか?

>いや、別に10のままでも、本質的には何も変わらない。
では仮引数の配列数を明示指定するのは、単なる慣習みたいなもの、ってことですか?

935 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 00:14:19 ]
>>934
そういえなくも無い。1960年代のプログラムを見ると、任意長の配列がよく大きさ10で宣言されている。
ただテキストの場合は、本当に10個の要素だと思うがw

SUBROUTINE ZERO(n, a)
DIMENSION a(10)
DO 10 i = 1, n
a(i) = 0.0
10 CONTINUE
END

見たいなのがよく使われていた。

これとまぁ等価なのが DIMENSION a(*) で、もっと上品な書き方は整合配列を用いて DIMENSION a(n)
とやる方法。後者をお奨めする。だがFortran90で書くことをもっとお奨めするw

先頭番地しか渡していなので、呼ぶ側では、配列の途中から渡したりできる。
REAL a(100)
CALL zero(100, a)
CALL zero(50, a(51)) --->Fortran90での a(51:100) = 0.0

普通のテキストには書いてないが、77までのプログラムでは、こういうのを知らないとまともに
プログラムが読み書きできない。昔は誰も教えてくれないので徒弟制度で叱られながら学ぶか、
他人のコードを読んで泣きながら覚えるしかなかった。


漏れの読んだテキストで、そういう事が書いてあったのは、この本くらいか。
ttp://www.star.le.ac.uk/~cgp/prof77.html
(他の本にも書いてあったが、単に読んだ時のスキルが足りなくて理解できなかったのかもしれないがw)

936 名前:923 mailto:sage [2007/11/02(金) 14:17:22 ]
>>935
なるほど・・・よくわかりました。そういうコアな話を聞ける人が周りにいないもので、とても勉強になります。
丁寧な解説ありがとうございました

937 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 14:04:31 ]
>ただテキストの場合は、本当に10個の要素だと思うがw
これどういう意味ですか?
文字列配列も普通の配列に変わりはないと思うんですが



938 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 18:15:19 ]
>>937
テキストは本当に10個に固定の要素を扱っているのではないかという事。
深い意味は無い。


939 名前:937 mailto:sage [2007/11/05(月) 01:33:05 ]
気になったので簡単にテストしてみました。
サブルーチン内で普通に文字列代入する(sub1)のと直接要素に代入する(sub2)のとでは違うようですね。
後者は通常の配列と同様な参照渡しなのに対し、前者は少し違った処理をする、ということでしょうか?

implicit integer(i-n)
character*3 text1 /'aaa'/
character*3 text2 /'aaa'/
call sub1(text1)
write(*,*) text1
call sub2(text2)
write(*,*) text2
end

subroutine sub1(text)
character*2 text
text = 'b'
end
subroutine sub2(text)
character*2 text
text(1:1) = 'b'
end

<結果>
b a
baa

940 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 03:17:08 ]
>>939
たぶんサブルーチン側ではtext*2で宣言しているので、
sub1 では text(1:2) = 'b ' の扱いになったんだと思う。
参照渡しなのは変わんないと思う。

text = 'b' は、一文字目は'b'として2文字目以降宣言長まではスペースを補填するのだと思う。


941 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 13:28:20 ]
fortranの仕様ってどこが決めてるの?
少なくとも数値計算屋だよね?

942 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:39:48 ]
>>941
ttp://www.j3-fortran.org/

いちおう、(コンパイラ、ハードウェア)ベンダー、ユーザー、大学人なんかが入っているはず。
なんだかイギリスが生意気にデカイ面している。

Fortran2008で、Crayのハードウェアに最適化されているCoArrayが規格に入ったのが気に食わない。


943 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:06:31 ]
コーエンちゃん早く2003の処理系つくって

944 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 14:40:25 ]
>>942
やっぱ向こうじゃNECよりCrayが優先されるんだろうね

945 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 23:02:52 ]
>>944
『向こう』ってなんだよw 欧米コンプレックスの40代の爺さんかよwwww

Fortran2008は、本来はFortran95のようにマイナーアップデートのはずなのに、
こういう妙な機能を入れ込ませようとする政治臭の漂うことをやると、信頼性をなくすと思うのだがな。



946 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:42:08 ]
HP Fortran で以下の二つを実現することは可能ですか?
1) リトルエンディアン形式のバイナリ出力
2) Intel Fortranのopen(10, 中略, form='binary')に相当するやり方



947 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:14:02 ]
>>946
マニュアル嫁

1) リトルエンディアン形式のバイナリ出力
Itanium機では出来る?
ttp://docs.hp.com/ja/B3908-90009/ch08s08.html

2) Intel Fortranのopen(10, 中略, form='binary')に相当するやり方
DIRECT ACCESSで1バイトづつ読むというテクニックで切り抜けられる。




948 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:44:30 ]
そういやIntel Fortran もようやく ACCESS='STREAM' が使えるようになったな。
これで処理系毎に書き直さなくて済むようになる。

949 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:58:25 ]
>>947
ありがとうございます。

1)
そういえば、CPUの種類は確認してなかった・・。
たぶんItaniumだと思うんですが、、。
職場行ったら確認して試してみます。

2)
これはちょっと大変そうですね。
ヘッダー部、データ部、それぞれで型の違う変数を扱わなければならず、
変換が大変そうです。

4byteの変数を出力する際、1byteずつ逆から出力する必要があるってことですよね・・


950 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 01:12:25 ]
>>949
文字列で読み出して、それをINTEGERやREALやREAL*8とEquivalenceをかけて置けばOK


処理系によって、RECL=1 にしたときに1byteになるものと、1語になるものがある。
たとえばIntelFortranではデフォールトは1語=4バイトだが、オプションで切り替えできる。



951 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 01:14:51 ]
Fortran2003でOPEN( ... ACCESS='STREAM') が規格に入ったので、新しいコンパイラなら先取り導入
されている可能性大。


952 名前:949 mailto:sage [2007/11/11(日) 12:31:09 ]
>>950
Equivalence使ったことありませんでした。
マニュアルみたら違う変数で同じメモリ領域を使えるようにする、、ってやつなんですね。

つまり整数1byte型x1,x2,x3,x4がy4,y3,y2,y1と同じメモリ領域になるようにし、
逆から順に1byteずつ出力すればいいってことですね。
RECLに関してはマニュアルを読んでみます。

>>951
'DIRECT'、'SEQUENTIAL'、' POSITION=APPEND'
マニュアル見たらACCESS指定子に選択できるのは上記3つだけみたいでした。


953 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 13:45:48 ]
>>949,950
fortran90以降でequivalence文を使うのは非推奨。

subroutine trans_endian(str,inte)
character(len=1),dimension(4),intent(in) :: str
integer,intent(out) :: inte
inte=transfer(str(4:1:-1),0)
end subroutine trans_endian


954 名前:1/2 mailto:sage [2007/11/11(日) 15:26:51 ]
>>953
とこんな感じで整数をエンディアンの自動判別しながら読める。
正直TRANSFERを使うより、EQUIVALENCEの方がすっきりするよな。
F90はソースコードの見かけに流れされすぎ。

SUBROUTINE check_endian()
IMPLICIT NONE
CHARACTER(LEN = 4) :: ctmp
INTEGER :: itmp
ctmp = 'ABCD'
itmp = TRANSFER(ctmp, itmp)
IF ( CHAR( MOD(itmp, 256) ) == 'A' ) THEN
qlittle_endian = .TRUE.
ELSE IF ( CHAR( MOD(itmp, 256) ) == 'D' ) THEN
qlittle_endian = .FALSE.
ELSE
CALL abort('endian indeterminable')
END IF
RETURN
END SUBROUTINE check_endian
!---------------------------------------------------------------------


955 名前:2/2 mailto:sage [2007/11/11(日) 15:27:24 ]
!---------------------------------------------------------------------
FUNCTION rd_int32() RESULT(ires)
IMPLICIT NONE
CHARACTER (LEN = 4) :: tmp
INTEGER :: i, io, ires
IF (qlittle_endian) THEN
DO i = 1, 4
ir_record = ir_record + 1
READ(ir, REC = ir_record, IOSTAT = io) tmp(i:i)
END DO
ELSE
DO i = 4, 1, -1
ir_record = ir_record + 1
READ(ir, REC = ir_record, IOSTAT = io) tmp(i:i)
END DO
END IF
ires = TRANSFER(tmp, ires)
RETURN
END FUNCTION rd_int32

956 名前:デフォルトの名無しさん [2007/11/11(日) 17:22:06 ]
>>943
コーエンといえば、これワロタ。
F2003が実用的な意味で出てくるのか甚だ疑問だなw

ttp://www.nag.co.uk/market/Malcolm_Cohen_Fortran_Jubilee_Presentation.pdf

The Irony of FORALL
? “world’s slowest high-performance feature” (HPC vendor 1)
? “months just to get the semantics right...” (HPC vendor 2)
? “even on massively parallel machines, it’s slower than DO”
(HPC vendor 3)
? The analysis needed to eliminate the costly array temps...
...would parallelise the obvious DO loop alternative.
So at best FORALL is as good as DO, usually it is slower, sometimes
much slower.
11

957 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 01:50:22 ]
readで配列の行数列数を指定せずにファイルを読み込むにはどうしたらいいんでしょうか?
「end-of-file during read, unit 5」と表示されてしまい、どうやらEND=100のように文番号を指定する必要があるみたいなのですが、
どのように記述すればいいのか分かりません。
どなたか教えてくれませんか?



958 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 07:28:49 ]
>>957
とりあえず切り抜けるには、
READ(nn, *, END =10) A
10 CONTINUE


959 名前:957 mailto:sage [2007/11/13(火) 11:17:16 ]
>>958
出来ました!
かなり助かりました。ありがとうございます。

960 名前:デフォルトの名無しさん [2007/11/13(火) 15:23:03 ]
はじめまして、初めて書き込みするものです。
C言語のプログラムをfortran90で書き換えようとしてるんですが、
C言語の
do{
処理文
}while(条件)
に対応するfortranの命令文は何を使って書けばいいんでしょうか?

あと、C言語で使われている、間接演算子*aなどはfortranではどう扱えば
いいのでしょうか?サブルーチンの仮引数として書いたときに、エラーが
出てしまうので、修正の仕方が分からないで困っています。

アドバイスをいただけないでしょうか?



961 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 21:41:03 ]
>>960
C言語の do 〜 while にそのまま当てはまる文はない。

ループの終了条件判定を前へ持ってきても良いのなら
DO WHILE (条件)
処理文
END DO

条件判定が後ろにないとダメな(最低1回は実行する)場合は
DO
処理文
IF (.NOT. 条件) EXIT
END DO


962 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 22:27:56 ]
>>960
Fortranでは引数は基本的にすべて参照渡しなので
普通に渡して仮引数を書き換えれば実引数の値も変わる。

サブルーチン側で勝手に書き換えられては困る場合は
仮引数に INTENT(IN) 属性を付けておけば書き換えられない
ようになる。というかコンパイル時にエラーにしてくれる(はず)


963 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:07:58 ]
>>961
FortranにREPEAT〜UNTIL型の構造が入らなかったのは何故なんだろうね?
FORTRA66時代のDO〜LOOPがREPEAT〜UNTIL型だった呪いかな?w

>>962
F2003で引数にVALUE属性が導入されるらしい。
コンパイラによっては今でも独自拡張で出来なくも無いが。


964 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 13:38:29 ]
>>961
>>962
ありがとうございます!とても参考になりました。
教えていただいたことを使ってもう一度やってみます。
また分からないことが出てきてしまうと思うので
そのときはまたよろしくお願いします。

965 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 14:10:39 ]
保守代わりに下らない質問
77にはDO WHILE文は無いよね?
77ではIF(〜) GO TO 〜ってやるしかないよね?

966 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 21:25:14 ]
失礼します、初めて書き込みさせていただきます。
以下のようなプログラムを書いたのですが(相当省略してますが)、
nの値を8以上にするとmの値が正しく出ないのですがなぜなのでしょうか。
(とりあえずaはどうでもいいです)

integer :: i, j, m, n
real(8) :: a

read(* ,*) n
do i = 1, 2n-1, 2
m = 1D0
do j = 1, i
m = m * j
a = a + dble(m)
end do
end do
write (*, *) m

mはiまでの階乗を表したくてこのようにしているのですが…

967 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:02:03 ]
>>965
DO WHILEはないが、GOTOの種類ならたくさんあるぞw

>>966
mはintegerだから
基本整数型が32bitの場合、2147483648以上の数は扱えない。



968 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:55:17 ]
>>966
>>967氏を補足するならば、integerで表される最大値は2**31-1だ。
m=m*jをx=x*DBLE(j)にしろ。xはreal(8)な。m=1の代わりに、x=1.0d0。

まぁ整数で何も考えずに階乗を求めると、途中でマイナスになって、
2の補数表現とかコンピュータの勉強になるので、教育的には非常にいい課題だ。



969 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 00:15:09 ]
>>967>>968
全然知りませんでした。おっしゃる通りに直してみます。
本当にありがとうございました!

970 名前:デフォルトの名無しさん [2007/11/21(水) 02:34:46 ]
Silverfrost FTN77 4.03をダウンロードしたのですが、
セットアップのところを押すと、
「C:¥WINDOWS¥SYSTEM32¥AUTOEXEC.NT.システムファイルは
 MS-DOSおよびMicrosoft Windowsアプリケーションを実行するの
 に適していません。」
と表示されます。どうすればいいでしょうか?教えて下さい。
お願いします。

971 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:50:57 ]
>>970
ttp://support.microsoft.com/default.aspx?scid=kb;ja;324767

972 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 00:50:42 ]
>>970
特にこだわる理由が無いならFTN95を入れるという選択肢もある。


973 名前:970 [2007/11/22(木) 14:49:08 ]
ありがとうございました。
これで家でも使えるようになりました。

974 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:09:52 ]
学生時代、情報科の先生にプログラミング言語は何教わった?と聞かれて
Fortran77ですと答えたら、それ古いぞ今はCだと言われた。
それからだいぶ経つのに、77を教わっている学生さんが居るとは、
教えてる奴はよっぽど77好きなんだろうな。


975 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:19:46 ]
計算科学あたりでは今でも F77 教えてたりする。
今はもう C すら古いというのに。

976 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:06:43 ]
Visual Fortran10 with IMSL + visual studioって構成でアプリケーション作ったんだけど,
IMSLとのリンクが動的にしかできないからIMSLのインストールされていないPCで動かすことができません.
INCLUDE 'link_fnl_shared.h'
use IMSL_LIBRARIES
ならうまくいくのですが,
       INCLUDE 'link_fnl_static.h'
use IMSL_LIBRARIES
だとリンクエラーになりコンパイルできません.
どなたかアドバイスいただけませんでしょうか?

977 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:21:36 ]
>>974-975
真理は時間や空間には依存しないもの。
流行り廃りがあるような内容は、学問ととして伝授するに値しない。
FOTRANは、普遍的不変なる価値を持つのだ。

50年前のコードが動いて、実際使われているんだから、
こんな再利用可能な習得価値のある言語は無い。




978 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:32:26 ]
バグを抑制するための仕様が貧弱だから
保守が大変なんだよ。

979 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:57:45 ]
C言語のことかーーーっ!!!

980 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:58:50 ]
ちょっと前はとりあえずF77でやっときゃおk、だったが今はさすがにF90だろ
いつまでも研究室レベルのコードでいいなら別に構わんけど

981 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:31:30 ]
F90からいきなり入った連中は、変数命名の伝統を守らなかったりするので、再教育が面倒。
規格を硬くして厳格に守るべき部分もあるが、自由度を大きくしたまま慣習法によって厳格に守る部分
があってもいい。いざというときだけ破格で逃げる。とにかくバランスを間違えてはいけない。

英米系の慣習法と独仏系の制定法の伝統にもよるのかもしれないが・・・・
情報学科よりの連中は、PASCALがなぜ廃れたかの教訓を得ていない。

それはそうと本来情報教育の講座が、しっかりした教材を用意すべきだと思うのだが、
連中はFORTRANとかを無闇に馬鹿にして、すぐに忘れ去られる新規言語に飛びつくからワロスワロス

まぁ、FORTRAN全盛時代の代表的なテキストたる浦昭二のFORTRAN本も暗黙の型を
守っていないのでどうしようもないのだがw


982 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:44:51 ]
FORTRAN77 を使ってあまりの酷さに逃げたわ。
何、あの引数の数。構造体が無いから酷い。
それを避けようとしたら COMMON 変数まみれ。
最悪だ。

983 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:22:57 ]
>>982
FORTRANではバッチ処理で物理メモリーを限界まで使うことが多いが、
そうなると自由にメモリーを再利用できるCOMMONは非常に便利。
メモリーが貴重な時代には非常に合理的な仕組みだった。
今風に言うとガベージコレクションを自分でやれる。

その時代時代の最高のハードウェアの制約を前提として限界まで使うにはFORTRANはいい言語。
無限のメモリーやCPU速度を暗黙の前提にしている仮想マシン上の観念言語とは違う。

FORTRAN77程度で逃げるのは根性無し。FORTRAN66で根性つけて出直せw



984 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:01:32 ]
プログラマにはそんな無駄な根性なんて要らない。

985 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:19:09 ]
必要なのはデスマを生き抜く体力のみ。

986 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 19:59:15 ]
Fortran77 は、1977年以前に生まれた人間しか使ってはいけないそうな

987 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:17:12 ]
楽勝で使えるぞな



988 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 00:39:37 ]
そろそろ次スレ用のテンプレについて議論しよう。


989 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 12:29:10 ]
テンプレって無視されるのが普通だからどうでもいいような気もするけどね。
コンパイラのリンクとか宿題丸投げ用テンプレでも入れる?
F77やF90の簡単な説明もあると良いかな?自分が習ってるのがどっちか分からない子用に


990 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 23:22:19 ]
>>989
たしかにF77とF90以降の区別は重要だな。質問のときにはっきりさせろと。

あとは、文字列を数字に直すというFAQかな?


991 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:33:52 ]
テンプレ議論するには残り少なすぎ・・・
まぁ内部ファイルの質問は多いから入れとこうか

992 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 11:46:42 ]
>>995が次スレを立てるという事で


993 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 07:37:24 ]
F

994 名前:デフォルトの名無しさん [2007/11/30(金) 08:34:03 ]
バイナリデータを書き込むと先頭に余分な6バイトがついてしまいます。
純粋なデータのみを書き込みたいのですが、どのコマンドを使えばよいのでしょうか?

995 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 09:40:05 ]
>>994
エスパー力が試されているな。
実行環境とどんな型のデータをどんな風に
書き込んでいるのか分からない。

昔Compaq/AlphaでVisual Fortranを使った時の話
open(io,file="hogehoge",access="direct",form="unformatted",recl=2,statu="new")
としてバイナリファイルを作った時、2バイトずつ書き込もうとしても、
コンパイル時にオプション(-assume byterecl)を与えないと8バイトずつになってしまった。
余分な6バイトがつくというのは、こういう状況か?

996 名前:995 mailto:sage [2007/11/30(金) 09:40:56 ]
×statu="new"
○status="new"

997 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 11:29:16 ]
>>994
コンパイラ・処理系などは何だ?





998 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 14:00:28 ]
くだすれFORTRAN(超初心者用)その3
pc11.2ch.net/test/read.cgi/tech/1196384126/

999 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 12:56:23 ]


1000 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 12:57:05 ]
( ´ー`) 1000 !

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






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

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

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