while True:

問題7

𝑙 行 𝑚 列の行列と 𝑚 行 𝑛 列の行列を読み込み,これらの積(𝑙 行 𝑛 列の行列)を計算するプログラムを作れ. ただし,MATMUL などの組み込み関数は使用しないこと.

難易度 ★★★☆☆

標準な問題です。アルゴリズム自体は簡単ですが、二次元配列を理解しておく必要があります。行列同士の積は調べてください。 DOのネスト(DOの中にDO)が必須です。この場合では、l, n, m の順にネストする必要があります。 それぞれの配列の大きさ(l, m, n)は入力から取得しても、プログラム中に書いてもどちらでもいいと思います。 今回はあらかじめプログラム中に書くこととします。この配列の大きさによって配列の大きさが決まるため、allocateで宣言後にサイズを割り当てる必要があります。 また、FORTRANは列優先入力ですので気を付けてください。(C言語などは行優先)
program question7
	implicit none
	integer :: l, m, n, i, j, k
	real val
	real, allocatable :: a(:, :), b(:, :), c(:, :)
	l = 2
	m = 3
	n = 4
	allocate(a(l, m), b(m, n), c(l, n))

	print *, "input a:"
	read *, a

	print *, "input b:"
	read *, b

	do i = 1, l
		do j = 1, n
			val = 0
			do k = 1, m
				val = val + a(i, k) * b(k, j)
			end do
			c(i, j) = val
		end do
	end do

	do i = 1, l
		print *, c(i,:)
	end do

end program question7
ページのトップへ戻る