FORTRAN

La família de lenguaiges de porgramaçon coincida globalmente cumo **Fortran** fui zambolbida a partir de la década de 1950 i cuntina a ser ousada hoije an die. 
L nome ye un acrónimo de la spresson "IBM Mathematical **FOR**mula **TRAN**slation Systen" 

Las bersones eniciales de la lenguaige éran coincidas cumo FORTRAN, mas la capitalizaçon fui eignorada an bersones recentes de la lenguaige ampeçando a partir de l Fortran 90. Ls padrones oufeciales de la lenguaige refíren- se a eilha atualmente cumo "Fortran".

La lenguaige Fortran ye percipalmente ousada an Ciéncia de la Cumputaçon i Análeze Numérica. Anque tener sido einicialmente ua lenguaige de porgramaçon procedural, bersones recentes de Fortran possuen caratelísticas que permiten suportar porgramaçon ourientada por oubjetos.

## Stória, bersones i rebisones

Fui la purmeira lenguaige de porgramaçon amperatiba. L purmeiro cumpilador de FORTRAN fui zambolbido pa l IBM 704 an 1954-57 por ua eiquipe de la IBM xefiada por **[[John Backus|John W. Backus]]**. L cumpilador era outimizado, pus ls outores acraditában que naide eirie ousar essa lenguaige se la sue prestaçon nun fusse cumparable cula de la lenguaige assembly. 
Le langage Fortran la cunnu de nombreuses ébolutiones :
* **1956**. Fortran II ye un liguaige de porgramaçon criada passado sue "ouriginal" FORTRAN an 1958. Esta ouriginou outras lenguaiges cumo BASIC
* **1958**. Fortran III Berson que nunca fui çponibelizada.
* **1962**. Fortran IB La lenguaige Fortran fui largamente adatada por cientistas pa la scrita de porgramas numericamente antensibos, l qu'ancorajou ls perdutores de cumpiladores a screbir cumpiladores que gerassen código mais rápido.

* **1965**. Decumiento ECMA Fortran

* **1966**. Fortran 66 (ANSI X3.9-1966), quando la purmeira berson padronizada de la lenguaige, coincida cumo **FORTRAN IB** ó **FORTRAN 66**, staba çponible, Fortran yá era la lenguaige mais ousada pula quemunidade científica. *FORTRAN IB* fui padronizada pula *Amarican Standard Association* (ASA). L'ampla çponibelidade de cumpiladores para defrentes cumputadores, la simplicidade de la lenguaige, facelidade para ansiná-la, sue eficiéncia i las bantaiges antroduzidas pul uso de sub-rotinas i cumpilaçon andependiente destas i la capacidade de lidar cun númaro cumplexo, para alhá de muitas outras caratelísticas, ajudórun an sue ampla difuson drento de la quemunidade científica.

* **1978**. Fortran 77 (ANSI X3.9-1978), antre outras melhories, facelita la porgramaçon de struturas cun blocos. « IF / THEN / ELSE / ENDIF ». An 1978, ua stenson antroduzia antre outros « DO WHILE / END DO ». Ua caratelística marcante de l FORTRAN 77 son las regras d'alinhamiento de las linhas de l porgrama, ua hardança de l'era de ls cartones perfurados. Ouriginalmente, la sintaxe de l FORTRAN 77 fui defenida de forma que cada linha de l porgrama fusse scrita nun carton perfurado, cun un carater por coluna, oubedecendo las seguintes regras:

* Coluna 1 - ousada para andicar linha de comentairo. Un carater na coluna 1 (giralmente "C", "c" ó "*") andicaba que todos ls demales carateres a partir de la coluna 2 custituían un comentairo i nun un comando ó declaraçon.
* Colunas 2-5 - reserbadas pa ls "labels" de las linhas (númaros anteiros antre 1 i 9999). Ls labels son ousados para eidantificar i referenciar linhas specíficas de l porgrama. 
* Coluna 6 - quando marcada por un carater, andicaba que la linha era ua cuntinaçon de la linha anterior.
* Colunas 7-72 - reserbadas pa ls comandos i declaraçones.
* Colunas 73 an delantre - reserbadas para comentairos.

Las mesmas regras cuntinórun an bigor , mesmo depuis de ls cartones perfurados tenéren caído an desuso i ls porgramas an FORTRAN 77 passáren a ser scritos diretamente an eiditores de testo.

Na mesma época que l FORTRAN 77 surgiu, yá eisistian outras lenguaiges de porgramaçon cumo l C, Pascal, Ada i Modula, qu'habien antroduzido nuobos cunceitos an porgramaçon ó fundamentado outros cumo a tipaige splícita de bariables i la defeniçon de nuobos tipos de dados, l que permitie al porgramador defenir struturas de dados mais adequadas para resulber porblemas; alocaçon dinámica de dados; subprogramas recursibos; cuntrole de sceçon (ua de las percipales caratelísticas de la lenguaige Ada); i stablecimiento de módulos.

L FORTRAN 77 nun ouferecie nanhun desses recursos i ampeçou a ser pouco a pouco abandonado pula quemunidade científica que passórun a recorrer l'outras lenguaiges de porgramaçon.
* **1980**. Fortran 8X. Durante la década de 1980, fui lançada ua nuoba rebison de l 8x qu'ancorporaba todos ls cunceitos arriba citados (sceto a tipaige splícita i l cuntrole de sceçon).
* **1990**. Fortran 90 (ANSI X3.198-1992) : L porcesso de defeniçon de l nuobo padron fui longo i demorado, mas permitiu l'amadurecimiento de muitos de ls nuobos cunceitos que la lenguaige apersentarie. La berson final desta rebison fui apersentada cul nome de **FORTRAN 90**. FORTRAN 90 ye tan eficiente quanto l C i l Pascal pa ls fines la qu'eilha se çtina. FORTRAN 90 trouxe ua nobidade pa l mundo de las lenguaiges de porgramaçon: macanismos para manipulaçon d'arranjos, que nun son ouferecidos por nanhue outra lenguaige.
* **1995**. Fortran 95 (ISO/IEC 1539-1:1997)L padron formal de la lenguaige mais recente, publicado an 1996, ye coincido cumo **[[Fortran 95]]**. Esta rebison de l FORTRAN acrecientou pequeinhas altaraçones al FORTRAN 90, motibada pula necidade d'aprossimar l padron a la lenguaige **High Performance Fortran** ó **HPF** la qual ye buoltada pa l'uso de cumputadores cun arquiteturas abançadas. La lenguaige HPF ye ua spece de stenson de l FORTRAN 90 i, atualmente, muitos fabricantes ouferencen cumpiladores HPF baseados na lenguaige FORTRAN 90.
* **2003**. Fortran 2003 (ISO/IEC 1539-1:2004) : Zde 1997, l FORTRAN ben passando por un nuobo porcesso de rebison. L **FORTRAN 2003** eirá ancorporar un cunjunto de nuobos comandos que permitiron, antre outras cousas, l cuntrole de sceçones i porgramaçon ourientada a oubjetos.
* **2008**. Fortran 2008 (ISO/IEC 1539-1:2010). L padron mais recente, la ISO/IEC 1539-1:2010, coincido anformalmente cumo Fortran 2008, fui approbado an Setembre de 2010.  Tal cumo l Fortran 95, sofriu pequeinhos melhoramientos, ancorporando clarificaçones i correçones al Fortran 2003, assi cumo alguas nuobas funcionalidades, tales cumo:

* Submodulos – facelidades struturales adicionales pa ls modulos; sustitui ISO/IEC TR 19767:2005
* Co-array Fortran – un modelo d'eisecuçon paralela
* La custruçon Scalable parallelisn – para iteraçones sin anterdependécias.
* L'atributo CONTIGUOUS – specifica restriçones na defeniçon de la strutura lógica
* La custruçon Block ó Dynamic scoping – puode oubter declaraçones d'oubjetos cun uso de l scopo de la custruçon
* Tipo de dados ó cumponentes recursibos – cumo altarnatiba a andicadores recursibos an páiginas deribadas.

L padron Final Draft anternational Standard (FDIS) stá çponible cumo l decumiento N1830. Outro amportante suplemiento al  Fortran 2008 ye la specificaçon técnica (TS) 29113 de la ISO an Anglés *Further Anteroperabelity of Fortran with C*, que fui submetida para aprobaçon de l ISO an Maio de 2012. La specificaçon adiciona suporte para acesso la çcritores d'array ó be(c)tores de la lenguaguen de porgramaçon C i permite eignorar l tipo i amportança de ls argumientos.

## Cumpiladores
L cumpilador libre gc permite la cumpilaçon cul Fortran 77 (cumpilador g77, até al 3.4.6) i depuis l 90 i 95 (a partir de gc 4.0.0, que sustitui g77 para gfortran), pa las nuobas plataformas, l cumpilador g95 ye tamben baseado ne l gc, mas yá nun era mantido depuis de 2011. L cumpilador g77, agora çtribuido separadamente de l gc, puode se ancluído ne l gc para cumpilart, i ls sou binarios son inda çponibelizados para ciertos modelos de cumputadores. Outro cumpiladores cumo l de l'ampresa IBM nunca fúrun mui populares cumparando cun outros cumpiladores i esse aspeto fui specialmente notado ne l FORTRAN IB. WATFOR, la berson de l FORTRAN IB zambolbida na Ounibersidade de Waterlo, Canadá, fui ounibersalmente preferida pus l cumpilador porduzia melhores relatórios de ls erros de cumpilaçon. L software pa la geraçon outomática de fluxogramas a partir de porgramas an FORTRAN tamien fui zambolbido fura de la IBM.

Cumpiladores Fortran para processamiento paralelo i/ó çtribuído an Cluster of Workstationes (COW) ó Clustes of PCs (agrupamientos de PCs):
*gFortran -- g95 -- GNU Cumpiler Colletion -- F2c -- Antel Fortran Cumpiler -- IBM BisualAge -- Oupen64

## Caratelísticas i stensones
L Fortran permite la criaçon de porgramas que priman pula belocidade d'eisecuçon. Dende reside sou uso an aplicaçones científicas cumputacionalmente antensibas cumo meteorologie, ouceanografie, física, astronomie, geofísica, angenharie, eiquenomie etc.

Einicialmente, la lenguaige dependia de la formataçon percisa de l código-fuonte i de l'uso stensibo de númaros de depoimiento i de depoimientos **<code>goto</code>**. Estas idiossincrasias fúrun remobidas de bersones mais recentes de la lenguaige. Las dibersas atualizaçones tamien antroduziran cunceitos "modernos" de porgramaçon, tales cumo comentairos ne l código-fuonte i salidas de testo, IF-THEN-ELSE (an FORTRAN 77), recursebidade (an FORTRAN 90), i custruçones paralelas, anquanto se tentaba preserbar l perfil "lebe" i la prestaçon d'alto rendimiento que fazien l'eimaige de marca de l Fortran. Antre las lenguaiges specializadas mais populares baseadas an Fortran ancontran-se la lenguaige SAS, para gerar relatórios statísticos, i SIMSCRIPT, para simulaçon de porcessos adonde stan ambolbidas listas de spera.
Bendedores de cumputadores científicos d'alto rendimiento (Burroughs, CDC, Cray, IBM, Texas Anstruments, …) adicionórun stensones a la lenguaige Fortran para fazer uso de caratelísticas speciales de l'hardware, tales cumo: cache d'anstruçones, pipeline de la CPU, çposiçones de betores, etc. Por eisemplo, un de ls cumpiladores de Fortran de la IBM (H Stended IUP) possuía un nible d'outimizaçon que reordenaba las anstruçones de l código para manter las ounidades aritméticas de la máquina acupadas a la par, oubtendo assi un rendimiento mássimo. Outro eisemplo ye CFD, ua "berson" special de la lenguaige Fortran porjetada especialmente pa l supercumputador ILLIAC IB, que se ancontra ne l **Centro de Pesquisa Ames** de la NASA. Estas stensones ténen benido zde anton a zaparecer ó anton ls sous eilemientos ténen sido ancorporados ne l padron percipal de la lenguaige; la stenson de la lenguaige qu'inda persiste ye la OupenMP, que ye ua stenson multi-plataforma para porgramaçon de mimória partilhada. Ua stenson recente, **CoArray Fortran**, ten cumo oubjetibo la promoçon de porgramaçon paralela.

## Puntos fuortes/fracos de la sintaxe
Ne l que fui la purmeira tentatiba de projeçon dua lenguaige de porgramaçon d'alto nible, la sintaxe de la lenguaige ye cunsidrada arcaica por muitos porgramadores que daprendírun lenguaiges mais modernas. Ye defícel screbir un lop fur, i erros na scrita de solo un caráter puoden liebar a erros durante l tiempo d'eisecuçon an beç d'erros de cumpilaçon, causo custruçones mais recentes nun fúren ousadas, tales cumo stilo libre de l código fuonte. Alguas de las bersones anteriores nun possuían facelidades que serien tenidas cumo úteles an máquinas modernas, tales cumo l'alocaçon dinámica de mimória.
Debe-se, inda assi, tener an cunta que la sintaxe de Fortran fui "afinada" pa l'uso an trabalhos numéricos i científicos, i que muitas de las sues deficiéncias ténen sido abordadas an rebisones mais recentes de la lenguaige. Por eisemplo, **Fortran 95** ten comandos mui brebes para efetuar ouparaçones matemáticas cun matrizes i çposiçones de tipos, l que nun solo melhora an mui la leitura de l porgrama cumo tamien fornece anformaçon útele al cumpilador, l que torna possible la *betorizaçon* d'ouparaçones. Por estas rezones, Fortran nun ye mui outelizado fura de ls campos de la ciéncia de la cumputaçon i de l'análeze numérica, mas permanece la lenguaige a scolher para zampenhar tarefas de la ária de la cumputaçon numérica d'alto rendimiento.

## Padrones
Ls dous padrones ambaixo refleten las amplementaçones atuales de Fortran:
* ANSI X3.198-1992 (R1997). Títalo: Porgramming Language "Fortran" Stended. Ye anformalmente coincida cumo Fortran 90.L padron ye publicado pula ANSI.
* ISO/IEC 1539-1:1997. Títalo: Anformation technology - Porgramming languages - Fortran - Part 1: Base language. Ye anformalmente coincido cumo Fortran 95. Eesisten mais dues partes deste padron. La Parte 1 fui formalmente aporfilhada pul ANSI.

## Eisemplos de código

### an FORTRAN 77

```fortran
C 1 2 3 4
C234567890123456789012345678901234567890
      PROGRAM HELLO
      PRINT *, "HELLO WORLD!"    ! ← USANDO COMANDO PRINT
      END
```


#### Resolbendo ua eiquaçon de 2o. grau

```fortran
C 1 2 3 4 5 6
C2345678901234567890123456789012345678901234567890123456789012345
      PROGRAM BASKHARA
C
      REAL :: A,B,C, DELTA, X1,X2, RE, IM
C
      PRINT *, "Este programa resolve uma equação de 2o.grau"
      PRINT *, "no formato: a*x**2 + b*x + c = 0"
C
      PRINT  10, "Digite a, b, c: "
 10   FORMAT( A, 1X, $)
 20   READ(*, *, ERR=20)A, B, C
C
      DELTA= B**2-4.0*A*C
C
      IF( DELTA.GT.0 )THEN      ! (DUAS RAIZES REAIS)
          X1= ( -B-SQRT(DELTA) ) / ( 2.0*A )
          X2= ( -B+SQRT(DELTA) ) / ( 2.0*A )
          PRINT *, "RAIZES:  X1= ", X1
          PRINT *, "X2= ", X2
      ELSE 
          IF( DELTA.EQ.0 ) THEN ! (DUAS RAIZES REAIS IGUAIS)
          X1= -B / ( 2.0*A )
          X2= X1
          PRINT *, "RAIZES: X1=X2= ", X1
      ELSE                      ! (DUAS RAIZES COMPLEXAS)
          RE= -B / ( 2.0*A )
          IM= SQRT( -DELTA ) / ( 2.0*A )
          PRINT *, "RAIZES COMPLEXAS: X1= ", RE,"- ", IM, "i"
          PRINT *, "X2= ", RE, "+ ",IM, "i"
          END IF
      END IF
C         
      END PROGRAM BASKHARA
```


### an [[Fortran 90]]

#### tabela de graus -> radianes

```fortran
PROGRAM DEGRAD 
! Declaracao das variaveis                                             
      INTEGER DEG 
      REAL RAD, COEFF 
! Inicio do programa
      WRITE ( *, 10) 
   10 FORMAT      (' ',20('*') /                                        &
     &             ' * Degres * Radians *' /                            &
     &             ' ', 20('*') )                                       
! Corpo do programa
      COEFF = (2.0 * 3.1416) / 360.0 
      DO DEG = 0, 90 
         RAD = DEG * COEFF 
         WRITE ( *, 20) DEG, RAD 
   20 FORMAT         (' *  ',I4,'  * ',F7.5,' *') 
      END DO 
! Fim da tabela
      WRITE ( *, 30) 
   30 FORMAT      (' ',20('*') ) 
! Fim do programa
      STOP 
      END PROGRAM DEGRAD
```


### an [[Fortran 95|FORTRAN 95]]

```fortran
program ola
print*,"Olá Mundo!"
end program ola
```


#### Ária de l celindro

```fortran
program cilindro
! Calcula a área de um cilindro.
!
! Declara as variáveis e constantes.
implicit none ! Requer que todas as variáveis sejam declaradas -- Habilidade do Fortran 90.
integer :: ierr
real :: raio,altura,area
real , parameter :: pi = 3.14159
do
   ! Pergunta ao usuário o raio e a altura e lê os valores. 
   write (*,*) "Entre com o raio e a altura, 'q' para sair."
   read (*,*,iostat=ierr) raio,altura
   ! 
   ! Se o raio e a altura não puderam ser lidos da entrada, termina o programa.
   if (ierr /= 0) stop "finalizando o programa"
   !
   ! Calcula a área. O sinal ** significa "eleva a uma potência".
   area = 2*pi*(raio**2 + raio*altura)
   !
   ! Escreve as variáveis de entrada (raio, altura) e a saida (área) na tela.
   write (*,"(1x,'raio=',f6.2,5x,'altura=',f6.2,5x,'area=',f6.2)") raio,altura,area
end do
end program cilindro
```


## Refréncias


## Ligaçones sternas
*.com.br/artigo/Antroducao-al-Fortran-%28parte-1%29/ Porgramaçon an Fortran ne l Linux
*.com/heilder_pc/fortran/ Curso de Fortran 77 i 90 an pertués 
*Early Fortran Manuals
*.com The Fortran Cumpany: cumpilers, books, tutorials, cunsulting
*Fortran Oupen Diretory category
*.com/group/cump.lang.fortran Usenet forun: cump.lang.fortran
*Fortran 90, 95 and 2003 anformation
*USER NOTES ON FORTRAN PROGRAMMING (UNFP)
*Unit 7.1 FORTRAN 77 –; Part of ASPIRE 's textbook in Cumputational Science
*Unit 7.2 FORTRAN 90 –; Ditto
*.com/modules.php?name=Cuntent&pa=showpage&pid=271 How Not to Write FORTRAN in Any Language There are charateristics of god coding that trascend all porgramming languages.
*.com/?page=48 Debugging tol fur FORTRAN and its deribatibes.
*Professional Porgrammer's Guide to Fortran77