1 名前:デフォルトの名無しさん [2006/01/24(火) 09:48:23 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 FORTRAN使いが優しくコメントを返しますが、 お礼はFORTRANの布教と初心者の救済をお願いします。
779 名前:689にて質問したものです [2006/07/26(水) 15:49:52 ] PROGRAM main INTEGER,ALLOCATABLE:: sqmx(:,:)= 0 INTEGER:: l, m, n, i, sum = 0 PRINT'("正方行列の行数は? ",\)'; READ*, l ALLOCATE( sqmx(1:l, 1:l) ) DO i = 1, l DO m = 1, l PRINT'(A,I2,A,I2,A, \)',"第", i, "行", m,"列の要素は? " READ*, sqmx(i,m) ENDDO ENDDO PRINT*, det(sqmx) CONTAINS RECURSIVE FUNCTION det(sqmx) RESULT(res) INTEGER,INTENT(IN)::sqmx(:,:) INTEGER:: res, wk(SIZE(sqmx,1)-1, SIZE(sqmx,1)-1) n = SIZE(sqmx,1); res = 0 IF(n == 1) THEN res = sqmx(1,1) ELSE DO i = 1, n wk(:,1:i-1) = sqmx(2:,1:i-1) wk(:,i:n-1) = sqmx(2:,i+1:n) res = res + sqmx(1,i)*det(wk)*(-1)**(i-1) ENDDO ENDIF ENDFUNCTION det END 「再起呼び出しをもちいてn×nの正方行列をもとめよ」 以前ヒントをいただき、うえのようなプログラムをつくったのですが、未だにうまく動かず 生き恥をさらしています。どこに問題があるのでしょうか?教えてください。1×1、2×2は うまくいくのですが3×3でうまくいかないのです。
780 名前:デフォルトの名無しさん [2006/07/26(水) 17:46:27 ] >>779 お答えしよう、問題は副関数がわでINTEGER::i,nの宣言をしていないために、 主プログラム側のi,nをグローバル変数として使用してしまい、 このために再帰で呼び出すたびに、i,nの値が書き換わってしまうからである。 主プログラム内で、CONTAINSを使うときは、これがおきるのでよっぽど簡単なサブルーチン 以外は面倒でも独立したMODULEで作ったほうが安全w グローバル変数コワスwwwww
781 名前:689にて質問したものです [2006/07/26(水) 19:18:01 ] 780さんありがとうございます。containsは使わないほうがよいということですね。 もう少し煮詰めてみます。
782 名前:デフォルトの名無しさん [2006/07/26(水) 19:26:33 ] >>781 いや、言葉が足りなかった。開発のときには使わないほうがいいということ。 おkなのが確認されたら一体化すればいい。 MODULEだってグローバル変数に関しては同じ危険があるのだが、 MODULEのグローバル変数に、i,j,nやx,y,aなど普段使う変数を入れるのは稀だ。 しかし、メインプログラムでは使わないことは少ない。それで、もし今回のようにCONTAINされる側で うっかりi,j,n等を宣言し忘れたらどうなるか?メイン側で使っていなければエラーがでるが、 メイン側で使っているとエラーがでないし、今回のように悪性の間違いになってしまう。 予防の問題だ。 CONTAINS RECURSIVE FUNCTION det(sqmx) RESULT(res) IMPLICIT NONE INTEGER,INTENT(IN)::sqmx(:,:) INTEGER:: i, n, res, wk(SIZE(sqmx,1)-1, SIZE(sqmx,2)-1) 〜〜〜〜〜〜〜 n = SIZE(sqmx,1); res = 0 IF(n == 1) THEN res = sqmx(1,1) ELSE DO i = 1, n wk(:,1:i-1) = sqmx(2:,1:i-1) wk(:,i:n-1) = sqmx(2:,i+1:n) res = res + sqmx(1,i)*det(wk)*(-1)**(i-1) ENDDO ENDIF print *, n, res 〜〜〜〜〜〜〜これで再帰の挙動がみられるので、i,nを宣言した場合としない場合の違いが見れる ENDFUNCTION det
783 名前:689にて質問したものです [2006/07/26(水) 20:27:43 ] 782さん、具体例まで示していただき本当にありがとうございます。 プログラムが動きました!!自分のちからでないにしても感動があります。 逆に勉強不足も痛感していますが。本当にありがとうございました。
784 名前:デフォルトの名無しさん [2006/07/26(水) 22:45:41 ] 質問させてください。 配列を使用した場合、小数点以下の桁数を指定して出力することはできないのでしょうか?
785 名前:デフォルトの名無しさん mailto:sage [2006/07/26(水) 22:58:59 ] >>784 普通に書式を指定すればおk
786 名前:デフォルトの名無しさん [2006/07/27(木) 00:02:52 ] >>785 うーん、formatとかつかうんですかねー? もう少し具体的に教えていただけないでしょうか?すみません
787 名前:デフォルトの名無しさん mailto:sage [2006/07/27(木) 00:46:10 ] >>786 普通の変数だろうが配列だろうが入出力の書式指定はいっしょ DOUBLE PRECISION X(5) DO 10 I=1, 4 X(I)=1.D0/I WRITE(6,100) X(I) 10 CONTINUE X(5) = 4.D0 * ATAN(1.D0) WRITE(6,'(1X,F12.9)') X(5) 100 FORMAT(1X,F6.3) END
788 名前:デフォルトの名無しさん [2006/07/27(木) 00:59:17 ] ありがとうございます。 うまくいきました。ホント初心者なんで助かりました。
789 名前:デフォルトの名無しさん [2006/07/27(木) 01:51:55 ] >>788 FORMATは、足りなくなったら直前のカッコの所までもどってそれを繰り返す。 ゆえに、1行目だけ特殊で、2行目以降繰り返しというようなことも出来る。 ■ print '(a, i7, 3f10.3,/ (5F10.3))', ' kintama okki', i, (x(i), i = 1, 13) ■ kintama okki 1 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 (/は改行。) (x(i), i = 1, 13) は、入出力のとき使えるDO....LOOPの一種。F90になってからはあまり必要なくなったがF77だと便利。
790 名前:デフォルトの名無しさん [2006/07/29(土) 18:03:58 ] 質問です。 卒論でFortranを勉強する必要があって、普段は環境の整っている学校のパソコンを使っています。 しかし、夏休みで実家に帰るので、ノートPCにもFortranが作動する環境を入れたいのですが、 フリーで手に入るソフト類はないでしょうか? 可能なら、それをダウンロードするページも教えていただけたら助かります。
791 名前:デフォルトの名無しさん mailto:sage [2006/07/29(土) 18:12:18 ] >>790 pc8.2ch.net/test/read.cgi/tech/1104724162/3
792 名前:790 [2006/07/29(土) 18:32:28 ] >>791 ありがとうございました。
793 名前:デフォルトの名無しさん [2006/07/30(日) 23:04:31 ] n(任意の整数)の4乗は何桁になるか表示せよ という問題が分かりません。お願いします。
794 名前:デフォルトの名無しさん mailto:sage [2006/07/30(日) 23:19:23 ] 一般的にある数の桁数は、その数の10を底とする対数の整数部に1を足した値になる。
795 名前:デフォルトの名無しさん mailto:sage [2006/07/31(月) 01:55:04 ] メモメモ
796 名前:デフォルトの名無しさん mailto:sage [2006/07/31(月) 03:38:41 ] 高校で習う筈だが。
797 名前:デフォルトの名無しさん [2006/07/31(月) 08:36:28 ] 質問です。自作のプログラムがどうしてもコンパイルできないです。 経験者の方にどこが間違ってるのか見てほしいんですが、そういう質問はこのスレでも受け付けてくれますか?
798 名前:797 [2006/07/31(月) 09:18:44 ] 過去ログ読みましたorz >799にプログラムを貼るので、どこが間違っているのか指摘していただけると助かります。 サブルーチンの関数を用いてa,v,xを更新していくプログラムです。
799 名前:797 [2006/07/31(月) 09:21:14 ] ! ---宣言文--- implicit none real yy,aa,vv,xx,aa2,vv2,xx2,tt,dt,mm,cc,kk,beta integer n,i tt=0 !---入力--- write(*,*) 'input m,c,k' !システム条件の入力 read (*,*) mm,cc,kk write(*,*) 'input beta' !βの入力 read (*,*) beta write(*,*) 'input a0,v0,x0' !初期条件の入力 read (*,*) aa,vv,xx
800 名前:797 [2006/07/31(月) 09:22:03 ] !---ファイルオープン--- open(10,file='jishindou.txt') open(20,file='outouchi.txt') read (10,*) n,dt !---初期値の書き込み--- write(20,*) tt,aa,vv,xx !---doループによる計算--- do i=1,n read (10,*) yy call reply(yy,aa,vv,xx,aa2,vv2,xx2) aa = aa2 vv = vv2 xx = xx2 tt=tt+dt write(20,30)tt,aa,vv,xx 30 format(f4.1,3f6.3) end do
801 名前:797 [2006/07/31(月) 09:23:00 ] !---ファイルクローズ--- close(10) close(20) stop end !---サブルーチン副プログラム--- subroutine reply(y,a,v,x,a2,v2,x2) real y,a,a2,v,v2,x,x2 a2 = -(y+cc*(v+a*dt/2)/mm+kk*(x+v*dt+a*dt**2*(1/2-beta))) & /(1+cc*dt/2/mm+kk*beta*dt**2/mm) v2 = v+dt*(a+a2)/2 x2 = x+v*dt+a*dt**2*(1/2-beta)+beta*a2*dt**2 end subroutine reply 以上です。
802 名前:デフォルトの名無しさん [2006/07/31(月) 10:05:41 ] >>797 固定フォーマットで書いたのか、自由形式で書いたのかよく分からないが、 自由形式なら継続行の1行目の尻に&を書いておく必要がある。 そうすればコンパイルは通るぞ。
803 名前:デフォルトの名無しさん [2006/07/31(月) 10:12:13 ] >>793 PROGRAM yasukuni WRITE(6, *) 'input n' READ(5, *) n x = REAL(n**4) k = INT(LOG10(x)) + 1 WRITE(6, *) n, '**4=', INT(x), ': ', k STOP END FORTRANでは普通のLOGは自然対数なので、10進法での桁を求めるには常用対数LOG10を 呼ぶ必要がある。
804 名前:797 [2006/07/31(月) 11:07:34 ] >>802 固定フォーマット(のつもり)です。コピペしたときにずれてしまったんですが、 サブルーチン内でa2を計算している箇所の、2行目の6列(6カラム)のところに&を入れています。 ご指摘いただいたのはそこの部分でしょうか?
805 名前:デフォルトの名無しさん [2006/07/31(月) 11:27:15 ] >>804 うい。固定フォーマットだったか。失敬。 FORTRAN77の表記とFortran90の表記が入り混じっているので、どちらとも判断できなかった。 とりあえずどっちでもコンパイルできたぞ。 いちおうエラーメッセージを貼ったほうが、皆の衆の助言はもらえやすいと思うぞ。 せめてエラー行とか。
806 名前:デフォルトの名無しさん mailto:sage [2006/07/31(月) 19:23:14 ] >>797-801 subroutine reply の方でdt, mm, cc等の変数が宣言されておらず 値が不定のまま使われている。 たとえ同じファイルの中に書いてあっても、主プログラムと副プログラムとでは 変数の有効範囲が別々になるので注意が必要。
807 名前:デフォルトの名無しさん [2006/08/01(火) 22:08:22 ] DQNな質問で恐縮なのですが... write文やread文で装置番号を用いずに直接ファイルにアクセスする方法はないでしょうか? 出力するパラメータが増えるごとにほかのすでに出力しているファイルが使っている装置番号と干渉しない装置番号を探さねばならず困っています。
808 名前:デフォルトの名無しさん mailto:sage [2006/08/02(水) 00:28:46 ] >>807 inquireを使えば何とかならないかな。 program nurupo logical :: opened character(len=6) :: string open(10,file="test10") i=10 do inquire(unit=i,opened=opened) if(.not.opened) then write(string,'("test",i2)') i open(io,file=string) write(*,'(i2," opened")') i exit endif i=i+1 enddo end program nurupo
809 名前:デフォルトの名無しさん [2006/08/02(水) 00:51:00 ] >>807 Fortran規格内では無いと思う。 番号を指定しない入出力は、PRINTとREADだが これは標準出力ということだから意味ないし〜 同時にアクセスするのでなければ、いちいちOPEN/CLOSEするしかないかも。 F90ではAPPEND MODEでOPEN出来たりするので77時代よりは使いよい。 3桁の装置番号が使える系もあったりするが、大抵は2桁までなので使用ファイルが増えると困ることがある。 FORTRANの装置番号は確かに改良の余地がある。 ISOにコネのある人は、次の規格で何とかするように提案してくださいw この他にも、01〜09あたりや90番台が予約されている処理系もあったりするので、 知らずに移植したりすると、奇怪な挙動を示して泣く。 まぁEBCDIC/ASCII 問題、浮動小数のFORMAT問題、IO STATの返り値問題と 数十年来の問題が規格において徐々に解決してきているので、装置番号問題も 日ごろから不平不満を漏らしていれば、いつかは解決すると思うw
810 名前:デフォルトの名無しさん mailto:sage [2006/08/02(水) 04:00:00 ] 改良と言うか、装置番号をこちら側から指定するっつー仕様自体がアレだよなあ。 そんなもんは内部で決めてもらわないと。
811 名前:デフォルトの名無しさん [2006/08/02(水) 18:03:54 ] >>808-810 みなさん、いろいろとありがとうございました。 >>808 さんの方法を試しつつFortran2010(?)まで待つことにします。
812 名前:デフォルトの名無しさん [2006/08/03(木) 00:23:38 ] NEC 日立 富士通 あたりはISOと関わっているはずだから、 喚いているとそのうち声が届く可能性は無きにしも非ずだな。 2015年のジェッターマルス時代までには何とかなるだろうさ。
813 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 09:10:07 ] すいませんが、次の課題のヒントだけでももらえないでしょうか。 関数f(x)=x^2+1を台形公式を用いて積分し,出力するプログラムを作成せよ。ただし,次の点に留意してプログラムを作成すること。 ・積分区間の下限値a,上限値bはキーボードから入力する。 ・分割数nの値は5から20まで5刻みで増加させて繰り返し計算する(すなわち,分割数5,10,15,20の場合について計算する) ・台形公式の計算にはサブルーチン副プログラムを用いる。 ・関数f(x) の計算には関数副プログラムを用いる。 台形公式とは。 与えられた関数f(x) を区間[a,b]について積分するとき図のように関数f(x)をn等分して,各区間の曲線を直線で近似し,n個の台形を作る。n個の台形の面積をS1,S2,・・・,Snとすると,全面積Sは近似的に, S = S1 + S2 + ・・・ + Sn となる,ここでn等分した小区間の幅hは, h = (b-a)/n となるので,各台形の面積は S1 = h・(Y0+Y1) /2.0 S2 = h・(Y1+Y2) /2.0 ・・・ Sn = h・(Yn-1+Yn) /2.0 となる。したがって,全面積は, S = S1+S2+・・・+Sn = h・{(Y0+Yn)/2.0+(Y1+Y2+・・・+Yn-1)} と近似できる。
814 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 09:32:18 ] >>813 program trapez read(*,*) a,b do n=5,20,5 call calc_area(a,b,n,area) print *,n,area enddo end program trapez real function fx(x) fx=x*x+1 end function fx subroutine calc_area(a,b,n,area) real,dimension(:),allocatable :: y allocate(y(0:n)) h=(b-a)/float(n) do i=0,n y(i)=fx(a+i*h) enddo area=h*((y(0)+y(n))/2.+sum(y(1:n-1))) deallocate(y) end subroutine calc_area
815 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 10:32:59 ] >>814 ありがとうございます。 でも、自分でなんとか作ってみました。 ものすごく拙いプログラムですけれど… 時間をとらせてしまってすいませんでした。
816 名前:デフォルトの名無しさん [2006/08/03(木) 21:48:03 ] 超絶初心者なんですが明日試験があるのでなりふり構わず質問させていただきます 7.0D0/3.0D0とかにあるDってのはなんなんでしょうか?
817 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 21:51:57 ] double precision
818 名前:デフォルトの名無しさん [2006/08/03(木) 22:04:25 ] >>817 ごめんなさい、どういう意味なんでしょうか・・・ そしてさらにわからない問題あるんでお願いします INTEGER I,J,K I=11 K=o DO 10 J=5,1,-2 IF (J.LE.I)THEN K=K-J END IF I=I+K 10 CONTINUE WRITE(*,*) K を実行したときに表示される数を求めよ これがどういうことをやるプログラムなのかも教えてくれると更に嬉しいです・・・
819 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 22:16:05 ] 参考書嫁
820 名前:デフォルトの名無しさん [2006/08/03(木) 22:23:19 ] ごめんなさい、手元にある参考書っていうか教科書が 初心者の為に簡潔に書いているせいか、なんか意味がわからないんです 何回も読んでみたんですけど何でそうなるのか理解できないんです スレ汚して申し訳ありませんでした
821 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 23:05:58 ] >>818 Oと0、Iと1って間違いやすいよな。 今これが分からないのなら明日の試験は絶望的だぞい。
822 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 23:32:09 ] I と 1 は間違えてないと思うが。
823 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 15:20:29 ] 最悪なのは小文字のlと1だろう。 やっぱ大文字最高!!w
824 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 15:35:45 ] >>823 同意。 ただ全角スペースは見た目が半角とつかない。
825 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 16:06:37 ] 大文字でプログラムを書く人は CAPS LOCKにしているの? vi でプログラムを書いていると、 CAPS LOCK にすると意図に 反する編集をしてしまいそうで怖い。でもずっと shift を押し ながら打つのも面倒。 それで小文字で書いてます。
826 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 16:36:44 ] プログラムするなら、ちゃんと文字を区別できるフォントにしなきゃ。
827 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 08:49:17 ] つまり、こんなフォントを使えば良いんだな。 ttp://www.geocities.com/TimesSquare/4965/
828 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 16:31:49 ] Osaka 等幅で十分
829 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 16:51:22 ] 必ずしも等幅フォントである必要はないね。エディタ(或いは表示系)が勝手に 等間隔に配置してくれるだけでも事は足りるから。
830 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 16:22:18 ] 質問があります。 ある文献のFORTRAN77で書かれたプログラムを、練習がてら そのまま書き写してbuildすると libc.lib(crt0.obj) : error LNK2001: unresolved external symbol _main test.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. test.exe - 2 error(s), 0 warning(s) とりあえず、build errorの中を調べてみたんですが、全く解決できません。 コンパイルエラーはゼロです。 どのような解決方法がありますか?教えてください。
831 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 18:02:10 ] >>830 program文がないんだよ。 FORTRANのプログラムは program 文で始まり end program 文で終わる。 program文をちゃんと書いたか確かめてみな。
832 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 19:02:10 ] program 文は一応あってもなくてもコンパイル可能。普通は書くけど。 end は大事だけど、end がないだけだとそういうエラーにはならない。 このエラーが出てくるのは、 関数とかサブルーチンとかしか定義してないファイルの場合。 まあ、それを指して「program 文がない」と表現してるのかもしれないけど。
833 名前:デフォルトの名無しさん [2006/08/09(水) 13:06:31 ] age
834 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 22:51:51 ] >>831-832 うーん。なるほど。 なんとかがんばってみます。ありがとうございます。
835 名前:デフォルトの名無しさん [2006/08/09(水) 23:39:19 ] >>831-832 おまいら、ここは初心者スレなんだからもっと優しく教えてやれよ! さぁ次はしょんべんだ!ってかんじでさー
836 名前:デフォルトの名無しさん [2006/08/10(木) 09:54:51 ] しょんべんワロタ
837 名前:デフォルトの名無しさん mailto:sage [2006/08/10(木) 16:55:46 ] ______ | ,,..-‐";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;` 、 i あ /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;、 ヽ つ あ /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;| 〉 ぎ : |;;;;i "'`~ "`~ `i||i" '' ゙` " |;;;;;;| / は : |;;;;| ヽ` u |;;;;;| | シ .|;;| ,-;;;;;;;;;;"フノ ヾ`;;;;;;;;;;;;;;;ヽ |;;;;| | ョ ,,ト;| ',,_==-、く >゙-==、 |/ i | ン |i 、| ' ̄"彡| || | | べ |'. (| 彡| |)) | .| ン ! 、| i,"(_ ,, 、, |" i | だ ヽ_| ` .|_/ ノ_ .|゙ 、,.−-‐ 、,, | ヽ、_,,,、_ノ .i ゙、 '  ̄ニ ̄ /| | 、  ̄ ̄ , ' | | i ` 、 ( , " | | ` ー---― "| | | | i |
838 名前:デフォルトの名無しさん mailto:sage [2006/08/10(木) 21:33:56 ] >>835 ソースがなければ、これ以上どうにもならん。
839 名前:デフォルトの名無しさん mailto:sage [2006/08/11(金) 00:10:30 ] ソースがなければ、しょう油をかければ良いじゃない! 文句があるならベルサイユへいらっしゃい!!
840 名前:デフォルトの名無しさん [2006/08/15(火) 16:48:28 ] 自宅のWindowsPCでfortranを使いたいのですが インストール用のディスクを入れると This kit does not support the currently running Operating system or Hardware と表示されます。「あきらめろ」てことでしょうか。 動かす方法があれば教えてくださいっ
841 名前:デフォルトの名無しさん mailto:sage [2006/08/15(火) 17:06:54 ] そのFORTRAN処理系に未練があるのなら、 処理系の動作環境を確認して、 それに応じたOSとハードを用意すればいい。
842 名前:デフォルトの名無しさん [2006/08/15(火) 21:08:04 ] >>840 基本的にはあきらめろってことだw しかし、せめてOSの種類とインストールを試みているコンパイラの名前くらい 書かないとまともな返事は期待できないw
843 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 01:11:50 ] >>840 つ ttp://www.google.co.jp/search?hl=ja&q=%22This+kit+does+not+support+the+currently+running+Operating+system+or+Hardware%22&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
844 名前:デフォルトの名無しさん [2006/08/20(日) 21:02:50 ] さあ、楽しい夏休みも残り二週間だ。 みんな、宿題はもう終わったかな?
845 名前:デフォルトの名無しさん [2006/08/22(火) 06:28:00 ] Absoft の コンパイラーをWinXP上で使ってもらったソースのコンパイルをしようとしています。 現在、ソースのコンパイルは出来るのですが、そのプログラムが壊れているようです。 調べてみると 以下のような getarg の部分でつまずいているみたいです。 ... character*100 extflag, newbin, oldbin, schnam integer*2 status ... ii = 1 call getarg(ii, extflag, status) ii = ii + 1 call getarg(ii, iname, status) ... getargについてすこし調べたのですが説明はすべて二つのパラメターを用いることを前提としているようなので この部分が何をしているのかわかりません。何をしようとしているのでしょうか? また、この部分のコンパイルの問題を解決する方法はありますか? お願いします。
846 名前:デフォルトの名無しさん [2006/08/22(火) 10:38:20 ] GETARG はコマンドライン引数を受け取るサブルーチン。 Fortran2003で正式の規格に入ったが、それ以前のバージョンではメーカーごとの 独自拡張仕様である。が、たいていは存在している。 解決法 1.コマンドライン引数を使わないならコメントにして飛ばす。 2.マニュアルの後ろのほうにある、非標準メーカー拡張の章をしらべて書き直す。 (たいていはPOSIX規格互換になっているので、微妙な修正で解決できると思う。)
847 名前:デフォルトの名無しさん mailto:sage [2006/08/30(水) 18:23:24 ] 保守党
848 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 08:34:44 ] コンパイル時にエラーがないのに実行できないのはプログラムに問題があるという事なのでしょうか?
849 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 10:29:29 ] はい、そうです。
850 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 12:06:38 ] 実行環境の方に問題がある場合もある。
851 名前:初心者 [2006/09/02(土) 06:26:17 ] くだらない質問ですみません・・・ Compaq Visual FortranとFortran77を用いる際、プログラムの違いはあるのでしょうか?? あと、前者を用いて、分割数を上げていき、円周率を求めるプログラム例がわかりません。 どなたかご教授願えないでしょうか?
852 名前:デフォルトの名無しさん [2006/09/02(土) 08:13:32 ] module oppai contains real function pi() pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164 return end function pi end module oppai program main use oppai implicit none print *, pi() stop end program main
853 名前:デフォルトの名無しさん mailto:sage [2006/09/02(土) 10:11:39 ] >>848 chmod a+x
854 名前:デフォルトの名無しさん mailto:sage [2006/09/02(土) 10:24:05 ] program hoge implicit none integer, parameter :: WP = SELECTED_REAL_KIND(15) integer :: i do i = 8, 160, 8 print *, "分割数:", 4*i, ", π =", oppai(i)*4 end do stop contains pure function f(x) real(kind=WP), intent(in) :: x real(kind=WP) :: f f = 1 / (1 + x**2) end function f pure function oppai(n) integer, intent(in) :: n integer :: i real(kind=WP) :: oppai, dx, s dx = 1.0_WP / n s = 0 do i = 1, n/2 s = s + f(2*(i-1)*dx) + 4*f((2*i-1)*dx) + f(2*i*dx) end do oppai = s * dx / 3 end function oppai end program hoge
855 名前:デフォルトの名無しさん [2006/09/07(木) 23:09:34 ] すみません。フリーのFortran90/95のプログラム作成ツールありませんか? それで質問なんですけど。定積分をするときにf(x)=3*x**2などのような簡単な関数は 処理の手前に文関数として定義することで認識されて計算できるのですが、 f(x)=erfc(a*x)+(4*a*c)*exp(2*a*k)+・・・・・・・・・・・・・・・・のような長い関数を 文関数として定義してやると、エラーが出ます。エラーの内容は配列とみなされどうのこう のといったないようです。どうしたらよいでしょうか
856 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 03:27:36 ] >>855 >フリーのFortran90/95のプログラム作成ツールありませんか? ttp://www.g95.org/ >それで質問なんですけど。 ttp://ace.phys.h.kyoto-u.ac.jp/~tomita/education/fortran90/sec8.html#8.2.
857 名前:デフォルトの名無しさん [2006/09/08(金) 20:50:48 ] ファイルをオープンして入力処理をしているプログラムを安全に中止する方法 はありますか?ctrl+cで強制終了するとファイルが壊れる恐れがあることを聞きました。 linux環境で実行しています。 どうか、よろしくお願いします。
858 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 23:13:53 ] >>857 読み込みだけならCtrl-C(SIGINT)を受け取って終了する時にファイルが壊れることは無いと思うが 心配ならSIGINTを無効にするなり、自分でシグナルハンドラを書いて適切な終了処理をさせれば良い。 処理系依存でSIGNALとか言う感じの関数なりサブルーチンが用意されている(ことが多い)
859 名前:デフォルトの名無しさん [2006/09/09(土) 02:24:31 ] 858さん 教えて頂いてありがとうございます。 知識不足なので、これを手がかりにやってみます
860 名前:デフォルトの名無しさん [2006/09/12(火) 21:24:00 ] TBasicなのですが・・・ キーボードから西暦年を入力し、その年が閏年かどうかを判定するプログラムを作れ。 但し、if文は一つだけ使うこと。 1.西暦が4で割り切れると閏年である。 2.ただし西暦が4で割り切れても100で割り切れる年は閏年としない。 3.ただし西暦が100で割り切れても400で割り切れる年は閏年とする。 if ((a mod 4 = 0) or (a mod 400 = 0)) and (a mod 100 <> 0) then こうすると2000年が閏年ではなくなってしまうのですがどうすれば良いのでしょうか? どなたか教えてください。お願いします。
861 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 21:56:29 ] スレ違い すれ立てるまでもない質問はここで 第78刷 pc8.2ch.net/test/read.cgi/tech/1157765060/
862 名前:デフォルトの名無しさん [2006/09/12(火) 22:52:28 ] >>860 結論から先に言うと2000年はうるう年ではない。カレンダーを見て確かめろ。 つぎにこの課題はすでにこのスレで2回ぐらい出てきている。過去レス嫁。 最後にここはFortranスレなのでBasic野郎は失せやがれ!w
863 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 02:55:02 ] > 結論から先に言うと2000年はうるう年ではない。カレンダーを見て確かめろ。 え? ホントに2000年のカレンダー見たの?
864 名前:デフォルトの名無しさん [2006/09/13(水) 03:48:58 ] >>863 グレゴリオ暦じゃないんだろw
865 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 08:01:29 ] 2000 年は閏年だよー。 普通は 100 年ごとに閏年じゃないけど 400 年ごとに閏年なんだよ。
866 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 13:08:27 ] そろそろ本題に入ろうよ><
867 名前:860 [2006/09/13(水) 15:56:18 ] ご迷惑をお掛けしてすみませんでした。今後気をつけます。
868 名前:デフォルトの名無しさん [2006/09/21(木) 13:10:11 ] はじめまして。 授業でfortranの授業をやっているのですが、さっぱりわかりません。。 ソフト?は77でやってます。 この問題を誰か解いてください涙。。 行列の計算 1 2 3 −1 −2 A= 4 5 6 B= −3 −4 7 8 9 −5 −6 A*B この行列のプログラム、教えていただけないでしょうか。 お願いいたします。
869 名前:デフォルトの名無しさん [2006/09/21(木) 14:15:44 ] >>868 まず、手でA*Bの計算はできるんだろうな??
870 名前:デフォルトの名無しさん [2006/09/21(木) 14:16:44 ] できます!!!!!!
871 名前:デフォルトの名無しさん [2006/09/21(木) 14:48:20 ] AとBを2次元配列に入れる ex. A(1,1)=1, B(3,2)=-6 A*B=Cとするなら、 C(1,1)=A(1,1)*B(1,1)+A(1,2)*B(2,1)+A(1,3)*B(3,1) とうい具合にC(1,1)〜C(3,2)まで6個式を書けばいい。
872 名前:デフォルトの名無しさん [2006/09/21(木) 14:52:13 ] do ループをつかわなければならないんです;。
873 名前:デフォルトの名無しさん [2006/09/21(木) 14:58:55 ] すみません。どうにかできそです^^
874 名前:デフォルトの名無しさん mailto:sage [2006/09/21(木) 21:18:24 ] >>868 mixiでも質問してだだろ。
875 名前:デフォルトの名無しさん [2006/09/21(木) 22:06:02 ] >>873 がんばれ! うまくいかなかったら、また聞きに来い そのかわりちんちんうp
876 名前:デフォルトの名無しさん mailto:sage [2006/09/29(金) 13:40:50 ] ルンゲクッタつかおうとおもったら functionの形じゃないとだめですかね? というかfunction以外でできる方法あるの?
877 名前:デフォルトの名無しさん [2006/09/29(金) 20:54:07 ] >>876 つ SUBROUTINE
878 名前:デフォルトの名無しさん [2006/09/30(土) 00:22:52 ] 簡単すぎて申し訳ないとは思うんですがどうしていいのか... real dI,dV,dR3,R1,R2,R3,Rx write(*,*) 'dR3 ?' read(*,*) dR3 write(*,*) 'R1 ?' read(*,*) R1 write(*,*) 'R2 ?' read(*,*) R2 write(*,*) 'R3 ?' read(*,*) R3 write(*,*) 'Rx ?' read(*,*) Rx dI=R2*2*dR3/(R1*R2(R3+Rx)+R3*Rx(R1+R2)+9090(R1+R2)(R3+Rx)) write(*,*) 'dI=',dI dV=dI*9090 write(*,*) 'dV=',dV stop end
879 名前:デフォルトの名無しさん [2006/09/30(土) 00:24:32 ] をコンパイルするとこんなエラーが出ました。 どうすればいいのですか? 0013) dI=R2*2*dR3/(R1*R2(R3+Rx)+R3*Rx(R1+R2)+9090(R1+R2)(R3+Rx)) 0014) *** R2 is already in use as a local name 1 ERRORS [<MAIN@>FTN77 Ver 4.03] *** Compilation failed