Anda di halaman 1dari 18

Fortran 90

Paulo Henrique Graf Fernandes

Variveis compostas homogneas (arrays)


Vetores (unidimensionais) Matrizes (multidimensionais)

Variveis compostas homogneas (arrays)


Arrays correspondem a posies de memria, identificadas por um nico nome, individualizadas por ndice e cujo contedo de um mesmo tipo.

Referncia a um elemento do array


Nome(ndice)
Ex: arr(3) arr(i), onde i uma varivel do tipo integer

Vetores (arrays unidimensionais)

Declarao:

Tipo Nome Nmero de elementos

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

Atribuio de valores

vetor(3) = 1 vetor = (/ 1,2,3,4,5 /) , onde vetor tem cinco elementos Usando o do implcito: 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 so zero, exceto o primeiro e o ltimo.

Comandos de entrada (read) e sada (print) com arrays

Um elemento do array: como se fosse uma varivel escalar Um grupo de elementos do array: utilizando o do implcito 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 dimenses para um array Declarao: semelhante a vetores, considerando o nmero de dimenses

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

Atribuio de valores

vetor(3,2) = 1 Utilizando a funo intrnseca 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 sada (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

Funes intrnsecas para vetores e matrizes


matmul Produto matricial de duas matrizes, ou de uma matriz e um vetor Produto escalar de dois vetores Transposta de uma matriz Valor mximo e mnimo, respectivamente, de um array, ou parte deste Produto e soma, respectivamente, de um array, ou parte deste

dot_product transpose maxval, minval

product, sum

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 !dimenses das matrizes integer:: linha !varivel 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 read *, matriza(linha, 1: col) end do !leitura dos elementos !da matriz A

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 !formao 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) !visualizao da end do !matriz C

end program FIM

FIM

Anda mungkin juga menyukai