1 名前:デフォルトの名無しさん [2006/01/24(火) 09:48:23 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 FORTRAN使いが優しくコメントを返しますが、 お礼はFORTRANの布教と初心者の救済をお願いします。
263 名前:262 mailto:sage [2006/03/17(金) 11:58:40 ] 自分、257でした。 259さん、すみません。
264 名前:http://www.vector.co.jp/soft/win95/util/se072729.html mailto:http://www.microsoft.com/japan/windowsxp/64bit/default.mspx [2006/03/18(土) 19:33:30 ] 64bitに対応したトリップ検索プログラムありますか? TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
265 名前:デフォルトの名無しさん [2006/03/18(土) 23:10:21 ] この板でも爆撃喰らうんだな。VIPでは日常茶飯事だがw
266 名前:デフォルトの名無しさん [2006/03/26(日) 07:13:26 ] xxxx01.txt xxxx02.txt .... みたいな連番になっているファイルを順番に読み込むようにしたいのですが、 読み込むファイル名の部分をどのような書式にすれば良いのでしょうか? ((文字列+整数)をまとめて文字列として認識する方法が分かりません)
267 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 11:30:18 ] >>266 内部ファイルを使うのが一番手っ取り早いだろう。 CHARACTER*10 FNAME INTEGER I DO I = 1, 20 WRITE(FNAME,'(A, I2.2, ''.txt'')') 'xxxx', I OPEN(10, FILE=FNAME, STATUS='OLD') : ファイルの読み込み : CLOSE(10) END DO
268 名前:266 [2006/03/26(日) 20:41:47 ] >>267 どうもありがとうございます。助かります。 申し訳ないですが、もうひとつ質問、 連番になっていなくても、ディレクトリにあるファイル全部を 読み込むような手段はあるでしょうか?
269 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 23:22:58 ] >>268 Fortran95 までの標準仕様ではディレクトリの操作や検索は出来ない。 しかし、大抵の処理系にはファイル操作関係の拡張手続きが付いているので それらを使えば可能。 以下は Compaq Visual Fortran での例: use DFLIB implicit none character(len=100) :: dir, files, fname integer(kind=4) :: handle, fnlen type(FILE$INFO) :: info : dir = "D:\DataDir\" files = trim(dir) // "*.txt" handle = FILE$FIRST do fnlen = GETFILEINFOQQ(files, info, handle) if ((handle == FILE$LAST) .or. (handle == FILE$ERROR)) exit fname = trim(dir) // info%NAME open(unit=10, file=fname, status="OLD") : ファイルの読み込み : close(10) end do : 詳しくは処理系のマニュアル等を参照のこと。
270 名前:266 mailto:sage [2006/03/27(月) 20:27:30 ] >>269 どうもありがとうございました。 連番に直してから読み込むことにします。
271 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 17:37:56 ] format 文について、教えてください。 配列Aのサイズ変化にあわせて、 format を可変にしたい場合どうすればよいのでしょうか? program main integer, parameter :: NUM=4 real*8 A(NUM) integer n do n=1,NUM A(n)=0.1*n end do ! write (6,'(1x, NUMf5.1)') (A(n),n=1,NUM) ! これはエラー write (6,'(1x, 4f5.1)') (A(n),n=1,NUM) ! これなら通る end
272 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 18:08:54 ] write文で DO型並びを使わず愚直に DO文をかく。 write(6, '(1x, $)') do n=1, NUM write(6, '(f5.1, $)') A(n) end do write(6, '(/)') FMT記述子を文字列変数にするという手もあるが、 こちらの方がシンプル。
273 名前:271 mailto:sage [2006/04/05(水) 20:36:03 ] >>272 ありがとうございます。無事にできました。 改行制御編集記述子と斜線編集記述子を組み合わせれば、 できるのですね!
274 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 20:58:19 ] 仕様上はFORMAT書式に対応する項目がなくなった時点で書式制御が終了するので 出力する項目に対して多めに指定してやっても良い(ちょっと強引だが) write(6, '(1X, 100F5.1)') (A(n),n=1,NUM) 処理系依存だが、<> でくくった中に整数式を書ける処理系もある。 write(6, '(1X, <NUM>F5.1)') (A(n),n=1,NUM) ついでに、コロン編集記述子を使えば入出力項目がなくなった時点で 以降の書式を無視して終了させられる。 write(6, '(1X, 100(F5.1, :, ", "))') (A(n),n=1,NUM)
275 名前:デフォルトの名無しさん [2006/04/05(水) 21:01:15 ] >>272 $ 指定子ってFortranの規格外でないかい?
276 名前:271 mailto:sage [2006/04/05(水) 21:13:08 ] >>274-275 情報、ありがとうございます。 過大定数の仮代入やコロン編集記述子は、アリですね! <> でくくった中に整数式を書ける処理系 Compaq Visual Fortran ではできました!すごい! 処理系依存はできるだけ避けたいと思っているので、 考えどころですね。 改行制御編集記述子は規格外でしたか! なかなか使い勝手のよさそうな機能なのに。
277 名前:デフォルトの名無しさん mailto:sage [2006/04/06(木) 10:53:52 ] $の代わりにこっちでどうかな? write(*,'(f5.1)',advance='no') A(n)
278 名前:271 mailto:sage [2006/04/06(木) 12:35:24 ] >>277 ありがとうございます。 こちらでもできました! 停留入出力という技もありましたね! F90 の書式仕様の理解は、手を抜いていましたが、 まじめに取り組むべきだと思いました。
279 名前:デフォルトの名無しさん [2006/04/07(金) 19:33:01 ] 教えてください!! 初めて書き込みさせていただきます。 Fortranのプログラムの課題が出ているのですがわからなくて・・・ 簡単な内容なんだと思うのですが、 みなさんのお力貸していただけないでしょうか?? 内容は 配列データa(i) (i=0,Num-1) が与えられたとき、 このデータの平均値および標準偏差を計算するプログラムを書け。 というものです。 お願いします!!
280 名前:デフォルトの名無しさん mailto:sage [2006/04/07(金) 20:31:05 ] >>279 平均値と標準偏差を求める式は知っているな? それをそのまま書けばよい。 avg = sum(a(0:Num-1)) / Num v = sum((avg - a(0:Num-1))**2) / Num s = sqrt(v)
281 名前:デフォルトの名無しさん [2006/04/08(土) 00:17:30 ] >>280 ありがとうございます!! 書いてみます!
282 名前:デフォルトの名無しさん [2006/04/08(土) 00:32:04 ] 学校の課題のこのプログラムが、全体として何が行われているか、どなたか教えてください! お願いします。 real::x,x1,x2,func real::dy,delt=1.e-6 read(*,*) x1,x2 if(func(x1)*func(x2) > 0.0) then write(*,*) 'boo boo' stop end if dy = sqrt(-func(x1)*func(x2)) do while (dy > delt) x=(x1+x2)/2.0 if(func(x1)*func(x) > 0.0) then x1=x else x2=x end if dy = sqrt(-func(x1)*func(x2)) end do x=x1 if(abs(func(x1)) > abs(func(x2))) x=x2 write(*,*) x end
283 名前:デフォルトの名無しさん mailto:sage [2006/04/08(土) 06:52:57 ] >>282 方程式の解、二分法 ttp://www.arch.kumamoto-u.ac.jp/hagane/yamanari/joho3/bisec.html
284 名前:デフォルトの名無しさん [2006/04/08(土) 11:14:08 ] >>283 ありがとうございます! URLとっても参考になりました。 これでやっとレポート書けそうです。 ありがとうございます!!
285 名前:デフォルトの名無しさん [2006/04/08(土) 13:27:05 ] しばらくぶりに・・・・・・宿題もっと持って来い!
286 名前:デフォルトの名無しさん [2006/04/12(水) 09:42:26 ] こんにちわ。 02.dat,05,dat,08,datなどのように、 飛び飛びで01.datから10.datまでの間の番号のついたファイルがあります。 ただし、どの番号のファイルがあって、どの番号が無いのかは 時々刻々と変わります。 このファイルを、01から、10まで、順番にOPENしてREADしたいのですが、 このとき、存在しない番号のファイルをスキップするにはどうしたらよいでしょうか。 status='old'を試しましたが存在しない番号のところで止まってしまいます。 ヒントだけでもよいのでよろしくお願いします。
287 名前:デフォルトの名無しさん [2006/04/12(水) 09:44:56 ] 追記 status無しのただのOPEN文だと、存在しない番号ファイルを 空ファイルで作ってしまいます。これを作らないようにしたいのです。
288 名前:デフォルトの名無しさん mailto:sage [2006/04/12(水) 12:29:36 ] >>286 logical :: exist character(len=80) :: filename do i=1,10 write(filename,'(i2.2,".dat")') i inquire(file=filename,exist=exist) if(exist) then open(io,file=filename,status='old') ! close(io) endif enddo
289 名前:デフォルトの名無しさん mailto:sage [2006/04/12(水) 16:26:44 ] 以下の複素多項式p(z)(zは複素変数)のゼロ点を全て、ニュートン法で求めよ。 (1)p(z)=z**2+4*i (2)p(z)=z**4-2*z**3+2*z**2-2*z+1 お願いします。
290 名前:デフォルトの名無しさん [2006/04/12(水) 22:51:27 ] PROGRAM newton IMPLICIT NONE INTEGER :: i, n REAL :: pi COMPLEX :: z pi = 4.0 * ATAN(1.0) n = 4 !2 DO i = 1, n z = EXP( 2.0 * pi * CMPLX(0.0, REAL(i) / REAL(n)) ) DO IF ( ABS(f(z))**2 < EPSILON(REAL(f(z)))**2 + EPSILON(IMAG(f(z)))**2 ) EXIT z = z - f(z) / df(z) END DO PRINT *, 'finished', z, f(z) END DO STOP CONTAINS COMPLEX FUNCTION f(z) IMPLICIT NONE COMPLEX, INTENT(IN) :: z f = z**4 - 2.0 * z**3 + 2.0 * z**2 - 2.0 * z + (1.0, 0.0) ! f = z**2 + (0.0, 4.0) RETURN END FUNCTION f !---------------------------------- COMPLEX FUNCTION df(z) IMPLICIT NONE COMPLEX, INTENT(IN) :: z df = 4.0 * z**3 - 6.0 * z**2 + 4.0 * z - (2.0, 0.0) ! df = 2.0 * z RETURN END FUNCTION df !---------------------------------- END PROGRAM newton
291 名前:デフォルトの名無しさん [2006/04/12(水) 23:03:46 ] 解 finished (-1.414214,1.414214) (0.0000000E+00,1.3691417E-07) finished (1.414214,-1.414214) (0.0000000E+00,1.3691417E-07) Press any key to continue finished (-7.1054274E-15,1.000000) (-2.8421709E-14,0.0000000E+00) finished (0.9998764,-2.0247151E-11) (0.0000000E+00,1.0012824E-14) finished (1.1924881E-08,-1.000000) (4.7699519E-08,0.0000000E+00) finished (1.000000,1.7484555E-07) (0.0000000E+00,5.6843419E-14) Press any key to continue ふつう、n次代数方程式の初期値は、1のn乗根から出発するのだが、 2番目の問題はそれがすでに解だったりして、newton法を使う前にLOOPから抜けてしまうw 問題設定が悪いw Newton法では微係数が必要なのだが、ここでは手動で微分して関数として与えた。 発展形としては数値微分するもよし、多項式なら機械微分するもよし。 収束判定条件にはEPSILON関数を使ってみた。 あまり真面目に考えてない。
292 名前:デフォルトの名無しさん mailto:sage [2006/04/13(木) 11:35:03 ] どうもありがとうございます。 学校でやってみます。
293 名前:デフォルトの名無しさん [2006/04/13(木) 13:56:30 ] >>288 様 ありがとうございます。 教えていただいたコードをそのままやってみたのですが、 existの中身がファイルのある無しに関わらず常に「F」になって if文の中に入っていきません。原因として何が考えられるでしょうか。 使っているコンパイラはFTN95というやつです。 INQUIREというヒントをいただきましたので、自分でも考えてみます。 ありがとうございました。
294 名前:293 [2006/04/13(木) 14:04:39 ] できました。 ファイルの拡張子指定ミスでした。 大変失礼いたしました。orz
295 名前:デフォルトの名無しさん [2006/04/21(金) 20:32:22 ] あげ
296 名前:デフォルトの名無しさん [2006/05/01(月) 13:36:24 ] そろそろ 宿題持ってこないか?w
297 名前:デフォルトの名無しさん [2006/05/04(木) 01:54:12 ] 質問です。 私のやりたいことは、 file_001.txt file_002.txt file_003.txt ・・・・ とナンバーの振られたファイルを順次読み込んでいくプログラムを作りたいのです。 do文などで何とかならないものでしょうか?
298 名前:デフォルトの名無しさん [2006/05/04(木) 02:08:36 ] >>297 character*12 fname ・・・ do i=1,20 write(fname, '(''file_'', I3.3, ''.txt'')') i open(unit=11, file=fname, status='OLD') ・・・ close(11) end do こんな感じでどうでしょう。
299 名前:297 [2006/05/04(木) 02:27:59 ] できました!ありがとうございます。 ここでwrite文はなにをしてるんでしょうか? fnameの定義ですか?
300 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 09:36:38 ] >>299 内部ファイルを使って文字列変数 FNAME に 'file_' + 3桁の整数 + '.txt' を書き込んでいる。 つまり、ループカウンタ I に応じて ファイル名 'file_001.txt' 〜 'file_020.txt' を生成している。 内部ファイルについての詳細は↓やマニュアル等を参照のこと。 ttp://docs.sun.com/source/806-4843/Cp2_io.html
301 名前:デフォルトの名無しさん [2006/05/10(水) 17:17:37 ] Fortran90で直行座標(x,y,z)を極座標(r,θ,Φ)に変換するプログラムを作れ。 って課題が出たのですがわかりません。教えて下さいm(._.)m
302 名前:デフォルトの名無しさん [2006/05/10(水) 19:38:12 ] >>301 「直交座標 極座標」でググればすぐ出て来るだろう、というのは置いといて なんのひねりもなく作ると、 program hoge implicit none real, parameter :: PI = 3.14159265 real :: x, y, z, r, th, ph print *, "x, y, z:" read *, x, y, z r = sqrt(x**2 + y**2 + z**2) th = acos(z / r) ph = atan2(y, x) print *, "r, θ, φ" print "(3F12.3)", r, th*180.0/PI, ph*180.0/PI end program hoge
303 名前:デフォルトの名無しさん [2006/05/16(火) 00:19:31 ] はじめて書き込みます。 大学の先輩にFortranのソースプログラム(?)をもらって、それをインストールしたCOMPAQ VISUAL FORTRANで動かそうとしてます でもコンパイルすると、 Can't open indirect file C:DOCUME~1 みたいなエラー文が出ます。これはどういう事なんでしょうか?
304 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 00:32:43 ] >>303 ソースのパスが空白や日本語を含まないようにして(例えば"D:\TEST\HOGE.FOR") 再トライ
305 名前:デフォルトの名無しさん [2006/05/16(火) 16:21:12 ] 303です 304さんありがとうございました エラーなくコンパイルし、実行できました
306 名前:デフォルトの名無しさん [2006/05/16(火) 18:30:45 ] 実行ファイルで条件を入力し、Enterを押すとすぐにウィンドウが消えてしまうのですが、どうしたらいいでしょうか?違うパソコンではそういう状態になりませんでした。
307 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 20:40:49 ] >>306 いくら何でも情報少なすぎ。 少なくともどんな環境で実行したか位は書いとかんと、まともの答えてもらえんぞ。 まあとりあえず、プログラムの最後に read * とか pause とか書いとけや。
308 名前:デフォルトの名無しさん [2006/05/16(火) 21:13:52 ] 学校のソフトを使ったので詳しい名前はわかりませんが、fujitsu fortran90 とかいう名前だったと思います。学校のパソコンでファイルを実行したとき は、条件の値を入力したら答えが出て、答えが出た状態でキーボードに 触れるとプログラムウィンドウが閉じていたんですが、自分のパソコン (NEC VALUESTAR Pentium4)で実行したときは条件の値を入力した瞬間 にプログラムウィンドウが閉じてしまいます。307さんのアドバイス通りに 最後にpauseと書いたらウィンドウが勝手に閉じることはなくなりましたが、 それでは根本的に解決していないのでまだ困ってます。
309 名前:デフォルトの名無しさん [2006/05/16(火) 23:43:41 ] >>308 何がしたいのか今一よくわからないんですが… 使っているOSと自分のパソコンに入ってるコンパイラは何ですか? 学校のFujitsu Fortranの開発環境で実行して終了後一時停止していたプログラムを 自分のパソコンでexeファイルをダブルクリックして起動したときでもソースを変更せずに 同じように終了後一時停止するようにしたい。 というのなら>>307 の様にして終了直前にキー入力待ちにして止めるか、 コマンドプロンプトを開いてその上で実行しないと無理ですよ。
310 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 00:44:43 ] 初心者ですがフリーのをDLしてやってみたんですが、あるプログラム を実行したら入力させる画面が出て、入力したら答えが出ないで、プログラム が終了してしまいます。どうしたらいいでしょうか?ちなみに正常にコンパイル されています。
311 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 00:55:17 ] >>310 >>309
312 名前:306=308 [2006/05/18(木) 22:21:21 ] >>309 >コマンドプロンプトを開いてその上で実行 ありがとうございます、解決しました。
313 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 14:54:18 ] m組の変数xと関数f(x)の値を読み込み、x0に対するf(x0)の値をLagrange内挿する 関数副プログラムを作りなさい。また主プログラムを付けて、 次のデーターに対してf(0.525)を内挿してみなさい。 x f(x) 0.0 1.0 0.1 0.90484 0.2 0.81873 0.3 0.74082 0.4 0.67032 0.5 0.60653 0.6 0.54881 1次〜6次の内挿による解の精度も調べなさい。 参考 dimension XI(N),FI(N) RLAGRN=0.0 do 20 I=1,N F=FI(I) do 10 J=1,N if(J.ne.I) P=P*(X-XI(J))/(XI(I)-XI(J)) 10 continue 20 RLAGRN=RLAGRN+P return end 御願いします
314 名前:デフォルトの名無しさん [2006/05/21(日) 21:22:53 ] 放物運動で時刻t、角度θの任意の物体の位置のソースファイル?はあるのですが角度を30度、45度、60度の3通りに ついて計算し、すべての軌跡を出力せよ。との問題に全く手がでません。 ヒントとして配列を用いて3つの角度をプログラム内で定義する。とあるのですがよくわかりません。 どなたか教えて下さい。 お願いします。
315 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 21:32:10 ] >>314 元のソースがどんなのか知らんが、「配列を用いて」というところからすると 角度と配列を渡すとその配列に結果を格納するサブルーチンを作って それを3回CALLすればいいんじゃないの?
316 名前:デフォルトの名無しさん [2006/05/21(日) 21:51:35 ] すいません初心者なんでCALLとかわかんないです・・・ テキストには dimension angle(3) data angle/30.,45.,60./ ・・・・・・・ do 20 i=1,3 theta=angle(i)*PI/180. t=0. 10 continue ・・・・・・・ if(y.lt.0.) then go to 20 else go to 10 end if 20 continue close(1) end と書いてあるんですが ・・・・・・ を考える課題なんですけど本当にわかりません。 教えて下さい。
317 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 23:00:36 ] >>316 配列って角度の方を配列にしてるのね・・・ まあ、プログラムを見る限り、最初の「・・・・・・・」の部分で ・データファイルをOPEN文で開く 次の「・・・・・・・」の部分で ・角度theta、時間t、などから位置x、yを求める ということなのだろうけど ・初速度や初期位置は既知なのか、自分で決めるのか、ファイルから読み込むのか ・データファイルの書式は? など不明な点があるのでこれ以上は自分でおやりなさい。 いずれにせよ情報を小出しにされたのではエスパーでもない限り「本当にわかりません」。
318 名前:デフォルトの名無しさん [2006/05/21(日) 23:58:11 ] 1からNまでの整数について、次のそれぞれの分類に属する整数の数を数えて表示するプログラムを作成せよ。 ・3の倍数であり、5の倍数でもあるもの ・3の倍数であるが、5の倍数ではないもの ・3の倍数でも5の倍数でもないもの 誰か教えてください。
319 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 00:30:10 ] プログラムというか数字の扱いの勉強したら? 高校数学あたり。
320 名前:デフォルトの名無しさん [2006/05/22(月) 01:09:08 ] >>319 ここはどんな質問にもマジレスする擦れです。 宿題も教えまくりますw
321 名前:デフォルトの名無しさん [2006/05/22(月) 01:27:09 ] >>318 FORT77で書いてみたw 英語はうんこw PROGRAM vip WRITE(*, *) ' INPUT N' READ (*, *) N N1 = 0 N2 = 0 N3 = 0 DO I = 1, N M3 = MOD(I, 3) M5 = MOD(I, 5) IF (M3 .EQ. 0 .AND. M5 .EQ. 0) N1 = N1 + 1 IF (M3 .EQ. 0 .AND. M5 .NE. 0) N2 = N2 + 1 IF (M3 .NE. 0 .AND. M5 .NE. 0) N3 = N3 + 1 END DO WRITE (*, *) ' The number of multples of both 3 and of 5', N1 WRITE (*, *) ' The number of multples of 3 but not of 5 ', N2 WRITE (*, *) ' The number of multples not of 3 nor of 5 ', N3 STOP END >>320 専ブラ用インデント
322 名前:デフォルトの名無しさん [2006/05/22(月) 01:35:53 ] >>314 ,316 出された情報だけでは解けない。 初速度が必要だが、それがファイルに入っているのだろうか? 重力常数も必要だがどうするか?(まぁ知ってはいるが、問題が地球とは限らないかもww) もうちょっと情報出せ。 テキストプログラムを見る限り出題者はセンス悪いw このスレで素直な良い手筋を学べ
323 名前:デフォルトの名無しさん [2006/05/22(月) 02:27:10 ] >>313 F90でエラーチェックなしウンコプログラムw PROGRAM Lagrange IMPLICIT NONE INTEGER, PARAMETER :: n = 7 INTEGER :: i REAL :: xin(n), yin(n), x, y OPEN (10, FILE = 'input.dat') DO i = 1, n READ(10, *) xin(i), yin(i) END DO x = 0.525 y = alagran(x, 6, xin, yin) WRITE(*, *) ' x, f(x) =', x, y STOP CONTAINS REAL FUNCTION alagran(x, n, xin, yin) IMPLICIT NONE REAL , INTENT(IN) :: x, xin(:), yin(:) INTEGER, INTENT(IN) :: n REAL :: tmp INTEGER :: i, j alagran = 0.0 DO i = 1, n tmp = yin(i) DO j = 1, n IF (j /= i) tmp = tmp * (x - xin(j)) / (xin(i) - xin(j)) END DO alagran = alagran + tmp END DO END FUNCTION alagran END PROGRAM Lagrange
324 名前:デフォルトの名無しさん [2006/05/22(月) 02:42:50 ] >>323 ごめw まちがい このままだと5次w y = alagran(x, 6, xin, yin) ↓ y = alagran(x, n, xin, yin) でw とりあえず、答えは x, f(x) = 0.5250000 0.591555 のはずw 間違ってても知らんw ほぼ直線に乗っているのでまぁこんな感じ? ラグランジュ法はデータの差分の漸化式で計算するほうが一般的なだが とりあえず参照として出されたサブルーチンと同じく公式どおりに書いた。 1〜6次までの誤差の見積もりのほうは、課題の雰囲気からすれば、まじめな誤差解析は要求して いないだろうから、0.6と0.5・・・・0.0まで逆進する方向でデータを増やしてサブルーチンを呼んだ 結果を書いて何事かムジャムジャ言えばよかろうw
325 名前:デフォルトの名無しさん [2006/05/22(月) 02:47:20 ] >>325 DO i = 1, 6 ! y = alagran(x, n, xin, yin) y = alagran(x, i + 1, xin(7 - i:7), yin(7 - i:7)) WRITE(*, *) ' i, x, f(x) =', i, x, y END DO i, x, f(x) = 1 0.5250000 0.5921000 i, x, f(x) = 2 0.5250000 0.5915309 i, x, f(x) = 3 0.5250000 0.5915560 i, x, f(x) = 4 0.5250000 0.5915547 i, x, f(x) = 5 0.5250000 0.5915551 i, x, f(x) = 6 0.5250000 0.5915558 こんな感じか? 誤差が0.1^Nに比例しているとか書けばいいのだろうか?w ttp://www.library.cornell.edu/nr/bookfpdf/f3-1.pdf この辺でも読みやがれですぅ
326 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 00:11:48 ] n個の実数データを配列datに読み込み、読み込んだデータを降順に出力する。 ただし、データを読み込んだ配列の中身は変更せず、別に整数型の配列indexを 用意して、大きい順の並びが dat(index(1)),dat(index(2)),・・・,dat(index(n)) であたえられるようにする。つまり次のような出力命令 do 30 i=1,n write(*,*)dat(index(i)) 30 continue によって、データが降順に出力されるようにせよ。 という課題がでたのですが、fortran77の形で教えていただけませんか? よろしくお願いします<m(__)m>
327 名前:デフォルトの名無しさん [2006/05/24(水) 00:49:46 ] NAGのFortranBuilderの試用版が無料セミナーで配布されるらしい 以下参照 【日時】 5月31日(水)13時30分〜(13時開場) 【場所】 英国大使館 (東京都千代田区一番町1) 【地図】 www.nag-j.co.jp/fbreleasemap.htm 【内容】 1:Fortran Builderのご紹介(Fortran Builder開発者 中野 剛) Fortran Builderの機能、製品コンセプト、事例ご紹介.デモンストレーションなど 2:プログラミング学習とe-Learning (法政大学情報メディア教育研究センター所長 竹内 則雄 教授) プログラミング言語学習用電子ブックと開発環境が連動した体験的なFortran プログラミング学習環境の概要と、対面授業やe-Learningでのその効用について 3: NAGWare f95 and reliable, portable programming (英国NAG NAGWare Fortranコンパイラ開発者、マルコム・コーエン) How to detect errors using NAGWare f95,and how to write portable, reliable programs.Support for features from the latest Fortran standard and plans for future releases. 4: Fortran Builder を使った数値計算 (筑波大学 長谷川 秀彦 助教授) 行列計算パッケージ LAPACK の紹介と Fortran Builder を利用したLAPACK の手軽な使い方について 5:Fortran Builder 体験コーナー・30日トライアル試用版配布・ ノベリティ配布など もちろん無料です。 英国大使館の警備都合上事前にご登録をお願いしております。 下記URLフォームにて参加登録ができます。
328 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 01:27:04 ] >>326 特に指定がなかったので解りやすく(?)バブルソートでやってみますた。 parameter (n=10) real dat(n) integer index(n) C do 10 i=1,n read(*,*) dat(i) index(i) = i 10 continue C do 22 i=1,n-1 do 21 j=1,n-i if (dat(index(j)) .lt. dat(index(j+1))) then ntmp = index(j) index(j) = index(j+1) index(j+1) = ntmp end if 21 continue 22 continue C do 30 i=1,n write(*,*) dat(index(i)) 30 continue stop end 処理系によっては配列の宣言部分でエラーになるかも知れないので その時は適時修正のこと。 #F77形式で、って言われるとここが一番難しいかもw
329 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 13:00:42 ] >>328 選択法でプログラミングしてもらえませんか?
330 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 13:35:10 ] >>329 オレが口をだすべきではないと思うが、苦言を一言。 モノの頼み方を知ってるのか? このスレはフォートランの超初心者向けではあるが、 人生の超初心者(不躾な厨房)向けではないぞ。 質問をするなら、回答者が答えやすいように、できるだけ詳しく書く。 最も簡単な方法は、(要約などせず)出題内容をすべて書く。 直接選択法の解が必要なら、最初から書け。 労を厭わず、回答案を出してもらえたら、 最初の一言は「ありがとうございます」だ。 次に、再要望であったり、回答内容に対する質問だ。
331 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 15:48:54 ] >>330 申し訳ありません。 バブルソートでの解に関しましては、御礼申し上げます。 もし、気分を害されてないようでしたら、直接選択法の解をお願いできませんか?
332 名前:デフォルトの名無しさん [2006/05/24(水) 16:16:20 ] >>330 まぁそうなんだけどさ,ここは2chだし,いいんでないのw Fortran人口を増やすためにも甘い水で誘うべしw
333 名前:330 mailto:sage [2006/05/24(水) 16:34:51 ] >>331 オレじゃなくて、>>328 に 感謝して、非礼を詫びろ。 >>332 たしかにそうとも思うが、 そういう教育はだれかがしなければ、 会社に入って恥をかくまで治らないと思う。 社会人になっても治らないものもいるが。orz Fortran 人口を増やすには、説教より回答が一番だな。 328 えらい。オレばか。orz
334 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 18:18:04 ] >>331 ほれ、>>328 の真ん中のループの所を入れ替えれ。 do 22 i = 1, n-1 imax = i do 21 j = i+1, n if (dat(index(imax)) .lt. dat(index(j))) imax = j 21 continue ntmp = index(i) index(i) = index(imax) index(imax) = ntmp 22 continue 君の行動を称えて以下の文章を贈ろう。 コレをよく読んで今後も精進に励め。(どう励むかはお前次第だ) www.redout.net/data/osietekun.html >>333 まあそう気にしなさるな。 ここに宿題を丸投げして後で苦労するのも、社会に出てからちんぷんかんぷんな 質問をして恥をかくのも、全て本人の自己責任ってやつだ。
335 名前:デフォルトの名無しさん [2006/05/24(水) 23:01:32 ] WRITE(*,'(A5$)')name(i) のような書式で、表示位置を決める定数"5"の部分をREAD文で読み取って 任意の値に変更できるようにしたいのですが、 どうすればいいでしょうか? ちなみに num=5 1000 FORMAT(Anum$) WRITE(*,1000)name(i) と書いたのですがうまくいきませんでした。
336 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 23:58:55 ] >>335 1. 上の方でも出てきているが、<>の中に変数名(整数式)を書く(ただし、一部の処理系の拡張形式) write(*,'(A<num>$)') name(i) 2. 文字列の書式を書き込む character*10 str ・・・ write(str, '(''(A'',I3,''$)'')') num write(*,str) name(i)
337 名前:デフォルトの名無しさん [2006/05/25(木) 00:27:03 ] >>336 内部ファイルは便利なのに知られていないよう棚。もっと啓蒙が必要なようだ。 FAQにでも入れておきたいところだw >>335 ■必要な第1の知識 FORTMATは 1.FORMAT文で与える。 2.文字常数として与える。 3.文字変数として与える。 という、3通りの方法がある。 たとえば .....1.FORMAT(A13) .......WRITE(6, 1) 'WE ARE VIPPER' は .......WRITE(6, '(A13)') 'WE ARE VIPPER' と等価だし ......CHARACTER*10 fmt ......fmt = '(A13)' ......WRITE(6, fmt) 'WE ARE VIPPER' とも等価である。 ■必要な第2の知識 内部ファイルというものがある。これは文字列がファイルのように読み書きできるということを意味する。 WRITE(9, '(A)' ) ' chin chin man man ' ! これはファイルの9番に文字列を書き出している。 WRITE(fmt, '(A)') ' okki ' ! これは文字列fmtに文字列を書き出している。 ちなみにREAD文でも同様のことができる。 これを利用すれば、好みのfmt文を実行時に動的に生成できる。 文字列操作を使ってもいいが、この方が数値を文字列として書き込むのが楽勝でできる。
338 名前:デフォルトの名無しさん [2006/05/26(金) 02:28:39 ] 無料のWindows用のコンパイラはありませんか?
339 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 02:41:15 ] >>338 g77(gccに入ってる) Salford f77
340 名前:335 mailto:sage [2006/05/26(金) 02:56:34 ] できました!短時間に二人もありがとうございます! >337さんの WRITE(9, '(A)' ) ' chin chin man man ' が顔に見えてちょっとうれしいです。
341 名前:sage [2006/05/26(金) 12:39:43 ] >338 g95 ttp://www.g95.org/
342 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 15:17:28 ] >>334 ありがとうございます。 よい勉強になりました。
343 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 10:05:21 ] fortranの遺産があるんですが・・・ なぜか配列の出力が20行ごとw むかしの名残なんでしょうか? ってか計算だけfortranでやらせてGUI?はほかの言語でやるにはどうしたらいいの? オシエテ
344 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 10:12:01 ] あとゎぁ書式の指定で format(500i4) ここの500のところを定数とかで指定できないの?
345 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 11:37:12 ] >>344 最初から読めとまでは言わないけれど、 10前のレスくらい読もうよ。 >>335-336 答えそのものではないけれど、ほぼ回答。 >>337 少し難しいけれど、極めて有益な情報。
346 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 12:42:13 ] サンクスwww くそふるいマニュアル本みててもわからないわけだ・・・w
347 名前:デフォルトの名無しさん [2006/05/27(土) 15:25:28 ] >>343 大体はFORTRAN側をDLLにしてVBやDelphiなんかで処理しているみたいだな. まぁ,GUIもFORTRANでやってる連中もそれなりにいるようだ. Intelの質問掲示板に行けばうまくいかねーとウンウンうなっている人たちに出会えるw ttp://softwareforums.intel.com/ids/board?board.id=5
348 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 18:56:55 ] FTN95でコンパイルしたんですが, オブジェクトファイルができただけで, この後どうやって実行すればいいのか教えてください.
349 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 21:16:08 ] >>348 1. コンパイル時に「/LINK」オプションを付ける。 例: ftn95 hoge.f90 /link 2. コンパイルが正常終了したら、おもむろにプログラム名を入力してEnterを押す。 例: hoge 3. スプラッシュが消えるまで全裸正座で待機。 例: + + ∧_∧ + (0゚・∀・) ワクワクテカテカ (0゚∪ ∪ + と__)__) +
350 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 21:56:58 ] >>349 おお!できました.ありがとうございます。 ちょうど風呂からでたところなので助かりましたw
351 名前:デフォルトの名無しさん [2006/05/28(日) 00:27:25 ] (______________ J そ 君 (__ ┌―‐―┐ ) き ん ! (_ |`l TT了| } ゃ な (_ j .| .|:| .l | / あ か 待 (_ | | .|j .j | イ | . っ ち (,_ |.| .|l .|:| ,. -‐ /_. っ こ た ( |.|. |! |/ / ! う ま (` `ー /..:::::\≧,,,、:::7___ で え (―――――――――(:::::::>'´ == \::⌒l^⌒ _ (⌒ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ノ く彡/// ∪,ノ ;| .レ⌒Y^'⌒`\________ く:::::∧ '_,. -、 く/::::::::/ |:::| \xく _,,,...,_ \:::::l、ヽ ,ノ \,,∠,,__ \|:::| _,....!,,_ \ iれ__,.、ヽ lF〒`ヾ.\,,..イ |::::::::, `7´ _,,.ィ ヽ{|iュ ェッリ | || _,..-/7゙h _|::::::// \.{n|.ィァ it} ', _'_ j) r'"三¨7´\| |´.|::::// |:::トl、 rュj . ト ニ イl、 / ゚`.|n./ .イl ,∧ |::// |::,| 'ーケトr'TTlイ /_`ヾtっ r'l゙ /⌒`lくミV / ,r1´|`'六´ //` ̄´ `Y´ |└┬シj ./ 7ヽ〈 /ヾ)< ./ | ∨|::|∨ ! { r ,、 _,シ /゙丁〈 / } { { \ | ',|::|/ ! ,ゝ-< ( / .| |/ ∧ \| l .Y。 .| |` 〃 ̄ ̄⌒ / 〈 /! ', __,,....::-‐ .∧. |。 { ゙爪` ' ‐- 、..,,,...イ '、 / .| `|:::::::::::::::: \/ l |。./ ,l | l, .| . || `'ー' i | j::::::::::::::::: ヽ、`'::、L.∧/ / |.{ u 〈.| イ 〈 /::::/::::::::::: ::::::::`ヽ、 ∨ / ̄| | 、 / l:l. | j /::::/::::::::::::: :::::\::::.....  ̄`| l | 鬱鬱 .l:l// l| ∨:::/::::::::::::::::
352 名前:デフォルトの名無しさん [2006/05/28(日) 02:32:45 ] いいかお前らにためになるお言葉を言い渡しておこう。 「問題はレベルの高いプログラム言語を使うか、レベルの低いプログラム言語をつかうか といったことではない、そうではなくて、 レベルの高いプログラム言語を使うか、もしくはレベルの高いプログラム言語処理系を低レベル言語で作成するか、 ということだ。」 つまりフォートランなんかいまさら使っている時点で負け組み。 それで半ばコンピュータの専門か気取ってる痛いやつが多すぎなんだよw
353 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 02:59:53 ] 日本語でおk
354 名前:デフォルトの名無しさん [2006/05/31(水) 01:01:28 ] さて、諸君。次の問題を持ってきたまへ。
355 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 17:45:37 ] RoR じゃなくて FoR はありませんか
356 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 18:36:58 ] 駐車料金を計算するプログラム 料金は30分単位で切り上げて計算される 最初の一時間まで300円/30分 一時間を越えると200円/30分 入力は実数型 2,35(2時間35分) この実数を引数で関数の値が料金のFunctionをつくり使用する ↑のような宿題が出たのですがFortran77の型で誰かお願いします
357 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 19:49:52 ] >>356 program parking read(*,*) hour,fmin write(*,*) ifee(hour,fmin) stop end function ifee(hour,fmin) totalmin=hour*60.+fmin if(totalmin.le.60.) then ifee=300*int(totalmin/30) if(totalmin-30.*int(totalmin)/30.gt.0.) ifee=ifee+300 else ifee=600+200*int(totalmin-60.)/30 if(totalmin-30.*int(totalmin-60.)/30.gt.0.) ifee=ifee+200 endif return end
358 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 21:09:21 ] >>357 ありがとうございます
359 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 21:18:09 ] あ、忘れてたのですが最高課税額が4000円になるようにしてもらえませんか 本当に申し訳ない><
360 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 22:26:55 ] >>359 357 じゃないけど。 せっかくプログラムがあるんだから、 いろいろいじってみようよ。 ヒント:if 文 をどこかに一行いれる。
361 名前:357 mailto:sage [2006/06/01(木) 11:32:39 ] 慌てて作ったら間違っていたみたい。 それを修正するのも良い勉強になるでしょう。 あと、変数に7文字以上使っているのも問題かも。 実は厳密なFORTRAN77を知らない。
362 名前:デフォルトの名無しさん [2006/06/01(木) 17:35:24 ] >>361 それ以前に小文字を使っているぞいw
363 名前:357 mailto:sage [2006/06/01(木) 20:21:52 ] そういやそうだったねorz。字下げもしない方が良かったかな。