IたとえばFortranの95のコード特定の変数のコードを作成するにはどうすればよいですか?
を埋め込みたい:私は、例えば、X = 4のための可変
read *, x
整数を読んでいます。そして、私のソースは、私は魔方陣を見つけるためにしようと、このようなコードに取り組んでいる4つのループ変数を持つ4つのループ
loop1:do a=1,16
loop2:do b=1,16
loop3:do c=1,16
loop4:do d=1,16
........smt......
end do loop4
end do loop3
end do loop2
end do loop1
を作成します。私は、奇数番号の正方行列のアルゴリズムを使ってマジックコードを見つけることができます。おそらく、私は偶数番号と偶数番号の魔方陣を生成することもできます。しかし、要素ごとにマジックスクエアを見つけるプログラムを書くことで、コーディングスキルを向上させようとしています。
implicit integer (a-z)
counte =可能性カウンタ、生成されたmagcon =魔方陣カウンタ 神と悪魔が論理変数です。しかし、私はそれらを整数として使用しました。
integer GG(3,3),COUNTE,magcon
integer god,devil
open(55,file='mymagics')
COUNTE=0
magcon=0
loop1:do a=9,1,-1
loop2:do b=9,1,-1
loop3:do c=9,1,-1
loop4:do d=9,1,-1
loop5:do e=9,1,-1
loop6:do f=9,1,-1
loop7:do g=9,1,-1
loop8:do h=9,1,-1
loop9:do i=9,1,-1
これらのループは、要素
GG(1,1)=a
GG(1,2)=b
GG(1,3)=c
GG(2,1)=d
GG(2,2)=e
GG(2,3)=f
GG(3,1)=g
GG(3,2)=h
GG(3,3)=i
call elementcontrol(gg,devil)
if(devil.eq.1)then
call magiccontrol(GG,god)
else if(devil.eq.0) then
cycle
endif
COUNTE=COUNTE+1
if(allah.eq.1) then
magcon=magcon+1
write(55,66)
write(55,*) counte ,"possibility is tried"
write(55,*)"**************************************"
write(55,*)"**************************************"
write(55,*)"**************************************"
write(55,*)"--------------------------------------"
write(55,*)GG(1,1),GG(1,2),GG(1,3)
write(55,*)GG(2,1),GG(2,2),GG(2,3)
write(55,*)GG(3,1),GG(3,2),GG(3,3)
write(55,*)"--------------------------------------"
write(55,*)"**************************************"
write(55,*)"**************************************"
write(55,*)"**************************************"
write(55,66)
66 format(//)
else
print *, counte ,"possibility is unvalid"
end if
enddo loop9
enddo loop8
enddo loop7
enddo loop6
enddo loop5
enddo loop4
enddo loop3
enddo loop2
enddo loop1
print *, "finally done!"
print *, magcon,"magic square is found"
stop
end
subroutine magiccontrol(magic,logic)
integer logic,z
integer magic(3,3),sumrow(3),sumcol(3),sumdia(2)
を評価するために、これらは、行、列及び対角和ファインダー
do z=1,3
sumrow(z)=0
sumcol(z)=0
sumdia(z)=0
end do
do 31 k=1,3
do 31 l=1,3
sumrow(k)=sumrow(k)+(magic(k,l))
31 continue
do 52 m=1,3
do 52 n=1,3
sumcol(m)=sumcol(m)+(magic(n,m))
52 continue
do 69 i=1,3
sumdia(1)=sumdia(1)+magic(i,i)
sumdia(2)=sumdia(2)+magic((4-i),i)
69 continue
loop1:do y=1,3
loop2:do f=1,3
loop3:do x=1,2
if(sumrow(y).eq.15) then
if(sumcol(f).eq.15)then
if(sumdia(x).eq.15)then
logic=1
else
logic=0
exit loop1
end if
else
logic=0
exit loop1
end if
else
logic=0
exit loop1
end if
end do loop3
end do loop2
end do loop1
されています210
15はマジック定数です。ループはaquareが魔法であるかどうかを評価するためのものです。
end
subroutine elementcontrol(elecon,logic2)
integer elecon(3,3),a1,a2,a3,a4,a5,a6,coun(9)
do a4=1,9
coun(a4)=0
end do
logic2=0
do a1=1,9
do a2=1,3
do a3=1,3
if(a1.eq.elecon(a2,a3))then
coun(a1)=coun(a1)+1
end if
end do
end do
end do
do a5=1,9
do a6=1,9
if(a5.ne.a6) then
if(coun(a5).eq.coun(a6)) then
logic2=1
else
logic2=0
exit
end if
else
cycle
end if
end do
end do
ループは、すべての要素が互いにか異なっているかどうかを評価することがあります。
エンド
は、今の問題は、私は魔方陣の行と列の数を増やすために傾くことになるならば、私は要素指定子ループを書き直す必要があるということです。しかし、私はそれを喜んでいません。だから、私は変数を宣言し、それを読んで、プログラム作成のdoループを読むようにしたいと思っています。 私は私が知りたいことについてはっきりしていたと思います。
タグ[tag:fortran]を使用して注意を促してください。特定の95バージョンのタグの後には誰もいません。 –
あなたの質問は私にとって意味をなさない。何が起こっているのかを正確に説明するコードをもっと表示してください。 –
あなたの質問の1つのコンポーネントは、次のように思われます。*実行時に整数 'm'を読み込み、ループの深いネスティングを作成するにはどうしたらいいですか?*その質問には答えられません。しかし、「m * m」マジックスクエアを構築することも、与えられたマスがマジックであることをチェックすることも、おそらく別のアルゴリズムを選択する必要があります。 –