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

■ このスレッドは過去ログ倉庫に格納されています
2012/08/16(木) 20:58:00.31
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。

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

●前スレ
くだすれFORTRAN(超初心者用)その5
http://toro.2ch.net/test/read.cgi/tech/1269704830/

●過去スレ
くだすれFORTRAN(超初心者用)その4
http://pc12.2ch.net/test/read.cgi/tech/1232789521/
くだすれFORTRAN(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1196384126/
くだすれFORTRAN(超初心者用)その2
http://pc11.2ch.net/test/read.cgi/tech/1164121236/
くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
2012/08/16(木) 21:32:02.53
           , r‐‐ 、_
        ,  ´ ̄  ´ ̄    ̄ミ 、   ____/: : : : ヽ、
    __./         `¨       \/: : : : : : : : :: : :  : : : : : : : : }
     / /// // /  ,.、  /     /  : : : : : : : : :   : : : : : : /
    _,ァ≫イ/ / / /  <、\>′   ヽ{  : :\      フ: : : : :/
      イ/| //ー-、   />/`Y    ∧\.:: : : :ヽ   /: : : :/   ) (
     彡' ノ,イ{/{__///「/¨ヽ.! ! | .}}  /: : :.i  /: : : : :/   (   )
       彡' ノ }イ:::} ´´ r=ミ、 }ノ 1 小      /: : : : :/  (   ノ            こ、これは>>1乙じゃなくて
            片ソ   /:::しヘ从 j/从.ゝ 彡/: : : : :/            |\        レンコンしそ餃子の湯気なんだからね
        {:::::、   廴::/}{/ ,'{/  /  ,': : : : /      (     (. |: : \       今後は、気をつけなさい!!
           ヽ ー  :::::    ∨{彡'.:.:.:.:. :/i: : : : :{     (  )   |: : : :.ヽ      
             \__  イ≦_¨\ \_ {: : : : :丶_______.ノ: : : : : }
        、____xー|.   |, -、`   ヽ _.: '.: : : : : : : : : : : : : : : : : : : : : : /_
        / // / ー / /》ー--、  l-‐ \: : : : : : : : : : : : : : : : : : イ   ゙ ヽ
        ノ // /ヘ/  ///     \ /   /,,r"i/ ,r"i/,,r"i/,,r"i  、 ヽ
     /   // ,'⌒/.   ///      }/ ./  /#; / /#.; / //#; / ,/#; / .," i  |
     V //  i /   ///       `ヽi. /#; / ,/#; ./ /#;; / ,/#; / .,'   / /
       片厶≦j/ヘ  //〈        /.  |〃/ ,|〃/ ,|〃/ , |〃/ .,"..;;/ /
      `ー'⌒Y⌒ヽ //  ヽ-====<  ヽ   ヽゝ' `ヽゝ~ ヽゝ ~ヽゝ'  " /
                           ゙ ー-- 、、... _ __,,,,, .... --―"


2012/08/17(金) 02:14:17.73
> 初心者に適切な指導もなくプログラム書かせているのはアカハラの域に達してるな。

これって割と多いような気がするな。
まあ分野によっちゃいずれ必要になることが前前から分かっていそうな気もするのだが
それも指導のうちと言えばそうだ
4デフォルトの名無しさん
垢版 |
2012/08/17(金) 04:02:00.57
do i=2,1000
write(*,*) '1otsu'
enddo
2012/08/17(金) 19:12:19.36
>>3
昔は先輩が教えることが前提となっていたから成立したが、
最近、先輩がいなかったり、知らなかったりで、伝承が途切れている。
時代の変化に、サヨクかぶれの爺さんたちの現状認識が追いついていない。
連中は鳩山みたいに夢を見て、管みたいに怒鳴り散らしてるからw
2012/08/17(金) 20:00:57.70
前スレくだすれFORTRAN(超初心者用)その5の>>999さん
アドバイスありがとうございます。引き続きよろしくお願いします。
変更点の件ですが、

入力文
character (len = 20) :: filenm
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(11,file= TRIM(filenm) )

出力文
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(14,file=filenm)
close(14)

という修正をくわえればよろしいでしょうか?


2012/08/17(金) 20:51:34.50
>>6
それだと出力してない。
OPEN と CLOSE の間で出力する。

ただ一度に欲張らず、まず固定された入力ファイルと出力ファイルで
ちゃんと計算できるプログラムをつくって確認しておくべき。

その後、色々ループさせたり、ファイル名を変えたり出来るようにすべき。
ものには順番があり、近くから遠くへ及ぼすべしとは、四書のはじめ大学にも書いてあるw
2012/08/17(金) 21:14:43.76
これまでの教えていただいたプログラムが下記になります。

program test
implicit none
integer, parameter :: ndata = 400
real :: a(18, ndata), x(3, ndata), y(3, ndata)
real :: s, sx, sy, tx(ndata), ty(ndata)
integer :: i, j, icol

character (len = 20) :: filenm
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(11,file= TRIM(filenm) )

open(12, file = 'input2.txt')
open(13, file = 'input3.txt')
!
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do

! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
2012/08/17(金) 21:16:18.67
! exel data y
do i = 1, ndata
read(12, *) (y(j, i), j = 1, 3)
end do
!
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do

print *, 'input column '
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy

write(*,'(a,$)') 'File Name : '

stop
end program test
2012/08/17(金) 21:38:35.93
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(14,file=filenm)

write(*,*) 'result=', s ! <--だから結果を書きだせってw

close(14)
2012/08/17(金) 21:39:27.86
write(14,*) 'result=', s ! <--だから結果を書きだせってw

思わず間違えたwwww
2012/08/17(金) 21:52:24.90
>>10>>11
アドバイスありがとうございます。とろいのですいません。

出力文
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(14,file=filenm)
write(14,*) 'result=', s ! <--結果を書き出すプログラム。
close(14)

こういうことでしょうか?
2012/08/17(金) 22:03:15.16
そうそう。欲しい結果を書きだす。
本来は、入力ファイル名や計算したカラム(列)番号のような
付加的な情報も書いておくべきだろうが・・・

open(14,file = trim(filenm) ) ! <- こっちもTRIMで尻の空白を削っておくべし。
1412
垢版 |
2012/08/17(金) 22:16:41.91
>>13
最後の方は、こういう感じでプログラムすればうまく動きますかね。

print *, 'input column '
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy

write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(14,file = trim(filenm) ) ! <- TRIMで尻の空白を削る。
write(14,*) 'result=', s ! <--結果を書きだす。
close(14)

stop
end program test

こちらの掲示板に来て良かったです。
色々こんなデキの悪い自分に付き合ってくださってありがとうございました。

2012/08/17(金) 23:15:49.56
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= TRIM(filenm_in) )

・・・・

write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=trim(filenm_out))
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol

write(14,*) 'result=', s ! <--結果を書き出すプログラム。
close(14)

として、読み込んだファイルと、使ったコラムも出力ファイルに書きだしておくと、
あとで何の計算したのかヒントになっていいぞ。

とろくさいと、どのファイルに何を書きだしたかすぐ忘れるだろうから、こうしておけwww
1612
垢版 |
2012/08/17(金) 23:31:33.54
>>15
度々すみません。親切にありがとうございます。
プログラムに組み込ませていただきます!

今日もかれこれ5時間くらいネカフェにいますが、
そろそろおいとまします。自転車こいで橋を越えた甲斐がありました。
また色々教えてください。
1712
垢版 |
2012/08/17(金) 23:46:42.05
最後にプログラム全体を書き込ませてください。
program test
implicit none
integer, parameter :: ndata = 400
real :: a(18, ndata), x(3, ndata), y(3, ndata)
real :: s, sx, sy, tx(ndata), ty(ndata)
integer :: i, j, icol

character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= TRIM(filenm_in) )

open(12, file = 'input2.txt')
open(13, file = 'input3.txt')
!
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do

! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
! exel data y
do i = 1, ndata
read(12, *) (y(j, i), j = 1, 3)
end do
1812
垢版 |
2012/08/17(金) 23:47:39.05
!
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do

print *, 'input column '
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy

write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=trim(filenm_out))
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol

write(14,*) 'result=', s ! <--結果を書き出すプログラム。
close(14)

stop
end program test

1912
垢版 |
2012/08/17(金) 23:48:58.52
本日もどうもありがとうございました。
お先に失礼します。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況