Você está na página 1de 21

UNIVERSIDADE DE CAXIAS DO SUL

FORmula TRANslation - FORTRAN

Felipe Pires Teles


Sistemas de Informação
Paradigmas de Linguagem de Programação

Vacaria, 30 de Junho de 2005


Introdução

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:

1.1. O que são linguagens de programação?


São notações usadas para especificar e organizar computações;
São ferramentas para se escrever software;
Foram inventadas com objetivo de facilitar o uso das máquinas na criação e especificação
de soluções para problemas de software.

1.2. Linguagens de Baixo e Alto Nível


Internamente o computador só trabalha com números binários.
Programas devem ser especificados em linguagem de máquina para que o computador o
interprete e o execute.
Linguagem de máquina é a linguagem nativa de computadores, sendo de baixíssimo nível e
dependente de máquina, onde programas são expressos somente por números.
Linguagem de máquina é praticamente ilegível para humanos, mas é o que o computador
entende.
Linguagens Assembly são linguagens de baixo nível que utilizam nomes e símbolos ao
invés de códigos de instruções de máquina.
Linguagens Assembly obviamente são também dependentes de máquina, mas criam um
nível de abstração sobre a linguagem de máquina, através de nomes e símbolos, que tornam
a tarefa de programação um pouco menos árdua.
Linguagens de alto nível são aquelas que são independentes de máquina
Exemplos de linguagens de alto nível: FORTRAN, Algol, COBOL, Pascal, Python, C

1.3. Principais Paradigmas de Linguagens de Programação


O que é paradigma?
Algumas linguagens criadas durante a história da evolução das linguagens introduziram
novas formas de se pensar sobre programação, resultando em formas distintas de
modelagem de soluções para problemas de software. Exemplos são FORTRAN
(imperativas), LISP (funcionais), Simula (orientadas a objetos) e Prolog (lógicas).
Outras linguagens são o resultado da evolução de linguagens mais antigas, muitas vezes
mesclando características de diferentes linguagens existentes. Por exemplo, C++ é uma
evolução do C com características de orientação a objetos, importadas de Simula.

1.3.1. Linguagens Imperativas


As linguagens imperativas são orientadas a ações, onde a computação é vista como uma
seqüência de instruções que manipulam valores de variáveis (leitura e atribuição).
Foram criadas principalmente pela influência da arquitetura de computadores
preponderante Von Neumann, onde programas e dados são armazenados na mesma
memória. Instruções e dados são transmitidos da CPU para a memória, e vice-versa.
Resultados das operações executadas na CPU são retornadas para a memória.
Seus conceitos principais são as variáveis, que representam simbolicamente células (ou
posições) de memória, declarações de atribuição (Exemplo do Pascal: x := 10), baseadas
nas operações de transmissão de dados, e a forma iterativa de declarações de repetição
(Exemplo do C: while).
Operandos em expressões são enviados da memória para a CPU, e o resultado da avaliação
dessas expressões é transferido da CPU para a memória, representada pela variável do lado
esquerdo de uma declaração de atribuição.
Repetição é feita por iteração, porque as instruções em uma arquitetura Von Neumann são
armazenadas em posições adjacentes de memória, tornando a iteração mais eficiente, mas
desencorajando o uso de recursão para repetição.
Exemplos de linguagens imperativas: FORTRAN, BASIC, COBOL, Pascal, C, Python,
ALGOL, Modula.

Linguagens Imperativas Não Estruturadas


FORTRAN foi uma das primeiras linguagens de alto nível imperativas, destinada
inicialmente ao desenvolvimento de aplicações científicas. As versões originais de
FORTRAN possuíam a instrução goto necessária para determinar a repetição e a seleção de
execução de instruções, o que dificultava bastante a leitura e o acompanhamento da
execução de um programa escrito em FORTRAN.

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

Em FORTRAN os tipos de dados são declarados assim:

• 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

Função Matemática Código em


FORTRAN
seno a sin(a)
cosseno a cos(a)
tangente a tan(a)
raiz a sqrt(a)
|a| abs(a)
Resto de a/b amod(a,b)
log a log10(a)

Estrutura do IF

A estrutura do comando IF é a seguinte:


IF (condição) THEN
comandos 1
ELSE
comandos 2
END IF

Loop Do

A estrutura do Loop DO é a seguinte:


DO i=N1 , N2 , N3
comandos
END DO
• Onde N1 é o valor inicial da variável i
• Onde N2 é o valor final da variável i
• Onde N3 é o valor de quanto o valor de i vai ser incrementado ou decrementado
Ex: DO i=0 , 10 , 2
END DO

Estrutura do SELECT

A estrutura do SELECT é a seguinte:


SELECT CASE (expressão)
CASE (opção escolhida)
Comandos
CASE (opção escolhida)
Comandos
CASE DEFAULT
Comandos
END SELECT

Comandos Básicos

PRINT*, 'frase' – Serve para imprimir na tela


Ex: PRINT*, 'Alô Mundo!!'
READ*, variável – Serve para fazer a leitura dos dados

Habituando-se ao FORTRAN

A estrutura de código escrito em FORTRAN é a seguinte:

PROGRAM nome do programa


IMPLICIT NONE
bloco de comandos
END PROGRAM nome do programa

Vetores

A declaração de vetores em FORTRAN é semelhante à declaração de uma variável


qualquer, com a diferença que logo após a declaração da variável, é acrescentada a palavra
chave DIMENSION e entre parênteses o tamanho que este deve ter. Para acessar o
conteúdo do vetor, utiliza-se o índice do conteúdo procurado. Exemplo:
Exemplo de um vetor com 3 números inteiros
INTEGER x
DIMENSION x(3)
x(1)=10
x(2)=20
x(3)=30

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

Em FORTRAN as funções são utilizadas para economizar espaço e tempo de programação.


São reutilizáveis e dá maior clareza aos programas.
Geralmente só aparecem no final do programa, para facilitar a sua leitura. As variáveis são
locais.
A declaração é bastante semelhante à declaração de funções em C, tendo apenas uma
pequena variante. Funções em FORTRAN podem ser assim subdivididas:

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

Sistemas de Compilação: o compilador FORTRAN 77 (CF77), o FORTRAN 90 (CF90).


Esses compiladores são capazes de vetorizar e paralelizar automaticamente códigos
seqüenciais. Estes compiladores apresentam as seguintes características:

• operam completamente dentro da memória principal;


• expandem dinamicamente seu tamanho na memória se necessário, para compilação
de programas grandes;
• organizam o código fonte em módulos;
• compilam em 4 fases:
o Processamento de instruções fonte, análise léxica e sintática, geração de
código intermediário para as demais fases;
o Otimização escalar: análise do fluxo de dados e transformações para
otimização escalar;
o Vetorização: análise de código para determinar se a execução vetorial é
possível;
o Geração de código.

3.1 Sistema de Compilação CF77

O programa cf77 controla o sistema de compilação FORTRAN (CF77). Este programa é


responsável pela criação de arquivos binários executáveis a partir de programas fonte
codificados em FORTRAN 77 padrão ANSI. A compilação de um programa FORTRAN
passa necessariamente por duas fases: compilação (comando cf77) e lincagem (comando
segldr). Na geração de código vetorial e paralelo, duas outras fases opcionais de otimização
são executadas. Tem se portanto quatro fases (figura 5.2), executadas por seus respectivos
comandos:

• Pré-processamento: é executada pelo programa fpp que realiza a análise de


dependências e reestrutura o código fonte de forma a maximizar o uso da
arquitetura da máquina. Basicamente as regiões de código que podem ser
executadas em paralelo ou vetorizado são identificadas através de diretivas de
compilação (CMIC$ e CDIR$).
• Processamento Intermediário: é executado pelo programa fmp que transforma as
diretivas de compilação inseridas pelo programa fpp ou pelo próprio usuário em
chamadas a bibliotecas de rotinas capazes de utilizar todos os recursos vetoriais e
paralelos disponíveis.
• Compilação: é executada pelo programa cft77. Este programa converte código
fonte em código objeto realocável.
• Lincagem: executada pelo programa segldr. Nesta fase o código objeto realocável
gerado pelo programa cft77, ou por qualquer outro sistema de compilação, é lincado
ao conjunto de bibliotecas necessário para gerar o código executável.

3.2 Sistema de Compilação FORTRAN

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

Os erros mais comuns de compilação com o compilador cf77 são:


1) – Erro na utilização de librarys (bibliotecas).
Os erros na utilização de librarys (bibliotecas) são causados na maioria das vezes
pelo uso incorreto da opção de compilação onde se informa ao compilador o nome e
a localização da biblioteca que se deseja utilizar. Na utilização de uma library
podem acontecer dois casos:

• o arquivo que contêm a library tem como nome algo semelhante a


"libname.a" (isto é: inicia com "lib") e se encontra no diretório padrão de
bibliotecas "/usr/lib". Neste caso deve ser acrescentada a seguinte opção de
compilação:

-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.

3.3 Sistema de Compilação CF90

O objetivo principal da versão 90 do FORTRAN é tornar a linguagem mais


moderna e próxima de outras linguagens de programação como C e PASCAL.
Dentre as características mais importantes incorporadas nesta versão está a
redefinição de operadores e a manipulação de matrizes.
O desenvolvimento do FORTRAN 90 iniciou-se imediatamente após a adoção da
padronização do FORTRAN 77. Muitas das sugestões de usuários do 77 foram
incorporadas no 90.
Os objetivos da padronização e as novas características incorporadas ao FORTRAN
90 são:
1) Objetivos da Padronização:

• Acompanhar a evolução das linguagens de programação no sentido de tornar


o FORTRAN uma linguagem mais moderna, eliminando alguns comandos
considerados obsoletos.
• Padronizar as extensões de todos os fabricantes de compiladores FORTRAN
tornando a linguagem mais portável.
• Modernizar a linguagem com a implementação de novas características
como o formato livre de programas e tipos derivados.
• Aprimorar a capacidade de armazenamento de dados no programa principal
com a alocação dinâmica de memória.
• Modularização com a definição de módulos.
• Portabilidade numérica com precisão selecionada.
• Facilitar operações paralelas com arrays para um uso melhor de
computadores com processamento vetorial paralelo.
• Compatibilidade total com o FORTRAN 77. O 77 é um subconjunto do 90.
• O compilador avisa quando encontrar código não padrão e características
obsoletas.

2) Novas características:

• Processamento de vetores e matrizes de uma maneira bem mais simples que


nas versões anteriores. Não existe mais limitação do índice do array. O
índice pode ser negativo.
• Alocação dinâmica de memória, incluindo matrizes dinâmicas.
• Módulos.
• Subrotinas com parâmetros opcionais.
• Declaração de subrotinas internas. Neste caso há a possibilidade de se
declarar uma subrotina local, dentro da subrotina.

3.4 Controle dos Níveis de Otimização

Tanto no compilador C quanto no compilador FORTRAN, pode-se controlar quatro


níveis de otimização: paralelização de processos, vetorização, otimização escalar e
macro-substituição de funções. À medida que aumenta este nível de otimização,
pode-se esperar o seguinte:

• o tempo de execução do código gerado diminui;


• o tamanho do código gerado aumenta;
• o tempo de compilação aumenta;
• a quantidade de memória utilizada durante a compilação aumenta;
• a possibilidade de execução inesperada de procedimentos aumenta;
• um número maior de considerações é feito durante as etapas de otimização.

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

Possui poucos identificadores;


Cada elemento faz uma única função na maioria dos casos. (Ex.: END IF) ;
Não existe uso de ponto-e-vírgula no final das linhas;
Inexistência de palavras reservadas;
Possibilidade de declaração de variáveis implícitas;
Variável será de determinado tipo a depender de sua primeira letra;
Isso pode ser uma vantagem, alguns sistemas implementam isso;
Multiplicidade em alguns recursos;
Ex.:
Comentários podem ser c ou !
Comandos de saída em tela write e print
O operador lógico .EQ. pode ser substituído por ==
Inicialização de variáveis pode ser de duas formas:
INTEGER X/3/ !ou
INTEGER X = 3
Sobrecarga de operadores
Ex.:
O sinal * serve para operações aritméticas e dimensionamento de vetor

Ortogonalidade

O sinal = serve para atribuição de valores inteiros e caracteres,


operação com ponteiros =>
e operações relacionais >=, <=, == e /=
Estruturas de Controle
Possui blocos de controle simples, como o Loop Do, IF THEN ELSE, SELECT (um CASE
na verdade), funções e subrotinas.

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.

5 - Exemplos, Funcionalidade e Comparações:

5.1 - FORTRAN e Pascal

Vantagens do FORTRAN

FORTRAN é uma linguagem simples;


FORTRAN sempre existiu;
Compiladores FORTRAN são amplamente disponíveis na Internet ;
Altamente portável (existem versões para Unix, Windows, Linux, etc) ;
Primeira linguagem de programação de alto nível ;
Usada comercialmente por pessoas técnicas e cientistas de computação;
Cientistas não possuem interesse em aprender novas linguagens;
Trabalha bem com análises numéricas e cálculos técnicos ;
É necessário estruturar o problema para poder usar FORTRAN ;
Um grande número de programas e rotinas em FORTRAN são trocadas internacionalmente;
Compiladores eficientes;
Foi a primeira linguagem de programação padronizada;
Melhor obediência a padrões do que em outras linguagens ;
Está em continuo desenvolvimento (uma nova versão surge a cada década);
É a linguagem dominante em supercomputadores ;

Diferenças entre FORTRAN 77 e Pascal

FORTRAN não usa atribuições com := ou fim de blocos com ;


FORTRAN não possui palavras reservadas, além disso possui identificadores pequenos (ate
6 caracteres), os identificadores não precisam ser declarados ;
FORTRAN não possui RECORDS, PONTEIROS, Tipos definidos por usuários, tipos
escalares, sub-intervalos, mas possui COMPLEX e DOUBLE PRECISION;
FORTRAN 77 não possui WHILE e REPEAT;
FORTRAN não tinha IF THEN ELSE ENDIF até 1978 ;
FORTRAN não é capaz de aninhar funções e subrotinas, além de não permitir chamadas
recursivas;
FORTRAN possui um bom suporte a entrada e saída, porém estas facilidades são muito
difíceis para aprender ;
FORTRAN possui compilação separada ;
FORTRAN gerencia caracteres internacionais em comentários e saídas;
A orientação a cartões perfurados em FORTRAN ainda lhe traz problemas;
Espaços em branco não são significativos (exceto agora na forma fixa em FORTRAN 90);
Misturar inteiros e números ponto-flutuante são implementados diferentemente;
Vetores em FORTRAN 77, devem ser atribuídos valores usando laços explícitos;
Programas em FORTRAN são geralmente menos estruturados do que em Pascal;
Associação de argumentos é diferente;
Dados comuns são tratados diferentemente ;

5.2 - Exemplos de Códigos

Teste de diferenciação de maiúsculas e minúsculas


PROGRAM Letras
CHARACTER letra
letra = 'A'
IF (letra .eq. 'a') then
PRINT*, 'Letras iguais'
END IF
END PROGRAM Letras

Inexistência de palavras reservadas


PROGRAM Repeat
CHARACTER IF
INTEGER DO
DO = 4
IF = '+'
IF (IF .eq. '+') then
PRINT*, 'Soma', DO
END IF
END PROGRAM Repeat

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

Declaração de variáveis implícitas


PROGRAM Variaveis
IMPLICIT INTEGER (a-m) ! todas variáveis começando por A a M serão inteiros
IMPLICIT CHARACTER (n-z) ! todas variáveis começando por N a Z serão caracteres
print*, 'Digite sua idade'
read*, Iidade
print*, 'Digite seu nome'
read*, Nnome
ENDPROGRAM Variaveis
Conclusão

FORTRAN não é legível pois não conseguiu manter o comprometimento entre a


simplicidade e a ortogonalidade, se a linguagem tivesse menos elementos, possuísse
palavras reservadas e não fosse tão rígida em seu lay-out acabaria implicando em uma
linguagem mais legível e conseqüentemente mais codificável.
A linguagem possui um bom poder de codificabilidade apenas no escopo matemático.
Apenas as novas versões do FORTRAN foram implementam recursos como Orientação a
Objeto, tratamento de exceções, porém não devem ser bem consolidados e não
conseguimos documentação a respeito.
A linguagem não nos oferece confiança (baixa confiabilidade) pois não é legível e também
por ser de baixa codificabilidade.
FORTRAN é muito custosa pois é lenta e de difícil manutenção e treinamento.
Bibliografia

Apostila da matéria Paradigmas de Linguagens de Programação do Prof. José Augusto –


Faculdade Ruy Barbosa;
Apostila da disciplina de Paradigmas de Linguagens de Programação do Prof. Luciano
Gerber – Universidade Luterana do Brasil, Campus Cachoeira do Sul;
http://www.inf.ufrgs.br/~cechin/inf01101/
http://www.geocities.com/helder_pc/FORTRAN/#_Toc467428023
http://sunsite.icm.edu.pl/FORTRAN/append-f.html