8. Arrays
Declaração de Arrays
Para declarar vetores e matrizes:
c234567
real a(20)
! Declara um vetor com 20 componentes reais, indexados de 1 a 20
real A(3,5)
! Declara uma matriz 3x5
logical B(20,5,39,29152)
! Declara um array 20x5x39x2
Fortran 77 permite arrays de até 7 dimensões.
Manipulação de Arrays
Inicialização em Loop
c234567
PROGRAM EXEMPLO_ARRAY
IMPLICIT NONE
INTEGER N, A(5), I
PARAMETER (N = 5)
DO I = 1, N
A(I) = I * 2
END DO
PRINT *, 'Elementos do array A:'
DO I = 1, N
PRINT *, 'A(', I, ') = ', A(I)
END DO
END
Soma de Elementos
c234567
PROGRAM SOMA_ARRAY
IMPLICIT NONE
INTEGER N, A(5), SUM, I
PARAMETER (N = 5)
! Inicialização usando DATA statement
DATA A /1, 2, 3, 4, 5/
SUM = 0
DO I = 1, N
SUM = SUM + A(I)
END DO
PRINT *, 'Soma dos elementos de A:', SUM
END
Produto de Elementos
c234567
PROGRAM MULTIPLICACAO_ARRAY
IMPLICIT NONE
INTEGER N, A(5), PRODUTO, I
PARAMETER (N = 5)
! Inicialização usando DATA statement
DATA A /1, 2, 3, 4, 5/
PRODUTO = 1
DO I = 1, N
PRODUTO = PRODUTO * A(I)
END DO
PRINT *, 'Produto dos elementos de A:', PRODUTO
END
Operações Comuns com Arrays
Busca Linear
c234567
PROGRAM BUSCA_LINEAR
IMPLICIT NONE
INTEGER A(10), VALOR, I, POSICAO
LOGICAL ENCONTRADO
DATA A /5, 2, 8, 1, 9, 3, 7, 4, 6, 0/
PRINT *, 'Digite o valor a procurar:'
READ *, VALOR
ENCONTRADO = .FALSE.
POSICAO = 0
DO I = 1, 10
IF (A(I) .EQ. VALOR) THEN
ENCONTRADO = .TRUE.
POSICAO = I
GOTO 100
END IF
END DO
100 IF (ENCONTRADO) THEN
PRINT *, 'Valor encontrado na posição:', POSICAO
ELSE
PRINT *, 'Valor não encontrado'
END IF
END
Ordenação Básica (Bubble Sort)
c234567
PROGRAM ORDENACAO
IMPLICIT NONE
INTEGER A(5), I, J, TEMP
DATA A /5, 2, 8, 1, 9/
PRINT *, 'Array original:'
DO I = 1, 5
PRINT *, A(I)
END DO
! Bubble sort
DO I = 1, 4
DO J = 1, 4
IF (A(J) .GT. A(J+1)) THEN
TEMP = A(J)
A(J) = A(J+1)
A(J+1) = TEMP
END IF
END DO
END DO
PRINT *, 'Array ordenado:'
DO I = 1, 5
PRINT *, A(I)
END DO
END
Dicas Importantes
- Indexação: Arrays em Fortran começam no índice 1, não 0
- Limites: Sempre verifique os limites dos arrays para evitar erros
- Inicialização: Use
DATAstatement para inicializar arrays - Performance: Acesse arrays em ordem de memória (primeira dimensão varia mais rapidamente)