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/
741 名前:デフォルトの名無しさん [2007/07/25(水) 21:53:51 ] C言語なら5×10=50のエリアに連続的に並んでいるだけだから、 A(7,7)は49番目というつもりなら境界を越えない限りは アプリの実行結果は同じになるんじゃないか。
742 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 21:55:50 ] A(10,5) で A(7,7) はおもっくそ境界越えとるがな。
743 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 00:22:18 ] >>742 従来のFORTRANでは、境界はあまり気にしなくていい。 というか、サブルーチンに渡したりするときは次元すら気にしない。 どうせ先頭番地しか渡してないので。自己責任でGo! >>740 >>741 が正しい。 どうせメモリー上では1次元に展開されているので、どう展開されるか分かっていれば 本来不正な添え字でも、目的の配列要素をアクセスすることが可能。 ただ、FORTRANとCでは、1次元に展開される時の列と行の順序が逆になっている。 FORTRANは縦書き。A(1,1),A(2,1),A(3, 1),.....,A(1,2), A(2,2), A(3, 2),.....という風にメモリー上に 並んでいる。 .
744 名前:デフォルトの名無しさん [2007/07/26(木) 07:24:32 ] FORTRANの他に数値解析に向いてる言語って何がありますかね?
745 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 08:43:53 ] >>743 いや、配列のために確保されているメモリ領域を越えちゃってるという意味で・・・
746 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 10:30:25 ] >>745 今回に限って言えば、50>7*7=49でぎりぎりセーフでね?
747 名前:デフォルトの名無しさん [2007/07/26(木) 12:17:43 ] >>746 Cは0から始まるから A(7,7) は (7+1)*(7+1)=64番目なのよ。 まあ、>>739 のは Cの場合はA(6,6)と読み替えてやるのがよろし。
748 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 12:23:45 ] >>746 A(10,5) で A(7,7) にアクセスするってのは、 10 * (7 - 1) + 7 = 66 番目のメモリ領域にアクセスするってことで、 50 要素しかない A(10,5) のメモリ領域は余裕で越える。
749 名前:747 mailto:sage [2007/07/26(木) 12:32:02 ] >>748 確かにそうだ。何で1行7要素だと思ったのか。 馬鹿だった。
750 名前:デフォルトの名無しさん [2007/07/26(木) 14:56:16 ] じゃA(5,10)なら良いのか? violationになりそうだけど
751 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 19:32:06 ] 5 * (7 - 1) + 7 = 37 だから、 確保したメモリ領域を越えないという点に関してのみは問題は無い。
752 名前:739 [2007/07/26(木) 19:38:10 ] >740-751 皆さんありがとうございました。 考え方がよくわかりました。 変な質問になってしまい申し訳有りません。 A(7,7)は例が悪かったと反省しています。
753 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 19:58:59 ] >>744 お金があったらMATLAB 貧乏人ならOctave
754 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 23:33:09 ] >>748 んだ。おまいが正しい。わしが間違ってた。すまんこw
755 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:32:54 ] >>743 >どうせメモリー上では1次元に展開されているので、 そうなんすか・・・知らんかった つまり、A(7,7)は単に先頭から7*7=49番目を見るってことですか? >ただ、FORTRANとCでは、1次元に展開される時の列と行の順序が逆になっている。 つまりFORTRANは左から、Cは右から1,2,3,・・・と展開していくってことですか
756 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:37:39 ] >>755 ちょっと前のレスくらい読めよ・・・
757 名前:755 mailto:sage [2007/07/27(金) 12:39:52 ] >>756 すいません新着し忘れてましたすいません
758 名前:747 mailto:sage [2007/07/27(金) 12:51:34 ] まだ混乱しているようだから、整理すると SUBROUTINE A(X) INTEGER X(10,5) WRITE(*,*) X(7,3) END SUBROUTINE PROGRAM INTEGER Y(5,10) Y(2,6)=10 CALL A(Y) STOP END とかやると ちゃんと 10って表示されるってことでしょ。 Y(2,6) は前から27番目。 X(7,3)も27番目だから。 メインルーチンの中で Y(7,7) とかやるとコンパイル時にエラーが出ると思う、さすがに FORTRAN77の頃は結構利用されていたような気がする。 普通は1次元配列で作って2次元で受け取るとかその逆だと思うけど。
759 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:42:25 ] すいません.Fortran90で複数行をまとめてコメントアウトすることはできないのでしょうか?
760 名前:755 mailto:sage [2007/07/27(金) 13:55:30 ] >>758 ありがとうございます。もんすごい良く分かりました。 Y(7,7)でやってみたところ、g77だとやはり out of defined rangeとなりましたが、 ifort9ではコンパイルでき結果も一致しました。 SUBROUTINE A(X) INTEGER X(10,5) WRITE(*,*) X(7,4) END SUBROUTINE PROGRAM INTEGER Y(5,10) Y(7,7)=10 CALL A(Y) STOP END ifortって緩いんですかね?
761 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 14:18:10 ] >>760 配列の範囲チェックに限らず、ifortは微妙にいろいろ緩いよ。少なくともg77よりは。 オプションで変わるのかも知れないが、デフォではそう。 最初のうちはg77で練習した方がいいかもね。
762 名前:デフォルトの名無しさん [2007/07/27(金) 17:14:05 ] Fortran77で、Do文を利用して配列に値(1or0)を代入して ファイルにはいたら途中から?????とか巨大な数が でてしまうのですが、 何か初期化などが必要なのでしょうか? Do文の前にx(i,j,k)=0とか入れてるのですが、 これでは駄目なのでしょうか?
763 名前:デフォルトの名無しさん [2007/07/27(金) 17:51:26 ] >>762 1か0を代入した配列要素を参照すれば1か0を返すと思います。 予期せぬ値を吐いているのは、配列が宣言されてから、 その要素に一度も値が代入されていないからだと思います。 予期せぬ値が配列のどの要素にあたるのか考えてみれば 大抵あっさり解決すると思いますよ。
764 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 20:02:58 ] Intel fortranだと初期化してない変数は自動で0になるんよね
765 名前:762 mailto:sage [2007/07/27(金) 20:22:52 ] >>763 ,764 ありがとうございます。 使用しているのはSalfordのftn77peです。 配列要素は代入したものを参照しているはずなのですが。。。 以下の内容ですが間違いありますか? integer h parameter(ilimit=10) parameter(jlimit=20) parameter(klimit=2) real Conc(ilimit+1,jlimit+1,klimit+1) open(10,file='tests1.csv') i=0 j=0 k=0 h=5 Do 300, i=0,ilimit Do 200, j=0,jlimit if(j.lt.h) then Conc(i,j,k)=0.0 else Conc(i,j,k)=1.0 endif write(*,*)i,j,k,Conc(i,j,k) write(10,*)i,j,k,Conc(i,j,0) 200 Continue 300 Continue c close(10) stop end
766 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 22:09:46 ] >>765 FORTRANの配列は特に指定しない場合は 1から。 >使用しているのはSalfordのftn77peです。 >>765 のプログラムを/CHECK オプションを付けてコンパイルすると実行時エラーが出る。 /FULLCHECK オプションを付けるとコンパイル時にエラーになる。 配列を0から始めたいのなら以下のようにする。 real Conc(0:ilimit,0:jlimit,0:klimit)
767 名前:762 [2007/07/28(土) 13:05:47 ] >>766 アドバイスありがとうございます。 教えていただいたオプションつけると 実行時エラーが確かにでますね・・・ どこに間違いがあるのでしょう?
768 名前:762 mailto:sage [2007/07/28(土) 13:09:51 ] >>766 初期化したら大丈夫でした。 何から何までありがとうございました。
769 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 17:13:16 ] gfortran, ifort で NaN を検出したいのですが、 どうすればよいでしょうか。 program test real(8) :: x,y x=1. y=0. write(*,*) x/y,isnan(x/y) end $ gfortran test.f90 /tmp/ccABo1qT.o: In function `MAIN__': test.f90:(.text+0xa3): undefined reference to `isnan_' collect2: ld はステータス 1 で終了しました $ i$ ifort test.f90 $ ./a.out Infinity F 鳥は Linux 2.6.20-gentoo-r8 SMP x86_64 Intel(R) Xeon(TM) CPU 3.80GHz GenuineIntel GNU/Linux $ gfortran --version GNU Fortran 95 (GCC) 4.1.2 (Gentoo 4.1.2) $ ifort --version ifort (IFORT) 9.1 20070215 です。
770 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 20:48:12 ] >>769 Intel Fortran, g95 なら program test real(8) :: x,y x=0. y=0. write(*,*) x/y,isnan(x/y) end gfortranの場合は知らん。
771 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 21:18:08 ] >>770 thanks. infinity は NaN ではなかった。小手先の工夫で program test real(8) :: x,y x=0. y=0. x=x/y if(x-x.ne.0.) then write(*,*) x else write(*,*) x-x endif end を考えたのですが gfortran は NaN を返し、ifort は 0.000000000000000E+000 を, ifort -O0 は NaN を返しました。例外をトラップしようと思うと、 c のプログラムをリンクせざるとえないのかな。
772 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 23:20:20 ] >>771 マニュアル味噌。 Module: USE IFPORT Syntax result = IEEE_FLAGS (action, mode, in, out) gfortranの方は知らんが、F2003対応のIEEEモジュールを誰かが作ったとか書いてあったような。 記憶違いだったら、ごめんw
773 名前:デフォルトの名無しさん [2007/08/02(木) 03:31:02 ] わざわざNanを検出する理由は何か?
774 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 09:17:03 ] >>773 なんもない
775 名前:726 mailto:sage [2007/08/09(木) 12:58:16 ] >>729 ずいぶん遅くなってしまいました。 私のやりたいことはデータを並び替えるだけなのですが、もともとの出力データは役所が絡んでいるので、 出力形式がオリジナルのものと違うと何かと説明が面倒なのです。 ありがとうございました。
776 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 10:45:29 ] 標準入力でファイル名入れるときに、普通のシェルみたいに、タブによるインクリメントサーチ使えたらなぁ やっぱり無理だよね?
777 名前:デフォルトの名無しさん [2007/08/10(金) 14:36:40 ] だれかこのプログラムの使い方教えてください cera-www.dkrz.de/IPCC_DDC/info/Readme.gzip ASCIIデータをなにかに変換するプログラムなのですが 自分無知でよくわかりません。 おねがいしますm(__)m
778 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 16:19:46 ] ノットあナンバーはコンピューータサイエンスやるなら覚えとけボケ
779 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:15:35 ] >>777 只のデータフォーマットの説明とサンプルプログラムのようだが。 よくわからないなら使うなよ。
780 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 00:51:39 ] >>778 Fortran利用者はコンピュータ・サイエンスなんか知らない。 計算機自体をサイエンスだなんて何言ってんの?あんた馬鹿?って認識だろw IEEEフォーマットが普及したのはありがたい。 IBMとクレイのフォーマットが最後までがんばっていたようだが、 各社の糞数値フォーマットもようやく死滅したようで、まずはめでたい。 Infのおかげで、ゼロ割エラーで止まらなくなったのはうれしい。 IF文で避けているはずなのに、投機的実行して0割エラーでアボンとか、ウンコ漏れそうになるw 正直NaNはあんまり助けにならん。 >>777 その質問じゃ答えようが無い。 もう少し具体的に質問すれば誰か答えてくれるだろう。 書いてあることは、>>779 の言うとおりだ。 1.gzipで圧縮してあるからばらすが良い。解凍するとASCIIファイルが出る。 2.そのASCIIファイルのデータの書式。および読み込みサンプル。 の2点だ。
781 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 07:47:23 ] 中二病?
782 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 18:38:47 ] 夏休みで暇だから、宿題を持ってきたまえ。
783 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:27:55 ] >>777 中身もちゃんと見ていないが、たぶん、IPCC(国際的な専門家でつくる気候変動に関する政府間パネル) が、シミュレーションした結果をGRIB形式とかいうので保存してあるというやつの 中身の説明と、サンプルプログラムじゃないかな。
784 名前:デフォルトの名無しさん [2007/08/21(火) 11:56:55 ] OPEN(5,FILE='C:\\test-data.txt') DO 20 K=1,200 READ(5,25)X(K),Y(K) 25 FORMAT(2F20.0) 20 CONTINUE のとき、test-data.txtはどんなデータを与えればいいのだ? 2F20.0がよくわからん。
785 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:10:05 ] >>784 勝手に装置番号 5番を使うなよ。とか、 不用意に入力に書式仕様を使うなよ。というのは置いといて。 2F20.0 「20文字読み込んでその値を実数と見なす。小数点も指数も含まない場合は小数部のない実数と見なす。」 を 2回繰り返す。
786 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:32:58 ] >>785 まぁ F20.0 を使ったのは筋のいいほうでないかいw
787 名前:デフォルトの名無しさん [2007/09/01(土) 03:44:42 ] >>785 unit 番号は置いといて 読みこむ場合は、カラムの20,21カラムがしっかりしてたら 123.456 とかを入れても、123.456できちんと格納されてるよ。
788 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 10:11:05 ] データの桁位置が絶対にズレないということなら大丈夫なんだけどね…
789 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 16:07:04 ] Fortranで整数型 i = 1を文字型に変換するにはどうしたらよいでしょうか? i = 1 hoge = char(i) だとhogeに『のような文字が入りうまくいきません.
790 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 20:54:09 ] >>789 二バイト文字を入れたいという質問か?
791 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 21:02:48 ] >>789 >>587-590
792 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 21:39:58 ] このスレは内部ファイルの質問の無限ループだなw
793 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 08:01:37 ] 超初心者用だからな。 それだけ初心者にとって理解しにくい部分ってことだろ。
794 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:22:38 ] 次からテンプレに内部ファイルの使い方を書いといてくれ。
795 名前:デフォルトの名無しさん [2007/09/09(日) 19:45:39 ] visual fortranだと動くのに、FTN95だとめちゃくちゃエラーがでて コンパイルできません。金が無いんでフリーのFTNで動かしたいのですが 主な原因わかるかたいるでしょうか?
796 名前:デフォルトの名無しさん [2007/09/09(日) 21:04:57 ] >>789 Fortran まだあるのかよ Format変換かけて内部にWriteすればよいと思う SFTNとかUFTNとかあるのだろうか... $Branchi $do とか...
797 名前:エスパー mailto:sage [2007/09/09(日) 21:51:03 ] >>795 Visual Fortran独自の機能を使っているからだよ。
798 名前:デフォルトの名無しさん [2007/09/10(月) 13:12:28 ] FORTRAN使いが許容できるのはFORTRAN77迄だべ。 もはやFORTRANは死んでいる。C言語のプリプロセッサに成り下がった。
799 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 13:46:42 ] >>798 終わってるのはCのほうだろw
800 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 18:49:41 ] すいません。 整数を格納する1次元配列と整数のデータがあります. 整数データを重複を許さないで(重複データを飛ばして)配列に格納するにはどうすればよろしいでしょうか?
801 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 19:49:54 ] >>800 sort uniq
802 名前:デフォルトの名無しさん [2007/09/11(火) 05:00:09 ] 超初心者です。 format文の練習のために 学籍番号122番のアキラ君は 英語50点,国語80点、数学30点。この3科目の合計点は160点です。」 という文字を表示するプログラムを character*20 a integer b real c,d,e,f read(*,10)a,b,c,d,e,f 10 format(a6,i3,3i2,i3) f=c+d+e write(*,20)b,a,c,d,e,f 20+format('学籍番号',i3,'番の',a6,'君は',4x,'英語',i2,'点、国語',i2,'点、数学',i2,'点。この3科目の合計点は',i3,'点です。') stop end というように作ったんですけど 0007) write(*,20)b,a,c,d,e,f 0008) 20+format('学籍番号',i3,'番の',a6,'君は',4x,'英語',i2,'点、国語',i2,'点、数学',i2,'点。この3科目の合計点は',i3,'点です。') *** Non-blank label field in continuation line 0008) 20+format('学籍番号',i3,'番の',a6,'君は',4x,'英語',i2,'点、国語',i2,'点、数学',i2,'点。この3科目の合計点は',i3,'点です。') WARNING - Characters found after column 72 (use -NO_WARN73 to suppress) *** Unterminated or empty character constant 2 ERRORS,1 WARNINGS [<MAIN@>FTN77 Ver 4.03] *** Compilation failed とでてコンパイルできません。どこがいけないのでしょうか?
803 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 10:05:09 ] >>802 20+format プラス記号が紛れ込んで、継続行扱いになっている。それで矛盾。 あと72カラムはみ出している。 一応エラーメッセージを読めば書いてある。 初心者はエラーメッセージを読んでも分からないといって読まないのが普通だが、教養人なら読めw
804 名前:デフォルトの名無しさん [2007/09/12(水) 02:28:32 ] >>803 返信ありがとうございます。 すいません。お聞きしたいのですが72欄をこえて書くにはどうしたらよいのでしょうか? ネットで調べたら 6欄は72欄を超えてしまった場合、ここに何か文字を書けば(たいていは「+」を書く)、72欄を越す文であっても続けて書き続けることができるようになります。 と書いてあったのですけど自分の書き方ではいけないのでしょうか? 初心者名質問ですいません。ぜひ教えてください。
805 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 11:37:24 ] >>804 72カラムを超えては書けないので、次の行に継続することになる。 20 format('学籍番号',i3,'番の',a6,'君は',4x,'英語',i2,'点、国語', + i2,'点、数学',i2,'点。この3科目の合計点は',i3,'点です。') こんなかんじか。よく確かめていないが。
806 名前:デフォルトの名無しさん [2007/09/12(水) 14:59:44 ] >>804 ありがとうございます。コンパイルできました。 しかしまたあらたな問題が。 ネットでは>>802 のプログラムをコンパイルして実行したら 「学籍番号122番のアキラ君は 英語50点,国語80点、数学30点。この3科目の合計点は160点です。」という文が表示されます。 とかいてあったのですが実際に実行したらコマンドプロンプトの画面に C:\fortaran>format とでてきて何かを入力するみたいなんですがどのように入力すればいいのでしょうか? アキラ,122,50,80,30,160 と入力すればいいのでしょうか?でもコマンドプロンプト上では日本語入力できなくてこまってるんですけど。 すいません。また初歩的と思われる質問になってしまって。 お手数ですがよろしくお願いします。
807 名前:デフォルトの名無しさん [2007/09/12(水) 15:01:26 ] >>804 ありがとうございます。コンパイルできました。 しかしまたあらたな問題が。 ネットでは>>802 のプログラムをコンパイルして実行したら 「学籍番号122番のアキラ君は 英語50点,国語80点、数学30点。この3科目の合計点は160点です。」という文が表示されます。 とかいてあったのですが実際に実行したらコマンドプロンプトの画面に C:\fortaran>format とでてきて何かを入力するみたいなんですがどのように入力すればいいのでしょうか? アキラ,122,50,80,30,160 と入力すればいいのでしょうか?でもコマンドプロンプト上では日本語入力できなくてこまってるんですけど。 すいません。また初歩的と思われる質問になってしまって。 お手数ですがよろしくお願いします。
808 名前:デフォルトの名無しさん [2007/09/12(水) 15:02:19 ] すいません連続投稿となってしまいました。
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を扱える人はいません。