14. Boas Práticas e Problemas Comuns
Boas Práticas
1. Estrutura do Programa
c234567
PROGRAM NOME_PROGRAMA
IMPLICIT NONE
! Declarações de variáveis
INTEGER I, J, K
REAL X, Y, Z
! Declarações de parâmetros
PARAMETER (PI = 3.14159)
! Inicializações
DATA X /0.0/, Y /0.0/
! Corpo principal do programa
...
STOP
END
2. Nomenclatura
- Use nomes descritivos (dentro do limite de 6 caracteres)
- Use maiúsculas para constantes:
PI,MAXSIZ - Use minúsculas para variáveis:
i,j,x,y - Evite nomes muito similares:
i,l,1podem ser confusos
3. Comentários
c234567
! Este é um comentário moderno (Fortran 90+)
c Este é um comentário Fortran 77
* Este também é um comentário Fortran 77
4. Formatação
- Sempre use
IMPLICIT NONE - Mantenha código nas colunas 7-72
- Use indentação consistente
- Agrupe declarações relacionadas
Problemas Comuns e Soluções
1. Erros de Compilação
Problema: Error: Unexpected end of file
STOP e END no final do programa.
Problema: Error: Variable 'X' is used but not declared
IMPLICIT NONE.
2. Erros de Execução
Problema: Floating point exception
Problema: Array bounds exceeded
3. Problemas de Lógica
Problema: Comparação de números reais
Solução: Use tolerância para comparações de números reais.Problema: Loop infinito
Solução: Sempre incremente a variável de controle do loop.Dicas de Debugging
1. Usando PRINT para Debug
! Adicione prints estratégicos
PRINT *, 'Valor de X antes do loop:', X
DO I = 1, N
X = X + I
IF (MOD(I, 100) .EQ. 0) THEN
PRINT *, 'Iteração', I, 'X =', X
END IF
END DO
PRINT *, 'Valor de X após o loop:', X
2. Verificação de Bounds
! Sempre verifique limites antes de usar arrays
IF (I .LT. 1 .OR. I .GT. N) THEN
PRINT *, 'Erro: Índice', I, 'fora dos limites 1-', N
STOP
END IF
A(I) = VALOR
3. Validação de Entrada
! Valide sempre a entrada do usuário
READ *, N
IF (N .LE. 0 .OR. N .GT. MAXSIZ) THEN
PRINT *, 'Erro: N deve estar entre 1 e', MAXSIZ
STOP
END IF
Performance e Otimização
1. Acesso a Arrays
! ❌ Ruim: Acessa em ordem incorreta
DO I = 1, N
DO J = 1, M
A(J, I) = A(J, I) + 1 ! Segunda dimensão varia primeiro
END DO
END DO
! ✅ Bom: Acessa em ordem de memória
DO J = 1, M
DO I = 1, N
A(J, I) = A(J, I) + 1 ! Primeira dimensão varia primeiro
END DO
END DO
2. Evite Operações Desnecessárias
! ❌ Ruim: Calcula potência repetidamente
DO I = 1, N
Y = X**2 ! Calcula X^2 N vezes
END DO
! ✅ Bom: Calcula uma vez
X2 = X**2
DO I = 1, N
Y = X2
END DO
Checklist de Qualidade
Antes de considerar seu programa finalizado, verifique:
- [ ] Todas as variáveis estão declaradas
- [ ]
IMPLICIT NONEestá presente - [ ]
STOPeENDestão no final - [ ] Código está nas colunas 7-72
- [ ] Arrays não excedem limites
- [ ] Divisões por zero estão protegidas
- [ ] Loops têm condição de parada
- [ ] Comentários explicam lógica complexa
- [ ] Nomes de variáveis são descritivos
- [ ] Programa foi testado com diferentes entradas