Escolar Documentos
Profissional Documentos
Cultura Documentos
O objetivo deste trabalho é dar uma introdução rápida às características mais comuns da
programação do FORTRAN 77 e do FORTRAN 90. Isto não é uma referência completa da
linguagem de programação nem muito menos ensina a programar.
1 – Domínio da Linguagem:
2 – Histórico
FORTRAN é a mais antiga das linguagens de programação de alto nível podendo ser
considerada a mãe de quase todas linguagens de programação moderna. Foi criada em 1956
por Jonh Backus como a 1ª tentativa de padronizar a programação de computadores que era
feita até aquele momento apenas em assembly.
FORTRAN foi desenvolvida inicialmente para resolução de problemas científicos e
matemáticos, sendo muito utilizada ainda nos meios técnicos-científicos.
O primeiro compilador FORTRAN representou um marco na história da Computação, no
tempo em que computadores tinham bem pouca memória (da ordem de 15 kb mais ou
menos), eram bastante lentos e tinham Sistemas Operacionais primitivos (quando tinham
um). Naquele tempo, a única forma conhecida de se programar um computador era através
da linguagem Assembly.
Os pioneiros do FORTRAN não tinham idéia do potencial da linguagem que estavam
criando, e nem sequer sonhavam em escrever programas em linguagem de alto nível, mas
sem querer, eles criaram a primeira Linguagem de Alto Nível bem sucedida.
O primeiro compilador FORTRAN foi projetado e escrito em 1954-1957 pela IBM por um
grupo liderado por John W. Backus e contou com a participação de excelentes
programadores como Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert
Nelson, Irving Ziller, Richard Goldberg, Lois Haibt and David Sayre. Backus também foi
responsável pelo projeto do primeiro computador a usar o FORTRAN, o IBM 704.
A invenção ficou famosa rapidamente, o que não era de se admirar, visto que programas
que levavam semanas para serem escritos poderiam agora ser feitos em questão de horas,
além de exigir muito menos trabalho. Outra grande vantagem da invenção era a
portabilidade dos programas escritos em FORTRAN. A linguagem foi adotada pelas
comunidades militares e usada extensivamente em programas espaciais e projetos militares.
Como os computadores naquele tempo eram usados quase que exclusivamente para
cálculos e por pessoas do meio acadêmico e científico, a linguagem foi desenvolvida sem
praticamente nenhuma preocupação com estruturação lógica ou clareza em sua codificação
que facilitasse a escrita de programas grandes, mesmo porque não havia programas
realmente grandes naquela época. FORTRAN passou por algumas grandes revisões:
• FORTRAN IV (FORTRAN 66)
Esta versão foi feita em meados da década de 60 e foi a primeira padronização da
linguagem, que gerou um grande número de versões diferentes a partir dela. Programas
escritos em FORTRAN 66 são raros hoje em dia.
• FORTRAN 77
Uma grande reformulação foi feita em meados da década de 70 e várias novas
características foram adicionadas à versão anterior. A versão FORTRAN 77 foi o grande
apogeu dessa linguagem de programação por assim dizer e há mais programas escritos
nesta versão do que em qualquer outra de suas revisões, mesmo as mais recentes.
• FORTRAN 90
No final da década de 80, a versão 90 do FORTRAN foi elaborada, embora outras
linguagens de programação mais modernas tivessem tomado conta do mercado, quase
que substituindo completamente sua utilização. Muitas características novas foram
acrescentadas a esta versão, como por exemplo recursão, ponteiros e o tipo de dado
TYPE, o qual permite uma maior abstração dos dados. Além disso, algumas das
restrições anteriores foram retiradas.
• FORTRAN 95, F
A versão mais recente do FORTRAN trás como novidade nessa linguagem a
possibilidade de se trabalhar orientado a objetos e várias outras características novas.
Alguns críticos argumentam que essa é uma tentativa de criar uma linguagem moderna
de programação totalmente baseada em FORTRAN.
2.1 – Características
O código FORTRAN foi por muito tempo estruturado em linhas que poderiam conter no
máximo 72 caracteres cada um. Essa restrição vinha do tempo em que o código FORTRAN
era inserido nos computadores através de cartões, os quais só comportavam 80 caracteres
por linha. Assim, se a linha de comando precisa de mais de 70 caracteres, esta é dividida em
duas ou mais linhas utilizando um caracter especial para indicar sua divisão (* ou às vezes
&) na sexta posição da linha.
É digno de notar que programas em FORTRAN são mais bem manipulados por
programadores com muita experiência. Para programadores que só trabalham com
linguagens de programação modernas, um primeiro contato com FORTRAN pode ser
traumático. Devido a limitações em compiladores antigos, programas podem ser arquivos
bem grandes. Programas de 200.000 linhas ou mais são comuns. O código é pesado e
raramente bem estruturado. São poucos os comentários. Grande parte das advertências a
respeito do uso da ferramenta GO TO vem da experiência com o código FORTRAN.
Programas em FORTRAN começam com a palavra-chave PROGRAM seguido do nome do
programa (max 6 caracteres no caso do FORTRAN 77).
FORTRAN não é case sensitive, isso para diferenciar a prática comum de apenas usar
letras maiúsculas para as linhas de código,e também por que antigamente, muitos sistemas
não suportavam o uso de letras minúsculas.
Obs.: o conteúdo de variáveis character é case sensitive.
O caracter "c" no começo da linha indica que a partir dali se encontra um comentário.
Como não são permitidas linhas em branco, linhas apenas com o " c" inicial é utilizado para
criar espaços em branco nos programas. No caso do FORTRAN 90, usa-se a "!" que
também pode ser usado no fim do comentário.
Há duas maneiras de usar variáveis em FORTRAN: elas podem ser declaradas da mesma
forma que as linguagens de alto nível atual ou podem ser declaradas implicitamente, isto é,
as variáveis declaradas terão seu tipo baseado no primeiro caracter de seu nome. Usando
essa técnica, todas as variáveis iniciadas com I,J,K,L,M são por default variáveis inteiras e
variáveis iniciadas com outras letras serão variáveis do tipo float. Para desativar esse
padrão, o usuário deve iniciar a declaração de variáveis com as palavras-chave Implicit
none.
Variáveis em FORTRAN 77 podem ter no máximo 6 caracteres e conter caracteres de a a z
e números de 0 a 9, mas devem sempre iniciar com um caractere. Essas e outras regras
tornam programas em FORTRAN 77 difíceis de se ler. O FORTRAN 90 eliminou essa
restrição.
Página 3 de 3
A maior vantagem de se usar a linguagem FORTRAN é porque esta é padronizada pela
ANSI e ISO. Conseqüentemente, se seu programa é escrito em ANSI FORTRAN 77, ele
rodará em qualquer computador que tiver o compilador 77. Além disso, programas
FORTRAN são portáveis para várias plataformas diferentes.
2.2 – A Linguagem
Tipos de Dados
• Inteiros:
INTEGER a, b, c
• Reais:
REAL a, b, c (precisão simples - 8 dígitos não significativos)
DOUBLE PRECISION a, b (precisão dupla - 16 dígitos não significativos)
• Caractere:
CHARACTER a, b, c
• Lógicos:
LOGICAL a, b, c (pode assumir .true. ou .false.)
Operadores
• Aritméticos:
+ (adição)
- (subtração)
* (multiplicação)
/ (divisão)
** (potência)
! (comentarios)
• Lógicos:
.AND.
.OR.
.NOT.
Ex: IF(x>5 .AND. x<10)
• Relacionais:
== (igual)
< (menor)
<= (menor igual)
> (maior)
>= (maior igual)
/= (diferente)
Funções de Biblioteca
Estrutura do IF
Loop Do
Estrutura do SELECT
Comandos Básicos
Habituando-se ao FORTRAN
Vetores
Matrizes
A declaração é igual a vetores, com a diferença que se deve determinar duas ou mais
dimensões para a matriz, em vez de uma.
Exemplo:
INTEGER x
DIMENSION x(2,2)
x(1,1)=10
x(2,1)=20
x(1,2)=15
x(2,2)=25
Ponteiros
Ponteiros em FORTRAN deve ter um alvo pré-definido. Se não houver um alvo definido
para este, ele não será reconhecido como ponteiro. A variável que será apontada pelo
ponteiro recebe a palavra chave TARGET e passa a ser o alvo do mesmo.
Obs.: Este recurso só foi implementado no FORTRAN 90 em diante.
Operador "=>"
Exemplo:
INTEGER a, b
TARGET a
POINTER b
b => a
print*, ‘O valor de a eh ’ , b
Funções
Funções
- Retornam sempre um valor e a ela podem ser passados qualquer número de parâmetros;
- O tipo de função deve ser declarado no programa principal como se fosse uma variável
comum;
- Uma função pode utilizar outras funções como parâmetro;
Exemplo:
Chamada:
Nome_da_função(lista_de_parâmetros)
Definição:
Function nome_da_função(lista_de_parâmetros)
! definição e declaração das variáveis e constantes locais
!seqüência de comandos
return
end
Retorno:
nome_da_função = expressão
Subrotinas
- Não retornam nenhum valor e a ela pode ser passados qualquer número de parâmetros;
- As subrotinas podem conter qualquer tipo de comando como imprimir resultados, abrir
arquivos, executar cálculos, desde que não tenham valor de retorno;
- Uma subrotina pode chamar outras subrotinas;
Exemplo:
Chamada:
call nome_da_subrotina(lista_de_parâmetros)
Definição:
subroutine nome_da_subrotina(lista_de_parâmetros)
!definição e declaração das variáveis e constantes locais seqüência de comandos
return
end
Obs.: a palavra chave ‘return’ é opcional
3 – Métodos de Implementação
O programa cf77 apresenta uma série de opções que permitem controlar não só o nível de
otimização, mas também todo processo de compilação. Alguns exemplos destas opções são
apresentados a seguir:
cf77 -c prog.f apenas compila o arquivo prog.f
cf77 -o exec prog.f define o nome do executável como exec
cf77 -Wd"opções" prog.f passa as opções para o comando fpp
cf77 -Wu"opções" prog.f passa as opções para o comando fmp
cf77 -Wf"opções" prog.f passa as opções para o comando cft77
cf77 -Wl"opções" prog.f passa as opções para o comando segldr
cf77 -Zp prog.f habilita vetorização e paralelização
cf77 -Wf"-em" prog.f gera relatório de otimizações com nome prog.l
cf77 -o off prog.f desabilita otimizações
-l name
onde "name" é parte do nome da library, sendo que o nome completo é
"libname.a".
Exemplo: a opção "-l sim" permite utilizar a library "libsim.a" localizada no
diretório "/usr/lib".
• o arquivo que contêm a library tem como nome algo semelhante a "name.a"
(isto é: não inicia com "lib") e/ou se encontra em um diretório diferente do
diretório padrão de bibliotecas "/usr/lib". Neste caso, deve ser acrescentada a
seguinte opção de compilação:
-l /dir/name.a
onde "dir" é o caminho completo até o diretório onde se encontra a library e
"name.a" é o nome completo da library.
Exemplo: a opção "-l /local/lib/bcslib.a" permite utilizar a library "bcslib.a"
localizada no diretório "/local/lib".
2) – Erro de falta de memória ao compilar ou executar um programa no modo
interativo.
O erro de falta de memória ao compilar ou executar um programa no modo
interativo, é causado na maioria dos casos quando o programa tenta colocar
uma quantidade de memória maior que o limite de memória que é possível
alocar interativamente (2 MW = 16 Mbytes).
Neste caso, para poder compilar ou executar o programa deve-se escrever
um job que execute a tarefa desejada (compilação ou execução do programa)
e submetê-lo para execução com o comando "qsub", podendo especificar-se
o tempo de execução limite, a quantidade de memória limite a ser alocada.
2) Novas características:
Existem duas formas, que podem ser usadas em conjunto, para se controlar o nível
de otimização tanto em programas FORTRAN ou C. A primeira forma corresponde
à especificação formal do nível de otimização diretamente na linha de comando em
que é invocado o compilador. Com o uso deste tipo de especificação, o processo de
otimização é aplicado ao programa como um todo. A segunda forma de controle de
otimização corresponde ao uso de diretivas de compilação dentro do próprio
programa do usuário. Esta forma, complementar a primeira, é usada para controlar o
processo de otimização em partes específicas do programa.
Em FORTRAN, as diretivas são identificadas pelo comando CDIR$ opção,
colocado na primeira coluna. Algumas das diretivas disponíveis são:
• IVDEP: informa ao compilador que não existe dependência de dados no laço
subseqüente.
• NOVECTOR: desabilita a vetorização dos laços subseqüentes.
• VECTOR: habilita a vetorização dos laços subseqüentes, quando possível.
• NEXTSCALAR: gera apenas instruções escalares para o laço subseqüente.
• SHORTLOOP: informa ao compilador que o laço subseqüente não será
maior do que 64, diminuindo os testes necessários durante a execução.
• INLINE: habilita o compilador a utilizar macro-substituição para as funções
subseqüentes.
• NOINLINE: desabilita a macro-substituição.
• VFUNCTION: define funções vetoriais.
• VSEARCH/NOVSEARCH: define laços de busca.
• RECURRENCE/NORRECURRENCE: define laços de redução.
4 - Avaliação da Linguagem
Legibilidade
Simplicidade
Ortogonalidade
Estruturas de dados
Poucos tipos de dados primitivos, o tipo String é obtido a partir de uma variável de
múltiplos caracteres.
Ex.: CHARACTER frase*8
Possui apenas os tipos: Logical (boleano), Integer, Double, Complex, Real
Para operações matemáticas oferece um bom nível de abstração devido a suas variáveis de
alta precisão
Sintaxe
Não usa delimitador de final de linha, como por exemplo o ponto-e-vírgula ;
Inexistência de palavras reservadas, variáveis podem assumir qualquer nome de um
operador, comando, identificador, etc.
Comandos possuem sua forma de acordo com seu significado
Ex.:
Log10(x)
DOUBLE PRECISION
/= (Símbolo relacional de diferenciação)
Possui delimitadores de blocos bem definidos
Ex.:
IF (a == b) THEN
A=5
END IF
Assim como END DO, END SELECT, END PROGRAM ;
Segue a estrutura fixas de lay-out a fixed form e a free form, onde na primeira cada coluna
possui seu significado, não sendo permitido iniciar o código em qualquer lugar;
Identificadores limitados a 6 caracteres;
Linhas limitadas a 72 caracteres (utiliza-se o sinal & como indicador de continuidade da
linha);
Variáveis cuja primeira letra identifica seu tipo ajudam na legibilidade porém “prende”
mais o programador.
Codificabilidade
Simplicidade x Ortogonalidade
A linguagem então é bastante simples pois cada elemento possui apenas um significado e
não é muito ortogonal devido ao fato de não utilizar muitas combinações de elementos.
Suporte a abstração
Originalmente, o FORTRAN 77 possui poucos tipos de dados primitivos, enquanto o
FORTRAN 90 possui tipos de dados definidos pelos usuários o que facilita bastante a
abstração. A linguagem é de alto nível, mas não nos permite abstrair tanto os problemas por
falta de recursos.
Confiabilidade
Checagem de Tipo
A linguagem possui checagem de tipo em tempo de execução assim como durante a
compilação.
Ela não permite a atribuição de um valor caracter a uma variável inteira, porém se for
atribuído um valor fracionário a uma variável inteira ela truncará o valor.
Tratamento de Exceções
A linguagem possui um suporte rudimentar a tratamento de exceção, gerenciando apenas a
operações com pontos flutuantes.
Uso de Alias
A linguagem disponibiliza comando do tipo POINTER que faz com que uma variável
aponte para outra.
INTEGER a, b
TARGET a
POINTER b
b => a
print*, ‘O valor de a eh ’ , b
Não detectamos a presença de ponteiros que utilizam endereços de memória para
referenciar variáveis
Legibilidade e Codificabilidade
Um código em FORTRAN não é fácil de ser lido apesar da linguagem ser muito simples e
pouco ortogonal. Ela possui muitos identificadores e diversos elementos que acabam
tornando o código extenso e confuso. O código é pesado e raramente bem estruturado.
Grande parte das advertências a respeito do uso da ferramenta GO TO vem da experiência
com o código FORTRAN.
A restrição de 6 caracteres para identificadores de variáveis e o máximo de 72 caracteres
por linhas fazem com que diminua bastante a legibilidade da linguagem.
No meio científico a linguagem já está bastante difundida pois oferece um bom nível de
abstração devido a suas variáveis de alta precisão e ferramentas de cálculo. Mas para fins
gerais a linguagem não apresenta alta codificabilidade.
Custo
Treinamento
O custo de treinamento é elevado pois o aprendizado da linguagem não é algo simples,
porém como ela segue padrões e convenções matemáticas ela se torna fácil de ser
compreendida por engenheiros e pela comunidade científica. Mas em geral ela é complexa
e de difícil de ser compreendida por um programador amador ou aquele que só teve contato
com linguagens modernas.
Compilação
Um programa em FORTRAN é lento tanto em sua compilação além de gerar grandes
executáveis.
Execução
A execução de um programa em FORTRAN é lenta e não otimizada para recursos de
hardware atuais. Possui um suporte simples de otimização de código para processadores
Pentium entre outras otimizações.
Manutenção
Mesmo que bem documentada, um código extenso em FORTRAN não será fácil de ser
feito uma manutenção por que a linguagem dá margem a desvios incondicionais (GO TO)
os quais foram muito utilizados nessa linguagem, além de que como ela não oferece um
bom nível de abstração e nem boas estruturas de repetição isso tudo implica num código de
difícil manutenção.
Vantagens do FORTRAN
Exemplo da Ilegibilidade
c Inicio do programa e isso é um comentário
111 write (*,*) ' '
write (*,*) ' Esta é uma linha grande
*que foi continuada aqui'
print*, ‘Este número no início da linha é um Label’
c Outro comentário