#2
by かずま » 6年前
program main の t(3,3) を t(2,3) にしないと、
subroutine tentigyouretu の ans(m,n) と整合しません。
program main の b(2,3) は使用されていません。
コメントも間違っています。
「m*m行列」ではなく、「n*m行列」ですね、
件名が不適切です。「お願い」ではなく、
「転置行列を求める Fortranプログラム」などにしましょう。
インデントがおかしく、program や subroutine の開始と終了が
分かりにくいので、次のように書き換えてみました。
コード:
program main
implicit none
double precision a(3,2),t(2,3)
integer i,j
a(1,1)=2
a(1,2)=3
a(2,1)=1
a(2,2)=4
a(3,1)=2
a(3,2)=1
call tentigyouretu(a,3,2,t) !3*2行列の転置行列を求める。
do i=1,2
write(*,*)t(i,1),t(i,2),t(i,3)
enddo
end program
subroutine tentigyouretu(a,n,m,ans) !n*m行列の転置行列を求める。
implicit none
double precision a(n,m),ans(m,n)
integer i,j,n,m
do i=1,m
do j=1,n
ans(i,j)=a(j,i)
enddo
enddo
end subroutine
program main の t(3,3) を t(2,3) にしないと、
subroutine tentigyouretu の ans(m,n) と整合しません。
program main の b(2,3) は使用されていません。
コメントも間違っています。
「m*m行列」ではなく、「n*m行列」ですね、
件名が不適切です。「お願い」ではなく、
「転置行列を求める Fortranプログラム」などにしましょう。
インデントがおかしく、program や subroutine の開始と終了が
分かりにくいので、次のように書き換えてみました。
[code]
program main
implicit none
double precision a(3,2),t(2,3)
integer i,j
a(1,1)=2
a(1,2)=3
a(2,1)=1
a(2,2)=4
a(3,1)=2
a(3,2)=1
call tentigyouretu(a,3,2,t) !3*2行列の転置行列を求める。
do i=1,2
write(*,*)t(i,1),t(i,2),t(i,3)
enddo
end program
subroutine tentigyouretu(a,n,m,ans) !n*m行列の転置行列を求める。
implicit none
double precision a(n,m),ans(m,n)
integer i,j,n,m
do i=1,m
do j=1,n
ans(i,j)=a(j,i)
enddo
enddo
end subroutine