Seguindo o um esquema parecido com o de um array unidimensional, uma matriz é entendido como um array bi-dimensional, por exemplo, uma matriz quadrada de ordem 3 que tem 3 linhas e 3 colunas, assim com o total de 9 elementos na matriz. No entanto um array bi-dimensional não precisa necessariamente ter as dimensões de linhas e colunas iguais, poderia ser, por exemplo uma matriz 3x4 ( 3 linhas e 4 colunas) com total de 12 elementos.
Pegaremos como exemplo duas matrizes quadradas de ordem 3 e faremos a multiplicação.
!
! Array bi-dimensional
!
program prog8
implicit none
!
integer, dimension(3,3) :: a, b, c
integer :: i, j, k
!
do i=1, 3
do j=1, 3
a(i,j) = 5
b(i,j) = 3
c(i,j) = 0
end do
end do
!
! Multiplicando as matrizes
do i=1,3
do j=1,3
do k=1,3
c(i,j) = c(i,j) + ( a(i,k) * b(k,j) )
end do
end do
end do
!
! Escrevendo a matriz
do i=1,3
write(*,*) (c(i,j),j=1,3)
end do
!
end program prog8
!
O próximo programa diferencia do anterior apenas pela declaração dos elementos de matriz diferentes um dos outros.
!
! Array bi-dimensional
!
program prog9
implicit none
!
integer, dimension(3,3) :: a, b, c
integer :: i, j, k
!
! Zerando as variaveis indexadas
do i=1, 3
do j=1, 3
a(i,j) = 0
b(i,j) = 0
c(i,j) = 0
end do
end do
!
! Atribuindo valores as variaveis indexadas
a(1,1)= 5; a(1,2)= 3; a(1,3)= 1
a(2,1)=23; a(2,2)=13; a(2,3)=17
a(3,1)= 7; a(3,2)=11; a(3,3)=19
!
b(1,1)= 2; b(1,2)= 8; b(1,3)=14
b(2,1)= 4; b(2,2)=10; b(2,3)=16
b(3,1)= 6; b(3,2)=12; b(3,3)=18
!
! Multiplicando as matrizes
do i=1,3
do j=1,3
do k=1,3
c(i,j) = c(i,j) + ( a(i,k) * b(k,j) )
end do
end do
end do
!
! Escrevendo a matriz
do i=1,3
write(*,*) (c(i,j),j=1,3)
end do
!
end program prog9
!
Os dois programas anteriores realizam um looping para cada variável
,
e
iniciado-se da variável
, depois para variável
e por
último para variável
. É importante tem em mente o que o programa está
realizando, ou seja, para cada interação qual a operação que ele está fazendo.
Observe que a tabela 3.7 apresenta o que a expressão
para
,
e
, variando de 1 à 3. Para um valor de
e
,
irá variar de 1 à 3, depois, para
e
,
irá variar de 1 à 3 novamente. É importante perceber finalizado um do mais externo o do mais interno retorna a contagem inicial.
No que se refere a um array multi-dimensional apenas declaramos a variável indexada como tendo várias dimensões. por exemplo:
! integer, dimension(3,3,3,5) :: a !
assim a variável indexa a terá direções em ,
,
e
.