Paulo Henrique Graf Fernandes Fortran 90 Paulo Henrique Graf Fernandes
Variáveis compostas homogêneas (arrays) Vetores (unidimensionais) Matrizes (multidimensionais)
Variáveis compostas homogêneas (arrays) Arrays correspondem a posições de memória, identificadas por um único nome, individualizadas por índice e cujo conteúdo é de um mesmo tipo.
Referência a um elemento do array Nome(índice) Ex: arr(3) arr(i), onde i é uma variável do tipo integer
Vetores (arrays unidimensionais) Declaração: Tipo Nome Número de elementos
Exemplos: real, dimension(50) :: a, b, c real :: a(50), b(50), c(50) real, dimension(50) :: a, b, c, x(20), y(20), z integer, dimension(-20:-1) :: x logical, dimension(-9:10) :: y
Atribuição de valores vetor(3) = 1 vetor = (/ 1,2,3,4,5 /) , onde vetor tem cinco elementos Usando o do implícito: vetor = (/ i, i=1, 5 /) vetor = (/ -1, (0, i=2, 49), 1 /) vetor = (/ -1, (0, i= 1,48), 1 /) Obs.: nos dois últimos casos, todos elementos são zero, exceto o primeiro e o último.
Comandos de entrada (read) e saída (print) com arrays Um elemento do array: como se fosse uma variável escalar Um grupo de elementos do array: utilizando o do implícito O array todo: apenas o nome do array
Exemplos: Print *, (p(i), i=1,99,2), q(3), q(4), r Read *, first, last, (arr(i), i=first, last) Do i=1, 10 Read *, arr(i)
Matrizes (arrays multidimensionais) Fortran permite até sete dimensões para um array Declaração: semelhante a vetores, considerando o número de dimensões
Exemplos: real, dimension(3,4) :: a logical :: b(10,4) integer, dimension (5:7, -10:-1) :: c integer, dimension(5:8, 0:1, 100, -3:4) :: d
Atribuição de valores vetor(3,2) = 1 Utilizando a função intrínseca reshape: reshape((/ 1,2,3,4,5,6 /), (/ 2,3 /)) 1 3 5 2 4 6 integer :: i, j real, dimension(2,2) :: a reshape((/ ((10*i+j, i=1,2), j=1,2) /), (/2,2 /)) 11 12 21 22
Comando de saída (print) com arrays multidimensionais Se x é um array com 50 linhas e 8 colunas, print ‘(8F8.2)’, x imprime o array x coluna por coluna print ‘(8F8.2)’, ((x(i,j), j=1,8), i= 1,50) imprime o array x linha por linha
Funções intrínsecas para vetores e matrizes matmul Produto matricial de duas matrizes, ou de uma matriz e um vetor dot_product Produto escalar de dois vetores transpose Transposta de uma matriz maxval, minval Valor máximo e mínimo, respectivamente, de um array, ou parte deste product, sum Produto e soma, respectivamente, de um array, ou parte deste
Exemplos: matriz_b = tranpose(matriz_a) matriz_ab = matmul(matriz_a, matriz_b) max = maxval(matriz_c) prod = product(vetor_d)
Exemplo: Programa que soma os valores de duas matrizes program somamat implicit none integer, parameter:: lin = 3 , col = 2 !dimensões das matrizes integer:: linha !variável controladora das linhas nos loops real:: matriza(lin, col), matrizb(lin, col), matrizc(lin, col) !arrays bidimensionais print *, 'Digite os valores da matriz A: ' do linha = 1, lin !leitura dos elementos read *, matriza(linha, 1: col) !da matriz A end do
print. print. , 'Digite os valores da matriz B: '. do linha = 1, lin print * print *, 'Digite os valores da matriz B: ' do linha = 1, lin !leitura dos elementos read *, matrizb(linha, 1: col) !da matriz B end do do linha = 1, lin matrizc(linha, 1: col) = matriza(linha, 1: col) + matrizb(linha, 1: col) end do !formação da matriz C atraves da soma dos elementos !das matrizes A e B print * print *, 'Matriz C = A + B: ' do linha = 1, lin print '(F5.2)', matrizc(linha, 1: col) !visualização da end do !matriz C end program FIM
FIM