close

標題:

改 fortran 程式問題 15點

aa.jpg

 

此文章來自奇摩知識+如有不便請留言告知

發問:

program maininteger nn(5)nn(1)=101nn(2)=501nn(3)=1001nn(4)=5001nn(5)=10001do i=1,5 nx=nn(i) dx=(4.0-0.0)/dble(nx-1) do iy=1,2 ry=dble(iy)*0.1 ff=0.0 do ix=1,nx rx=dble(ix-1)*dx fx=(3.0*sin(rx)*sin(rx)/(1.5+ry))*dx ff=ff+fx end do ... 顯示更多 program main integer nn(5) nn(1)=101 nn(2)=501 nn(3)=1001 nn(4)=5001 nn(5)=10001 do i=1,5 nx=nn(i) dx=(4.0-0.0)/dble(nx-1) do iy=1,2 ry=dble(iy)*0.1 ff=0.0 do ix=1,nx rx=dble(ix-1)*dx fx=(3.0*sin(rx)*sin(rx)/(1.5+ry))*dx ff=ff+fx end do write(10,*)nx,ry,ff end do end do end 問題如下: nn(1) ~ nn(5)一共代入五個 我想要改成每帶入一個 執行一次 open(unit=10,file="a.dat",status='unknow') 然後檔名是a b c d e 都是.dat檔 因為compiler後會在資料夾那邊存成dat檔,所以檔名不能一樣 好像要用call副程式,可是指令我不熟不會 幫幫我吧

最佳解答:

不須 call 副程式,只要在主程式中增加幾行(共 4 行)就行了: program main integer nn(5) character*5 fn nn(1)=101 nn(2)=501 nn(3)=1001 nn(4)=5001 nn(5)=10001 do i=1,5 nx=nn(i) dx=(4.0-0.0)/dble(nx-1) fn = char(i+96)//'.dat' open (unit=10, file=fn, status='unknown') do iy=1,2 ry=dble(iy)*0.1 ff=0.0 do ix=1,nx rx=dble(ix-1)*dx fx=(3.0*sin(rx)*sin(rx)/(1.5+ry))*dx ff=ff+fx end do write (10,*) nx, ry, ff end do close (10) end do end 執行後會產生以下 5 個 .dat 檔,各包含 2 行: a.dat 101 0.1 3.3079636 101 0.2 3.1133778 b.dat 501 0.1 3.2905421 501 0.2 3.0969827 c.dat 1001 0.1 3.288391 1001 0.2 3.0949535 d.dat 5001 0.1 3.2866645 5001 0.2 3.0933368 e.dat 10001 0.1 3.2864494 10001 0.2 3.09314 程式中的 fn = char(i+96)//'.dat' 這行是用來「拼湊出」檔名。雙斜線是 Fortran 的「字串連結」運算;char 是 Fortran 的庫存函數,用來將某一 ASCII 碼轉換為其對應的字元,例如:'b' 的 ASCII 碼為 98,故 char(98) = 'b';而 'b'//'.dat' = 'b.dat'。

其他解答:FBEFE3C2E0474026

arrow
arrow
    創作者介紹
    創作者 njtnvdt 的頭像
    njtnvdt

    百科全書

    njtnvdt 發表在 痞客邦 留言(0) 人氣()