以下のgo to文で書かれたプログラムをdoループのプログラムに書き直したいのですがどのように直してよいかわかりません。どなたかわかる方がいらっしゃったら教えて下さい。よろしくお願いします。
subroutine fft_eth(n,cx,icon,irr)
implicit none
integer :: n, m, ii, l, lb, llb, k, kl, kb, klb, &
j, jl, jl2, jlb, jb, jb2, jb4, jj, j1, j2, jjb, jf1, jf2, jff, jf
real(8) :: fn, ff, fkl, fjl, fm, ffm, fklb, fjlb, th, th2, st, tt
real(8) :: icon
real(8) :: irr
complex(8) :: ct, cu, ca, cx, cuc
dimension cx(n)
real(8), parameter :: pi = 3.141592653589793238462643d0
if(n < 2) go to 900
fn = n
m = idnint(dlog(fn)/dlog(2.0d0))
ii = 2**m-n
if(ii /= 0) go to 910
do 50 l = 1, m
kl = 2**(l-1)
fkl =kl
fjl = 0.5d0*fn/fkl
jl = fjl
jl2 = 2*jl
th = 2.0d0*pi*fkl/fn
th2 = 0.5d0*th
st = dsin(th)
tt = -2.0d0*dsin(th2)*dsin(th2)
ct = dcmplx(tt,st)
do 40 k = 1, kl
jj = jl2*(k-1)
cu = (1.0d0,0.0d0)
do 30 j = 1, jl
j1 = j+jj
j2 = j1+jl
ca = cx(j1)-cx(j2)
if(icon < 0) go to 10
cuc = dconjg(cu)
cx(j2) = ca*cuc
go to 20
10 continue
cx(j2) = ca*cu
20 continue
cu = cu+cu*ct
30 continue
40 continue
50 continue
!=================
! BIT REVERSAL
!=================
fm = m
ffm = 0.5d0*fm
llb = ffm
do 80 lb = 1, llb
klb = 2**(lb-1)
fklb =klb
fjlb = 0.25d0*fn/fklb
jlb = fjlb
jb2 = 2*jlb
jb4 = 4*jlb
do 70 kb = 1, klb
jjb = jb4*(kb-1)
jf1 = jjb+klb
jf2 = jjb+jb2
do 60 jb = 1, jlb
ff = jb-1
ff = ff/fklb
jff = ff
jf = jb+jff*klb
j1 = jf+jf1
j2 = jf+jf2
ct = cx(j1)
cx(j1) = cx(j2)
cx(j2) = ct
60 continue
70 continue
80 continue
!=======================
! ERROR CONDITION CODE
!=======================
irr = 0
return
900 continue
irr = -1
return
910 continue
irr = -2
return
end subroutine
No.3ベストアンサー
- 回答日時:
subroutine fft_eth(n,cx,icon,irr)
implicit none
integer :: n, m, ii, l, lb, llb, k, kl, kb, klb, &
j, jl, jl2, jlb, jb, jb2, jb4, jj, j1, j2, jjb, jf1, jf2, jff, jf
real(8) :: fn, ff, fkl, fjl, fm, ffm, fklb, fjlb, th, th2, st, tt
real(8) :: icon
real(8) :: irr
complex(8) :: ct, cu, ca, cx, cuc
dimension cx(n)
real(8), parameter :: pi = 3.141592653589793238462643d0
if(n < 2) then
fn = n
m = idnint(dlog(fn)/dlog(2.0d0))
ii = 2**m-n
irr = -1
return
else if(ii /= 0) then
irr = -2
return
else
end if
do l = 1,m
kl = 2**(l-1)
fkl =kl
fjl = 0.5d0*fn/fkl
jl = fjl
jl2 = 2*jl
th = 2.0d0*pi*fkl/fn
th2 = 0.5d0*th
st = dsin(th)
tt = -2.0d0*dsin(th2)
do k = 1,kl
jj = jl2*(k-1)
cu = (1.0d0,0.0d0)
do j = 1,jl
j1 = j+jj
j2 = j1+jl
ca = cx(j1)-cx(j2)
if(icon < 0) then
cx(j2) = ca*cu
else
cuc = dconjg(cu)
cx(j2) = ca*cuc
end if
cu = cu+cu*ct
end do
end do
end do
irr = 0
end subroutine
こうゆうことですか?
No.2
- 回答日時:
do 100 i = 1,10
j = j+1
if( j>5 ) goto 110
100 continue
110 continue
この程度なら直せるんですか?
do-enddoで直せるところを全て直し、
if文で微妙なところに飛んでいる場所を個別に直していくといいかと。
do i = 1,10
j = j+1
if( j>5 ) exit
enddo
直したコードをここに書くのに意味がないかと思い、この程度で。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サッカー・フットサル Jリーグの話 1 2022/12/02 23:19
- 英語 doがあるのとないのでどう違う? 34 2022/10/05 23:29
- 中学校 あなたはバスで通学していますかそれとも自転車ですか の英文の訳は whichi do you go 1 2023/03/09 11:44
- 英語 英語 英語長文を読んでいたら when girls do go to school とあったのですが 2 2022/12/31 17:27
- 工学 自販機の設計 授業で論理回路を用いて自販機を設計するのですが、写真に示すjk-ffの論理式でJ1では 3 2023/01/17 18:49
- TOEFL・TOEIC・英語検定 'd の特定方法 1 2023/05/17 22:13
- その他(プログラミング・Web制作) x86_32ビットアセンブラ 2 2023/06/28 17:50
- サッカー・フットサル Jリーグの話 1 2023/01/14 01:40
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- サッカー・フットサル Jリーグの話 1 2023/02/10 01:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フローチャートの菱形が狭い。。。
-
fortran errorについて
-
【JAVA】数字をひし形に出力す...
-
Excelで4096点以上のFFTの方法
-
めちゃきれい
-
Notepad++の関数リスト表示でC...
-
自動クエリとはどういうもので...
-
正しい五十音順について
-
あるプログラムのコマンドライ...
-
0除算して、落ちるプログラムと...
-
65536は2の何乗なのでしょうか?
-
C++ で、「)」が必要 というエ...
-
未使用の変数を一括検索する方法
-
CとFORTRANの計算速度はどちら...
-
インクリメント演算子のみを用...
-
VBAで関数をつくる
-
テキストボックスのエンターキ...
-
UWSCで指定のフォルダを開きたい。
-
VBAにてメール作成した際、一部...
-
「Outlookが他のプログラムによ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フローチャートで 変数に代入す...
-
フローチャートの菱形が狭い。。。
-
フローチャートで。
-
fortran errorについて
-
フローチャート以外の設計方法
-
二分法(FORTRAN)
-
フローチャート(本当に困って...
-
fortran go to 文
-
TeXでフローチャート
-
【fortran】フーリエ級数について
-
フローチャートが書けません
-
配列 x に入っているデータの最...
-
フローチャートを書きたい
-
フローチャートのループ
-
for文のフローチャート
-
連立1次方程式を計算するFortra...
-
FORTRAN subroutineと配列と繰...
-
フロートチャートをVBAで表すには
-
カシオ fx-4800pにて
-
正しい五十音順について
おすすめ情報