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


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

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



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


974 名前:966 mailto:sage [2006/10/27(金) 02:15:38 ]
>969
丁寧にありがとうございます!


975 名前:デフォルトの名無しさん [2006/10/27(金) 03:39:20 ]
>>973
あれはintelのサポートページにある掲示板だ。
SteveLionelというのがDEC→Compaq→HP→INTELとずーっと一貫してサポートの前面に
立ってきた人間なので、とりあえず奴の書き込みだけを見れば足るだろう。

あれ以外にもStackOverflowに関する一般的な説明があった。
それは上のほうにあった書き込みと似ている内容だったが、INTELコンパイラは将来的には
巨大なAutomatic変数は自動的にHeap領域に割り当てるように改良を考えているらしい。


念のためコンパイラは最新版にupdateしておくとよい。
またコンパイラの問題かどうかの参考にするには、別の会社のコンパイラでやってみるという
手もある。チェックだけなのでftn95とか、g95とか、あとどっかの2週間のおためしと版とか
で試して同じ症状が出るかどうかみてみるという手もある。



DEBUGオプションでやってみるのが基本なのだが。


976 名前:stack overflow [2006/10/27(金) 14:33:52 ]
>>975
分かりました。
どうもありがとうございます。m(_ _)m

977 名前:デフォルトの名無しさん [2006/10/28(土) 22:55:00 ]
以下のようにしてテキストファイル内の行数を数えたいのですが、
テキストファイル最後の行の判別はどう書けばよいのでしょうか?
(つまり、DO WHILEの条件はどう書けばいいのですか?)
.  OPEN(11,FILE='01.dat',STATUS='old')
.  READ(11,*) x,y,z
.  DO WHILE(x /= NULL) !←NULL
.  max_line = max_line + 1
.  READ(11,*) x,y,z
.  END DO
.  CLOSE(11)
教えてください、お願いします!

978 名前:デフォルトの名無しさん [2006/10/28(土) 23:37:18 ]
>>977
.  READ(11,*, IOSTAT=IOSS) x,y,z
とすると、ファイルの終わりに達したら IOSS に負の値が入る。

ちなみに エラーが起きたら正の整数値、それ以外ならゼロが入る。
正、負の具体的な値は処理系依存。

または
.  READ(11,*, END=文番号) x,y,z
とすると、ファイルの終わりに達したら (文番号) に分岐する。

979 名前:デフォルトの名無しさん mailto:sage [2006/10/29(日) 02:07:11 ]
>978できました!ありがとうございます。

980 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 16:38:30 ]
do i=20,90,1
でi=70だけを飛ばしたいときはどのようにしたらよいのでしょうか?

981 名前:980 mailto:sage [2006/10/31(火) 16:47:36 ]
自己解決しました
if文を入れてi=70だけを飛ばしました。


982 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 20:54:05 ]
スマソ、助けてください。
例えば、この連立一次方程式
  3x1+2x2+7x3+x4=8
x1+5x2+x3−x4=5
4x1+x2+3x3−2x4=7
x1+6x2+4x3+3x4=13

これをガウスジョルダン法で解きたいんですが
open文でデータを開いて計算したいんです。
プログラムはどのようにすればよいでしょうか?



 



983 名前:982 mailto:sage [2006/10/31(火) 20:56:03 ]
ちなみに77でお願いします。

984 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 22:30:19 ]
>>982

program hoge
parameter (N=4)
real a(N,N+1)
open(11, file='data.txt', status='old')
read(11,*) ((a(i,j), j=1,N+1), i=1, N)
close(11)
do 101 i=1, N
piv = a(i,i)
do 201 j=i, N+1
a(i,j) = a(i,j) / piv
201 continue
do 202 j=1, N
if (j .ne. i) then
t = a(j, i)
do 301 k = i, N+1
a(j,k) = a(j,k) - t * a(i, k)
301 continue
end if
202 continue
101 continue
write(*,*) (a(i, N+1), i=1, N)
stop
end

エラーチェックは省いたので「不正なデータ」を読ますとランタイムエラーになるw


985 名前:982 mailto:sage [2006/10/31(火) 22:44:32 ]
>>984
おー、こんなに短くなるもんなんですね。
後は自分でやってみます。
ありがとうございますた(`・ω・´)

986 名前:982の1/2 [2006/10/31(火) 23:55:25 ]
再度質問ですが
PARAMETER (NN=10)
DIMENSION A(NN,NN),B(NN),X(NN)
WRITE(*,*)'何元の連立方程式か、元数を入れてください。'
READ (*,*) N
WRITE(*,*) 'N=',N
OPEN(10, FILE='TEXT1.TXT', STATUS='OLD')
DO 1 I=1,N
READ (10,*) (A(I,J), J=1,N),B(I)
WRITE(10,*) (A(I,J), J=1,N),B(I)
1 CONTINUE
CLOSE(10)
DO 100 K=1,N-1
P=A(K,K)
DO 2 J=K+1,N
A(K,J)=A(K,J)/P
2 CONTINUE


987 名前:982の2/2 [2006/10/31(火) 23:56:57 ]
B(K)=B(K)/P
DO 3 I=K+1,N
Q=A(I,N)
DO 4 J=K+1,N
A(I,J)=A(I,J)-Q*A(K,J)
4 CONTINUE
B(I)=B(I)-Q*B(K)
3 CONTINUE
100 CONTINUE
X(N)=B(N)/A(N,N)
DO 200 K=N-1,1,-1
S=B(K)
DO 5 J=K+1,N
S=S-A(K,J)*X(J)
5 CONTINUE
X(K)=S
200 CONTINUE
WRITE(*,*) ' 解 X '
DO 6 I=1,N
WRITE(*,*) X(I)
6 CONTINUE
STOP
END

ここまでは自分でアレンジしましたが、プログラムが回りません。
どこが間違っていますか?


988 名前:デフォルトの名無しさん mailto:sage [2006/11/01(水) 20:47:30 ]
>>986
> DO 1 I=1,N
のループの中で
ファイルからデータを読み込んだすぐ後に
同じファイルに上書きしてる。

> DO 3 I=K+1,N
のすぐ下
Q=A(I,N) → Q=A(I,K)

こんなところかな。

989 名前:デフォルトの名無しさん mailto:sage [2006/11/02(木) 14:34:42 ]
>988
出力形式になってなかったですね。
激しく感謝です。

990 名前:デフォルトの名無しさん [2006/11/03(金) 00:40:49 ]
そろそろ次スレたのむ、
テンプレも進化させてw


991 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 12:47:20 ]
Formula 1

992 名前:デフォルトの名無しさん [2006/11/04(土) 13:00:21 ]
2007年はFORTRAN50周年だ。

俺達も盛大に祝おうぜ!!





993 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 16:32:22 ]
FORTRAN = FORmula TRANslation

994 名前:フォートランを初めて3日目 [2006/11/04(土) 19:37:05 ]
今、ワードのようなテキストデータの中に1961年から2005年までの乱雑した年
数だけわかっていて、そこから連続した数を抽出し、発生頻度と見なしてその
発生確率からポアソン分布による乱数を行なえるようなプログラムを知りたい
のですが、よければ、教えてくれませんか?


995 名前:デフォルトの名無しさん [2006/11/04(土) 20:44:32 ]
>>994
そのようにファイルから読み出すのは初心者には難しいだろう。
発生確率にするまで教えてやろう。

データ例を出せ。


そこから先の後半は、カテゴリーが違うので後だ。
まずは作業を概念的に分割して小さい単位で作れ。


996 名前:フォートランを初めて3日目 [2006/11/05(日) 11:34:08 ]
データ例と言われましても、初めてでよくわからないのですけど、’nenpow.txt'
というようなワードの文章の中に112行1列(要は縦に一つずつの年報が並んでいる)
になっています。ちょっと描いてみると
1行目:1961
2行目:1961
3行目:1962
  …
112行目:2005
というようになっており、ここからそれぞれの年報をまとめて発生個数として
ポアソン分布を作成し、それによる確率的な乱数を発生させるようにしたいの
ですけど・・・。
初めてなので、こういう解釈になってしまうのですけど、わかりますか?

997 名前:フォートランを初めて3日目 [2006/11/05(日) 11:38:56 ]
できれはFORTRAN77と、90の両方でお願いしたいのですけど

998 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 12:14:28 ]
>>997
PARAMETER (NYMIN=1961, NYMAX=2005, NTOTL=112)
INTEGER NUM(NYMIN:NYMAX)
DO I=NYMIN, NYMAX
NUM(I) = 0
END DO

OPEN(11, FILE='nenpow.txt', STATUS='OLD')
DO I=1, NTOTL
READ(11,*) NY
IF ((NY .LT. NYMIN) .OR. (NY .GT. NYMAX)) THEN
WRITE(*,*) 'ERROR:', I, NY
ELSE
NUM(NY) = NUM(NY) + 1
END IF
END DO
CLOSE(11)

DO I=NYMIN, NYMAX
WRITE(*,*) I, NUM(I)
END DO
STOP
END

長くなりそうなので、
ファイルから年を読んで NUM(1961)〜NUM(2005) に各年の出現数を格納する
所まで

残りは誰かが次スレでw

999 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 17:39:02 ]
FORTRAN = FORmula TRANslation

1000 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 17:39:39 ]
次スレ

FORTRAN III
pc8.2ch.net/test/read.cgi/tech/1104724162/l50

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






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

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

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