180 likes | 377 Views
Fortran 90. Paulo Henrique Graf Fernandes. Variáveis compostas homogêneas (arrays) Vetores (unidimensionais) Matrizes (multidimensionais). Variáveis compostas homogêneas (arrays).
E N D
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) • Tipo • Nome • Número de elementos Declaração:
Exemplos: real, dimension(50) :: a, b, c real, dimension (11:60) :: 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
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 !leitura dos elementos read *, matrizb(linha, 1: col) !da matriz B end do do linha = 1, linmatrizc(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 Cend program FIM