ebook img

Introduç˜ao ao Fortran 90/95 PDF

158 Pages·2010·1.08 MB·Portuguese
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Introduç˜ao ao Fortran 90/95

Introdu¸c˜ao ao Fortran 90/95 ApostilapreparadaparaadisciplinadeModelosCom- putacionaisdaF´ısicaI,ministradaparaoCursodeLi- cenciatura em F´ısica do Departamento de F´ısica, Ins- titutodeF´ısicaeMatem´atica,Funda¸c˜aoUniversidade Federal de Pelotas, Pelotas - RS. In´ıcio: Janeiro de 2005. Vers˜ao: 12 de abril de 2010 Sum´ario Referˆencias Bibliogr´aficas v 1 Introdu¸c˜ao 1 1.1 As origens da Linguagem Fortran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 O padr˜ao Fortran 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2.1 Recursos novos do Fortran 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.2 Recursos em obsolescˆencia do Fortran 90 . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.3 Recursos removidos do Fortran 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 Uma revis˜ao menor: Fortran 95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3.1 Recursos novos do Fortran 95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3.2 Recursos em obsolescˆencia do Fortran 95 . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3.3 Recursos removidos do Fortran 95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4 O Fortran no S´eculo XXI: Fortran 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4.1 Recursos novos do Fortran 2003. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4.2 Recursos em obsolescˆencia do Fortran 2003 . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4.3 Recursos removidos do Fortran 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.5 O novo padr˜ao: Fortran 2008 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.5.1 Recursos novos do Fortran 2008. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.6 Coment´arios sobre a bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.7 Observa¸c˜oes sobre a apostila e agradecimentos . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2 Formato do C´odigo-Fonte 9 2.1 Formato do programa-fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2 Nomes em Fortran 90/95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3 Entrada e sa´ıda padr˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4 Conjunto de caracteres aceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3 Tipos de Vari´aveis 13 3.1 Declara¸c˜ao de tipo de vari´avel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2 Vari´aveis do tipo INTEGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3 Vari´aveis do tipo REAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4 Vari´aveis do tipo COMPLEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.5 Vari´aveis do tipo CHARACTER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.6 Vari´aveis do tipo LOGICAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.7 O conceito de esp´ecie (kind) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.7.1 Fortran 77. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.7.2 Fortran 90/95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.7.2.1 Compilador Intelfi Fortran . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.7.2.2 Compilador gfortran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.7.2.3 Compilador F. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.7.2.4 Literais de diferentes esp´ecies . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.7.3 Fun¸c˜oes intr´ınsecas associadas `a esp´ecie . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.7.3.1 KIND(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.7.3.2 SELECTED_REAL_KIND(P,R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.7.3.3 SELECTED_INT_KIND(R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.8 Tipos derivados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 i ii SUMA´RIO 4 Express˜oes e Atribui¸c˜oes Escalares 27 4.1 Regras b´asicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.2 Express˜oes num´ericas escalares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.3 Atribuic¸˜oes num´ericas escalares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.4 Operadores relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.5 Express˜oes e atribuic¸˜oes l´ogicas escalares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.6 Express˜oes e atribuic¸˜oes de caracteres escalares . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5 Comandos e Construtos de Controle de Fluxo 35 5.1 Comandos obsoletos do Fortran 77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.1.1 R´otulos (statement labels) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.1.2 Comando GO TO incondicional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.1.3 Comando GO TO computado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.1.4 Comando IF aritm´etico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.1.5 Comandos ASSIGN e GO TO atribu´ıdo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.1.6 La¸cos DO rotulados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.2 Comando e construto IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.2.1 Comando IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.2.2 Construto IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.3 Construto DO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.3.1 Construto DO ilimitado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.3.2 Instru¸c˜ao EXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.3.3 Instru¸c˜ao CYCLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.4 Construto CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6 Processamento de Matrizes 45 6.1 Terminologia e especifica¸c˜oes de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.2 Express˜oes e atribuic¸˜oes envolvendo matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.3 Se¸c˜oes de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.3.1 Subscritos simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.3.2 Tripleto de subscritos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.3.3 Vetores de subscritos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.4 Atribuic¸˜oes de matrizes e sub-matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.5 Matrizes de tamanho zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.6 Construtores de matrizes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.6.1 A func¸˜ao intr´ınseca RESHAPE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.6.2 A ordem dos elementos de matrizes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.7 Rotinas intr´ınsecas elementais aplic´aveis a matrizes . . . . . . . . . . . . . . . . . . . . . . . . 57 6.8 Comando e construto WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.8.1 Comando WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.8.2 Construto WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6.9 Matrizes aloc´aveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.10 Comando e construto FORALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 6.10.1 Comando FORALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 6.10.2 Construto FORALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 7 Rotinas Intr´ınsecas 65 7.1 Categorias de rotinas intr´ınsecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 7.2 Declara¸c˜ao e atributo INTRINSIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 7.3 Fun¸c˜oes inquisidoras de qualquer tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 7.4 Fun¸c˜oes elementais num´ericas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 7.4.1 Fun¸c˜oes elementais que podem converter. . . . . . . . . . . . . . . . . . . . . . . . . . 66 7.4.2 Fun¸c˜oes elementais que n˜ao convertem . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 7.5 Fun¸c˜oes elementais matem´aticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 7.6 Fun¸c˜oes elementais l´ogicas e de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 7.6.1 Convers˜oes caractere-inteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 7.6.2 Fun¸c˜oes de comparac¸˜ao l´exica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 7.6.3 Fun¸c˜oes elementais para manipulac¸˜oes de strings . . . . . . . . . . . . . . . . . . . . . 69 7.6.4 Convers˜ao l´ogica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 7.7 Fun¸c˜oes n˜ao-elementais para manipulac¸˜ao de strings . . . . . . . . . . . . . . . . . . . . . . . 69 Autor: Rudi Gaelzer – IFM/UFPel Impresso: 12 de abril de 2010 SUMA´RIO iii 7.7.1 Fun¸c˜ao inquisidora para manipula¸c˜ao de strings. . . . . . . . . . . . . . . . . . . . . . 69 7.7.2 Fun¸c˜oes transformacionais para manipula¸c˜ao de strings . . . . . . . . . . . . . . . . . 70 7.8 Fun¸c˜oes inquisidoras e de manipulac¸˜oes num´ericas . . . . . . . . . . . . . . . . . . . . . . . . 70 7.8.1 Modelos para dados inteiros e reais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 7.8.2 Fun¸c˜oes num´ericas inquisidoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 7.8.3 Fun¸c˜oes elementais que manipulam quantidades reais. . . . . . . . . . . . . . . . . . . 71 7.8.4 Fun¸c˜oes transformacionais para valores de esp´ecie (kind) . . . . . . . . . . . . . . . . . 71 7.9 Rotinas de manipulac¸˜ao de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7.9.1 Fun¸c˜ao inquisidora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7.9.2 Fun¸c˜oes elementais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7.9.3 Subrotina elemental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7.10 Fun¸c˜ao de transferˆencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7.11 Fun¸c˜oes de multiplicac¸˜ao vetorial ou matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7.12 Fun¸c˜oes transformacionais que reduzem matrizes . . . . . . . . . . . . . . . . . . . . . . . . . 74 7.12.1 Caso de argumento u´nico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 7.12.2 Argumento opcional DIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 7.12.3 Argumento opcional MASK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 7.13 Fun¸c˜oes inquisidoras de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.13.1 Status de alocac¸˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.13.2 Limites, forma e tamanho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.14 Fun¸c˜oes de constru¸c˜ao e manipula¸c˜ao de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.14.1 Fun¸c˜ao elemental MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.14.2 Agrupando e desagrupando matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.14.3 Alterando a forma de uma matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 7.14.4 Fun¸c˜ao transformacional para duplicac¸˜ao . . . . . . . . . . . . . . . . . . . . . . . . . 76 7.14.5 Fun¸c˜oes de deslocamento matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 7.14.6 Transposta de uma matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 7.15 Fun¸c˜oes transformacionais para localizac¸˜ao geom´etrica . . . . . . . . . . . . . . . . . . . . . . 76 7.16 Fun¸c˜ao transformacional para dissociac¸˜ao de ponteiro . . . . . . . . . . . . . . . . . . . . . . 77 7.17 Subrotinas intr´ınsecas n˜ao-elementais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 7.17.1 Rel´ogio de tempo real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 7.17.2 Tempo da CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 7.17.3 Nu´meros aleat´orios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 8 Sub-Programas e M´odulos 79 8.1 Unidades de programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 8.1.1 Programa principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 8.1.2 Rotinas externas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 8.1.3 M´odulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 8.2 Sub-programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 8.2.1 Fun¸c˜oes e subrotinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 8.2.2 Rotinas internas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 8.2.3 Argumentos de sub-programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 8.2.4 Comando RETURN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 8.2.5 Atributo e declarac¸˜ao INTENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 8.2.6 Rotinas externas e bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 8.2.7 Interfaces impl´ıcitas e expl´ıcitas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 8.2.8 Argumentos com palavras-chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 8.2.9 Argumentos opcionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 8.2.10 Tipos derivados como argumentos de rotinas . . . . . . . . . . . . . . . . . . . . . . . 92 8.2.11 Matrizes como argumentos de rotinas . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 8.2.11.1 Matrizes como argumentos em Fortran 77 . . . . . . . . . . . . . . . . . . . . 92 8.2.11.2 Matrizes como argumentos em Fortran 90/95 . . . . . . . . . . . . . . . . . . 94 8.2.12 sub-programas como argumentos de rotinas . . . . . . . . . . . . . . . . . . . . . . . . 97 8.2.13 Fun¸c˜oes de valor matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 8.2.14 Recursividade e rotinas recursivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 8.2.15 Atributo e declarac¸˜ao SAVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 8.2.16 Fun¸c˜oes de efeito lateral e rotinas puras . . . . . . . . . . . . . . . . . . . . . . . . . . 104 8.2.17 Rotinas elementais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Autor: Rudi Gaelzer – IFM/UFPel Impresso: 12 de abril de 2010 iv SUMA´RIO 8.3 M´odulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 8.3.1 Dados globais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 8.3.2 Rotinas de m´odulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 8.3.3 Atributos e declara¸c˜oes PUBLIC e PRIVATE . . . . . . . . . . . . . . . . . . . . . . . . . 113 8.3.4 Interfaces e rotinas gen´ericas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 8.3.5 Estendendo rotinas intr´ınsecas via blocos de interface gen´ericos . . . . . . . . . . . . . 117 8.4 Aˆmbito (Scope) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 8.4.1 Aˆmbito dos r´otulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 8.4.2 Aˆmbito dos nomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 9 Comandos de Entrada/Sa´ıda de Dados 121 9.1 Comandos de Entrada/Sa´ıda: introduc¸˜ao r´apida . . . . . . . . . . . . . . . . . . . . . . . . . 121 9.2 Declara¸c˜ao NAMELIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 9.3 Unidades l´ogicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 9.4 Comando OPEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 9.5 Comando READ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 9.6 Comandos PRINT e WRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 9.7 Comando FORMAT e especificador FMT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 9.8 Descritores de edi¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 9.8.1 Contadores de repetic¸˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 9.8.2 Descritores de edic¸˜ao de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 9.8.3 Descritores de controle de edic¸˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 9.8.4 Descritores de edic¸˜ao de strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 9.9 Comando CLOSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 9.10 Comando INQUIRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 9.11 Outros comandos de posicionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 9.11.1 Comando BACKSPACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 9.11.2 Comando REWIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 9.11.3 Comando ENDFILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Autor: Rudi Gaelzer – IFM/UFPel Impresso: 12 de abril de 2010 Referˆencias Bibliogr´aficas [1] Intelfi FortranCompilerforLinux.http://www.intel.com/software/products/compilers/flin/docs/manuals.htm. Acesso em: 01 jun. 2005. [2] CHAPMAN, STEPHEN J. Fortran 95/2003 for Scientists and Engineers. McGraw-Hill, 2007, xxvi + 976 pp., 3rd. Edi¸c˜ao. [3] MARSHALL, A. C. Fortran 90 Course Notes. http://www.liv.ac.uk/HPC/HTMLFrontPageF90.html, 1996. Acesso em: 01 jun. 2005. [4] METCALF, MICHAEL, REID, JOHN. Fortran 90/95 Explained. New York : Oxford University Press, 1996, 345 + xv pp. [5] PAGE, CLIVE G. Professional Programer’s Guide to Fortran77. http://www.star.le.ac.uk/ cgp/- prof77.pdf, Leicester, 2001. Acesso em: 01 jun. 2005. [6] RAMSDEN, S., LIN, F., PETTIPHER, M. A., NOLAND, G. S., BRO- OKE, J. M. Fortran 90. A Conversion Course for Fortran 77 Programmers. http://www.hpctec.mcc.ac.uk/hpctec/courses/Fortran90/F90course.html, 1995. Acesso em: 01 jun. 2005. [7] REID, JOHN. The New Features of Fortran 2003. Publicado em: http://www.fortranplus.co.uk/resources/john reid new 2003.pdf, 2004. Acesso em: 03 Jun. 2006. v vi REFEREˆNCIAS BIBLIOGRA´FICAS Autor: Rudi Gaelzer – IFM/UFPel Impresso: 12 de abril de 2010 Cap´ıtulo 1 Introdu¸c˜ao ”I don’t know what the technical characteristics of the standard language for scientific and engineering computation in the year 2000 will be... but I know it will be called Fortran.” John Backus Esta apostila destina-se ao aprendizado da Linguagem de Programa¸c˜ao Fortran 95. 1.1 As origens da Linguagem Fortran Programac¸˜ao no per´ıodo inicial do uso de computadores para a soluc¸˜ao de problemas em f´ısica, qu´ı- mica, engenharia, matem´atica e outras ´areas da ciˆencia era um processo complexo e tedioso ao extremo. Programadoresnecessitavamdeumconhecimentodetalhadodasinstru¸c˜oes, registradores, enderec¸osdeme- m´oria e outros constituintes da Unidade Central de Processamento (CPU1) do computador para o qual eles escreviam o c´odigo. O C´odigo-Fonte era escrito em um nota¸c˜ao num´erica denominada c´odigo octal. Com o tempo, c´odigos mnemˆonicos foram introduzidos, uma forma de programa¸c˜ao conhecida como c´odigo num´erico ou c´odigo Assembler. Estes c´odigos eram traduzidos em instru¸c˜oes para a CPU por programas conhecidos como Assemblers. Durante os anos 50 ficou claro que esta forma de programa¸c˜ao era de todo inconveniente, no m´ınimo, devido ao tempo necess´ario para se escrever e testar um programa, embora esta forma de programa¸c˜ao possibilitasse um uso otimizado dos recursos da CPU. Estas dificuldades motivaram que um time de programadores da IBM, liderados por John Backus, de- senvolvessem uma das primeiras chamadas linguagem de alto-n´ıvel, denominada FORTRAN (significando FORmula TRANslation). Seu objetivo era produzir uma linguagem que fosse simples de ser entendida e usada, mas que gerasse um c´odigo num´erico quase t˜ao eficiente quanto a linguagem Assembler. Desde o in´ıcio, o Fortran era t˜ao simples de ser usado que era poss´ıvel programar f´ormulas matem´aticas quase como se estas fossem escritas de forma simb´olica. Isto permitiu que programas fossem escritos mais rapidamente que antes, com somente uma pequena perda de eficiˆencia no processamento, uma vez que todo cuidado era dedicado na construc¸˜ao do compilador, isto ´e, no programa que se encarrega de traduzir o c´odigo-fonte em Fortran para c´odigo Assembler ou octal. Mas o Fortran foi um passo revolucion´ario tamb´em porque o programadores foram aliviados da tarefa tediosa de usar Assembler, assim concentrando-se mais na soluc¸˜ao do problema em quest˜ao. Mais impor- tante ainda, computadores se tornaram acess´ıveis a qualquer cientista ou engenheiro disposto a devotar um pequeno esforc¸o na aquisic¸˜ao de um conhecimento b´asico em Fortran; a tarefa da programa¸c˜ao n˜ao estava mais restrita a um corpus pequeno de programadores especialistas. O Fortran disseminou-se rapidamente, principalmente nas ´areas da f´ısica, engenharia e matem´atica, uma vez que satisfazia uma necessidade premente dos cientistas. Inevitavelmente, dialetos da linguagem foram desenvolvidos, os quais levaram a problemas quando havia necessidade de se trocar programas entre diferentes computadores. O dialeto de Fortran otimizado para processadores fabricados pela IBM, por exemplo,geralmentegeravaerroquandosetentavarodaromesmoprogramaemumprocessadorBurroughs, ou em outro qualquer. Assim, em 1966, ap´os quatro anos de trabalho, a Associac¸˜ao Americana de Padr˜oes (American Standards Association), posteriormente Instituto Americano Nacional de Padro˜es (American National Standards Institute, ou ANSI) originou o primeiro padr˜ao para uma linguagem de programa¸c˜ao, agora conhecido como Fortran 66. Essencialmente, era uma subconjunto comum de v´arios dialetos, de tal forma que cada dialeto poderia ser reconhecido como uma extens˜ao do padr˜ao. Aqueles usu´arios que desejavam escrever programas port´aveis deveriam evitar as extens˜oes e restringir-se ao padr˜ao. 1Doinglˆes: Central Processing Unit. 1 2 1.2. O padr˜ao Fortran 90 OFortrantrouxeconsigov´ariosoutrosavan¸cos, al´emdesuafacilidadedeaprendizagemcombinadacom um enfoque em execu¸c˜ao eficiente de c´odigo. Era, por exemplo, uma linguagem que permanecia pr´oxima (e explorava) o hardware dispon´ıvel, ao inv´es de ser um conjunto de conceitos abstratos. Ela tamb´em introduziu, atrav´es das declara¸c˜oes COMMON e EQUIVALENCE, a possibilidade dos programadores controlarem aaloca¸c˜aodaarmazenagemdedadosdeumaformasimples,umrecursoqueeranecess´arionosprim´ordiosda computa¸c˜ao,quandohaviapoucoespa¸codemem´oria,mesmoqueestasdeclara¸c˜oessejamagoraconsideradas potencialmenteperigosaseoseuusodesencorajado. Finalmente,oc´odigofontepermitiaespac¸osembranco na sua sintaxe, liberando o programador da tarefa de escrever c´odigo em colunas rigidamente definidas e permitindo que o corpo do programa fosse escrito da forma desejada e visualmente mais atrativa. A prolifera¸c˜ao de dialetos permaneceu um problema mesmo ap´os a publica¸c˜ao do padr˜ao Fortran 66. A primeira dificuldade foi que muitos compiladores n˜ao aderiram ao padr˜ao. A segunda foi a implementac¸˜ao, em diversos compiladores, de recursos que eram essenciais para programas de grande escala, mas que eram ignorados pelo padr˜ao. Diferentes compiladores implementavam estes recursos de formas distintas. Esta situa¸c˜ao, combinada com a existˆencia de falhas evidentes na linguagem, tais como a falta de cons- truc¸˜oesestruturadasdeprograma¸c˜ao,resultaramnaintroduc¸˜aodeumgrandenu´merodepr´e-processadores. Estes eram programas que eram capazes de ler o c´odigo fonte de algum dialeto bem definido de Fortran e gerar um segundo arquivo com o texto no padr˜ao, o qual ent˜ao era apresentado ao compilador nesta forma. Este recurso provia uma maneira de estender o Fortran, ao mesmo tempo retendo a sua portabilidade. O problemaeraqueemboraosprogramasgeradoscomousodeumpr´e-processadorfossemport´aveis,podendo ser compilados em diferentes computadores, o c´odigo gerado era muitas vezes de uma dificuldade proibitiva para a leitura direta. Estasdificuldadesforamparcialmenteremovidaspelapublica¸c˜aodeumnovopadr˜ao,em1978,conhecido como Fortran 77. Ele inclu´ıa diversos novos recursos que eram baseados em extens˜oes comerciais ou pr´e- processadores e era, portanto, n˜ao um subconjunto comum de dialetos existentes, mas sim um novo dialeto por si s´o. O per´ıodo de transic¸˜ao entre o Fortran 66 e o Fortran 77 foi muito mais longo que deveria, devido aos atrasos na elabora¸c˜ao de novas vers˜oes dos compiladores e os dois padr˜oes coexistiram durante um intervalo de tempo consider´avel, que se estendeu at´e meados da d´ecada de 80. Eventualmente, os fabricantes de compiladores passaram a liber´a-los somente com o novo padr˜ao, o que n˜ao impediu o uso de programasescritosemFortran66,umavezqueoFortran77permitiaestec´odigoantigoporcompatibilidade. Contudo,diversasextens˜oesn˜aoforammaispermitidas,umavezqueopadr˜aon˜aoasincluiunasuasintaxe. 1.2 O padr˜ao Fortran 90 Apo´s trinta anos de existˆencia, Fortran n˜ao mais era a u´nica linguagem de programac¸˜ao dispon´ıvel para os programadores. Ao longo do tempo, novas linguagens foram desenvolvidas e, onde elas se mostraram mais adequadas para um tipo particular de aplica¸c˜ao, foram adotadas em seu lugar. A superioridade do Fortran sempre esteve na ´area de aplicac¸˜oes num´ericas, cient´ıficas, t´ecnicas e de engenharia. A comunidade de usu´arios do Fortran realizou um investimento gigantesco em c´odigos, com muitos programas em uso frequ¨ente, alguns com centenas de milhares ou milh˜oes de linhas de c´odigo. Isto n˜ao significava, contudo, que a comunidade estivesse completamente satisfeita com a linguagem. V´arios programadores passaram a migrar seus c´odigos para linguagens tais como Pascal, C eC++. Para levar a cabo mais uma moderniza¸c˜ao da linguagem, o comitˆe t´ecnico X3J3, aprovado pela ANSI, trabalhando como o corpo de desenvolvimento do comitˆe da ISO (International Standards Organization, Organizac¸˜ao Internacional de Padr˜oes) ISO/IEC JTC1/SC22/WG5 (doravante conhecido como WG5), preparou um novo padr˜ao, inicialmente conhecido como Fortran 8x, e agora como Fortran 90. Quais eram as justificativas para continuar com o processo de revis˜ao do padr˜ao da linguagem Fortran? Al´em de padronizar extens˜oes comerciais, havia a necessidade de moderniza¸c˜ao, em resposta aos desenvol- vimentos nos conceitos de linguagens de programa¸c˜ao que eram explorados em outras linguagens tais como APL, Algol, Pascal, Ada, C e C++. Com base nestas, o X3J3 podia usar os ´obvios benef´ıcios de conceitos tais como ocultamento de dados. Na mesma linha, havia a necessidade de fornecer uma alternativa `a peri- gosa associac¸˜ao de armazenagem de dados, de abolir a rigidez agora desnecess´aria do formato fixo de fonte, bem como de aumentar a seguranc¸a na programac¸˜ao. Para proteger o investimento em Fortran 77, todo o padr˜ao anterior foi mantido como um subconjunto do Fortran 90. Contudo, de forma distinta dos padr˜oes pr´evios, os quais resultaram quase inteiramente de um esfor¸co depadronizarpr´aticasexistentes, oFortran90´emuitomaisumdesenvolvimentodalinguagem, naquals˜ao introduzidos recursos que s˜ao novos em Fortran, mas baseados em experiˆencias em outras linguagens. Os recursos novos mais significativos s˜ao a habilidade de manipular matrizes usando uma notac¸˜ao concisa mais poderosaeahabilidadededefiniremanipulartiposdedadosdefinidospeloprogramador. Oprimeirodestes recursos leva a uma simplifica¸c˜ao na escrita de muitos problemas matem´aticos e tamb´em torna o Fortran Autor: Rudi Gaelzer – IFM/UFPel Impresso: 12 de abril de 2010

Description:
[1] Intel@ Fortran Compiler for Linux. tediosa de usar Assembler, assim concentrando-se mais na soluç˜ao do problema em quest˜ao. Mais impor-.
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.