Je veux intégrer un code pour Fortran 95.Comment puis-je créer du code pour une variable spécifique?
Par exemple: J'ai lu un entier variable de
read *, x
par exemple x = 4. et ma source crée quatre boucle qui a quatre boucle variable
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
Je travaille sur un tel code qui tente de trouver un carré magique. Je peux trouver un code magique en utilisant un algorithme pour les matrices carrées impaires. probablement, je peux aussi générer un carré magique qui est même numéroté et numéroté deux fois pair. cependant, j'essaie d'améliorer mes compétences de codage en écrivant un programme qui essaie élément par élément de trouver un carré magique.
implicit integer (a-z)
counte = compteur de possibilité, magcon = carré magique généré contre dieu et diable sont des variables logiques. Mais je les ai utilisés comme entier.
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
ces boucles sont des éléments d'évaluation
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)
ceux-ci sont rangée, colonne et détecteur de somme diagonale
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
15 est une constante magique. Les boucles sont pour évaluer si un carré est magique ou non.
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
il des boucles doivent évaluer si chaque élément est différent de l'autre ou non.
fin
Maintenant, le problème est que si j'enclin à augmenter le nombre de lignes et de colonnes de carré magique, je dois réécrire les boucles spécificateur élément. Mais je ne suis pas prêt à ça. Je veux donc déclarer une variable, la lire, et être capable de faire en sorte que le programme crée des boucles comme lu. Je voudrais être clair sur ce que je veux savoir.
Utilisez la balise [tag: fortran] pour attirer l'attention. Personne ne suit juste l'étiquette pour la version 95 spécifique. –
Votre question n'a aucun sens pour moi. S'il vous plaît nous montrer plus de code expliquer exactement ce qui se passe. –
Un composant de votre question semble être * Comment puis-je lire un entier 'm' à l'exécution et créer un nid de boucles' m'-deep? * A cette question, la réponse est, vous ne pouvez pas.Mais ni construire un carré magique 'm * m ', ni vérifier qu'un carré donné est magique, nécessite cette approche, vous devriez probablement sélectionner un algorithme différent. –