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 .