Sei sulla pagina 1di 9

UNIVERSIDADE FEDERAL DO MARANHO Centro de Cincias Exatas e TecnologiaCCET Departamento de Informtica DEINF Webpage: http://www.deinf.ufma.

br

Disciplina: Introduo Informtica Prof. Carlos Gonalves Sala 214, Bloco 06, CCET - email: cav@ufma.br Webpages: http://www.deinf.ufma.br/~cav, ou http://cavg.br.tripod.com Assunto: Linguagem FORTRAN 77 e 90

A Linguagem de Programao FORTRAN Histrico


Foi criada em 1954 pela IBM e seu primeiro compilador foi implementado em 1957, para um computador de 1 gerao, o IBM 704 da prpria IBM. Com o advento da 2 gerao de computadores (1958), como o IBM 1401, a linguagem sofre nova evoluo, surgindo o FORTRAN II. Com o lanamento da 3 gerao em 1964, como IBM/360 e o IBM 1130, surgiu uma outra evoluo da linguagem, cuja nova verso ficou conhecida como FORTRAN IV. O FORTRAN verdadeiramente a primeira linguagem de programao de alto-nvel concebida. At ento, a programao de computadores envolvia o uso de linguagens de baixo-nvel, como a linguagem ASSEMBLY, ou mesmo o uso da linguagem de mquina. O FORTRAN possui uma sintaxe rgida e formato algbrico para simplificar seu uso com as frmulas matemticas. Devido ao fato do usurio da poca ser potencialmente ligado a rea cientfica no momento de sua gnese, esta linguagem foi destinada a aplicaes tambm cientficas, envolvendo extensas computaes. A primeira padronizao do FORTRAN foi feita pela ASAAmerican Standard Association em 1966. O segundo padro americano surgiu em 1978, numa nica norma (X3.91978) da ANSIAmerican National Standards Institutesucessora da ASA, que fora transformada na United States of America Standards Institute, em 1966. Embora a norma seja de 1978, mas por analogia com o FORTRAN 66 (dois dgitos repetidos), este padro conhecido por FORTRAN 77 ou ainda FORTRAN ANSI 77. Ao longo do tempo a linguagem teve muitas implementaes, tanto para empresas como para universidades, algumas das quais constituem uma ampliao da linguagem. o caso de implementaes voltadas para uso por estudantes, implementadas em equipamentos IBM, e.g., WATFOR1, WATFIV e WATFIV-S. Estas implementaes tiveram forte influncia no padro FORTRAN 77, objeto de nosso estudo.

Fortran 90: Sobreviso


Fortran 90 um superconjunto do Fortran 77todo programa em Fortran 77 padro, so programas em Fortran 90 padro. Logo, Fortran 90 adere e completamente compatvel com a j existente infraestrutura computacional do Fortran 77. forma fixa do cdigo-fonte do Fortran 77 o Fortran 90 acresce uma outra forma do fonte, chamada forma livre do fonte, no qual no existe qualquer coluna de dependncias. Na forma livre do fonte os comentrios no precisam comear na coluna 1 e a coluna 6 no reservada para o sinal de continuao. A continuao no fonte de forma livre indicada por um sinal de incluso &, na primeira linha. Em ambas as formas o sinal de exclamao ! pode ser usado para iniciar comentrios de fim-delinha (e.g., depois de um comando naquela linha) e um ; pode ser usado para separar dois comandos na mesma linha. Como no Fortran 77, os nomes (de variveis, procedimentos, etc.) do Fortran 90 comeam com uma letra e contm letras e dgitos. WATerloo FORtran, i.e., o FORTRAN implementado pela Universidade de Waterloo, Canad. A letra S aposta ao termo significa estruturada, pois S=abrev. strutuctured, em ingls.
1

Linguagem Fortran 7/907 - p.1/8

Adicionalmente, nomes podem conter at 31 caracteres, podem conter sublinhado _, e podem conter letras ambas maisculas e minsculas. Ponteiros. Os ponteiros provm duas importantes capacidades no Fortran 90 estruturas de dados dinmicas e arranjos dinmicos. O ltimo especialmente importante para a cincia computacional pois ele permite que os arranjos sejam dinamicamente alocados (e realocados) de tamanho adequado e fornece meios de minimizar a transferncia de dados quando realizando operaes sobre sees de arranjos variveis. Por conta do impacto negativo que os ponteiros tm sobre a otimizao, um ponteiro em Fortran 90 pode apontar apenas para (a) um objeto de dados explicitamente declarado como alvo do ponteiro, (b) um objeto criado dinamicamente, ou (c) outro ponteiro. Isto torna possvel que a aplicao da tecnologia de otimizao de armazenamento esttico seja usada sobre dados que no tenham atributos nem de ponteiros nem de alvo. Estruturas de Dados. Arranjos so provavelmente os mais importantes objetos compostos de dados para a cincia computacional, porm objetos mais heterogneos so necessrios, incluindo estruturas ligadas dinamicamente. No jargo do Fortran 90, estruturas so objetos de tipos definidos pelo usurio. Estruturas dinamicamente ligadas so implementadas essencialmente pelos tipos recursivos definidos pelo usurio. Um exemplo de um tipo que pode ser usado para a estrutura de uma lista duplamente encadeada mostrado abaixo, onde os componentes recursivos (PREVIOUS e NEXT no exemplo) devem ser ponteiros. Em geral, um tipo definido pode conter qualquer nmero de tipos de componentes. type list real :: data type(list), pointer :: previous, next end type list Aspectos obsolescentes. O Fortran 90 um primeiro passo em direo a um modelo de evoluo planejada da linguagem enquanto oposio ao crescimento desbalanceado ou remoes ad hoc de itens. Como a maioria dos passos iniciais, este uma pequena tentativa at aqui com resultado incerto. A idia finalmente remover aquelas caractersticas que se tornaram obsoletas enquanto a linguagem evolui, mas oficialmente identificar tais candidatos como obsolescentes bem antes da remoo efetiva. Intenta-se assim dar a comunidade Fortran (a) a chance de rever as recomendaes e prevenir que equvocos sejam feitos, (b) tempo para preparar-se para a mudana de forma ordenada. Segundo o modelo corrente, um item listado como obsolescente em uma verso do Fortran padro um candidato remoo na prxima verso. Os dez itens seguintes do Fortran 90 so listados como obsolescentes: 1. O IF-aritmtico 2. Expresses e variveis de preciso real (e dupla) como ndices do DO 3. Finalizao partilhada do DO (i.e., dois laos terminando no mesmo comando) 4. Outra finalizao do lao DO que no END DO ou CONTINUE 5. Desviar para um comando END IF exterior quela construo IF 6. Retornos alternados (ao invs, usar um cdigo varivel de retorno) 7. O comando PAUSE (usar READ no lugar) 8. Comandos ASSIGN e GOTO atribudo (usar procedimentos internos no lugar) 9. Especificadores atribudos de FORMAT (usar cadeias de strings ao invs) 10. O descritor H de edio de string (i.e., nHstring equivalente a string)

Linguagem Fortran 7/907 - p.2/8

Comparao entre Fortran 77, C, C++ e Fortran 90. Por trinta anos, desde sua criao at o Fortran 77, o Fortran tem sido a principal linguagem da cincia computacional. Durante este tempo as capacidades numricas do Fortran tem sido notavelmente estvel e superior quelas de outras linguagens de computador. As maiores mudanas surgem na forma de uma diversamente crescente e confivel biblioteca de rotinas numricas. A unio do Fortran, tcnicas para seu uso, e a extensivas bibliotecas numricas caracterizam a predominante infraestrutura para a cincia computacional. Na dcada passada, todavia, a crescente importncia de estruturas de dados dinmicas (particularmente arranjos dinmicos), unix workstations, sofisticadas facilidades de visualizao interativas, e, mais recentemente, arquiteturas paralelasnenhuma das quais Fortran 77 adere bemtem promovido interesse no uso de outras linguagens para computao, mais notadamente a C. Recentemente C++ tem tambm angariado considervel interesse, e Fortran tem tentado enderear suas deficincias para a moderna cincia computacional evoluindo para o Fortran 90. A tabela abaixo resume uma tentativa genrica de comparar estas quatro linguagens quanto a relativa adaptabilidade cincia computacional.

Tabela 1: Comparao entre linguagens numa escala de melhor (1) a pior (4) Funcionalidade Fortran C C+ Fortran 77 + 90 Robustez numrica 2 4 3 1 Paralelelismo de 3 3 3 1 dados Abstrao de 4 3 2 1 dados P.O.O. 4 3 1 2 Programao 4 3 2 1 funcional Mdia 3.4 3.2 2.2 1.2

Elementos da Linguagem FORTRAN


Formao de identificadores de variveis: Conforme j descrito no Portugol, sendo que: brancos no interior do nome so ignorados, nmero mximo de caracteres de 6 (seis) no Fortran 77, porm de 5 nos compiladores mais antigos, a 1 letra indicar o tipo (implcito) da mesma, i.e., se for, I, J, K, L, M ou N do tipo inteiro, caso contrrio ser real. Nota: Para inserir comentrios no programa use a letra c ou * na coluna 1 do programa-fonte. Expresses Aritmticas Conforme j definidas no Portugol. Instruo de atribuio: indicada pelo sinal de igualdade. Por exemplo: y = ax + b FORTRAN: Y = A*X + B

Linguagem Fortran 7/907 - p.3/8

Expresses Lgicas Usa-se os operadores relacionais e lgicos conforme descriminados a seguir. Os operadores relacionais: Sintax e .GT. .GE. .EQ. .NE. .LT. .LE. Descrio Greater than Greater than or equal to Equal to Not equal Less than Less than or equal to Fortran 90 > >= = /= < <= Semnti ca > = <

Operadores Lgicos Sintax e .NOT. .AND. .OR. Descrio No lgico e (conjuo) ou (disjuno)

Declarao de Variveis
Seguindo a especificao do FORTRAN 77: REAL v1, v2, v3, , vn INTEGER v1, v2, v3, , vn Nota: As variveis vi podem ser vetores ou matrizes e as variveis declaradas explicitamente anulam a declarao implcita. Exemplos: REAL NOTA, MEDIA INTEGER VAR, A(5,10), INDEX(10), L

LOGICAL v1, v2, v3, , vn Podem receber apenas .TRUE. ou .FALSE. Variveis complexas: COMPLEX v1, v2, v3, , vn onde a instruo de atribuio ser: vi = (real, imag) Dupla preciso DOUBLE PRECISION v1, v2, v3, , vn onde vi pode ser qualquer tipo conjunto: vetores e/ou matrizes Cadeias alfanumricas: Devemos indicar o comprimento da cadeia. CHARACTER *comp v1, v2, v3, , vn ou ainda CHARACTER v1*comp1, v2*comp2, v3*comp3, , vn*compn Atribuio: var = cadeia Concatenao: var3 = var1//var2//cadeia Exemplos: CHARACTER BRANCO*1, RELAT*9, TITUL*22 Declarao DIMENSION: DIMENSION nome(d1, d2,, dn),, nomej(e1, e2,,en) onde: nomeidentificador da varivel di, eiexpresses que determinam o tamanho mximo de cada dimenso. Linguagem Fortran 7/907 - p.4/8

Nota: No FORTRAN 77 permite-se at 7 dimenses, ao passo que compiladores antigos limitavam at um mximo de 3 dimenses. Uma forma alternativa de declarar arranjos no F77 : DIMENSION nome(li:ls), sendo li=lim. inferior e ls=lim. superior. Declarao IMPLICIT Usada para modificar a conveno do FORTRAN quanto ao tipo implcito das variveis. IMPLICIT tipo(letra1, letra2,, letran) Exemplo: IMPLICIT REAL(A:H) IMPLICIT LOGICAL (Z)

Estruturas de Deciso
1. IF-bloco: exclusiva do FORTRAN 77 e acima: IF (exp.) THEN ou IF(exp.) THEN S S ELSE S ENDIF ENDIF Nota: permitido o aninhamento de estruturas IFs. 2. IF-lgico: compiladores antigos no aceitavam esta instruo. [OBSOLETO] IF (exp.) S onde: S no pode ser END, outro IF ou uma instruo DO. 3. IF aritmtico: [OBSOLETO] IF (arit)end1, end2, end3 onde: endi so endereos para onde deve ser desviado o fluxo de execuo, caso arit seja <0, =0 ou >0, respectivamente.

Desvios
So representados pelo comando GOTO. [OBSOLETO] 1. GOTO incondicional: GOTO end 2. GOTO controlado: GOTO(n1, n2, , nj), exp onde: o fluxo desviar para nj de acordo com o valor resultante de exp. Se exp resultar fora dos limites, i.e., superior a 1 ou n, a instruo ser ignorada ou acusar erro, dependendo do compilador.

Estruturas de Repetio
So os laos (aritmticos) chamados de DO/CONTINUE. [OBSOLETO] Sintaxe: *2345678 DO end var=e1,e2,e3 S end CONTINUE onde: end pode ser qualquer nmero inteiro>0, var=var. de controle, e1=valor inicial, e2=valor final e e3=passo. S=comandos que compem o corpo do lao. Exemplo: *2345678 DO 10 K=1, 10, 2 S 10 CONTINUE

Linguagem Fortran 7/907 - p.5/8

No Fortran 90 tem-se os laos DO/ENDDO, que equivalem ao comando PARA/FIMPARA do Portugol. Sintaxe: *2345678 DO var=e1,e2,e3 S ENDDO onde: os elementos componentes tm a mesma semntica do lao DO/CONTINUE acima. Exemplo: *2345678 DO K=1,10,2 S ENDDO Ainda no Fortran 90, temos o lao controlado por uma varivel ou expresso do tipo lgica. o lao DOWHILE/ENDDO, que equivale ao ENQUANTO/FIMENQUANTO do Portugol. Sintaxe: *2345678 DOWHILE (exp.) S ENDDO onde: exp=expresso lgica, e S=comandos que compem o corpo do lao. Exemplo:

*2345678 DOWHILE ((a<0).OR.(x/=0)) S ENDDO

Comandos de ENTRADA/SADA
Basicamente temos dois, a saber: Entrada: READ(unid, form) lista ou READ form, lista Sada: WRITE(unid, form) lista ou PRINT form, lista onde: unid especifica a unidade de E/S usada. Deve ser uma constante ou varivel inteira form endereo de uma declarao FORMAT que descreve o formato para E/S de resultados lista variveis separadas por virgula As notaes livres de formato acontecem quando substitumos o endereo do formato por um * (asterisco), opcionalmente pode-se omitir tambm a unidade de E/S, nas instrues de E/S. Exemplos: Entrada: Sada: Entrada, formato livre: READ(5,*) Sada, formato livre: WRITE(6,*) Linguagem Fortran 7/907 - p.6/8

READ(5,form)

WRITE(6, form)

A,B ou ainda: LEIT=5 READ(LEIT,form ) A,B

A,B IMPR=6 WRITE(IMPR,form) A,B

A,B READ(*,*) A,B

A,B WRITE(*,*) A,B

As constantes 5 e 6 acima referem-se a leitora de carto e impressora, respectivamente, padro este que pode mudar de instalao para instalao. No Fortran 90 a sintaxe sempre no formato livre, veja a tabela abaixo: Fortran 90 (formato livre) Entrada: READ *,<var1>,<var2> etc. Sada: WRITE *,<exp.> ou PRINT *,<exp.> onde: exp=expresso ou string ou varivel separados por virgula, se mais de um. Exemplos READ *,X,Y,Z WRITE *,Area=,a PRINT *,Vol=,v PRINT *,vol,area

Uso do DO implcito para E/S de vetores e matrizes: [OBSOLETO] Vetores: READ(2,35) (VET(K), K=1,10,2), ou WRITE(6,35) (VET(K), K=1,10,20) Matrizes: Precisa-se do aninhamento dos laos DO e isto feito conforme indicado abaixo: READ(5,40) ((MAT(I,J), I=1,5),J=1,3), ou WRITE(6,35) ((MAT(J,K), J=1,6),K=1,5) Declarao FORMAT [OBSOLETO] Serve para definir o formato que ser usado na E/S dos dados, podendo a especificao ser de dados numricos, constantes literais e de posicionamento horizontal e vertical. Veremos apenas algumas destas especificaes, para maiores detalhes favor consultar [PEREIRA], p.118-125, ou qualquer outro livro-texto sobre FORTRAN 77 da bibliografia. Descritores para formatos numricos: Fc.d Ec.d Ic onde: c=comprimento total do campo incluindo o ponto decimal d=nmero de casas decimais Exemplo: FORMAT(F4.1, F6.2, I3, E9.3) Obs.: Caso haja presena de formatos repetidos na especificao podemos denotar isto da seguinte maneira: nESP onde: n=nmero de repeties da ESPecificao Exemplo: FORMAT(2F4.1, 3I2, 4E6.1) Obs.: Um mesmo formato pode ser referenciado de qualquer parte do programa, i.e., o formato pode ser reutilizado em vrias instrues. Linguagem Fortran 7/907 - p.7/8 valores reais valores em potncia de 10 valores inteiros

Dos descritores de posicionamento: Horizontal: Vertical: etc. pX salta p posies para a direita Tp salta para a posio p / salta 1 linha. O uso de vrgulas antes/depois da barra opcional 1 salta para a primeira linha da prxima folha etc.

Procedimentos (Sub-rotinas) e Funes


Sub-rotinas: SUBROUTINE nome(p1, p2, p3,, pn) (comandos) RETURN END Ativao: CALL nome(v1, v2, v3,, vn) Funes: FUNCTION nome(p1, p2, p3,, pn) (comandos) nome=expresso RETURN END Ativao: var=nome(v1, v2, v3,,vn)

Exemplo de uso de uma Funo num Programa Completo C ---------------------------------------------------------C Program Fat - Determina o fatorial C de nr.lido, usando uma func. definida C pelo usuario. C Autor: Carlos Goncalves C Data: 10.nov.2011 - Revisao: beta C Compilador: Force v.3.0b3 C ---------------------------------------------------------*234567 PROGRAM Fat C integer num,n C write *,'-- Calcula o fatorial --' num=2 !valor inicial dowhile (num > 1) write *,'Entre numero > 2 (zero p/ FIM): ') read *,num if (num/=0) then C // Ativa func. // C n=fator(num) // Escreve resultado // write *,'Fatorial=',n endif enddo --------------------------------Funcao Fatorial --------------------------------integer function fator(nr) integer nr, i, fat fat=1 do i=2,nr fat=fat*i enddo fator=fat return end

C C C C C

Linguagem Fortran 7/907 - p.8/8

Bibliografia
CSEPComputational Science Educational Project. Fortran 90 and computational science. USA, 1995. GHEZZI, Carlo e Jazayeri, Mehdi. Conceitos de linguagem de programao. Ed. Campus: Rio de Janeiro, 1987. PAGE, Clive G. Professional programmers guide to Fortran 77. University of Leicester: United Kingdom, 1995. PEREIRA, Jorge da Cunha e Loiola, Caetano R. A. FORTRAN ANSI 77 e WATFIV-S, Um texto universitrio. Ed. Campus: Rio de Janeiro, 1991.

Linguagem Fortran 7/907 - p.9/8

Potrebbero piacerti anche