Home

Fortran 95: curso básico (versão preliminar)

image

Contents

1. livrof90 v8 preliminarl 2014 5 5 1 07 page 114 125 CAP TULO 8 OS PROCEDIMENTOS MODULE CONTAINS SUBROUTINE subl E avan o d Ilustra o compartilhamento via MODULE Poan 90 e espe USE teste cifica IMPLICIT NONE r WRITE x valores dulo END SUBROUTINE sub1 e END PROGRAM testa_module groma conte nham Os conte dos do m dulo teste est o sendo compartilhados entre o programa princi P pal e a sub rotina sub1 Qualquer outra sub rotina ou fun o dentro do programa tamb m w poder ter acesso aos dados simplesmente incluindo a declara o USE es M dulos s o especialmente teis para compartilhar grandes volumes de dados entre unidades de programas Exerc cio use o MODULE para evitar o erro descrito no exemplo da p gina 112 programa erro common Importante e A declara o USE sempre a primeira declara o n o comentada posicionada logo abaixo a declara o PROGRAM SUBROUTINE ou FUNCTION Evidentemente antes da declara o IMPLICIT NONI Pl e O m dulo deve ser sempre compilado antes de todas as outras unidades de programa que a usam Ela pode estar no mesmo arquivo ou arquivo separado Se estiver no mesmo arquivo deve aparecer antes do programa principal Muitos compiladores su portam a compila o separada e geram um arquivo mod ou similar que cont m informa es sobre o m dulo para uso mais tarde com a declara o USE OS
2. 3 39 3 3 F 39 9 O F HF HF F 3 3 HF 399 F HF 32 F F 32 F 3 HF F LDA TPT LDB INF 5 livrof90 v8 preliminarl 2014 5 5 1 07 page 104 115 CAP TULO 6 AS SUB ROTINAS E FUN ES input output DOUBLE PRECISION array dimension LDA N On entry the N by N coefficient matrix A On exit the factors L and U from the factorization A PxL U the unit diagonal elements of L are not stored input INTEGER The leading dimension of the array A LDA gt max 1 N V output INTEGER array dimension N The pivot indices that define the permutation matrix P row i of the matrix was interchanged with row IPIV i input output DOUBLE PRECISION array dimension LDB NRHS On entry the N by NRHS matrix of right hand side matrix B On exit if INFO 0 the N by NRHS solution matrix X input INTEGER The leading dimension of the array B LDB gt max 1 N o output INTEGER 0 successful exit lt 0 if INFO i the i th argumento had an illegal value gt 0 INFO i Ula is exactly zero The factorization has been completed but the factor U is exactly singular so the solution could not be computed External Subroutines EXTERNAL DGETRF DGETRS XERBLA Intrinsic Functions INTRINSIC MAX Executable Statements Test the input parameters INFO 0 IF N LT O THEN INFO 1 ELSE IF NRHS LT O THEN INFO 2 ELSE IF LDA LT MAX 1 N T
3. livrof90 v8 preliminarl 2014 5 5 1 07 page i 1 S rie Linguagem de Programa o Cient fica Fortran 95 curso b sico Gilberto Orengo Professor adjunto do Curso de F sica M dica Centro Universit rio Franciscano UNIFRA http www orengonline com orengo orengonline com 1 Edi o Editora XXX livrof90 v8 preliminarl 2014 5 5 1 07 page ii 2 Copyright 2007 de Gilberto Orengo Copyright dos Ap ndicesO 2007 de Gilberto Orengo Capa Lucas Rodrigues dos Santos Prepara o e digita o no IATEX Gilberto Orengo Ilustra es no texto Gilberto Orengo e Lucas Rodrigues dos Santos Revis o CCCC DDDD HHHH Impress o Gr fica ZZZZZZZZ 55 xxxx xxxx Santa Maria RS Site do Livro http www orengonline com fortran95 Dados Internacionais de Cataloga o na Publica o CIP C mara Brasileira do Livro SP Brasil Orengo Gilberto 1961 Fortran 95 curso b sico Gilberto Orengo Santa Maria Editora da UNIFRA 2007 ISBN XX XXXX XXX X 1 Inform tica 2 Fortran 3 Linguagem de Programa o YY XXXX CDD ZZZ ZZ Arquivo IATkX original livrof90_v5 tex ndices para cat logo sistem tico 1 Linguagem de programa o 2 Fortran 90 95 2007 Espa o reservado Editora Todos os direitos desta edi o reservados livrof90 v8 preliminarl 2014 5 5 1 07 page iii 3 SUM RIO Apresenta
4. 56 Gilberto Orengo 3 3 Estruturas de Repeti o Loops 57 1961 3 1 INTRODU O Todos os programas vistos at o momento executam uma s rie de procedimentos um ap s o outro numa ordem fixa Estes s o conhecidos como programas ou c digos segiienciais e s o as formas mais simples de execu o de uma tarefa Neles s o lidos e processados dados de entrada que ao final imprimem o resultado sem que em algum momento seja preciso decidir sobre uma ou outra sequ ncia de execu o ou ainda sem repeti o de um certo processo C digos mais elaborados necessitar o de procedimentos que permitam o controle na ordem ou no fluxo de execu o de procedimentos como por exemplo pulando para outra parte do programa ou at mesmo para outra tarefa subtarefa SUBROUTINE e FUNCTION que ser o estudadas adiante na p g 97 Este tipo de controle na estrutura do fluxo de execu o do programa uma das carac ter sticas de uma linguagem estruturada como o Fortran livrof90 v8 preliminarl 2014 5 5 1 07 page 64 75 CAP TULO 3 AS ESTRUTURAS DE CONTROLE As duas categorias de controle de procedimentos dispon veis no Fortran s o TOMADAS DE DECIS O Desvios ou ramifica es permitem selecionar um desvio para o fluxo de execu o do programa em acordo com uma condi o l gica Veremos as seguintes instru es de decis o IF ELSE IF ELSE END DO nas p ginas 6
5. As Sub rotinas e Fun es Neste cap tulo voc encontrar Para reflex o 6 1 Inhodu o s ses cee eda ms sa a 93 S existem duas coisas infinitas o universo e a estupidez Procedimentos Externos 93 humana E n o estou muito seguro da primeira Procedimentos Internos 94 6 2 As Sub rotinas SUBROUTINE 95 Albert Einstein 6 3 As Fun es FUNCTION 97 1879 1955 6 4 As Bibliotecas de Sub rotinas e Fun es 99 6 4 1 AbibliotecaLAPACK 99 6 1 INTRODU O poss vel escrever um programa completo em Fortran em um nico programa princi pal Mas se o c digo complexo ou muito extenso pode ser que um determinado conjunto de instru es seja realizado repetidas vezes em pontos distintos do programa Neste caso melhor quebrar o programa em unidades distintas chamadas de subprogramas Os sub programas s o unidades de programa que realizam tarefas espec ficas Podem ser chamados pelo nome a partir do programa principal ou de outros subprogramas e at mesmo por ele pr prio conhecida como chamada recursiva Cada uma dessas unidades de programa corresponde a um conjunto completo e con sistente de tarefas que podem ser escritas compiladas e testadas individualmente Posterior mente s o inclu das no programa principal para gerar um arquivo execut vel Outra importante fun o dos subprogramas a possibilidade de depurar erros Assim os programador
6. livrof90 v8 preliminarl 2014 5 5 1 07 page 23 34 Fortran 95 curso b sico Gilberto Orengo n mero ser mais manuse vel se escrito em nota o cient fica 2 998 x 108 m s As duas partes de um n mero expresso em nota o cient fica s o chamadas de mantissa e expoente da pot ncia de dez A mantissa 2 998 e o expoente 8 no sistema de base 10 Na linguagem do computador os n meros reais s o escritos de forma similar a dife ren a se encontra no sistema usado porque o computador trabalha na base 2 Assim se N bits s o dedicados para representar e armazenar um n mero real parte reservada para a mantissa e parte para o expoente A mantissa caracteriza a precis o e o expoente caracteriza o tamanho que pode ser assumido pelo n mero nesta reparti o e tamb m na quantidade de bits que come a a diferencia o entre os computadores e compiladores Fortran PRECIS O SIMPLES Single Precision A grande parte dos computadores usam como precis o simples 4 Bytes 32 bits o word size do computador para repartir entre a mantissa e o expoente Normalmente esta divis o contempla 24 bits para a mantissa e 8 bits para o expoente Assim temos i Mantissa precis o gt n 24 bits 3 Bytes 9 1 223 8 388 608 que equivale a 7 algarismos significativos ii Expoente gt n 8 bits 1 Byte n i 5 sy qr 928bits 925510 sendo metade para a parte pos
7. page 41 52 Fortran 95 curso b sico Gilberto Orengo O programa abaixo reproduz parte do referido c digo Por este motivo n o deveria apresentar uma sa da de valor um WRITE j que o mesmo utilizado no decorrer do c digo original e assim n o precisaria ser impresso neste ponto do c digo Mas foi acrescentado uma sa da antes da finaliza o do programa somente com fins did ticos para visualizarmos que existem limita es computacionais que devem ser observadas Programa 1 14 Exemplo de erros em c digos computacionais PROGRAM teste erro IMPLICIT NONE INTEGER i j m REAL x y Z REAL PARAMETER pi 3 14159265 DORT JL 20 Inicia um loop com 200 repeticoes x 1 EXP i EXP i v s E z TAN y theta y 180 0 pi Converte angulo p graus END DO Finaliza o loop com 200 repeticoes WRITE x theta z Soh para fins didaticos END PROGRAM teste erro Ao compilarmos o programa alguns erros ser o detectados pelo compilador O primeiro erro ser o de sintaxe porque foi esquecido os dois pontos na declara o da vari vel pi indicado pelo compilador conforme mostra a figura 1 1 Relembrando sempre que iniciali zarmos uma vari vel na sua declara o obrigat rio o uso de dois dois pontos Com erro deste porte abortada a compila o Portanto os erros de l gica n o apare cem Mas cuidado nem todos os erros de sintaxe s o detectados nesta etapa Por exemplo se
8. utilizada a tela do monitor e indicado por um asterisco Uma unidade l gica diferente da padr o determinada pela instru o OPEN ver Se o 2 4 na p g 53 A palavra chave UNIT opcional e na maioria dos programas n o utilizada FMT lt formato gt um argumento obrigat rio e especifica o s formato s para a es crita dos dados Para instruir o compilador a escrever numa formata o livre ou lista dirigida utilizado o asterisco isto o resultado ou a informa o ser escrita da forma como foi gerado em acordo com a declara o da vari vel que cont m a informa o Uma sa da com formata o livre n o tem boa apresenta o visual Uma formata o diferente da padr o obtida pela instru o FORMAT que ser descrita mais adiante Se o 2 6 na p g 56 A palavra chave FMT opcional e n o utilizada na maioria dos programas IN1IDispositivo significa algum meio f sico como por exemplo tela do monitor a impressora um arquivo numa unidade de disco seja magn tica ou CD DVD o teclado ou outro IN2INeste livro toda instru o ou argumento escrito entre colchetes considerado opcional 10 livrof90 v8 preliminarl 2014 5 5 1 07 page 51 62 Fortran 95 curso basico Gilberto Orengo ADVANCE lt modo gt argumento opcional especifica se a pr xima sa da ou entrada deve iniciar numa nova linha ou n o O pad
9. CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran 1 5 3 Os N meros Complexos COMPLEX O estudo feito para os n meros reais extensivo para os n meros complexos A forma geral de um n mero complexo c a bi em que c o n mero complexo a parte real e b parte imagin ria s o ambos reais e i 1 Em Fortran os n meros complexos s o representados por dois n meros reais constantes separados por v rgula e entre par nteses O primeiro valor corresponde a parte real e o segundo a parte imagin ria Vejamos os seguintes casos em Fortran cujo n mero complexo est ao lado 1 0 1 0 real puro 0 7071 0 7071 0 7071 0 70712 1 01E6 0 5E2 gt 1010000 50 0 1 gt i imagin rio puro Em que o E representa a base 10 e o n mero ap s o expoente Desta forma o que vimos para os reais v lido para os complexos A diferen a est no procedimento Fortran que feito pela declara o COMPLEX que veremos adiante A fun o CMPLX que ser estudada na p gina 32 tabela 1 2 converte um n mero inteiro ou real em complexo Programando em Fortran 95 deveremos ter cuidado ao declarar as precis es de nossas vari veis j que tanto a defini o de precis o simples como a de precis o dupla podem mu dar de computador para computador N3 O Fortran 95 possibilita modificarmos a mantissa e o expoente para escrevermos programas que possam ser facilmente port veis entre processa
10. Error Syntax error in data declaration at 1 orengof amp l inux orengo Documents Fortran gt e s Shell Figura 1 1 No terminal do Linux indica o do erro de sintaxe apresentados pelo compilador G95 k orengo linux orengo Documents Fortran Shell Konsole 2 Sess o Editar Ver Favoritos Configura es Ajuda lorengo linux orengo Documents Fortran gt g95 ex_erro f90 In file ex_erro f90 7 x 1 EXP i EXP i ail Type of argument x in call to exp at 1 should be REAL 4 not INTEG In file ex_erro f90 7 x 1 EXP i EXP i 1 Error Function exp at 1 has no implicit tupe In file ex_erro f90 10 theta y 180 0 pi Converte p graus Error Sumbol theta at 1 has no IMPLICIT tupe orengoBlinux orengo Documents Fortran gt E J s Shell Figura 1 2 Indica o dos erros apresentados pelo compilador G95 um inteiro A corre o feita utilizando a fun o REAL i que converte o inteiro para real Observe que n o poss vel trocar a declara o da vari vel i porque ela um contador do loop DO que ser estudado no Cap tulo 3 na p gina 63 E contador sempre inteiro O segundo erro o indicado pelo compilador decorrente do primeiro porque esperado ent o que EXP i seja uma fun o definida pelo usu rio j que estaria recebendo um valor inteiro Mas corrigido o primeiro erro este deixa de existir Comprove se verdadeira a
11. livrof90 v8 preliminarl 2014 5 5 1 07 page 5 16 Fortran 95 curso b sico Gilberto Orengo toriza o entre outras Estes novos conceitos da linguagem fizeram do Fortran 90 uma linguagem mais efici ente especialmente para a nova gera o de supercomputadores e que nos permite dizer a linguagem Fortran continuar a ser usada com sucesso por muito tempo Embora o Fortran n o seja muito utilizado fora dos campos da Ci ncia da Computa o e da an lise num rica permanece como uma linguagem que desempenhar tarefas da rea da computa o num rica de alto rendimento Neste sentido o Fortran at hoje superior em rela o aos seus competidores em especial em aplica es cient ficas computacionalmente intensivas como F sica Matem tica Meteorologia Astronomia Geof sica e Engenharias porque permite a cria o de programas que primam pela velocidade de execu o O padr o mais recente o Fortran 2003 sofreu a maior revis o introduzindo v rias no vas caracter ticas Esta atualiza o contempla entre outros os seguintes avan os acr scimos de tipos de dados definidos pelo usu rio tipos de dados parametrizados aper fei oamento no controle de acessibilidade e de estrutura Por exemplo definir o KIND somente na utiliza o efetiva do tipo definido e n o antes suporte a programa o Orientada a Objetos heran a e extens es poliformismo aloca o din mica de tipos de dados e
12. o din mica de mem ria tipos derivados de dados manipula o de arranjos p ex matrizes e vetores m dulos pon teiros tipos de dados parametrizados e estruturas Mas o principal impulso dado na lingua gem foi em rela o as caracter sticas do HPF High Performance Fortran A seguir veremos uma breve retrospectiva e os avan os propostos pelo Fortran 2003 A linguagem Fortran a matriz de todas as linguagens cient ficas de computadores No come o tinha somente a inten o de traduzir equa es cient ficas para c digos de computa dores e foi neste sentido um programa verdadeiramente revolucion rio Antes do Fortran todos os programas de computadores eram lentos e originavam muitos erros Na primeira vers o o FORTRAN I lan ada entre 1954 e 1957 a linguagem era muito pequena em compa ra o com as vers es mais modernas Entre outras coisas continha somente as declara es de vari veis para os tipo inteiro INTEGER e real REAL e tamb m n o havia sub rotinas Durante este per odo percebeu se diversos erros que for aram a IBM lan ar o FORTRAN II em 1958 Um avan o ocorreu com o lan amento da vers o FORTRAN IV em 1962 que permitiu os cientistas utilizarem pelos pr ximos 15 anos Com isso em 1966 o Fortran adotou uma padroniza o a American National Standards Institute Instituto Nacional Americano de Padro niza o ANSI e passou a ser chamado de FORTRAN 66 A partir desta vers o todas as a
13. livrof90 v8 preliminarl 2014 5 5 1 07 page 108 119 CAP TULO 7 AS FUN ES INTR NSECAS SELECTED REAL KIND E SELECTED INT KIND mos usar a fun o intr nseca KIND que retorna o n mero que espec fica o tipo de par metro usado para simples e dupla precis o Uma vez descoberto estes valores podemos us los nas declara es das vari veis reais Vejamos como funciona a fun o intr nseca KIND atrav s de um programa 1 PROGRAM kinds Proposito determinar os tipos de parametros de simples e N 3 dupla precisao num dado computador e compilador 4 IMPLICIT NONE 5 Escreve na tela os tipos de par metros 6 WRITE O KIND para Precisao Simples eh 1I2 KIND 0 0 7 WRITE x O KIND para Precisao Dupla eh I12 KIND 0 0DO 8 END PROGRAM kinds Na tabela 7 1 apresentado os resultados da execu o deste programa em quatro dife rentes combina es de Processador Compilador Tabela 7 1 Valores de KIND para valores reais em alguns compiladores KIND 32 bits 64 bits 128 bits PC Pentium Lahey Fujitsu Fortran 90 95 4 8 16 PC Pentium NAGWare Fortran 90 1 2 N D Cray T90 Supercompuador CF90 N D 8 16 SPARC CF90 4 8 N D A partir destes resultados podemos migrar entre estas m quinas e compiladores simples mente trocando os par metros do KIND Vejamos um exemplo de programa que use este procedimento com os dados do PC Pentium Lahey Fujitsu Fortran 90 95
14. o loops e da instru o READ Este procedimento executado como segue DO i 1 5 READ A i END DO Neste caso usamos a estrutura de repeti o DO END DO associado com a instru o de leitura via teclado READ x para preencher os valores da vari vel composta A O pro cedimento o seguinte no loop para i 1 o primeiro elemento A 1 ser lido e armazenado na sequ ncia para i 2 o segundo elemento A 2 e assim sucessivamente at o ltimo ele mento A 5 seja lido e armazenado O uso de uma estrutura de repeti o em conjunto com uma express o Assim os valores dos elementos da vari vel ser o A 1 1 A 2 7 A 3 15 A 4 25 e A 5 37 A fun o utilizada foi i em que i o pr prio contador mas n o necess rio A fun o poderia ser simplesmente x x por exemplo 4 2 3 A manipula o dos elementos de um vetor Podemos manipular os elementos como nos exemplos abaixo y Bi b A 1 A 5 Nestes casos tomando os valores atribu dos a vari vel composta A os resultados ser o y 15 e b 38 As vari veis y e b s o do tipo simples Na ltima linha temos a soma de elementos do vetor Podemos multiplicar cada elemento de um vetor por um escalar como segue C 5 A A vari vel C do mesmo tipo da vari vel A ou seja composta Este procedimento tamb m pode ser adotado para a divis o A soma ou subtra o de vetores O Fortran 95 permite a opera o em b
15. 1 5 1 Dados Inteiros INTEGER Precis o Simples Os dados inteiros s o armazenados exatamente na mem ria do computador e consistem de n meros inteiros positivos inteiros negativos e zero A quantidade de mem ria dispon vel para armazen los depender de computador para computador ou do wordsize do computa dor e poder ser de 1 2 4 ou 8 Bytes O mais comum de ocorrer nos computadores atuais 4 Bytes 32 bits Como um n mero finito de bits usado para armazenar cada valor somente inteiros que caiam dentro de um certo intervalo podem ser representados num computador Nor malmente o menor n mero inteiro que pode ser armazenado em n bits inteiros chamada de precis o simples Menor Valor Inteiro 2 e o maior valor que pode ser armazenado em n bits inteiros Maior Valor Inteiro 2 1 Para o caso t pico de 4 Bytes inteiros temos para o menor valor e o maior valor poss veis respectivamente 2 147 483 648 e 2 147 483 647 Quando tentarmos usar valores abaixo ou acima destes ocorre um erro chamado de overflow condition e indicado na execu o do programa 1 5 2 Dados Reais ou de Pontos Flutuantes REAL Os n meros reais s o armazenados na forma de nota o cient fica J sabemos que n meros muito grandes ou muito pequenos podem ser convenientemente escritos em nota o cient fica Por exemplo a velocidade da luz no v cuo aproximadamente 299 800 000 m s Este
16. 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 OF gt O if INFO i U i i is exactly zero The factorization has been completed but the factor U is exactly singular so the solution could not be computed External Subroutines EXTERNAL DGETRF DGETRS XERBLA Intrinsic Functions INTRINSIC MAX Executable Statements Test the input parameters INFO 0 IF N LT O THEN INFO 1 ELSE IF NRHS LT O THEN INFO 2 ELSE IF LDA LT MAX 1 N THEN INFO 4 ELSE IF LDB LT MAX 1 N THEN INFO 7 END IF IF INFO NE O THEN CALL XERBLA DGESV INFO RETURN END IF Solve the system A X B overwriting B with X CALL DGETRS No transpose N NRHS A LDA IPIV B LDB INFO END IF RETURN End of DGESV END livrof90 v8 preliminarl 2014 5 5 1 07 page 107 118 As Fun es Intrinsecas SELECTED REAL KINDe SELECTED INT KIND Neste cap tulo voc encontrar Para reflex o 6 1 Selecionando Precis o de Maneira Indepen Voc n o pode provar uma defini o O que voc pode dente do Processador 50 fazer mostrar que ela faz sentido EXOICICIOS J Pula gr ea eai do le Gee O 24 Albert Einstein 1879 1955 Vimos que na maioria dos computadores a vari vel real default precis o simples a qual usualmente tem 4 Bytes divididos em duas partes mantissa e expoent
17. AP NDICE E O TX E ESTE LIVRO OS CAP TULOS Os t tulos dos cap tulos foram formatados com o pacote fncychap sty com a op o Lenny desenvolvido por Ulf A Lindgren Para obter a formata o desejada as seguintes linhas no pacote ChNameVar fontsize 14 16 usefont OT1 phv m n selectfont ChNumVar fontsize 60 62 usefont OT1 ptm m n selectfont CNV FmN chapapp space CNoV thechapter foram substituidas pelas linhas ChNameVar color branco fontsize 12 14 usefont OT1 phv m n bfseries selectfont ChNumVar color preto fontsize 60 62 sffamily bfseries selectfont hspace 05cm CNV FmN chapapp space CNoV thechapter E foi introduzida no pacote antes do parbox b textwidth a linha color cinza4 rule 1 5 textwidth 69cm vspace 1 53cm para gerar o tra o horizontal cinza claro que transp e a margen direita Tamb m foram alterados os comandos estes localizados no pre mbulo do documento fonte principal ChTitleVar Huge bfseries sffamily ChRuleWidth 0Opt ChNameUpperCase ChTitleUpperCase AS SECOES Os t tulos das se es dos cap tulos foram formatados com o pacote titlesec sty com as se guintes op es titleformat section block sffamily Large bfseries bfseries color cinza4 thesection 5em L 1mm sffamily Large bfseries MakeUppercase Avan a o t tulo para a pr xima linha titlespacing section 8cm 50cm 1pc A DEFINI
18. DO i 1 2 WRITE a i j j 1 2 END DO a 1 3 6 0 a 2 3 7 0 a 3 3 10 0 a 3 1 8 0 a 3 2 9 0 WRITE DO i 1 2 WRITE a i j J 1 2 END DO WRITE DO i 1 3 WRITE a i j J 1 3 END DO END PROGRAM testabug Executou O resultado inesperado n o Pois bem uma vez definida a dimens o da array o compilador Fortran mapeia a mem ria para arrays atrav s da seguinte express o POSI O DO ELEMENTO DA ARRAY NA MEM RIA A j 1 i 1 4 1 onde o n mero de linhas declarado no DIMENSION i e j s o as linhas e colunas da array i e a i j Usando a Eq 4 1 mostre o que ocorreu O compilador Fortran posiciona os elementos de uma array na mem ria por coluna ou seja primeiro a coluna 1 depois a coluna 2 e assim sucessivamente FALAR SOBRE O TEMPO DE M QUINA MANIPULANDO ARRANJOS POR LINHA OU POR COLUNA A verifica o de aprendizado pela pr tica com exerc cios e com a solu o de proble mas E altamente recomend vel que fa a os exerc cios a seguir bem como os dispon veis no IN1INOTA este tipo de erro pode ser chamado de estouro de ndice para arranjos ou estouro de rea de armazenamento Este problema tamb m ocorre no compilador G e a Eq 4 1 continua sendo v lida trocando se por j e o agora representa o n mero de colunas declarado Este um dos problemas dos programas feitos para o rWindows Eles n o possuem um b
19. Ent o use sem restri es os par nteses para evindeciar a ordem das opera es 2 Todas as potencia es da direita para a esquerda e depois as radicia es SQRT 3 Todas as multiplica es e divis es partindo da esquerda para a direita 4 Todas as adi es e subtra es realizando as opera es da esquerda para a di reita A ARITM TICA DOS INTEIROS A opera o entre n meros inteiros resulta em n meros inteiros Desta forma deveremos ter cuidado com algumas opera es em especial com a divis o Vejamos os casos abaixo livrof90 v8 preliminarl 2014 5 5 1 07 page 34 45 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran 1 2 3 4 5 6 2 2 0 2 2 2 2 2 2 7 8 9 5 T I S 2 4 4 1 0 2 3 2 2 4 4 3 Baseado nos resultados devemos ter cautela quando formos utilizar estas opera es de divis o entre inteiros porque por exemplo na primeira divis o 0 05 NI e sendo este ltimo o resultado da divis o entre reais Lembre se que os n meros reais s o tratados com ponto decimal e n o com a v rgula como estamos habituados Sugere se que utilize os n meros inteiros nos procedimentos estritamente necess rios por exemplo em contadores de repeti es ou ainda em ndices de vari veis compostas como matrizes e vetores A ARITM TICA DOS REAIS As mesmas opera es r
20. as A P Ot DO D where P is a permutation matrix L is unit lower triangular and U is upper triangular The factored form of A is then used to solve the system of equations A X B N input INTEGER The number of linear equations i e the order of the matrix A N gt 0 NRHS input INTEGER The number of right hand sides i e the number of columns of the matrix B NRHS gt 0 A input output DOUBLE PRECISION array dimension LDA N On entry the N by N coefficient matrix A On exit the factors L and U from the factorization A P L U the unit diagonal elements of L are not stored LDA input INTEGER The leading dimension of the array A LDA gt max 1 N IPIV output INTEGER array dimension N The pivot indices that define the permutation matrix P row i of the matrix was interchanged with row IPIV i B input output DOUBLE PRECISION array dimension LDB NRHS On entry the N by NRHS matrix of right hand side matrix B On exit if INFO 0 the N by NRHS solution matrix X LDB input INTEGER The leading dimension of the array B LDB gt max 1 N INFO output INTEGER 0 successful exit lt O if INFO i the i th argument had an illegal value livrof90 v8 preliminarl 2014 5 5 1 07 page 106 117 CAP TULO 6 AS SUB ROTINAS E FUN ES Continua o do Programa 6 1 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
21. de 13 de junho de 2001 a respeito dos criadores do Fortran O t tulo Pioneers of the Fortran Programming Language A seguir estudaremos termos cujos significados ser o importantes em todo o livro Ve remos tamb m os conceitos relacionados a estrutura de um programa Fortran tais como os tipos e a declara o de dados E criaremos passo a passo um programa Fortran decrevendo e explanando cada etapa livrof90 v8 preliminarl 2014 5 5 1 07 page 7 18 Fortran 95 curso b sico Gilberto Orengo OS BITS E BYTES Para uma aprendizagem mais significativa necess rio e importante conhecermos alguns termos utilizados nesta rea da computa o Um ponto forte no uso de computadores a mem ria As mem rias dos computadores s o compostas de milh es de interruptores ele tr nicos individuais cada um assumindo ON ou OFF ligado ou desligado nunca num estado intermedi rio Cada um dos interruptores representa um d gito bin rio tamb m conhecido como bit de binary digit em que o estado ON interpretado como o bin rio 1 e o estado OFF como o bin rio 0 Diversos bits agrupados representam o sistema bin rio de n meros ou simplesmente sistema de base dois representado pelo conjunto 0 1 Para compara o a base do sistema decimal 10 0 a 9 O n mero de arranjos poss veis para n meros bin rios fornecido por 2 em que n o n mero de op es
22. dores diferentes com tamanho de palavra wordsize diferentes Isto obtido por uma fun o intr nseca que seleciona automaticamente a m nima precis o especificada mesmo quando se troca de computador Para os reais esta fun o a que veremos no Cap tulo 7 na p gina 107 Para os inteiros temos a fun o 1 5 4 Os outros dados LOGICAL e CHARACTER Al m dos dados inteiros reais e complexos existem outros dois dados ou tipos de vari veis para armazenar dados os l gicos e os caracteres Os L gicos LOGICAL S o dados que assumir o somente valor verdadeiro ou falso e s o especialmente teis em to madas de decis o que ser o estudadas no Cap tulo 3 na p gina 63 Os valores s o TRUE Verdadeiro e FALSE Falso Os Caracteres literais CHARACTER S o dados constitu dos por letras e s mbolos e s o formados pelo conjunto de c digos da American Standard Code for Information Interchange ASCII que determina um padr o de ca racteres e est reproduzida parcialmente no Ap ndice A INIExemplos da depend ncia da combina o Processador Compilador num Supercomputador Cray T90 CF90 14 15 a precis o simples 64 bits e a dupla 128 bits j num PC Lahey Fortran 95 e num PC G95 a precis o simples 32 bits e a dupla 64 bits livrof90 v8 preliminarl 2014 5 5 1 07 page 25 36 Fortran 95 curso basico Gilberto Orengo A DECLARAGAO DAS VARIAVEIS Em Fort
23. est no processo de implementa o um outro sistema de c digo mais geral chamado Unicode que contemplar tamb m as linguagens orientais Na vers o Fortran 2003 este sistema de c digos j est dispon vel Todas as m quinas tem um tamanho de palavra wordsize uma unidade funda mental de armazenamento por exemplo 8 bits 16 bits etc Esta unidade difere entre as m quinas em um processador Pentium por exemplo poder ser de 32 bits 4 Bytes Isto ser importante mais adiante na p g 22 Outro conceito interessante o Flop que uma opera o de ponto flutuante por se gundo Uma opera o de ponto flutuante ocorre quando dois n meros reais s o adicionados Hoje se fala de MegaFlops ou at mesmo em GigaFlops Para finalizar um coment rio a respeito de processamento paralelo ou vetoriza o O processamento paralelo ocorre quando duas ou mais CPUs NS trabalham simultanea mente na solu o de um mesmo problema Assim obt m se maior velocidade e volume de processamento computacional Para fazermos uso deste procedimento necess rio que o compilador Fortran 95 nos habilite tal procedimento e que o programa seja projetado com este objetivo i e implementando as declara es intr nsecas para o processamento paralelo INSICPU Central Processor Unit ou no bom portugu s Unidade Central de Processamento livrof90 v8 preliminarl 2014 5 5 1 07 page 9 20 Fortran
24. fib n 2 para n gt 1 Paran Oen 1 0 valor por defini o fib 0 0 e fib 1 1 3 10 Criar dois programas O primeiro ler 15 n meros e escrever quantos n meros mai ores que 30 foram digitados O segundo receber 20 n meros e escrever a soma dos positivos e o total de n meros negativos 3 11 Criar um programa que entre com um nome e escreva o tantas vezes quantos forem seus caracteres 3 12 Criar um programa que entre com uma palavra e escreva conforme o exemplo a seguir Palavra AMOR A sa da ser AMOR AMO AM A 3 13 3 14 3 15 3 16 3 17 3 18 3 19 3 20 3 21 3 22 3 23 3 24 livrof90 v8 preliminarl 2014 5 5 1 07 page 78 89 CAP TULO 3 AS ESTRUTURAS DE CONTROLE Criar um programa que entre com dois n meros e escreva todos os n meros no inter valo fechado do menor para o maior Criar um programa para ler o n mero de termos da s rie N e escrever o valor de H sendo H 1 i 1 A Um restaurante faz uma promo o semanal de descontos para clientes de acordo com as iniciais do nome da pessoa Projete um programa em Fortran 95 que leia o primeiro nome do cliente o valor de sua conta e se o nome iniciair com as letras A D M ou S dar um desconto de 30 Para o cliente cujo nome n o se inicia por nenhuma dessas letras exibir a mensagem Que pena Nesta semana o desconto n o para seu nome mas continue
25. o primeiro pro grama apresentado sempre ensina como escrever uma mensagem na tela do monitor Isto tem um significado importante todos os procedimentos realizados por um programa ou c digo computacional como por exemplo c lculos de express es matem ticas precisam ser apresentados para o usu rio e isso s poss vel por interm dio de uma sa da de informa o Caso contr rio to das as informa es manipuladas ficar o aprisionadas na mem ria do computador sem que saibamos seus valores e se perder o ao desligar o computador Como mencionando anteriormente no Ap ndice apresentado com detalhes como obter instalar e utilizar o compilador Fortran G95 tanto para o sistema operacional Windows como para o Linux No Ap ndice apresentada uma lista de outros compiladores Fortran Para criar um programa necess rio seguir os tr s seguintes passoslN 1 Digite o c digo fonte em um editor de texto e salve o com a extens o 90 O termo c digo fonte ser utilizado para o arquivo contendo as instru es Fortran 95 em modo texto IN9 Existem compiladores Fortran que apresentam uma rea de trabalho totalmente integrada isto poss vel num mesmo ambiente digitar o c digo fonte compil lo para gerar o execut vel e execut lo o caso por exemplo dos compiladores Lahey PowerStation e Portland livrof90 v8 preliminarl 2014 5 5 1 07 page 17 28 Fortran 9
26. relacionado com ngulo assim como o nome ang rad ngulo em radianos As declara es de vari veis ser o estudadas com mais detalhes na p gina 25 Aparece a segunda declara o de vari vel que tamb m do tipo real Note que foi acrescentado um par metro na declara o o PARAMETER que instrui o compilador a fixar o valor da vari vel pi ao longo de todo o programa n o permitindo que seja alterado Uma tentativa de alterar o valor de pi acarretar num erro de execu o A diferen a para a declara o anterior que as duas vari veis theta e ang rad podem ser alteradas a qualquer momento no programa enquanto pi permancer constante du rante toda a execu o Nesta linha aparece a primeira instru o execut vel o WRITE que uma instru o de sa da de resultado ou de escrita ou impress o Neste caso devido ao primeiro asterisco a sa da ser na tela do monitor Note que a mensagem est entre duplas aspas Agora uma instru o execut vel de leitura apresentada o READ que receber um valor para a vari vel theta digitada via teclado tamb m devido ao primeiro asterisco Mais informa es a respeito de instru es de leitura e escrita est o no Cap tulo 2 na p g 49 Nesta linha ocorre a convers o de graus para radianos por interm dio de uma express o matem tica Observe que o sinal de igual n o indica uma igualdade propria mente dita mas sim uma atribui o que ser estudado na
27. respectivamente para entrada e sa da de dados Assim o c digo abaixo resolve o nosso problema Digite o compile o e execute o PROGRAM openl IMPLICIT NONE INTEGER a b OPEN UNIT 50 FILE saidal txt WRITE x Digite um no READ x a b ax10 WRITE 50 b CLOSE 50 END PROGRAM open1 inteiro 2 Escreva um programa em Fortran 95 que leia um valor inteiro armazenado num arquivo de nome saidal txt do exemplo anterior multiplique o por mil e escreva o resultado em um arquivo com nome saida2 txt Solu o Adotaremos como unidade de entrada a 60 e a de sa da a 61 e as vari veis a e b respectivamente para entrada e sa da de dados Devemos lembrar que o arquivo de leitura j existe e portanto o argumento STATUS ter como par metro OLD O c digo abaixo resolve o problema Digite o compile o e execute o Observe o uso da instru o amp para quebra de linha no Fortran PROGRAM open2 IMPLICIT NONE INTEGER a b OPEN UNIT 60 FILE saidal txt amp amp STATUS OLD OPEN 61 FILE saida2 txt READ 60 a b ax1000 WRITE 61 b CLOSE 60 CLOSE 61 END PROGRAM open2 livrof90 v8 preliminarl 2014 5 5 1 07 page 56 67 CAP TULO 2 TRABALHANDO COM ARQUIVOS ENTRADAS SAIDAS I O DE DADOS Podemos atribuir unidade l gica uma vari vel conforme o exemplo abaixo no qual a vari vel ue cujo valor inteiro infor
28. retornar um 1 porque n o existe este tipo de dado real no processador Pentium PC Outros retornar o valores distintos tente voc mesmo descobrir Observe que dos exemplos que tanto o p e r s o opcionais e p opcional se so mente a precis o desejada A fun o SELECTED REAL KIND deve ser usada com precau o pois a especifica o desejada no seu programa pode aumentar o tamanho do mesmo e com isso sua exe cu o pode ficar mais lento Por exemplo computadores com 32 bits tem entre 6 e 7 d gi tos decimais de precis o para as var veis com precis o simples Assim se foi especificado livrof90 v8 preliminarl 2014 5 5 1 07 page 110 121 CAP TULO 7 AS FUN ES INTR NSECAS SELECTED REAL KIND E SELECTED INT KIND SELECTED REAL KIND 6 ent o nestas m quinas ser precis o simples Entretanto se especificar SELECTED REAL KIND 7 sera dupla precis o poss vel usar outras fun es intr nsecas para determinar o tipo KIND de uma va ri vel real e sua precis o e expoente num dado computador A tabela 7 2 descreve estas fun es Tabela 7 2 Fun es Intr nsecas relacionadas com o KIND Fun o Descri o SELECTED REAL KIND p r Retorna o menor tipo de par metro real com um va lor m nimo de p d gitos decimais de precis o e m ximo intervalo gt 10
29. ria do Computador 9 1 5 4 Os dados LOGICAL e CHARACTER 23 Compilador ooa 10 1 6 A Declara o das Vari veis 23 Interpretador _ 2 ti A Atribui o de valor vari vel 24 Depurador o cea nesses gama a 11 A inicializa o de vari veis 25 1 4 As Unidades de Progaama 12 Vari veis globais e locais 25 O Programa Principal Main Program 12 1 7 Os Procedimentos Intrinsecos 29 O Formato livre 13 1 7 1 As Fun es Matem ticas Intr nsecas 29 O Conjunto de Caracteres 13 1 7 2 A Aritm tica com inteiros e reais 31 Os Nomes Simb licos em Fortran 14 As Express es Aritm ticas 31 Os R tulos em Fortran 14 A Aritm tica dos inteiros 32 O Primeiro Programa 15 A Aritm tica dos reais 32 O Segundo Progama 17 A Aritm tica mista entre inteiros e reais 33 1 5 A Despensa de Dados no Fortran 95 20 1 7 3 A Manipula o de Caracteres 34 1 5 1 Dados Inteiros INTEGER Precis o 1 8 Corrigindo Erros DEBUGGING 37 Simpl s css 2a S ms ala dra 21 EXGIC CIOS ck s Q s sos s a ms ama sad na 44 1 1 INTRODU O Seja bem vindo ao universo Fortran Neste in cio de conversa importante salientar que este texto foi integralmente escrito com o ETEX 1 5 O ETEX um sistema de processamento de textos utilizado especialmente para produzir
30. uma quest o pessoal pois existem outros tantos e est o listados no endere o http fwww ctan org Para abrigar a maioria dos ambientes comandos e instru es de formata o que ser o descritos abaixo foi criado o pacote cfglivrof95 sty que significa configura es do livro sobre Fortran 95 Outros foram adicionados no documento fonte principal importante ressaltar que constar o somente as formata es que julgo sejam v lidas para um aprendizado diferen ciado sobre ATEX As formata es simples do tipo dist ncia entre linhas tamanho de papel e de margens entre outras foram omitidas para n o tornar enfadonho e longo este cap tulo do Ap ndice e se encontram em qualquer texto sobre o assunto SOBRE O TEXTO A fonte adotada no texto foi a palatino tamanho 10pt habilitada pelo pacote palatino sty Para aproveitamento do papel dispon vel na gr fica o tamanho do papel escolhido foi de 21x 25 cm e deixando uma margem segura para corte foi adotado 20 7 x 24 7 cm configurado no TEX pelo pacote geometry sty Para possibilitar a digita o direta dos caracteres acentuados e cedilhados foram utiliza dos os pacotes e op es entre colchetes latin1 inputenc sty e T1 fontenc sty sendo que este ltimo possibilita usar no comando hyphenation palavras acentuadas e cedilhadas permitindo assim melhor controle sobre a separa o sil bica livrof90 v8 preliminarl 2014 5 5 1 07 page 130 141
31. w m nima necess ria para imprimir um valor real num formato de nota o com pot ncia de dez E e numa nota o cient fica de pot ncia de dez ES com 5 bits significativos de precis o Obs consulte a respeito de precis o num rica na p gina 22 no Cap tulo 1 2 3 Escreva um programa que leia dois valores reais de precis o simples de um arquivo de nome entrada txt e escreva a soma deles em um novo arquivo j existente de nome saida txt Use a instru o FORMAT para os valores 2 4 livrof90 v8 preliminarl 2014 5 5 1 07 page 63 74 AS ESTRUTURAS DE CONTROLE Neste cap tulo voc encontrar 3 3 1 A Estrutura de repeti o DO END DO 58 3 1 Introdu o BE ig aah dd a uma 49 332 A Estrutura de repeti o 3 1 1 Express es Aritm ticas 50 DO IF END DO ou DO 3 1 2 Express es L gicas 50 infinito 58 Operadores Relacionais 50 OusodoWHILE 60 Operadores L gicos 51 Exerc cios aas ee ee 60 3 1 3 Hierarquia dos Operadores 52 3 2 Estruturas com Decis o ou Sele o 53 3 2 1 Estrutura Condicional Simples Saudade 09 09 2004 11 00 IF THEN o ea ks Xk s eee 53 3 2 2 Estrutura Condicional Composta 5 anise IF THEN ELSE IF 54 Saudade esta faz 3 2 3 OcomandoIFLd gico 55 o tempo ser sagaz 3 2 4 A estrutura de sele o direta SELECT CASE CASE
32. ASCII em que x deve estar entre aspas simples ou duplas Se esta entrada for requisitada por interm dio de uma leitura pelo comando READ n o s o usadas aspas pois ser armazenada em uma vari vel Exemplo IACHAR b resulta no inteiro 98 Exemplo em um programa Programa 1 8 O uso da fun o IACHAR 1 PROGRAM uso iachar 2 CHARACTER letra 3 INTEGER posicao 4 WRITE Digite um caracter da tabela ASCII 5 READ A letra 6 posicao IACHAR letra 7 WRITE A posicao na tabela ASCII eh amp 8 posicao END PROGRAM uso_iachar Se for digitado o caracter s a sa da na tela do monitor ser A posicao na tabela ASCII eh 115 Este resultado poder ser manipulado aritmeticamente CONSIDERA ES IMPORTANTES poss vel retirar ou retornar parte de uma palavra string Por exemplo seja a string pessoa Podemos retirar somente o conjunto sso Isto poss vel somente com a utiliza o de vari veis que armazenem caracteres Vejamos como isto funciona por interm dio do seguinte programa Programa 1 9 Retorna parte de uma string PROGRAM parte_de_char 2 CHARACTER LEN 20 total 3 CHARACTER LEN 3 parte 4 WRITE x Digite uma palavra com ate amp 5 amp 20 posicoes 6 READ x total 7 parte total 3 5 8 WRITE x A parte da palavra digitada eh parte o END PROGRAM parte de char Assim se for digitado a palavra
33. END PROGRAM testa sub r onan Outras caracter sticas importantes tal como aloca o de mem ria autom tica para ar rays est o descritos detalhadamente nas refer ncias indicadas anteriormente 6 3 AS FUN ES FUNCTION Uma fun o Fortran um procedimento que ativado em uma express o que pertence a um comando de programa A fun o retorna um nico valor num rico ou l gico ou caracter ou uma array O Fortran tem dois tipos de fun es fun es intr nsecas e fun es definidas pelo usu rio fun es definida usu rio Fun es intr nsecas estudadas no Cap tulo 1 na p gina 30 s o pr prias latentes da linguagem Fortran tais como SIN X COS X SORT X entre outras Para saber quais s o as fun es intr nsecas consulte o Manual do Usu rio As fun es definida usu rio s o fun es que o programador cria para executar uma tarefa espec fica A forma geral de uma fun o definida usu rio A fun o definida usu rio ou simplesmente fun o deve ser iniciada com a instru o FUNCTION e finalizada com uma instru o END FUNCTION O nome da fun o deve seguir como nas sub rotinas os padr es do Fortran isto deve ter at 31 caracteres e pode ter tanto letras do alfabeto como n meros mas o primeiro caracter deve ser obrigatoriamente uma letra A fun o ativada pelo seu nome em uma express o e sua execu o come a no topo da fun o e termina qua
34. O primeiro caracter da imagem contida na rea de armazenamento de dados tempor rio conhecido como caracter de con trole e especifica o espa amento vertical da sa da A tabela 2 2 apresenta as possibilidades e as a es deste caracter de controle Tabela 2 2 Caracteres de controle da sa da formatada Caracter de controle A o 1 Avan a para a pr xima p gina Nova p gina lt espa o gt Espa amento simples entre linhas 0 Espa amento duplo entre linhas N o h espa amento entre linhas Sobrescreve escreve em cima da a linha anterior Se qualquer outro caracter for utilizado como caracter de controle resultar em espa a mento simples entre linhas como se fosse usado o espa o em branco lt espa o gt Para evitar erros na sa da n o esque a do caracter de controle Por exemplo a seguinte instru o de sa da WRITE 100 a 100 FORMAT I2 imprimir um valor num rico inteiro de duas posi es Esta a inten o Vejamos dois poss veis valores Se for passado para a vari vel a o valor 7 a sa da ser exatamente 7 justificada a direita Mas se for passado o valor 71 o resultado ser 1 porque o primeiro 1 2 livrof90 v8 preliminarl 2014 5 5 1 07 page 59 70 Fortran 95 curso b sico Gilberto Orengo caracter destinado ao de controle neste caso o 7 e foi assumido como espa o em branco portanto o espa amento entre linhas
35. SELECTED INT KIND r Retorna o menor tipo de par metro inteiro com m ximo intervalo gt 10 KIND X Retorna o n mero que especifica o tipo de par me tro de X onde X uma vari vel ou constante de al gum tipo intr nseco PRECISION X Retorna a precis o decimal de x onde X um valor real ou complexo RANGE X Retorna o expoente da pot ncia de 10 para x onde X um valor inteiro real ou complexo Observe pela tabela 7 2 que o procedimento de escolha de precis o tamb m v lido para os n meros inteiros A fun o para isto SELECTED INT KIND r e o exemplo abaixo ilustra seu uso kind number SELECTED INT KIND 3 kind number SELECTED INT KIND 9 kind number SELECTED INT KIND 12 n Usando um processador PC Pentium e o compilador da Lahey Fujitsu a primeira fun o retornar um 2 para 2 Bytes inteiros representando um intervalo de representa o entre 32 768 e 32 767 Igualmente a segunda fun o retornar um 4 4 Bytes que fornecer um intervalo entre 2 147 483 648 e 2 147 483 647 A ltima fun o retornar um 8 8 Bytes com intervalo entre 9 223 372 036 854 775 808 e 9 223 372 036 854 775 807 Em outros compilado res este ltimo pode retornar 1 pois poder fugir de sua representatividade livrof90 v8 preliminarl 2014 5 5 1 07 page 111 122 Os Procedimentos MODULE A linguagem Fortran s
36. a Express o para c lculo y axbtcxdte fxxg Completando com os valores y 3 42 5 44 10 2 4 43 Calculando 2 3 y 3 2 4 5 4 4 10 8 Calculando as multiplica es e divis es 6 5 4 4 10 8 6 20 10 8 6 20 1 25 27 25 da esquerda para a direita y y y Calculando as adi es e o resultado final y No Fortran a opera o entre inteiros e reais n o uma boa pr tica pois o computador converte o n mero inteiro em real e a seguir procede a opera o Desta forma podemos perder informa es nestas opera es Informe do ponto de vista do Fortran qual ser o resultado em cada uma das opera es abaixo a 3 2 b 3 2 c 3 2 d 1 1 4 e 1 1 4 f 1 1 4 g 2 6 4 O programa abaixo ser compilado Justifique sua resposta livrof90 v8 preliminarl 2014 5 5 1 07 page 46 57 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran 1 PROGRAM exemplol 2 IMPLICIT NONE 3 INTEGER i j 4 INTEGER PARAMETER k 4 5 i k 2 6 j i k 7 k itj 8 WRITE i j k END PROGRAM exemplol 1 4 Que valores sair o do programa abaixo Tente antes de executar o programa no com putador calcular as sa das O assunto com respeito a INT e NINT O INT retorna a parte inteira de um real por truncamento e o NINT por arredondamento 1 PROGRAM exemplo 2 IMPLICIT NONE 3 INTEGER il i2 i3 4 REAL rl 2 4 r2 5
37. a n o ser nos casos citados acima impresso o outro resultado tamb m na tela do monitor a linha que encerra o programa Caso n o tiv ssemos escrito a linha 1 poder amos encerrar o programa somente com a instru o END Como escrevemos a instru o PROGRAM graus para rad devemos encerrar obrigatoriamente com a instru o END seguido de PROGRAM graus para rad Encerramos a breve an lise do nosso segundo programa Fortran Foi somente um exem plo e assim deve ser encarado porque existem outras tantas instru es fun es declara es Fortran que somente lendo este livro at o final ter s uma boa no o antes de come ar efeti vamente a programar em Fortran A medida que formos avan ando outros programas ser o propostos Em resumo a estrutura geral de um programa Fortran 1 BLOCO DA DECLARA O DAS VARI VEIS que um conjunto de instru es n o execut veis que definem as vari veis que ser o utilizadas ao longo do programa Os sub programas tem acesso as vari veis declaradas nesta etapa via troca por par metros 2 BLOCO DE EXECUT VEIS o corpo do programa cont m entradas e sa das de dados inclusive ou seja o c digo em si Embora o bloco seja chamado de execut vel poder conter instru es n o execut veis 3 BLOCO DE ENCERRAMENTO DO PROGRAMA que s o instru es que finalizam o programa e podem ser END PROGRAM e STOP este poder aparecer em qualquer parte do programa
38. afirma ao Para isto corrija somente o primeiro erro e re compile 133 134 135 136 137 138 livrof90 v8 preliminarl 2014 5 5 1 07 page 43 54 Fortran 95 curso b sico Gilberto Orengo O segundo erro de l gica ou terceiro indicado pelo compilador a aus ncia de decla ra o da vari vel theta Esta detec o foi poss vel pela presen a do IMPLICIT NONE na segunda linha Corrigido compilado e executado o resultado surpreendente Inf NaN N o ocorreu o esperado que eram resultados num ricos O In significa overflow infi nito ou seja n mero muito grande que ultrapassou o limite do expoente da pot ncia de dez O NaN significa Not a Number isto n o um n mero Para identificar onde est o problema foi acrescentado uma sa da de informa o loca lizada no interior da estrutura de repeti o DO A sa da utilizada foi WRITE x O resultado da tangente de theta eh z amp No loop E i O objetivo imprimir em cada passo loop o resultado parcial Observe parte das 200 sa das resultado da tangente de 1 0087063E 38 eh 10 567177 No loop 83 resultado da tangente de 2 741948E 38 eh 2 4247808 No loop 84 resultado da tangente de Inf eh 2 221997 No loop 85 resultado da tangente de Inf eh 1 0551705 No loop 86 resultado da tangente de Inf eh 0 4865762 No loop 87 resultado da tangente de In
39. at 31 caracteres e iniciar sempre com uma letra do alfabeto jamais com um algarismo que poder ser utilizado a partir da segunda posi o assim como o underscore N o conter caracter especial amp em qualquer posi o do nome bem como letras acentuadas ou cedilhadas S o exemplos de declara o de vetores INTEGER A 5 R 3 REAL h 10 CHARACTER LEN 5 nome 2 ou por INTEGER DIMENSION 5 A INTEGER DIMENSION 3 R REAL DIMENSION 10 h CHARACTER LEN 5 DIMENSION 2 nome livrof90 v8 preliminarl 2014 5 5 1 07 page 82 93 CAP TULO 4 AS VARI VEIS COMPOSTAS ARRANJOS Na primeira representa o a vari vel A armazenar 5 valores inteiros ou com outras palavras o vetor A possui 5 elementos Desta forma o vetor h poder armazenar 10 valores do tipo real O termo poder est bem colocado pois a vari vel declarada como vetor ter um limite que armazenar podendo n o ser completado Por exemplo no caso da vari vel A se informarmos 4 valores o vetor passar a ter 4 elementos e n o 5 Neste caso a mem ria ser ocupada de forma n o otimizada pois requisitou se que reservasse um espa o para 5 elementos e estamos s ocupando 4 Opostamente se informarmos 6 elementos no lugar de 5 estaremos cometendo um erro pois a vari vel ir armazenar somente nos espa os permitidos na declara o Nos no
40. at que cesse a execu o do programa Em outras palavras livrof90 v8 preliminarl 2014 5 5 1 07 page 55 66 Fortran 95 curso b sico Gilberto Orengo 55 nesta situa o um arquivo permanece aberto Assim ap s o uso do arquivo importante fech lo para evitar erros indesej veis A instru o CLOSE desconecta uma unidade l gica do seu arquivo externo Ou seja fecha o acesso ao arquivo e libera o n mero da unidade l gica de I O associada a ela A sintaxe em que lt n mero gt o n mero da unidade l gica definida no argumento UNIT da instru o OPEN Podemos fechar v rios arquivos simultaneamente bastando para isso informar as uni dades separadas por v rgulas Exemplos CLOSE 10 12 20 CLOSE UNIT 11 CLOSE 50 Observe que no primeiro exemplo a instru o CLOSE encerra simultaneamente 3 unida des l gicas Outro ponto importante que a palavra chave UNIT opcional e s foi utilizada no segundo exemplo Para a instru o OPEN h outros argumentos que n o ser o tratados aqui e aconse lh vel verific los nos livros indicados nas refer ncias bibliogr ficas na p g 135 Exemplos resolvidos 1 Escreva um programa em Fortran 95 que leia um valor inteiro via dispositivo padr o multiplique o por dez e escreva o resultado em um arquivo com nome saidal txt Solu o Adotaremos como unidade de sa da a 50 e as vari veis a e b
41. c digos internos que substituem uma palavra re servada ou declara o de programa em uma linguagem de alto n vel P ex o WRITE substitui uma instru o de m quina para imprimir por interm dio de um dispositivo o conte do contido em um referido endere o de mem ria INSTRU O DE ATRIBUI O assignment statement o mesmo que atribui o PROCEDIMENTO procedure um c lculo que pode ser invocado durante a execu o de um programa E pode ser uma sub rotina ou uma fun o Pode ser um procedimento intr nsico p ex COS ou EXP um procedimento externo um procedimento m dulo um procedimento interno subprograma que vem ap s um CONTAINS um procedimento mudo ou uma fun o livrof90 v8 preliminarl 2014 5 5 1 07 page 124 135 AP NDICE C GLOSS RIO livrof90 v8 preliminarl 2014 5 5 1 07 page 125 136 Como Abordar um Problema de Programa o Este texto foi adaptado com autoriza o do autor do artigo Como Abordar um Problema de Programa o de Vin cius Jos Fortuna obtido no endere o http olimpiada ic unicamp br programacao programacao dicas ANALISE O PROBLEMA E PROJETE SEU PROGRAMA ANTES DE PROGRAMA LO Nunca inicie a programar a partir do nada aconselh vel esquematizar alguns pseudo c digos algoritmos explicando o que o programa vai fazer em um n vel mais elevado antes de escrever o programa A exce o q
42. do compilador para falha na aloca o uma boa pr tica de programa o usar o STATUS pois caso esteja ausente e a aloca o falhar p ex por falta de mem ria ou por outro erro qualquer como nome errado de vari vel a execu o do programa ser abortada O seu uso feito atrav s de um controle de fluxo tipo IF Para o caso acima temos 1 IF info 0 THEN 2 amanha ontem 10 3 ELSE 4 WRITE Erro na Alocacao de Memoria Verifique 5 STOP 6 END IF Uma array aloc vel n o poder ser utilizada num dado ponto do programa at que sua mem ria seja alocada para tal Qualquer tentativa de usar uma array que n o esteja alocada produzir um erro e com isso sua execu o ser abortada O Fortran 90 95 inclui a fun o l gica intr nseca ALLOCATED para habilitar o programa testar o estado da aloca o de uma dada array antes de tentar us la Por exemplo as seguintes linhas de um c digo computacional testam o estado de aloca o da array input data antes de tentar realmente utiliz la 1 REAL ALLOCATABLE DIMENSION input data 3 IF ALLOCATED imput data THEN 4 READ 8 input data 5 ELSE 6 WRITE x x AVISO Array nao Alocada 7 STOP 8 END IF Esta fun o pode ser til em grandes programas envolvendo muitos procedimentos de aloca o din mica de mem ria No final do programa ou mesmo quando n o precisamos mais da array devemos desaloc la da mem ria c
43. documentos cient ficos de alta qualidade tipogr fica tamb m til para outros tipos de documentos desde simples cartas at livros completos O TX utiliza o TEX como base para seu processamento e a sua distribui o gratuita dispon vel para a maioria dos sistemas operacionais como o UNIX Linux Windows OSMac Sun e VMS Nas Universida des encontrado previamente instalado nas redes UNIX Linux de computadores exceto redes Windows aconselh vel se voc ainda n o teve contato com ITFX que o fa a uma ferramenta computacional muito poderosa para uso no meio acad mico e cient fico No Ap ndice E s o apresentadas algumas linhas de programa o TEX que foram utilizadas na elabora o deste livro fortran fortran 95 livrof90_v8 preliminarl 2014 5 5 1 07 page 2 13 2 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran O LIVRO E muito importante para compreens o na leitura do livro observar as seguintes conven es adotadas NOTA O DO LIVRO As seguintes nota es ou conven es s o usadas ao longo do livro fortran 5 na linha que aparece este simbolo como nota de margem sera destacado na mesma cor a instru o referente ao Fortran 95 que nao havia no FORTRAN 77 fundo cinza claro conter um exemplo de programa Fortran 95 A numera o dos programas seguir sequencialmente na ordem ar bica antecedida do n mero do cap tulo m fundo cin
44. erro AS SUJEIRAS DA MEM RIA Em v rios momentos neste cap tulo foi mencionado sobre as sujeiras da mem ria E ainda que as vari veis sejam inicializadas para evitar erros justamente por conterem valores inde vidos anteriormente armazenados no endere amento de mem ria utilizado Para verificar na pr tica digite o programa abaixo compile o e execute o Programa 1 16 Exemplo de erro devido a sujeiras da mem ria PROGRAM testa sujeira memoria IMPLICIT NONE INTEGER a Db c WE TTE GC a oe END PROGRAM testa_sujeira_memoria Provavelmente ter s uma surpresa porque nenhum valor foi atribu do as vari veis a b e c e assim espera se um valor nulo ou at mesmo um erro de execu o Mas n o o que ocorre No momento do fechamento desta edi o o valor obtido pela execu o do programa no Windows foi 16384 eno Linux 1073664380 Se executarmos em outra ocasi o muito prov vel que o valor seja diferente porque depender dos valores contidos na mem ria Ent o cuidado Sugest o sempre inicialize as vari veis Mais informa es a respeito de procura e corre o de erros de programa o em Fortran podem ser obtidas nos manuais dos compiladores Fortran especialmente do compilador que ser usado para testar os programas aqui apresentados e para os que ser o solicitados nos exerc cios a seguir Em cada cap tulo quando necess rio um cap tulo sobre debugging ser escrito Isto demonstr
45. modificados Os COMMON devem ser usados com cautela para evitar problemas pois est o sujeitos a dois tipos de erros Melhor n o usar mesmo Porque Bem analisemos um pro grama reproduzido parcialmente que usa COMMON e cuja aloca o de mem ria se encontra representada ao lado 1 PROGRAM erro common Representa o da Aloca o da Mem ria no COMMON 2 IMPLICIT NONE P 3 REAL a b Rae ha rograma Sub rotina 4 REAL DIMENSION 5 C erro common cuidado 5 INTEGER i 6 COMMON commonl a b c i 0000 Z aeisi 8 CALL cuidado ee 10 END PROGRAM erro common me 11 t 0008 12 Aqui comecam a sub rotina 13 0004 14 SUBROUTINE cuidado 15 REAL x nos 16 REAL DIMENSION 5 y 17 INTEGER i j 0006 18 COMMON commonl x y i J do C sas 0007 2 END SUBROUTINE cuidado livrof90 v8 preliminarl 2014 5 5 1 07 page 113 124 Fortran 95 curso basico Gilberto Orengo 1 tipo de erro observe que os 5 elementos da array c no programa principal e o seus corres pondentes na sub rotina est o desalinhados Portanto c 1 no programa principal ser a mesma vari vel y 2 na sub rotina Se as arrays c e y s o supostamente as mesmas este desalinhamento causar s rios problemas 2 tipo de erro o elemento real da array c 5 no programa principal id ntico a vari vel inteira i na sub rotina E extremamente improv vel e indesej ve
46. o as sub rotinas Unidade de Programa BLOCK DATA Unidade de Programa MODULE A seguir veremos o primeiro tipo Os subprogramas SUBROUTINE e FUNCTION est o descritos no Cap tulo 6 na p gina 97 A unidade de programa apresentada no Cap tulo 8 na p gina 111 A unidade de programa BLOCK DATA n o ser abordada neste livro Um BLOCK DATA fornece valores iniciais para dados compartilhados por uma ou mais unidades de programas Uma leitura complementar sobre estas unidades de programa s o encontradas nas refer ncias indicadas ou no Manual do Usu rio do compilador Programa Principal Main Program A execu o de um programa principal inicia com a primeira declara o ou instru o execu t vel no programa principal e finaliza com a instru o END do programa principal ou com uma instru o STOP localizada em qualquer lugar do programa De fato o que determina a finaliza o do programa o END Quando encontrado um STOP ele remete o fluxo de execu o incondicionalmente para o END e assim a execu o do programa abortada A forma estrutural de um programa principal em Fortran 95 livrof90 v8 preliminarl 2014 5 5 1 07 page 14 25 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran PROGRAM nome do programa USE nome do use IMPLICIT NONE declara o global dos dados instru es execut veis n o execut veis CONTAINS subprogramas internos END PROGR
47. o executados caso existam 2 a seguir a instru o IF ser executada e caso seja falsa os lt procedimentos 2 gt ser o executados e 3 na sequ ncia retorna a executar os lt procedimentos 1 gt e a instru o IF Este ci clo ser executado sucessivamente at que saia do bloco DO quando a lt condi o l gica gt for verdadeira e neste caso o ltimo loop os lt procedimentos 2 gt n o se r o executados Os lt procedimentos 1 gt e lt procedimentos 2 gt s o opcionais e o uso de um ou de outro ou ainda de ambos depender das tarefas a serem executadas no programa Este tipo de estrutura tamb m recebe o nome de loop infinito repeti es infinitas por que se n o existir uma condi o de sa da ou se a condi o l gica para um EXIT nunca for verdadeira ele permanecer indefinidamente neste processo repetitivo Portanto deve se ter muito cuidado no uso dessa estrutura de repeti o livrof90 v8 preliminarl 2014 5 5 1 07 page 76 87 76 CAP TULO 3 AS ESTRUTURAS DE CONTROLE O USO DO WHILE Esta estrutura de repeti o pode ser substitu da por outra que contenha a instru o WHILE como segue Neste caso o DO estar ativo at que a lt condi o l gica gt do WHILE seja falsa Vejamos um exemplo do uso de estruturas de repeti o O programa identifica e im prime os primeiros 100 pares no intervalo entre 1 e 1000 Programa 3 6 Exemplo de estrutura de repe
48. p gina 27 Isto primeiro s o realizadas todas as opera es no lado direito da igualdade para posterior atribui o do resultado final vari vel neste caso a vari vel ang rad Note tamb m que foi adi cionado um coment rio ap s uma instru o Esta mais uma caracter stica do Fortran 95 isto livrof90 v8 preliminarl 2014 5 5 1 07 page 21 32 Fortran 95 curso b sico Gilberto Orengo Nesta linha impresso pelo WRITE o resultado das opera es execut veis ante riores e novamente na tela do monitor Agora uma m ltipla sa da todas separadas por v rgula que envolve valores armazenados nas vari veis que ser estudado na p gina 27 e de frases literais entre aspas Observe tamb m o caracter amp que posicionado no final da linha indica que a linha continuar na seguinte Se um nome palavra chave ou constante quebrado por um amp o primeiro caracter da pr xima linha deve ser outro amp seguido do restante do nome palavra chave ou constante Veja o exemplo 1 WRITE x O angulo theta em graus amp 12 amp vale ang_rad radianos O n mero m ximo permitido de continua es de linhas igual a 39 Aten o o amp n o funciona no interior dos coment rios e n o pode ser seguido de um coment rio Aqui continua a linha anterior indicado pelo amp no final da linha 11 E opcional o uso de outro amp no in cio da linha
49. para outro como por exem plo a convers o de um n mero real em inteiro ou vice versa Mistos que incluem rotinas relativas ao processador e ao tempo como por exemplo DATE_AND_TIME N o nos preocuparemos em mostrar todos e nem em apresentar na classifica o feita acima Alguns desses procedimentos ser o vistos a seguir especialmente os relativos a fun es matem ticas e de transforma o num rica Outros referentes a caracteres ser o estu dados na p gina 36 1 7 1 As Fun es Matem ticas Intr nsecas Como ocorre numa simples calculadora de m o o Fortran 95 oferece quase uma centena de fun es pr definidas ou conhecidas por fun es intr nsecas ou procedimentos intr nsecos tais como cosseno e seno de um ngulo Algumas fun es est o apresentadas na tabela 1 1 nas quais s o indicados os poss veis argumentos de cada uma das fun es Fortran 95 curso b sico Gilberto Orengo livrof90 v8 preliminarl 2014 5 5 1 07 page 31 42 Tabela 1 1 Alguns procedimentos intr nsecos matem ticos do Fortran 95 Instru o Argumento Fun o ACOS x R arccos x ASIN x R arcseno x ATAN x R arctag x ou arctg x ATANZ2 y x R arctag y x ou arctg y x Cos x RC cos x SIN x RC seno x TAN x R tag x ou tg x EXP x R ex LOG x 11 RC In x LOG10 x R log x AB
50. pode ser um n mero inteiro ou real dependendo dos operandos e operadores Os ope radores aritm ticos est o descritos na tabela 1 3 Tabela 1 3 Os operadores aritm ticos dispon veis no Fortran 95 Operadores Aritm ticos Operador bin rio Fun o Exemplos multiplica o 5 2 A B divis o 2 7 8 5 3 1 M N soma ou adi o 3 5 A subtra o 5 1 x y potencia o 3 5 35 Operador un rio Fun o Exemplos indica n mero positivo 3 indica numero negativo 1 E importante ressaltar alguns pontos na aritm tica de inteiros e reais a Dois operadores n o podem estar lado a lado Por exemplo 2 7 ilegal Na pro grama o em Fortran escrito como segue 2 7 Da mesma forma devemos ter cuidado com a exponencia o O correto 2 3 e n o 2 3 b A multiplica o impl cita n o aceita no Fortran isto a express o z x y deve ser escrita como z x y c A radicia o pode ser transformada numa potencia o por exemplo V6 6 2 que na linguagem Fortran fica 6 1 2 Deve se tomar muito cuidado nesta opera o e este assunto tratado com mais detalhes na p gina 35 A ordem de prioridades nas opera es aritm ticas na linguagem Fortran 1 Opera es que est o no interior de par nteses iniciando sempre dos par nteses mais internos para os mais externos Os par nteses determinaram a ordem da opera o
51. r tulo gt uma identifica o opcional dada a estrutra de repeti o IF lt condi o l gica gt determina um teste l gico pela condi o l gica que caso seja verdadeira executa a lt instru o de controle gt Se for falsa o fluxo do bloco continua na pr xima linha executando os lt procedimentos 2 gt N o h restri o ao n mero de testes l gicos mas que exista pelo menos um neste caso de sa da da estrutura de repeti o E podem estar localizados em qualquer ponto no interior do DO IF END DO lt instru o de controle gt pode ser EXIT determina a sa da da estrutra de repeti o lt r tulo gt em que o lt r tulo gt po der ser de outra estrutura de repeti o sempre externa a atual Esta rotulagem opcional portanto n o comum utiliz la para um nico bloco Quando esta instru o de controle for executada o fluxo de execu o do bloco e do programa transferido para a primeira linha ap s o END DO Observe que neste caso os lt procedimentos 2 gt n o ser o executados CYCLE determina o retorno ao in cio da estrutra de repeti o lt r tulo gt em que no vamente o lt r tulo gt poder ser de outra estrutura de repeti o sempre externa a atual END DO especifica o final do loop A estrutura como consta no quadro acima funciona da seguinte maneira por exemplo com a instru o de controle EXIT 1 ao entrar no DO os lt procedimentos 1 gt ser
52. seja o novo valor ser o anterior somado de 5 Esta uma pr tica muito utilizada em programa o e a vari vel b conhecida por acumulador Pelo ponto de vista matem tico ter amos um erro pois o resultado final seria 0 5 que um absurdo Mas do ponto de vista computacional temos que o primeiro passo resolver a express o do lado direito da igualdade que iguala 11 e ap s atribuir o resultado para a vari vel do lado esquerdo da igualdade que o reter na mem ria do computador A INICIALIZA O DE VARI VEIS importante conforme descrito na p gina 10 atribuir um valor inicial a todas as vari veis do programa Desta forma se evita erros indesej veis de valores pre atribu dos devido a sujeiras contidas na mem ria A inicializa o pode ser realizada j na declara o ou em qualquer parte do programa como no exemplo a seguir INTEGER a 15 c REAL h 2 350 c 260 livrof90 v8 preliminarl 2014 5 5 1 07 page 27 38 Fortran 95 curso basico Gilberto Orengo VARIAVEIS GLOBAIS e LOCAIS Uma vari vel quanto ao seu uso no c digo poder ser global ou local Uma vari vel glo bal uma vari vel declarada em um procedimento MODULE e ativada pela instru o USE enquanto que uma vari vel local aquela declarada no programa principal PROGRAM e no interior de subprogramas tais como fun es FUNCTION e sub rotinas SUBROUTINE As vari veis globais p
53. ser simples No caso anterior n o ocorreu erro porque o primeiro caracter foi um espa o em branco j que o n mero tinha somente um algarismo Ent o muita aten o Alguns exemplos de formata o s o apresentados a seguir Programa 2 4 Exemplo do uso de formatos PROGRAM format 1 IMPLICIT NONE REAL a 128 45 lo 6739 10 OOo WRITE x 100 a l a salces O11 234 54703 WRITE 200 a l a sardas 123 45 WRITE 300 a Wal sandalo po 4 gt OF OS WRITE 400 a a saida 0 a LAI srs WRITE 500 a a saida 0 12345E 000003 WRITE x 600 a Ialisiabicdal 1 28105002 WRITE 700 ap lo 2 Se uicles lL 2302 Go Mess 7 em 21 100 FORMAT 0 E11 5 200 FORMAT 0 F6 2 300 FORMAT 1 E12 6 400 FORMAT E10 2 500 FORMAT E15 5E6 600 FORMAT ES10 2 700 FORMAT 3ES10 2 END PROGRAM format 1 Observe as sa das escritas como coment rio Atente especialmente para a segunda formata o que exatamente o n mero original As demais alteram a forma de escrever e n o mudam o significado matem tico da vari vel a a n o ser nas ltimas que reduzem a precis o do valor Na ltima foram realizadas tr s sa das com a mesma formata o definida no FORMAT de r tulo 700 Nesta utilizada a formata o em nota o cient fica e observe o caso do n mero 6789 10 que arredondado para se ajustar ao espa o determinado e no n mero 0 000778 os
54. sico Gilberto Orengo 71 3 2 3 A instru o IF L gico E uma forma alternativa da estrutura condicional IF e consiste de um nico procedimento com estrutura em que IF especifica o in cio do comando l gico lt express o l gica gt determina um teste l gico que se o resultado for verdadeiro executa o lt procedimento gt Caso contr rio o fluxo de execu o continua na linha seguinte Esta instru o utilizada nas estruturas de repeti o sem contador fixo nos chamados loops infinitos que veremos na p gina 74 O exemplo abaixo demonstra o uso dessa instru o Programa 3 4 Exemplo de decis o l gica em uma linha 1 PROGRAM if logico 2 IMPLICIT NONE 3 INTEGER a 4 WRITE Digite um numero inteiro 5 READ a 6 IF a gt 10 a at 25 7 WRITE O Resultado final eh a s END PROGRAM if logico Neste caso se for digitado um n mero maior ou igual a 10 o resultado final ser o valor digitado somado de 25 Caso contr rio a sa da ser igual a entrada 3 2 4 A estrutura de sele o direta SELECT CASE CASE A estrutura SELECT CASE outra forma de ramifica o numa tomada de decis o Ela per mite o programador selecionar um bloco espec fico baseado no valor de uma nica vari vel que poder ser inteira caracter ou l gica A forma geral que adotaremos para representar esta estrutura 10 11 12 13 14 15 17 18 19 l
55. zeros s o abandonados e ajustados no expoente da nota o cient fica As duas primeiras sa das sair o na p gina corrente com espa amento duplo entre linhas Na terceira sa da o caracter de controle instrui que o resultado seja escrito numa p gina nova Os demais ser o escritos nesta mesma p gina com espa amento simples entre as linhas A ltima sa da sobrescrever a anterior Mais informa es a respeito de formata o de sa da entrada de dados s o obtidas nos livros sobre Fortran citados nas refer ncias bibliogr ficas na p g 135 Quando o n mero n o se ajusta na formata o determinada um conjunto de asteriscos impresso no lugar do n mero ou da express o Veja o exemplo abaixo IN4lLembrete um coment rio em Fortran inserido pela instru o sinal de exclama o antes da senten a que desejamos comentar Pode aparecer em qualquer parte do programa livrof90 v8 preliminarl 2014 5 5 1 07 page 60 71 CAP TULO 2 TRABALHANDO COM ARQUIVOS ENTRADAS SAIDAS I O DE DADOS Programa 2 5 Exemplo de formata o inadequada PROGRAM format IMPLICIT NONE INTEGER al 12345 a2 678 WRITE 100 al l a sardeg oras WRITE x 100 a2 la emas 67S 100 FORMAT 14 END PROGRAM format2 Na primeira sa da os asteriscos substituiram o n mero 12345 porque o espa o reser vado para sua impress o menor que o tamanho em espa os do n mero Na segu
56. 010 0011 35 0101 1000 88 X 0010 0100 36 0101 1001 89 Y 0010 0101 37 Yo 0101 1010 90 Z 0011 0000 48 0 0110 0001 97 a 0011 0001 49 1 0110 0010 98 b 0011 0010 50 2 0110 0011 99 c 0011 0011 51 3 0110 0100 100 d 0011 0100 52 4 tee ne 0011 0101 53 5 0111 1000 120 x 0011 0110 54 6 0111 1001 121 y 0011 0111 55 7 0111 1010 122 Z 0011 1000 56 8 e e e 9 0111 1101 125 0011 1001 57 vee ee 0111 1110 126 Fonte http en wikipedia org wiki ASCII ou em http www lookuptables com livrof90_v8 preliminarl 2014 5 5 1 07 page 120 131 APENDICE A A TABELA ASCII DE CARACTERES livrof90 v8 preliminarl 2014 5 5 1 07 page 121 132 Os tipos de Dados do Fortran 95 Tabela B 1 Os tipos de Dados intr nsecos suportados pelo Fortran 95 ba seado no compilador G95 Tipo de vari vel Par metro de Observa es dado Representa o em Bytes KIND INTEGER 1 Intervalo 127 at 127 INTEGER 2 Intervalo 32 767 at 32 767 INTEGER 4 Intervalo 2 147 483 647 at 2 147 483 647 INTEGER 8 Intervalo 9 223 372 036 854 775 808 at 9 223 372 036 854 775 807 REAL 4 Intervalo 1 18 x 10 38 at 3 40 x 1038 Precis o 7 8 d gitos decimais REAL 8 Intervalo 2 23 x 107308 at 1 79 x 10308 Precis o 15 16 d gitos decimais REAL 10 Intervalo 1074931 at 104932 Precis o aproximadamente 19 d gitos deci
57. 1 ee eee eee 99 6 3 AsFun es FUNCTION oc 2 a s a sts skua s ss 000 eee ee eee 101 6 4 As Bibliotecas de Sub rotinas e Fun es a 103 6 4 1 AbibliotecaLAPACK e 103 7 AS FUN ES INTR NSECAS SELECTED REAL KIND E SELECTED INT KIND 107 7 1 Selecionando Precis o de Maneira Independente do Processador 109 8 OS PROCEDIMENTOS MODULE 111 8 1 A Declara o COMMON soco soe aa wu sis eee Uw ee See EE UA 111 8 2 A Declara o MODULE jus E eo porn du o ae eS eS UY Ja Eee be Sw 3 113 8 2 1 Compartilhando Dados usando o MODULE a 113 8 3 Os Procedimentos MODULE e t x 2 k u kos W Q Oh e h Ru k ee 114 8 3 1 Usando M dulos para Criar Interfaces Expl citas 115 8 3 2 A Acessibilidade PUBLIC e PRIVATE sacca a uree 116 Ap ndices 118 A A Tabela ASCII de Caracteres 119 B Ostipos de Dados Intr nsecos suportados pelo Fortran 95 121 C Gloss rio 123 D Como Abordar um Problema de Programa o 125 D 1 Analise o problema e projete seu programa antes de program lo 125 D 2 Escreva um c digo leg vel s s soieugug s wow s sO kok cera 125 D 2 1 Comente seu c digo enquanto escreve n o depois 126 D 2 2 Utilize margens e indenta o apropriadamente 126 D 2 3 Use nomes sugestivos para vari veis fun es e procedimentos 126 D 2 4 Utilize fun es e procedimentos curtos e objetivos 126 D 3 Se est
58. 1 PROGRAM uso do kind 2 3 Proposito usar o KIND como parametro 4 5 IMPLICIT NONE 6 INTEGER PARAMETER single 4 INTEGER PARAMETER double 8 8 REAL KIND single valor 1 9 REAL KIND double DIMENSION 20 matriz 1 10 REAL single temp di eee anh 12 executaveis 14 END PROGRAM uso do kind Se trocarmos de m quina e ou compilador basta trocarmos os valores do single e double para os correspondentes tipos para simples e dupla precis o respectivamente Mas o melhor vem agora livrof90 v8 preliminarl 2014 5 5 1 07 page 109 120 Fortran 95 curso basico Gilberto Orengo SELECIONANDO PRECISAO DE MANEIRA INDEPENDENTE DO PROCESSADOR Como j sabemos o maior problema encontrado quando portamos um programa For tran de um computador para outro o fato que os termos precis o simples e precis o dupla n o s o precisamente definidos Os valores com precis o dupla tem aproximadamente duas ve zes o valor dos valores com precis o simples mas o n mero de bits associado com cada tipo de n mero real depender de cada compilador Tamb m j sabemos que em muitos compu tadores 32 bits est associado com a precis o simples e 64 bits com a dupla precis o Num computador Cray diferente conforme tabela anterior Ent o como podemos escrever programas que possam ser facilmente port veis en tre processadores diferentes com defini es de precis o simple
59. 12 10412 10 12 10412 22 22 22 5x3 5x3 5x3 5x3 livrof90 v8 preliminarl 2014 5 5 1 07 page 87 98 Fortran 95 curso b sico Gilberto Orengo Este procedimento pode ser usado para multiplicarmos ou dividirmos elemento a ele mento de matrizes conformes A multiplica o de matrizes A multiplica o de matrizes poss vel desde que os matrizes sejam conformes isto que o n mero de colunas da primeira matriz seja igual ao n mero de linhas da segunda matriz Suponha duas matrizes A x y eB m n Assim A x y x B m n s poss vel se e somente se y m A matriz resultante ser do tipo x n B m n x A x y s poss vel see somente sen x A matriz resultante ser do tipo m y Isto com as matrizes A4x3 e B3x5 a matriz resultante ser C4x5 Por exemplo 1 INTEGER DIMENSION 4 3 A 10 2 INTEGER DIMENSION 3 5 B 2 3 INTEGER DIMENSION 4 5 C Matematicamente produzira 10 10 10 60 60 60 60 60 222 2 2 10 10 10 299909 60 60 60 60 60 10 10 10 gt 9 9 9 60 60 60 60 60 10 10 10 3x5 60 60 60 60 60 4x3 4x5 A multiplica o em Fortran pode ser realizada por pelo menos maneiras Especialmente em Fortran 90 95 podemos utilizar a instru o MATMUL mat rizl matriz2 como segue C MATMUL A B que equivalente a C 1 1 A 1 1 B 1 1 A 1 2 B 2 1 A 1 3 B 3 1 c 4 5 A 4 1 B 1 5 A 4 2 B 2 5 A 4 3 B 3 5 ou a
60. 42 Lembre se Se escolher o mundo ficar sem o amor mas 2 2 A instru o WRITE 42 se escolher o amor com ele conquistar o mundo 2 3 A instru o READ 43 2 4 A instru o OPEN 45 Albert Einstein 2 5 Ainstru o CLOSE 46 1879 1955 2 6 Formatando as sa das e ou entradas FORMAT 48 ExercicioS s papas spas aa Q a a RS E 52 2 1 INTRODU O As entradas e sa das de dados em Fortran s o realizadas pelas unidades l gicas Uma unidade l gica um n mero inteiro n o negativo associado a um dispositivo f sico tal como uma uni dade de disco HD disquete CD teclado monitor ou uma impressora A unidade l gica conectada a um arquivo ou dispositivo pela instru o OPEN ver Se o 2 4 na p g 53 exceto nos casos dos arquivos pr conectados URI um asterisco indica o arquivo ou dispositivo padr o default pr conectado de entrada e de sa da usualmente o teclado e a tela do monitor respectivamente Leia a nota da p gina 54 uma vari vel tipo CHARACTER corresponde ao nome de um arquivo interno livrof90 v8 preliminarl 2014 5 5 1 07 page 50 61 CAP TULO 2 TRABALHANDO COM ARQUIVOS ENTRADAS SAIDAS I O DE DADOS ARQUIVO O Fortran trata todos os dispositivos f sicos tais como unidades de discos teclado impres sora monitor ou arquivos internos como arquivo file ou arqui
61. 5 curso b sico Gilberto Orengo 2 Gere o programa execut vel usando o comando g95 do compilador G95 Importante Antes de seguirmos uma advert ncia ser dado prefer ncia por instru es utilizadas no GNU Linux 13 Para usu rios do Windows a transfer ncia de instru es quase autom tica para uso no terminal DOS Por exemplo para acionar o compilador G95 j instalado utilizado o comando g95 tanto para o sistema operacional GNU LinuxIN101 como para o Windows isto no terminal do DOS ou do GNU LinuxIN111 digitamos esta palavra chave seguida do nome do programa em Fortran 95 Assim para gerar um execut vel digite no terminal DOS ou num terminal Linux g95 nome programa f90 Este comando 1 verifica no programa c digo fonte as sintaxes das instru es Fortran 2 na sequ ncia gera um c digo objeto com nome nome programa o 3 e repassa o c digo objeto para o linkador IN2I que anexa bibliotecas sistema E S Entrada Sa da de dados etc e gera um execut vel com um nome default chamado a out no Linux e a exe no Windows Para alterar o nome do arquivo execut vel poss vel utilizar uma op o do compilador a o seguida do nome que se deseja para o execut vel Assim temos para o exemplo acima 995 o nome de saida nome programa f90 IN10 para exemplificar o uso de outro compilador por exemplo o da Lahey Fujitsu for GNU Linux compila se com o comando 1 95 INHI
62. 7 e 69 _ IF l gico na p gina 71 SELECT CASE na p gina 71 PROCESSOS DE REPETI O loops instruem que uma parte do c digo seja execu tada repetidamente sob uma determinada condi o Veremos as seguintes instru es de repeti o DO END DO na p gina 73 DO IF END DO loop infinito na p gina 74 Para usarmos estas estruturas necess rio vermos inicialmente as express es aritm ticas e l gicas nas quais s o utilizados os operadores aritm ticos relacionais e l gicos que servir o de base para os testes de l gica no controle do fluxo de execu o do programa 3 1 1 Express es Aritm ticas Embora tenhamos visto as express es aritm ticas no Cap tulo 1 repetiremos aqui As expres s es aritm ticas s o aquelas que apresentam como resultado um valor num rico que pode ser um n mero inteiro ou real dependendo dos operandos e operadores Os operadores aritm ticos est o descritos na Tabela 3 1 Tabela 3 1 Os operadores aritm ticos dispon veis no Fortran 95 Operadores Aritm ticos Operador Fun o Exemplos ii multiplica o 5 2 A C divis o 2 7 8 5 3 1 H B soma ou adi o 3 5 A subtra o 5 1 Al B potencia o 3 5 35 livrof90 v8 preliminarl 2014 5 5 1 07 page 65 76 Fortran 95 curso b sico Gilberto Orengo 3 1 2 Express es L gicas Uma express o l gica aquela que possui operador
63. 90 v8 preliminarl 2014 5 5 1 07 page 74 85 74 CAP TULO 3 AS ESTRUTURAS DE CONTROLE lt incremento gt um n mero que determina o salto na repeti o Por padr o igual a um isto se for omitido o valor da vari vel lt contador gt ser acrescida de 1 a cada loop Poder assumir valores negativos para por exemplo fazer regedir o lt contador gt desde que o lt valor i gt seja maior que o lt valor f gt Importante estes tr s valores podem ser substitu dos por vari vel do tipo inteiro desde que incializadas antes do DO Por exemplo INTEGER i x 1 y 200 z 2 DO i x y 2Z END DO especifica o final do loop lt r tulo gt Como o r tulo opcional n o comum utiliz lo para um nico bloco O FUNCIONAMENTO DO CONTROLE DAS REPETI ES ao iniciar um DO a vari vel lt contador gt recebe o lt valor i gt executa os procedimentos in ternos e ao encontrar o END DO retorna a linha inicial do bloco Adiciona o lt incremento gt vari vel lt contador gt e testa se lt valor i gt gt lt valor f gt Se verdadeiro executa nova mente os procedimentos Este processo se repete at que lt valor i gt gt lt valor f gt seja falso condi o que desviar a execu o para a primeira linha ap s o END DO ATEN O COM OS CONTADORES Se precisar utilizar o valor do lt contador gt depois do bloco DO tenha cuidado porque o lt contador gt sair com o ltimo valor qu
64. 95 curso basico Gilberto Orengo Como exemplo de compiladores comerciais que habilitam a vetoriza o temos entre outros o Lahey Fujitsu Fortran 95 for GNU Linux da Lahey Computer Systems Inc 7 e o PGHPF da Portland Group 8 este por sinal um excelente compilador O compilador G95 tamb m permite o processamento paralelo COMO TRABALHA A MEM RIA DO COMPUTADOR Para entendermos como funciona a mem ria do computador usaremos um exemplo hipot tico cujo tamanho de palavra de 8 bits 3F29 1 O a sQ p MO 31 0 3F2A 3F2B 3F2C A mem ria dos computadores endere vel i e para cada aloca o de mem ria dado um n mero espec fico o qual frequentemente representado em hexadecimal base 16 por exemplo 3F2C Mas porque usar base 16 Vejamos sucintamente o motivo no quadro abaixo A CPU est habilitada a ler e escrever numa espec fica localiza o rea de mem ria Grupos de reas de mem ria s o tratados como informa es inteiras n o n meros intei ros possibilitando assim armazenar mais informa es Usar a identifica o criptogr fica he xadecimal para localiza o de mem ria incomum porque mais complicado assim o Fortran 95 possibilita substitu las por nomes em ingl s livrof90 v8 preliminarl 2014 5 5 1 07 page 10 21 CAP TULO 1 CONSIDERA ES INICIAIS
65. AIS Apresentando o Fortran te do seja ignorado ou seja a linha apenas um coment rio no programa uma boa pr tica de programa o escrever coment rios a respeito de certas atitudes e linhas do programa Assim comente o m ximo poss vel o seu programa Neste caso foi utilizado simplesmente para deixar uma linha em branco embora no Fortran poss vel deixar em branco quantas linhas desejar sem a necessidade do sinal de exclama o Nesta linha o coment rio para descrever a utiliza o do programa O uso de coment rios evita o esquecimento por exemplo do significado de cada vari vel ou do que trata o programa fato que comum com o passar do tempo Ou ainda possibilita que outros programadores entendam melhor o que foi programado Escreva o objetivo do programa e das sub rotinas Insira tamb m formas de contato com o programador como por exemplo o e mail N o esque a ap s o sinal o conte do ser ignorado Mais uma linha em branco comentada Aparece a primeira declara o global de vari vel que do tipo real Observe atentamente a sintaxe Primeiro se escreve o tipo de dado vari vel seguido de dois dois pontos e na sequ ncia separados por v rgulas as vari veis Os nomes da vari veis seguem os mesmos crit rios que vimos para o nome do programa aconselh vel no mear as vari veis com nomes mais pr ximo poss vel da sua fun o no programa Por exemplo theta no jarg o matem tico est
66. AM nome_do_programa em que os colchetes indicam que o elemento Fortran opcional e a ordem obrigat ria est indicada na seq encia exposta uma boa pr tica de programa o iniciar o c digo com a instru o PROGRAM seguida do referido nome tornando claro o in cio do programa principal Cada um dos itens da estrutura ser o tratados no decorrer do livro Um c digo computacional tem um e somente um programa principal a estrutura de refer ncia isto o compilador reconhece somente um END que obrigat rio ou quando existir inicialmente somente um PROGRAM que opcional Para as demais unidades de programa n o h n mero m nimo ou m ximo de apari es Antes de criarmos os dois primeiros programas importante e necess rio vermos al guns elementos do Fortran 95 O FORMATO LIVRE No Fortran 95 podemos escrever em qualquer coluna posi o na linha e temos 132 posi es para ocupar Este chamado de formato livre No FORTRAN 77 vers o anterior ao Fortran 90 95 se inicia o c digo a partir da coluna 7 at 72 As colunas 1 at 6 s o utilizadas para instru es de controle de fluxo do c digo e para localiza o de r tulos como os utilizados na instru o FORMAT A coluna 6 especificamemte indica pela escrita de um caracter qualquer a continua o da linha anterior Da coluna 73 at 80 o campo de identifica o do cart o Esta estrutura chamada de formato fixo era devido ao cart o
67. Apresentando o Fortran Quando os computadores s o ligados cada localiza o de mem ria conter algum tipo de valor e neste caso os valores ser o aleat rios rand micos Em geral os valores ser o os que permanecem na mem ria do uso anterior Por esta raz o muito importante inicia lizar as localiza es de mem ria antes de come ar qualquer manipula o da mesma como c lculos declara o de vari veis etc Todas as CPU tem um conjunto de instru es ou linguagem pr pria da m quina para sua manipula o De maneira geral todos os programas Fortran 95 s o convertidos ou com pilados para o conjunto de instru es ou linguagem de m quina Grosseiramente falando todos os processadores t m o mesmos tipos de instru es Assim a CPU pode dizer coisas como busque o conte do da rea de mem ria 3F2C ou escreva este valor na localiza o rea de mem ria 3F 2A Esta basicamente a maneira de como os programas trabalham Considere a seguinte sequencia de instru es em c digo assembler LDA 3F2C carregue ou busque os conte dos de 3F2C ADD 3F29 adicione estes conte dos em 3F29 STO 3F2A gt armazene o valor resultante na localiza o 3F2A Esta seqiiencia de instru es que tem significado somente ilustrativo para os nossos prop sitos efetivamente adiciona dois n meros e armazena o resultado numa rea de mem ria diferente At 1954 quando o primeiro dialeto da lin
68. Conselho se voc n o trabalha com o sistema operacional GNU Linux experimente gratuito e n o por isso ineficiente pelo contr rio altamente est vel e confi vel IN2I felizmente na falta de uma palavra apropriada em Portugu s para a a o de quem faz um link liga o v nculo elo que reforce a id ia em computa o estou usando linkador livrof90 v8 preliminarl 2014 5 5 1 07 page 18 29 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran O nome de sa da no caso do Linux pode ser acrescido de uma extens o ou n o Para o Windows interessante acrescentar a extens o EXE mas n o necess rio para evitar algum problema referente a estrutura de arquivo Para outras op es do compilador consulte o manual do Usu rio Somente para o Linux digite man 995 para ler o manual No 3 item acima o compilador anexa ao c digo entre outras coisas c lculos mate m ticos entrada de dados e sa da de resultados Por exemplo as entradas podem ser via teclado arquivo p g 50 ou outro dispositivo As sa das podem ser via mo nitor impressora arquivo ou por outro dispositivo importante relembrar que os arquivos execut veis s o espec ficos para cada processador e ou sistema operacional Ou seja um c digo compilado num computador com G95 por exemplo num proces sador Intel Pentium n o ser executado numa Esta o Sun SPARC e vice versa Da mes
69. DO i 1 4 DO k 1 5 C i k 0 DO j 1 3 C i k C i k A i 5 B 5 k END DO END DO END DO em que neste ltimo foi utilizado uma estrutura de repeti o DO END DO para mul tiplicar duas matrizes O ltimo procedimento necess rio nos programas escritos em no FORTRAN 77 No Fortran 90 95 este procedimento foi incorporado de forma intr nsica Isto quando a instru o MATMUL utilizada a sequ ncia de loops anteriores executada Ob serve atentamente que os ndices da matriz resultante do produto s o para linhas e colunas respectivamente iguais a i ek e o ndice j igual ao n mero de colunas da primeira matriz ou igual ao n mero de linhas da segunda matriz livrof90 v8 preliminarl 2014 5 5 1 07 page 88 99 CAPITULO 4 AS VARIAVEIS COMPOSTAS ARRANJOS Em resumo A multiplica o de matrizes definida somente para duas matrizes que o n mero de colunas da primeira matriz igual ao n mero de linhas da segunda matriz Assim se uma matriz uma matriz M x N e uma matriz B uma matriz N x L ent o o produto C A x B uma matriz M x L cujos elementos s o dados pela equa o N C i k 5 A i j BG k A i 1 B 1 k A i N B N k j l comi 1 M k 1 Lej 1 N IMPORTANTE Digite o c digo abaixo e execute o PROGRAM testabug IMPLICIT NONE REAL DIMENSION 2 2 a RESHAPE 2 3 4 5 2 2 INTEGER i j
70. END SUBROUTINE bad_argumento 8 END MODULE erro_interf que ser utilizado pelo programa a seguir 1 PROGRAM bad call USE erro interf 3 IMPLICIT NONE 4 REAL x 1 5 CALL bad argumento x 6 END PROGRAM bad call N Quando este programa compilado o compilador Fortran verificar e capturar o erro de declara o entre as duas unidades de programa e nos avisar atrav s de uma mensagem Neste exemplo que tem uma interface expl cita entre o programa bad call e a sub rotina bad argumento um valor real linha 4 do programa principal foi passado para a sub rotina quando um argumento inteiro linha 5 do m dulo era esperado e o n mero foi mal interpretado pela sub rotina Como foi dito se este problema n o estive numa interface ex pl cita o compilador Fortran n o teria como verificar o erro na chamada do argumento Exerc cio no exemplo acima transforme a interface expl cita em impl cita isto simples mente elimine o m dulo Compile e execute O que ocorrer Dica elimine o m dulo o CONTAINS e coloque a sub rotina ap s o END PROGRAM e s a compile Existem outras maneiras de instruir o compilador Fortran para explicitar a verifica o nos procedimentos por interface o bloco INTERFACE 6 10 que n o ser visto aqui 8 3 2 A Acessibilidade PUBLIC e PRIVATE Se n o for especificado todas as vari veis dos m dulos estar o dispon veis para todas as unidades de pro
71. EX 1 5 4 Os outros dados LOGICAL e CHARACTER A Declara o das Vari veis ee A Atribui o de valor vari vel 2 2 a va v ws saa ta w p wq wn w w A inicializa o de vari veis X aaa e Vari veis globais e locais s alris sgat e s NO W ouine K Os S SOS ua kR s Os Procedimentos Intr nsecos _ ee 1 7 1 As Fun es Matem ticas Intr nsecas vii livrof90 v8 preliminarl 2014 5 5 1 07 page iv 4 SUM RIO 1 7 2 A Aritm tica com inteiros e reais 002 eee eee 32 As Express es Aritm ticas su ms ee 32 A Aritm tica dos inteiros 1 a 33 A Aritm tica dos reais a fm Cuan e h i wa A OE W W sr aS 34 A Aritm tica mista entre inteiros e reais 1 l 0000048 34 1 3 A Manipula o de Caracteres u od esa ss s ee 35 1 8 Corrigindo Erros DEBUGGING asi be E s Bu a dg a 38 EXETC CIOS e gt e s Sat poa wo e Ha ew ER EES Ree eG RYO 45 TRABALHANDO COM ARQUIVOS ENTRADAS SAIDAS I O DE DADOS 49 2 1 Introdu o cu gamas a C nee ee ee eR Oa ee Rede eae eG ew 49 ATU Oe at re E Be He RD Be OE Ree ee OY DA ae oa BA 50 22 instru o WRITE sas cite para 2 Baie kupus E een Sok Ea SOS Boe e So 3 QB a 50 2 3 AdnstrugaO READ sa ass sis be w 0 QUA Ee wR Ce ee A 51 24 Amstru o OPEN sc als sos sus S 2 w Q gps Ee WU e W Ee ee Q 53 2 5 A am
72. Fortran 90 95 ficou estabelecido um padr o qualquer processador deve suportar pelo menos dois par metros de representa o o KIND para os tipos de dados REAL e COMPLEX e pelo menos um par metro para os tipos de dados INTEGER CHARACTER e LOGICAL A tabela B 1 no Ap ndice B cont m todos os tipos de dados seus par metros de repre senta o e intervalos de armazenamento baseado no compilador G95 DIMENSION lt forma gt indica a forma de uma array em que lt forma gt unidimensi onal ou seja com um nico valor indica que um vetor cujo valor informa o n mero de elementos do vetor lt atrib gt s o informa es adicionais a respeito do tipo de dado e podem ser entre ou tros PARAMETER indica que o dado ser constante ao longo de todo o programa sem possi bilidades de alter lo ALLOCATABLE usado juntamente com o DIMENSION e indica que o tamanho da array ser informado ao longo do programa e n o no momento da declara o da vari vel a chamada aloca o din mica de mem ria e ser estudada no Cap tulo 5 Obs Podem ser declarados mais de um atributo para a mesma vari vel os quais ser o se parados por v rgula os uso dos dois dois pontos opcional mas ser obrigat rio caso deseja se inicializar a vari vel no momento da sua declara o lt var gt s o os nomes das vari veis que armazenar o os dados separados por v rgulas O nome de uma vari vel poder ter
73. HEN INFO 4 ELSE IF LDB LT MAX 1 N THEN INFO 7 END IF IF INFO NE 0 THEN CALL XERBLA DGESV INFO RETURN END IF Compute the LU factorization of A CALL DGETRF N N A LDA IPIV INFO IF INFO EQ 0 THEN Solve the system AxX B overwriting B with X CALL DGETRS No transpose N NRHS A LDA IPIV B LDB INFO END IF RETURN End of DGESV livrof90 v8 preliminarl 2014 5 5 1 07 page 105 116 Fortran 95 curso b sico Gilberto Orengo 106 107 END Programa 6 1 A sub rotina DGESV da LAPACK vo lt q GV Q Fen j 11 12 13 14 15 16 17 18 19 20 21 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 od x S SP N DR FF F HF HF FH ee ee dA dd dA OR ee Oe cd So S sa sb GO OR OR OO OO SUBROUTINE DGESV N NRHS A LDA IPIV B LDB INFO LAPACK driver routine version 3 1 Univ of Tennessee Univ of California Berkeley and NAG Ltd November 2006 Scalar Arguments INTEGER INFO LDA LDB N NRHS Array Arguments INTEGER IPIV DOUBLE PRECISION A LDA B LDB Purpose DGESV computes the solution to a real system of linear equations A X B where A is an N by N matrix and X and B are N by NRHS matrices The LU decomposition with partial pivoting and row interchanges is used to factor
74. INZ pela comunidade de Software Livre e pode ser obtido gratuitamente no site http www g95 org para diferentes plataformas e sistemas operacionais No Ap ndice apresentado detalhamente como obter instalar e utilizar o compilador Fortran G95 tanto para o sistema operacional Windows como para o Linux e uma lista de compiladores Fortran descrita no Ap ndice As aplica es da linguagem ficar o restridas as reas da F sica da Matem tica e das En genharias embora o Fortran possa ser aplicado a outras reas como por exemplo Economia Administra o Inform tica e Biologia Este livro poder ser usado por estudantes que n o conhecem a linguagem Fortran bem como por aqueles que j dominam a linguagem especialmente se forem oriundos do antigo e bom FORTRAN 77 Para os iniciantes aconselh vel que leiam estudem os cap tulos na sequ ncia em que se encontram Os conhecedores da linguagem podem saltear entre os cap tulos conforme a necessidade mas interessante que leiam este cap tulo para entenderem algumas peculiaridades da escrita do livro Um gloss rio dispon vel no Ap ndice C p g 123 conter explica es e defini es r pidas sobre conceitos ou elementos do Fortran 95 Assim contribuir para uma vis o mais global a respeito da linguagem No Ap ndice na p gina traz um resumo dos cap tulos cujo objetivo o de um Guia de Refer ncia de r pido e f cil acesso A disposi o d
75. Joao Maria Figura 4 1 Representa o na mem ria das vari veis R e nome Na representa o acima foi acrescentado um exemplo de um vetor que armazena carac teres O vetor nome armazena os caracteres ou string Jo o e Maria J a vari vel R armazena valores inteiros Um vetor s armazenar valores de um mesmo tipo isto nunca podere mos armazenar num vetor por exemplo valores reais e inteiros ao mesmo tempo Teremos que criar uma vari vel que armazene os valores reais e outra para os inteiros 4 2 1 A declara o de um vetor A declara o de um vetor ou de uma vari vel composta unidimensional segue a seguinte estrutura conhecida como arrays de forma expl cita ou em que lt tipo gt um dos tipos de dados estudados anteriormente e podem ser INTEGER REAL COMPLEX LOGICAL e CHARACTER respectivamente representando inteiros reais com plexos l gicos e caracteres livrof90 v8 preliminarl 2014 5 5 1 07 page 81 92 Fortran 95 curso b sico Gilberto Orengo KIND lt par_rep gt em Fortran 95 cada um dos cinco tipos intr nsecos anteriores possui um valor inteiro n o negativo denominado par metro de representa o do tipo de dado Este par metro o valor correspondente em bytes disponibilizados para sua re presenta o como vimos em detalhes para os inteiros e reais a partir da p gina 23 Na normatiza o da linguagem
76. N e o seu compartilhamento torna poss vel a transfer ncia de infor ma es entre subprogramas sem ou de forma complementar a utiliza o da passagem por par metros A rea de mem ria compartilhada pode ser dividida em blocos onde cada um recebe um nome ou r tulo A forma geral de se declarar vari veis com rea compartilhada conhecida como COMMON COMMON r1 lista de identificadores rN lista de identificadores onde r s o nomes dos r tulos comuns de vari veis lista de identificadores s o nomes de vari veis simples ou compostas que n o podem ser diferentes Um exemplo parcialmente livrof90 v8 preliminarl 2014 5 5 1 07 page 112 123 CAP TULO 8 OS PROCEDIMENTOS MODULE reproduzido de um programa 1 PROGRAM uso common IMPLICIT NONE 3 INTEGER i m nl n2 ue us 4 COMMON areal nl n2 m N 8 END PROGRAM uso_common 9 10 Aqui comecam as sub rotinas u 12 SUBROUTINE mdc 13 INTEGER a auxl b m 14 COMMON areal a b m 15 m b 16 auxl MOD a b Neste exemplo os par metros da sub rotina foram substitu dos pelas vari veis da rea areal da declara o COMMON A utiliza o de vari veis em COMMON n o constitui no entanto uma boa norma de programa o A transfer ncia de valores entre os subprogramas deve ser feita de prefer ncia atrav s de par metros com isto os subprogramas se tornar o mais independentes mais f ceis de serem entendidos e
77. ND PROGRAM uso_len A sa da na tela do monitor ser Tamanho da palavra 6 LEN TRIM x retorna o n mero inteiro de caracteres sem os espa os em branco que comp em um conjunto de caracteres palavra ou string em que x uma palavra escrita entre aspas simples ou dupla Exemplo LEN TRIM mae e pai resultado 7 Se fosse usada a fun o LEN mae e pai o resultado seria igual a 9 ACHAR i retorna o caracter da tabela ASCII correspondente ao inteiro i Exemplo ACHAR 65 resulta na letra A e ACHAR 97 resulta na letra a Exemplo do uso em um programa Programa 1 7 O uso da fun o ACHAR PROGRAM uso achar CHARACTER letras INTEGER posicao WRITE Digite um inteiro para obter o amp sara er pno pi WRITE Nao esqueca qu h entre 0 e 256 READ x posicao letras ACHAR posicao WRITE x x O caracter eh letras END PROGRAM uso achar Se for digitado 110 a sa da na tela do monitor ser O caracter eh n ou se for digitado 56 a sa da na tela do monitor ser O caracter eh 8 Observe que neste ltimo retornado pela fun o ACHAR 56 o caracter 8 e n o o algarismo 8 Desta forma n o podemos oper lo aritmeticamente livrof90 v8 preliminarl 2014 5 5 1 07 page 37 48 Fortran 95 curso basico Gilberto Orengo IACHAR x gt retorna um n mero inteiro que indica a posi o do caracter x na tabela
78. NTAINS importante ressaltar que a instru o CONTAINS permite que subprogramas perten am ao programa principal e a sua localiza o tal que os procedimentos abaixo sejam somente SUBROUTINEs e FUNCTIONS na linha 24 outro subprograma neste caso a SUBROUTINE mult utilizado para re alizar uma multiplica o de vari veis Observe que pelo fato de estar localizado exter namente necess ria a instru o USE var para tornar as vari veis a be c globais para encerrar atente para a vari vel c Ela foi preenchida por uma entrada de dados por meio de um READ na linha 20 e automaticamente o valor atribu do disponibili zado globalmente como pode ser verificado pela opera o matem tica na linha 28 Para melhor entendimento dos subprogramas recorra ao Cap tulo 6 na p gina 97 mas abordaremos rapidamente os que utilizamos neste exemplo Os subprogramas s o unidades de programas e s o os menores elementos de um programa Fortran que podem ser compila dos separadamente Os do tipo SUBROUTINE s o ativados pelas instru es CALL que trocam par metros entre o programa principal e os subprogramas Os par metros s o dados troca dos entre o programa principal e a SUBROUTINE e est o localizados entre os par nteses logo ap s as instru es CALL e SUBROUTINE A ordem dos par metros definida pelo usu rio e deve ser mantida rigorosamente nas chamadas As vari veis n o necessariamente tem o mesmo nome no
79. O COM ARQUIVOS ENTRADAS SAIDAS I O DE DADOS pletar o espa o reservado Quando a sa da sem formata o o que determinar o espa o reservado ser a defini o de precis o adotada Por exemplo um n mero inteiro de precis o simples ter 11 espa os reservados para a sa da ou leitura j inclu do o sinal O sinal positivo omitido O TAMANHO DO PAPEL DE IMPRESS O Antes do computador enviar a informa o para o dispositivo de sa da constru do uma imagem de cada linha A mem ria do computador que cont m esta imagem chamada de rea de armazenamento de dados tempor rio output buffer A largura de cada linha igual a 133 caracteres sendo o primeiro espa o destinado ao caracter de controle que veremos a seguir Os demais 132 espa os s o para armazenar a sa da de dados Assim cada impress o ou sa da de informa es dividida em p ginas de tamanho aproximadamente igual a 37 8 cm para a largura e 27 9 cm para a altura Estas dimens es est o relacionadas com os for mul rios cont nuos muito utilizados at o final do s culo passado Cada p gina dividida em linhas e cada linha em 132 colunas com um caracter por coluna Para estas medidas e dependendo do n mero de linhas por polegada que a impressora imprime correspondem entre 60 e 72 linhas As margens superior e inferior equivalem aproxidamente a 1 27 cm O CARACTER DE CONTROLE Este item muito importante na sa da de dados pelo WRITE
80. O DOS TONS DE CINZA Com o pacote color sty foi poss vel definir os seguintes tons de cinza definecolor cinza1 cmyk 0 0 0 0 1 fraco definecolor cinza15 cmyk 0 0 0 0 15 definecolor cinza2 cmyk 0 0 0 0 2 livrof90 v8 preliminarl 2014 5 5 1 07 page 131 142 Fortran 95 curso b sico Gilberto Orengo definecolor cinza3 cmyk 0 0 0 0 3 definecolor cinza4 cmyk 0 0 0 0 4 definecolor cinza5 cmyk 0 0 0 0 5 medio definecolor cinza6 cmyk 0 0 0 0 6 definecolor cinza7 cmyk 0 0 0 0 7 definecolor cinza8 cmyk 0 0 0 0 8 definecolor cinza9 cmyk 0 0 0 0 9 forte definecolor preto cmyk 0 0 0 1 definecolor branco cmyk 0 0 0 0 Tamb m foram definidos o branco e o preto na base CMYK no lugar da base RGB Isto importante no momento da impress o do livro na gr fica Se definirmos tons de cinza com RGB estaremos adotando pigmentos coloridos e a impress o sair mais cara O uso das defini es de tons de cinza no texto pelo comando N color cinza4 ou N textcolor cinza4 como aparecer o nas outras defini es de comandos a seguir Um exemplo do uso O texto ficar color cinza4 cinza assim gt O texto ficar assim A NOTA DE MARGEM A nota de margem para chamar aten o aos elementos novos do foi gerada com o seguinte comando newcommand FORTRANN 1 textcolor cinza4 bfseries 1 marginpar sffamily te
81. PROCEDIMENTOS MoDULE Al m de dados os m dulos tamb m podem conter sub rotinas e fun es que s o os Procedimentos MODULE ou M dulos Estes procedimentos s o compilados como uma parte do m dulo e estar o dispon veis para as unidades de programa atrav s da declara o USE Os procedimentos que s o inclu dos dentro dos m dulos devem vir ap s a declara o dos dados do m dulo e precedidos por uma declara o CONTAINS Esta declara o tem a fun o de instruir o compilador que as declara es que a seguem s o procedimentos inclu dos no programa e portanto devem ser agregados na compila o No exemplo abaixo a sub rotina sub1 est contida no interior do m dulo mod procl MODULE mod procl IMPLICIT NONE 1 Aqui sao declarados os dados livrof90 v8 preliminarl 2014 5 5 1 07 page 115 126 Fortran 95 curso b sico Gilberto Orengo 1 CONTAINS SUBROUTINE subl a b c x error IMPLICIT NONE REAL DIMENSION 3 INTENT IN a REAL INTENT IN b c REAL INTENT OUT x LOGICAL INTENT OUT error END SUBROUTINE subl END MODULE mod procl A sub rotina sub1 estar dispon vel para uso numa unidade de programa atrav s do USE mod procl posicionado como vimos anteriormente A sub rotina ativada com a declara o padr o CALL por exemplo PROGRAM testa mod procl USE mod procl IMPLICIT NONE CALL subl a D c x error END PROGRAM testa mod p
82. RITE A segunda concatenacao eh total2 2 END PROGRAM ex conc Os resultados ser o respectivamente Gilberto Orengo e GOrengo Desta forma encerramos a apresenta o dos elementos essenciais do Fortran 95 A partir deste ponto poss vel criar programas simples sem que necessitem de tomadas de decis o ou de processos de repeti o que veremos no Cap tulo 3 na p gina 63 Encerrando este cap tulo veremos como encontrar e depurar erros de programa o CORRIGINDO ERROS DEBUGGING Ao criarmos um c digo estamos sujeitos a erros os quais podem ser de tr s tipos de sintaxe de tempo de execu o e de l gica Infelizmente errar tamb m um atributo inerente a programa o O par grafo abaixo retirado do livro do Chapman 6 na p gina 70 ilustra com primazia esta situa o 1 1 livrof90 v8 preliminarl 2014 5 5 1 07 page 39 50 Fortran 95 curso b sico Gilberto Orengo existem duas coisas certas na vida a morte e os impostos Mas se trabalhamos com pro grama o acrescente mais uma certeza nesta lista se escrever um programa com n mero de linhas significativos ele apresenter erro na primeira execu o ed Historicamente os erros de programa o s o conhecidos como bugs N141 o processo de localiza o dos erros como debugging A maioria dos compiladores tem uma ferramenta anexa para depurar erros que auxilia na detec o de problema
83. S B 68 lb amp es el END SUBROUTINE mult livrof90 v8 preliminarl 2014 5 5 1 07 page 28 39 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran Ao executar o c digo informando que a vari vel c receber o valor igual a 10 teremos como sa da O resultado eh 17 O resultado eh 80 E importante compreender o que exatamente o c digo executa ent o vejamos atenta mente o que est ocorrendo a e lt O procedimento MODULE var cont m a declara o das vari veis inteiras INTEGER a be c em que as duas primeiras foram inicializadas no programa principal PROGRAM teste dec global as vari veis a be c s o ati vadas pela instru o USE var e estar o dispon veis para todos os procedimentos do programa A instru o USE sempre localizada logo abaixo o in cio do programa ou do subprograma e o objetivo instruir o compilador a carregar os procedimentos do m dulo na linha 10 o programa principal invoca chama um subprograma chamado de SUBROUTINE soma cujo nico par metro de passagem nesta conex o a vari vel res que receber o resultado de uma soma realizada no referido subprograma Note que na SUBROUTINE soma as vari veis a b e c n o foram declaradas e nem foi ne cess rio a instru o USE var A aus ncia deste ltimo porque o subprograma est contido no interior do programa principal a o possibilitada pela instru o CO
84. S x IRC x m dulo de x MOD x y IR x y resto da divis o o resultado de x INT x y y Ex MOD 3 2 1 eMOD 2 3 2 Para reais MOD 4 5 1 5 0 0 e MOD 5 0 1 5 0 5 ou seja deu exato 3 0 e para completar o 5 0 necess rio 0 5 SORT x RC Vx DIM x y IR fornece a diferen a positiva Sex gt Y ent o DIM x y X Y Se Y gt Xeo resultado negativo ent o DIM x y 0 Ex DIM 5 3 2eDIM 3 5 0 EDIM 4 5 2 5 2 0 MAX x1 x2 IR fornece o maior valor entre os argumentos Deve ter no m nimo 2 argumentos Ex MAX 2 5 0 5 MIN x1 x2 IR fornece o menor valor entre os argumentos Deve ter no m nimo 2 argumentos Ex MIN 2 5 0 0 t argumento em radianos tt argumento gt zero argumento gt 0 Conven o para o Argumento I Inteiro R Real de simples ou dupla precis o Rs Real de precis o simples Ro Real de dupla precis o C Complexo Na sequ ncia um c digo exemplifica o uso de fun es intr nsecas do Fortran Foram utilizadas duas fun es o COS que fornece o cosseno do ngulo dado em radianos e a fun o ABS que ret m o sinal de um n mero inteiro ou real isto fornece o valor num rico sem o sinal conhecido como absoluto do n mero Programa 1 5 Exemplo de uso de fun es intr nsecas do Fortran PROGRAM uso funcoes IMPLICIT NONE Exemplo do uso de funcoes intrinsecas Autor Gilberto Orengo e mail orengo oren
85. Vimos que os dispositivos padr es de entrada e sa da na maioria dos compiladores Fortran 95 s o respectivamente o teclado e a tela do monitor A instru o OPEN permite alterar o dispositivo de entrada e de sa da que realizada na seguinte sequ n cia associa se o nome de um arquivo externo a uma unidade l gica que ser usada nas instru es de entrada e sa da de dados e atribui se um estado status ao arquivo A sintaxe e deve estar localizada antes da unidade l gica ser utilizada Os argumentos da instru o s o UNIT lt n mero gt o argumento que se refere a unidade l gica e ao seu respectivo ar quivo de entrada sa da UNIT uma palavra chave e o lt n mero gt um n mero in teiro n o negativo sendo que o nico cuidado para n o coincidir com o n mero ado tado pelo compilador para os dispositivos padr es de entrada e sa da Neste sentido aconselha se adotar numera o acima de 8 A palavra chave UNIT opcional livrof90 v8 preliminarl 2014 5 5 1 07 page 54 65 CAP TULO 2 TRABALHANDO COM ARQUIVOS ENTRADAS SAIDAS I O DE DADOS FILE lt nome arqg gt fornece o nome associado com a unidade l gica E importante q 8 P que o nome contenha uma extens o por exemplo dados1 txt STATUS lt estado gt um argumento opcional e fornece o estado do arquivo e lt estado gt pode ser a OLD o arquivo j existe b NEW o a
86. WRITE x x A solucao tera 2 raizes desiguais END IF END PROGRAM raizes Neste caso se a express o l gica b 2 4 xaxc lt 0 0 for verdadeira a execu o do programa ser cancelada devido ao STOP Neste caso n o h interesse em calcular as ra zes complexas Se for falsa a execu o continua na linha seguinte ao STOP e se b 2 4xaxc 0 0 uma frase ser impressa na tela do monitor e a execu o desviada para a primeira linha ap s o END IF Se for falsa a condi o default do ELSE ser executada e a execu o continua na linha seguinte ap s END IF A instru o STOP til quando necessitamos abortar a execu o em alguma parte do programa que n o seja o final Neste caso a execu o desviar para o END PROGRAM encer rando o programa As estruturas de decis o podem ser aninhadas ou seja podem conter uma dentro da outra quantas forem necess rias como por exemplo ext IF THEN er IF THEN intas IF THEN END IF int2 END IF intl END IF ext A estrutura ou bloco mais interno identificado pelo r tulo int 2 e o mais externo por ext E o bloco intermedi rio identificado por int 1 Nos casos de aninhamentos de estruturas de decis o uma boa pr tica de programa o o uso dos r tulos para tornar claro que procedimentos s o executados em cada bloco livrof90 v8 preliminarl 2014 5 5 1 07 page 71 82 Fortran 95 curso b
87. a da de dados baseado na tabela 2 1 Podem ser utilizados mais de um c digo separados por v rgula At agora todas as sa das e entradas de dados foram realizadas sem preocupa o com o formato A partir deste momento deveremos ter cuidado ao utilizar a instru o FORMAT Veremos alguns pontos importantes livrof90 v8 preliminarl 2014 5 5 1 07 page 57 68 Fortran 95 curso basico Gilberto Orengo OS CODIGOS CHAVE Existe mais de uma d zia de esp cies de formata o c digos chave em Fortran 95 mas usaremos somente alguns descrito na tabela 2 1 Para auxiliar na compreens o da tabela temos que W a largura do campo n mero de d gitos destinado ao referido dado A largura do campo w inclui o n mero total de posi es inclusive o sinal e o ponto decimal da mantissa o s mbolo E o sinal de ou de e os dois d gitos do expoente ou os d gitos determinados para o expoente e corresponde aos d gitos ap s o ponto decimal espa o casas decimais da mantissa os d gitos do expoente E significa o n mero de vezes que a formata o ser utilizada ou seja indica uma repeti o Por exemplo no caso de 3A8 significa que ser o impressos ou lidos 3 vari veis do tipo CHARACTER de tamanho igual a 8 cada Tabela 2 1 Descri o de algumas formata es utilizadas na instru o FORMAT C digo chave Significado nAw Interpreta os pr ximos w caract
88. a a import ncia de reconhecer erros e corr gi los para que o c digo de fato funcione como esperamos importante para a verifica o de aprendizado a pr tica com exerc cios e a solu o de problemas Perceba que h uma diferen a entre solu o de problemas e pr tica com exerc cios O primeiro subentende que o segundo foi realizado exaustivamente Estaremos mais prepara dos para resolver ou solucionar problemas se estivermos devidamente treinados Portanto altamente recomend vel que fa a os exerc cios a seguir bem como os dispon veis no site http www orengonline com fortran95 As respostas e coment rios a respeito dos exerc cios encontram se no referido endere o eletr nico em exerc cios E para verificar se est pronto para resolver problemas um conjunto deles est dispon vel em problemas tamb m no site acima indicado Fortran 95 curso b sico Gilberto Orengo livrof90 v8 preliminarl 2014 5 5 1 07 page 45 56 Para reflex o S existem duas coisas infinitas o universo e a estupidez humana E n o estou muito seguro da primeira EXERC CIOS 1 1 1 2 1 3 Albert Einstein 1879 1955 Sejam as vari veis a b c d e g que s o inicializadas como segue a 3 b 2 c 5 d 4 e210 f 2 g 3 Avalie os seguintes procedimentos a y axbtcxdte fxxg b y ax b c lt d e f xxg c y ax btc dte fxxg Siga o exemplo de solu o
89. a da direita para a esquerda assim 34 38 6561 diferente de 34 316 43046721 Os resultados anteriores n o cont m pontos decimais porque s o valores inteiros 1 7 3 A Manipula o de Caracteres Um conjunto de caracteres agrupados string representa uma palavra A posi o que cada caracter car ter ocupa neste agrupamento determinar o significado da palavra N o s o aceitos caracteres acentuados 4 e caracteres especiais 7 B a Os computadores somente entendem n meros assim um c digo ASCII a represen ta o num rica dos caracteres tais como a ou A tabela ASCII possui 256 posi es e con t m tamb m caracteres acentuados para contemplar a l ngua latina Portugu s Espanhol Italiano etc livrof90 v8 preliminarl 2014 5 5 1 07 page 36 47 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran Algumas fun es para manipular caracteres s o descritas a seguir LEN x retorna o n mero inteiro de caracteres que comp em um conjunto de carac teres palavra ou string em que x uma palavra escrita entre aspas simples ou dupla Exemplo LEN mae resultado 3 Exemplo de uso em um programa Programa 1 6 O uso da fun o LEN PROGRAM uso len IMPLICIT NONE CHARACTER LEN 6 nome INTEGER a nome fisica a LEN nome WRITE x x Tamanho da palavra a E
90. a linguagem Fortran 90 95 ficou estabelecido um padr o qualquer processador deve suportar pelo menos dois par metros de representa o o KIND para os tipos de dados REAL e COMPLEX e pelo menos um par metro para os tipos de dados INTEGER CHARACTER e LOGICAL A tabela B 1 no Ap ndice B cont m todos os tipos de dados seus par metros de repre senta o e intervalos de armazenamento baseado no compilador G95 lt atributos gt s o informa es adicionais a respeito do tipo de dado e podem ser entre outros DIMENSION lt forma gt indica a forma de uma array em que lt forma gt indica as di mens es separadas por v rgulas S o exemplos unidimensional DIMENSION 7 um vetor de 7 elementos bidimensional DIMENSION 3 4 uma matriz 3 x 4 com 12 elementos Este argumento ser estudado no Cap tulo 4 PARAMETER indica que o dado ser constante ao longo de todo o programa sem possi bilidades de alter lo ALLOCATABLE usado juntamente com o DIMENSION e indica que o tamanho da array ser informado ao longo do programa e n o no momento da declara o da vari vel a chamada aloca o din mica de mem ria e ser estudada no Cap tulo 5 livrof90 v8 preliminarl 2014 5 5 1 07 page 26 37 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran Obs Podem ser declarados mais de um atributo para a mesma vari vel os quais ser o se parados por v
91. a tela do monitor indicando que o n mero digitado mpar Se for falsa a execu o continua na linha seguinte ao END IF livrof90 v8 preliminarl 2014 5 5 1 07 page 69 80 Fortran 95 curso b sico Gilberto Orengo 69 3 2 2 Estrutura Condicional Composta IF THEN ELSE IF Na estrutura simples definida acima o bloco de procedimentos abaixo do TF s ser exe cutado se a condi o l gica for verdadeira Se a condi o de controle for falsa todos os procedimentos do bloco ser o ignorados e a execu o do programa seguir logo ap s o END IP Algumas vezes necess rio executar um conjunto de procedimentos se uma dada con di o l gica for verdadeira e outro conjunto de procedimentos para outra condi o l gica verdadeira ou at mesmo no caso da express o l gica ser falsa A estrutura condicional composta fornece esta possibilidade e a sua forma geral que utilizaremos nos nossos algorit mos em que IF especifica o inicio da estrutura de decis o IF THEN ELSE IF lt r tulo gt uma identifica o opcional do bloco de decis o lt condi o l gica gt determina um teste l gico Vejamos como trabalha todo o bloco interno ao IF inicialmente sea lt condi o l gica 1 gt for verdadeira ent o THEN o programa exe cuta os lt procedimentos bloco 1 gt e imediatamente ap s desviado para a primeira linha ap s o END IF Se for falsa a linha
92. ada n mero lido mostre uma tabela contendo o valor lido e o cubo do n mero somado a ele mesmo Elabore um programa em Fortran 90 95 que encontre um n mero real que mais se aproxima da raiz quadrada de um n mero fornecido pelo usu rio Indique tamb m ao final quantos loops foram necess rios Obs n o basta s calcular a raiz quadrada direta pela fun o SQRT mas sim fazer um loop com a multiplica o de dois n meros iguais e que satisfa a no teste de precis o entre o valor calculdado e o valor exato da raiz livrof90 v8 preliminarl 2014 5 5 1 07 page 79 90 AS VARI VEIS COMPOSTAS Vetores e Matrizes Arranjos Neste cap tulo voc encontrar 4 1 Introdu o 75 Saudade 09 09 2004 11 00 4 2 OsVelOreS 2642 s sal scams sas E 76 Eternidade tanto faz 4 2 1 Preenchendo com valores os elemen dia ap s dia se faz tos de um vetor 77 Saudade esta faz 4 2 2 A manipula o dos elementos de um o tempo ser sagaz NEU so gtk E aoa ae we Eee 2 78 4 3 AsMatrizes 79 Gilberto Orengo 4 3 1 A declara o de uma matriz 80 1961 4 3 2 Preenchendo com valores os elemen tos de uma matriz 80 4 3 3 A manipula o dos elementos de umamatriz 81 EXCIC CIOS lt d ek ee ewe RHEE RE Ee 83 4 1 INTRODU O At o momento escrevemos programas cujas vari veis armazenam um nico valor cha madas de vari v
93. al rio as sal rio atual satual novo sal rio ns O custo final ao consumidor de um carro novo a soma do custo de f brica com a per centagem do distribuidor e dos impostos aplicados ao custo de f brica Supondo que a percentagem do distribuidor seja de 28 e os impostos de 45 escreva um programa que leia o custo de f brica de um carro e escreva o custo final ao consumidor Obs 1 Use os seguintes nomes s vari veis custo de f brica cf custo final ao consumidor cfc percentagem do distribuidor pd impostos pi 2 Construa o programa com o m ximo de informa es ao usu rio livrof90 v8 preliminarl 2014 5 5 1 07 page 48 59 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran 1 12 Escreva um programa que calcule a posi o velocidade e acelera o de um corpo su jeito ao movimento harm nico simples baseado nas equa es abaixo Para iniciar use e 0 n 3 14159265 b 2 5 Teste para um conjunto de valores de t posicao z bsin nt velocidade v nb cos nt e aceleracao a n2bsin nt livrof90 v8 preliminarl 2014 5 5 1 07 page 49 60 TRABALHANDO COM ARQUIVOS ENTRADAS SA DAS O DE DADOS Neste cap tulo voc encontrar Para reflex o 2 1 Inhodu oO o os ee eek eee ae dad 8 41 Se um dia tiver que escolher entre o mundo e o amor ARQUIVO as a es es des ad apa E
94. algoritmo Defina precisamente o algoritmo a ser utilizado Rascunhe as etapas do programa livrof90 v8 preliminarl 2014 5 5 1 07 page 128 139 AP NDICE D COMO ABORDAR UM PROBLEMA DE PROGRAMA O 4 Programar Como escrever o algoritmo na linguagem utilizada Que estrutura de dado utilizar 1 Divida o programa em partes menores modularizar Escreva um programa de f cil leitura Pense nos casos patol gicos 2 4 Depurar Explique o programa para si mesmo Por que funciona A leitura de dados est sendo feita corretamente Vari veis inicializadas Verificar casos patol gicos Localizar o erro restringindo os blocos de c digos cercando o erro Comandos e loops aninhados corretamente Observa es 1 Que estrutura utilizar Qual a melhor forma de representar as vari veis do problema Vari veis simples Ve tores Matrizes Registros Alguns vetores Vetores de registro Registros de vetores S o muitas as estruturas utiliz veis Deve se escolher uma que seja conveniente e que n o venha trazer complica es mais adiante 2 Pense nos casos patol gicos Os casos patol gicos ocorrem quando a propriedade que seu programa utiliza n o vale para alguns valores Normalmente s o o zero um valores iniciais ou finais Por exemplo em uma fun o que calcula a pot ncia de um n mero n pelo expoente e Para isso pode se multiplicar o n mero n e vezes Nesse caso pode se ter problemas quando o val
95. amente pois tem 5 espa os caracteres e com duas casas decimais Perceba que o ponto decimal faz parte da contagem dos espa os dispon veis Quando o n mero n o couber nos espa os de terminados pela formata o o compilador arredondar o n mero fazendo o se ajustar na formata o determinada ou imprimir asteriscos INIUsaremos a conven o lt ENTER gt para designar teclar ENTER livrof90 v8 preliminarl 2014 5 5 1 07 page 53 64 Fortran 95 curso b sico Gilberto Orengo 53 CONSIDERA ES ADICIONAIS SOBRE WRITE READ 2 1 poss vel ter m ltiplas sa das e ou entradas de dados da seguinte forma WRITE a c resultado READ b g MEI AI nas quais as vari veis separadas por v rgulas a c e resultado fornecem Moy sa das e as vari veis b e g recebem valores de entrada 2 2 Para lermos uma informa o do tipo CHARACTER necess rio alterar a instru o de leitura da seguinte forma READ A b em que o argumento A especifica a leitura de caracter exigindo assim a declara o da vari vel b como segue CHARACTER Db ou por exemplo CHARACTER LEN 3 Db Nesta ltima declara o a vari vel armazenar um caracter de comprimento igual at 3 unidades 2 4 A INSTRU O OPEN Esta instru o conecta ou reconecta um arquivo externo a uma unidade l gica de en trada ou de sa da
96. ando se da se guinte forma Sejam dois procedimentos externos localizados respectivamente nos arquivos subl f90 e sub2 90 e o programa fonte principal no prog 90 Para gerar um execu tavel de nome calculol que contenha os procedimentos externos anexados ao programa principal executamos o seguinte comando 995 o calculol prog f90 subl f90 sub2 f90 que compila m ltiplos arquivos de c digo fonte e os anexa para produzir um arquivo execu t vel chamado calculo1 no linux ou unix ou calculo1 exe no sistema MS Windows PROCEDIMENTOS INTERNOS O Fortran 95 tamb m permite procedimentos internos os quais se localizam no programa principal ap s a instru o CONTAINS a qual finaliza os procedimentos execut veis do pro grama principal A estrutura geral e localiza o de um procedimento interno Um programa principal pode ter quantos procedimentos internos forem necess rios O Fortran tem dois tipos de procedimentos ou subprogramas sub rotinas SUBROU TINE e fun es FUNCTION A diferen a fundamental entre esses dois tipos que as sub rotinas s o chamadas pela instru o CALL com o respectivo nome e podem retornar muil tiplos resultados atrav s de seus argumentos J as fun es s o ativadas pelo seu nome na express o e o seu resultado um nico valor passado diretamente pelo uso da fun o como livrof90 v8 preliminarl 2014 5 5 1 07 page 99 110 Fortran 95 c
97. as vari veis fun es e procedimentos O nome deve dar id ia do que a vari vel representa ou o que a fun o ou procedimento fazem Por exemplo se voc quer armazenar o n mero de alunos em uma vari vel pode se usar num alunos Se for uma fun o que calcula o sal rio m dio pode se nome la cale SalarioMedio D 2 4 Utilize fun es e procedimentos curtos e objetivos Evite sempre fun es procedimentos grandes que englobem todo tipo de processamento Separe algoritmos distintos em suas pr prias fun es procedimentos Projete sua grande fun o procedimento em v rias pequenas de forma que seu programa fique mais f cil de ler e entender Dessa forma cada parte do seu programa fica bem definida e torna se muito mais f cil escrev lo pois pode se faz lo passo a passo Dessa forma a cada parte que se termina livrof90 v8 preliminarl 2014 5 5 1 07 page 127 138 Fortran 95 curso b sico Gilberto Orengo pode se verificar se ela est correta Al m disso a localiza o de um problema no programa tamb m fica facilitada pois ele se restringir a um bloco menor de c digo Conclus o Lembre se que a maior parte do tempo que se gasta programando corrigindo e modi ficando c digo existente Relativamente pouco tempo realmente utilizado para adicionar coisas novas Isso significa que voc gastar muito tempo lendo o seu c digo ent o faz sen tido gastar algum tempo aprend
98. atributo especifica que o argumento do subprograma seja utilizado para ambas possibilidades isto como como dado de entrada e dado de sa da do sub programa quando chamado por uma unidade de programa Cada argumento associado dessa forma deve ser definido ou atribuido um valor A vari vel temp definida somente para uso interno i e ela n o ser acessada exter namente a sub rotina Esta caracter stica importante porque poderemos usar nomes iguais para outros procedimentos desde que um seja interno a s sub rotina s e o outro no corpo INI Uma sub rotina pode chamar outra sub rotina mas n o a si mesmo a menos que seja declarada como recursiva Mais informa es sobre sub rotinas recursivas s o obtidas nas refer ncias 6 10 livrof90 v8 preliminarl 2014 5 5 1 07 page 101 112 Fortran 95 curso b sico Gilberto Orengo 101 do programa Esta sub rotina usada num programa ou em outra sub rotina por interm dio da declara o CALL exemplo sub ladol lado2 hipotenusa como no exem plo abaixo Programa 6 2 Um programa para testar a sub rotina do Programa 6 1 1 PROGRAM testa sub 2 IMPLICIT NONE 3 REAL Si s2 hip 4 WRITE Indique um dos lados de um triangulo retangulo READ s1 WRITE Indique o outro lado do triangulo retangulo READ x S2 CALL exemplo sub sl s2 hip 9 WRITE x O valor da hipotenusa do triangulo eh hip 10
99. cujo nome hoje teremos como seus elementos hoje 1 hoje 2 e hoje 3 A sua declara o ser REAL KIND 8 DIMENSION 3 hoje ou REAL KIND 8 hoje 3 Isto a array hoje tem 3 elementos e cada elemento do tipo real de precis o dupla con forme o KIND 8 Ou a array poderia ser de valores inteiros INTEGER KIND 4 DIMENSION 3 hoje Assim quando queremos nos referir a um elemento da array fazemos hoje 3 que re q q J presenta um dado valor num rico As arrays acima s o do tipo unidimensional ou rank 1 As arrays bidimensionais ou rank 2 s o por exemplo REAL KIND 8 DIMENSION 4 4 ontem E nos referimos a um elemento deste tipo de array da mesma forma que o unidimensional s que com 2 subscritos p ex ontem 1 2 Existem arrays de dimens es superiores caso seja necess rio Podemos tamb m ter arrays de caracteres no lugar de n meros IN1lSer usado array s e n o matriz es por ser de uso corrente no meio computacional e portanto mais espec fico At mesmo para n o confundirmos com matrizes da Matem tica livrof90 v8 preliminarl 2014 5 5 1 07 page 92 103 CAPITULO 5 A ALOCAGAO DINAMICA DE MEMORIA ALLOCATABLE CHARACTER len 20 DIMENSION 50 nomes Isto cada elemento desta array dever ter at 20 caracteres e endere ado como nomes 1 nomes 2 at nomes 50 Mas o que as a
100. dada na p g 54 A INSTRU O READ A instru o READ transfere dados de uma unidade de entrada Input para uma vari vel isto l dados que alimentar o com valores e ou informa es o programa em Fortran A sintaxe READ UNIT lt unidade gt FMT lt formato gt em que UNIT lt unidade gt a unidade l gica dispositivo da qual ser obtido o valor ou in forma o Como unidade padr o utilizado o teclado e indicado por um asterisco Entenda se por teclado os dados digitados por este dispositivo Uma unidade l gica di ferente da padr o determinada pela instru o OPEN A palavra chave UNIT opcional e n o utilizada na maioria dos programas 10 n 12 livrof90 v8 preliminarl 2014 5 5 1 07 page 52 63 CAP TULO 2 TRABALHANDO COM ARQUIVOS ENTRADAS SAIDAS I O DE DADOS FMT lt formato gt especifica com que formato s a leitura dos dados realizada Para instruir o compilador a ler numa formata o livre ou lista direta utilizado o asterisco Neste caso a mem ria receber uma informa o sem nenhum tipo de preocupa o com a editora o da informa o Uma formata o diferente da livre obtida pela instru o FORMAT que ser descrita na Se o 2 6 na p g 56 A palavra chave FMT opcional e n o utilizada na maioria dos programas O argumento ADVANCE apresentado na instru o WRITE tamb m pode s
101. de digita o em que cada linha tinha 80 colunas posi es para ser perfurado para posterior manipula o de leitura e processamento pelo computador O Fortran 95 tamb m suporta o formato fixo O CONJUNTO DE CARACTERES O conjunto de caracteres do Fortran consiste como visto na p gina 8 de As 26 letras mai sculas ABCDEFGHIJKLMNOPORSTUVWXYZ As 26 letras min sculas abcdefghijklmnopqrstuvwxyz Os dez d gitos 0123456789 IN7lLembrando a conven o neste livro os colchetes sempre indicar o que o elemento por exemplo uma declara o uma instru o ou um atributo opcional livrof90 v8 preliminarl 2014 5 5 1 07 page 15 26 Fortran 95 curso b sico Gilberto Orengo S mbolos comuns ou caracteres especiais lt espa o gt N lt gt amp Em Fortram as letras mai sculas s o equivalentes as correspondentes min sculas exceto quando estiverem relacionadas com as declara es do tipo CHARACTER que ser estudado na se o 1 5 4 na p gina 24 Isto para o Fortran os nomes TESTE teste Teste e TeStE s o equivalentes n o h distin o entre mai sculas e min sculas ou seja n o tipo CASE SENSITIVE O caracter ponto e v rgula pode ser usado para separar duas ou mais instru es numa mesma linha como por exemplo READ x x WRITE Ola amigo cujo significado respectivamente lei
102. demos recorrer aos depuradores os quais veremos resumidamente a seguir Interpretador Os interpretadores s o programas que l em um c digo fonte de uma linguagem de progra ma o e o executam Seu funcionamento pode variar de acordo com a implementa o e em muitos casos o interpretador l linha a linha e converte em c digo objeto medida que vai executando o programa Linguagens interpretadas s o mais din micas e apresentam a seguinte sequ ncia escrever c digo testar corrigir gt escrever testar gt distribuir J os compiladores tem uma sequ ncia dada por escrever c digo compilar testar gt corrigir gt compilar testar distribuir Mas existem tamb m linguagens que funcionam como interpretadores e compiladores como por exemplo Python somente quando requerido BASIC entre outras Outros exemplos de linguagens interpretadas s o Bash CH Perl PHP Python Euphoria Forth JavaScript Logo entre outras Depurador Depurador tamb m conhecido por debugger um programa usado para testar outros pro gramas e fazer sua depura o ou seja indica seus problemas ou bugs N4 Em geral os depuradores oferecem as seguintes funcionalidades N6 Bug significa em ingl s qualquer tipo de inseto Os primeiros computadores de tamanhos de grandes salas paravam os processamentos devido a insetos que se localizavam em seus dispositivos Para retornar ao trabalho era preciso retirar o
103. e Para a precis o dupla usualmente dedicado 8 Bytes Usando estas declara es ficaremos dependentes da combina o compilador processador Podemos come ar a alterar esta depend ncia usando o par metro KIND na declara o de vari veis Assim precis o simples e dupla tem valores espec ficos neste par metro Vejamos os exemplos REAL KIND 1 valor 1 REAL KIND 4 valor 2 REAL KIND 8 DIMENSION 20 matriz a REAL 4 temp O tipo de valor real especificado nos par nteses ap s o REAL com ou sem KIND Uma va ri vel declarada com este tipo de par metro chamado de vari vel parametrizada Se nenhum tipo especificado ent o o tipo real default usado Mas afinal que significa o tipo de para metro em KIND Infelizmente n o temos como saber Cada compilador livre para atribuir um n mero para cada tamanho de vari vel Por exemplo em alguns compiladores o valor real com 32 bits iguala KIND 1 e o valor com 64 bits KIND 2 que o caso da combina o PC NAGWare FTN90 Em outros compiladores como PC Lahey Fujitsu Fortran 90 95 e PC Microsoft PowerStation 4 0 temos KIND 4 e KIND 8 para respectivamente 32 bits e 64 bits Portanto para tornar nossos programas port veis entre compiladores e m quinas dife rentes devemos sempre fornecer o valor correto para o tipo de par metro Para isso pode default na omis s o de decla ra o
104. e n o igual ao lt valor f gt porque foi acrescido do lt incremento gt antes do teste l gico para verificar se lt valor_i gt gt lt valor_f gt 3 3 2 A Estrutura de repeti o DO IF END DO Ou DO infinito At o momento todos os blocos de repeti o DO END DO s o executados sabendo se previamente quantas vezes ser repetida uma dada tarefa Mas algumas vezes necess rio executar uma tarefa no interior de um bloco de repeti o sem sabermos quantas vezes a mesma ser repetida Isto muito comum por exemplo nos casos de busca de converg ncia num processo iterativo Desta forma internamente ao bloco de repeti o que ser tomada a decis o de abandon lo Quando isto ocorrer a estrutura DO IF END DO dever ser usada com a instru o de controle EXIT H uma outra situa o na qual devido a um controle l gico somente parte dos proce dimentos internos ao bloco sejam executados mas que n o abandone at que outro controle l gico seja satisfeito Neste caso juntamente com o EXIT usamos a instru o de controle CYCLE A forma geral deste bloco de repeti o livrof90 v8 preliminarl 2014 5 5 1 07 page 75 86 Fortran 95 curso b sico Gilberto Orengo em que DO especifica o in cio da repeti o infinita dos procedimentos internos ao bloco DO IF END DO Neste caso se existirem os lt procedimentos 1 gt ser o execu tados lt
105. e quantas vezes for necess ria J o END PROGRAM nico A seguir para avan armos no aprendizado da linguagem Fortran veremos como fun ciona a despensa de dados para o Fortran especialmente como armazenar e manipular n meros inteiros e reais na sequ ncia os complexos livrof90 v8 preliminarl 2014 5 5 1 07 page 22 33 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran A DESPENSA DE DADOS NO FORTRAN 95 O Fortran disponibiliza uma variedade de maneiras para armazenar e lidar com os da dos Os tipos de dados suportados pelo Fortran s o INTEIROS n meros nos quais n o h fra es ou que n o possuem parte fracion ria S o exatos REAIS n meros que s o representados com uma parte fracion ria ou que possuem ponto decimal S o conhecidos tamb m como n meros representados em ponto flutuante Aqui os n meros reais s o tratados com ponto decimal e n o com a v rgula como estamos habituados no dia a dia COMPLEXOS n meros do plano complexo que possuem uma parte imagin ria que representada por um n mero real e uma parte real Na p gina 24 L GICOS s o dados que assumir o somente um valor verdadeiro ou falso Na p g 24 CARACTERES s o dados constitu dos por letras e s mbolos Na p gina 24 Veremos com mais detalhes os inteiros e reais Deixaremos para o estudante se aprofun dar nos demais tipos de dados representativos no Fortran
106. ealizadas anteriormente com inteiros entre reais resultar em 1 0 2 3 4 5 6 z0 705 a q 19 e e q P 5 te 8 9 5 7 3 4 4 1 1 7 3 9 7 4 7 4 5 1 1 25 1 75 1 1 3 0 3333333 Precis o simples 3 0 333333333333333 Precis o dupla Observe que as duas ltimas divis es se diferenciam pela a precis o Um cuidado ne cess rio com as opera es matem ticas que estamos acostumados a realizar no dia a dia tais como 3 0 1 0 3 0 Z1 0 e 2 0 1 0 2 0 1 0 Esta diferen a est na forma como o computador manipula os dados que dependem da precis o estabelecida Assim quando formos realizar testes de igualdades devemos ter muito cuidado A ARITM TICA MISTA ENTRE INTEIROS E REAIS Quando misturamos opera es de reais com inteiros devemos ter cuidado extremo Vejamos o porqu Observe as seguintes opera es livrof90 v8 preliminarl 2014 5 5 1 07 page 35 46 Fortran 95 curso basico Gilberto Orengo 1 2 1 2 resultaem 2 2 2 1 2 resultaem 2 3 2 1 2 resultaem 2 5 4 2 1 2 resultaem 2 5 5 2 1 2 resultaem 2 5 A primeira express o somente entre inteiros e n o h novidade porque o resultado ser um inteiro A ltima tamb m n o tem novidade porque o resultado ser um real por que todos os termos s o reais A partir da segunda express o at a quarta temos opera es mistas O resultado de uma opera o m
107. eclarada com o atributo ALLOCA TABLE e alocada no programa atrav s da declara o ALLOCATE Quando n o precisamos mais da array a desalocamos da mem ria atrav s da declara o DEALLOCATE A estrutura de uma declara o t pica de array alocada dinamicamente REAL ALLOCATABLE DIMENSION nomes REAL ALLOCATABLE DIMENSION ontem Observe que os dois pontos s o usados no lugar das declara es est ticas pois ainda n o sabemos o tamanho da array O rank da array declarado mas n o o seu tamanho Quando o programa executado o tamanho da array ser especificado pela declara o ALLOCATE A forma desta declara o ALLOCATE lista das vari veis a serem alocadas STAT nome do status N2 Qpen Source uma boa pr tica abrirmos o c digo fonte de nossos programas atrav s da licen a GPL General Public License 13 Eles se tornar o mais eficientes pois outros programadores poder o fazer altera es e nos avisar das mesmas livrof90 v8 preliminarl 2014 5 5 1 07 page 93 104 Fortran 95 curso b sico Gilberto Orengo Um exemplo ALLOCATE ontem 100 0 10 STATUS info Este procedimento aloca uma array de 100 x 11 quando for necess rio O STATUS info opcional Se estiver presente ele retornar um inteiro Ser O para sucesso na aloca o ou n mero positivo valor que depender
108. eis simples Por exemplo INTEGER a REAL total a 34 total 3 78 Existem casos que precisamos armazenar diferentes valores para uma mesma vari vel Estas vari veis s o conhecidas como arrays em ingl s ou simplesmente de vari veis com postas As vari veis compostas mais conhecidas s o os vetores e matrizes Um vetor pode ser considerado uma matriz sob certas condi es e neste caso chamado de matriz coluna ou matriz linha A seguir veremos cada um em detalhes iniciando pelos vetores 4 2 livrof90 v8 preliminarl 2014 5 5 1 07 page 80 91 80 CAP TULO 4 AS VARI VEIS COMPOSTAS ARRANJOS OS VETORES Os vetores s o vari veis compostas unidimensionais Por exemplo seja o vetor R 5i 1j 7k que tem seus componentes dados por R 5 1 7 em que r 5 ry l er 7 De uma forma geral um vetor A ter componentes descritos da seguinte maneira A a1 a2 43 kaz An O termo vari vel composta unidimensional reconhecido pelo o nico indice necess rio para descrever a vari vel ou seja no exemplo acima a vari vel A tem um ndice m para indi car a posi o no conjunto de valores atribu dos a ela Os valores assumido pelo ndice n determinar a quantidade de elementos do vetor Na mem ria a vari vel R armazenar seus componentes representada esquematica mente como segue na Figura 4 1 1 2 3 4 5 6 7 8 9 R nome 5 1 7
109. eito Ga nta a eS AS De noa Rede Eee SA DES ee ee Se G SU 77 AS VARIAVEIS COMPOSTAS Arranjos 79 Al Introdu o Z usuku sa sie DOME ae a Sve 9 gee Boia amp S Oe ee signe b oe 79 AD OS Vetores nae ed aee RE ee RR ERO OE HE Ee TE 80 4 2 1 A declara o de um vetor 0 eee 80 4 2 2 Preenchendo com valores os elementos deumvetor 82 4 2 3 A manipula o dos elementos de um vetor 83 43 AS MaMe aaa y us ak PE S S q REE EES ER OE Ga E SW YK SG 84 4 3 1 A declara o deumamatriz o ee 85 4 3 2 Preenchendo com valores os elementos de uma matriz 85 4 3 3 A manipula o dos elementos de uma matriz 86 livrof90 v8 preliminarl 2014 5 5 1 07 page v 5 Fortran 95 curso b sico Gilberto Orengo EXCLC CIOS is gt 5 9 oe a E E OR E Rd ee eee we ee la wees 90 5 A ALOCA O DIN MICA DE MEM RIA ALLOCATABLE 91 5 1 O Atributo ALLOCATABLE e as Declara es ALLOCATE e DEALLOCATE 92 5 2 Quando Devemos Usar uma Array ee 94 5 3 Manipula o entre Arrays a ecca muno mesna aosiy pie ii enara 95 6 AS SUB ROTINAS E FUN ES 97 6 1 Introdu o s gt 664 bee mu rk Pee E K OR Cum YUK UR W E ee Q 97 Procedimentos Externos sose u ss s w wow m g q uw ws 8 pus w w e us K MUN N 97 Procedimentos Internos ee 98 6 2 AsSub rotinas SUBROUTINE
110. endo a escrever um c digo leg vel C digo leg vel f cil de escrever f cil de depurar e f cil de manter Voc realmente sai ganhando SE ESTIVER CONFUSO NA HORA DA DEPURA O Se voc estiver confuso ao tentar procurar algum problema no seu programa tente explic lo para voc mesmo Dessa forma poss vel notar inconsist ncias ou fugas ao al goritmo planejado Caso isso n o resolva pode se tentar executar o programa no papel Isso se aplica tanto a c digos que voc escreveu e n o est mais entendendo como a c digos pegos de outros Funciona da seguinte maneira Pegue uma folha em branco e liste todas as vari veis usadas no programa Siga linha por linha do c digo escrevendo o valor das vari veis enquanto elas mudam como se voc fosse o computador Pode se usar uma calculadora para ajudar nas contas Anote todas as sa das em uma folha parte Ap s algumas poucas itera es a estrutura b sica do algoritmo e sua inten o devem ficar claras Tome cuidado pois nem sempre o c digo funciona do jeito que n s pensamos que funciona GUIA PR TICO PARA RESOLU O DE PROBLEMAS DE PRO GRAMA O 1 Entender o problema Esteja certo de que tenha entendido o problema O que a entrada O que a sa da 2 Resolver o problema m o Resolva pequenas inst ncias do problema m o O que acontece Pense em casos variados Pense em como qual algoritmo voc utilizou para resolver o problema 3 Definir o
111. entre as linhas 2 e 7 O corpo do programa que cont m as instru es excut veis e tamb m n o execut veis est entre as linhas 8 e 13 E finaliza com a instru o END seguida do nome do programa A seguir veremos uma descri o de cada linha indicando o que executa ou instrui o computador a realizar Aproveitaremos para indicar as boas pr ticas de programa o e algu mas exig ncias da linguagem Fortran Nesta linha ocorre o in cio do c digo ou programa em Fortran A palavra chave PROGRAM seguido do nome do programa Como visto anteriormente na p gina 15 devemos ter cuidado ao nomear um programa O nome de um programa Fortran 95 ter at 31 caracteres e iniciar sempre com uma letra do alfabeto poder conter letras algarismos e o caracter tra o baixo ou underscore _ Reiterando embora seja opcional uma boa pr tica de programa o colocar a instru o PROGRAM sempre na primeira linha seguida de um nome O que j estava dispon vel nas ltimas vers es do FORTRAN 77 obriga nos a declarar todas a vari veis do problema auxiliando a depurar eventuais erros de escrita ou de dupla declara o Embora seja opcional tamb m uma boa pr tica de programa o colocar a instru o IMPLICIT NONE O caracter sinal de exclama o instrui o compilador que a sua direita o con livrof90 v8 preliminarl 2014 5 5 1 07 page 20 31 CAP TULO 1 CONSIDERA ES INICI
112. entre outras fun es substitui com primazia os confusos e perigosos COMMON que s o utilizados como uma declara o para compartilhar uma mesma rea de mem ria entre duas ou mais unidades de programa e para especificar os nomes das vari veis que devem ocupar esta rea comum A rea de mem ria suportada pelo COMMON pode ser entendida como uma sequ ncia de posi es na mem ria principal Este assunto ser apresentado no Cap tulo 8 Sutilmente ao longo do texto ser o apresentados outros pequenos avan os da lingua gem sempre destacados pela conven o acima descrita livrof90_v8 preliminarl 2014 5 5 1 07 page 3 14 Fortran 95 curso b sico Gilberto Orengo As atualiza es do Fortran 95 como o uso de ponteiros PO ou os tipos de da dos definidos pelo usu rio entre outras ser o tratadas em outra oportunidade Elas far o parte da sequ ncia deste livro que tratar de quest es mais avan adas relativas ao Fortran 95 Abordagens mais completas a respeito do Fortran podem ser encontradas nos livros citados nas refer ncias bibliogr ficas Mas importante ter em mente que ao usarem um compilador N Fortran uma valiosa fonte de informa o encontra se no Guia ou Ma nual do Usu rio User s Guide e no Manual de Refer ncia da Linguagem Language Reference Manual do referido compilador Ser utilizado como refer ncia o compilador Fortran G95 desenvolvido sob a licen a GNU
113. er 2 linhas por 2 colunas isto a primeira informa o entre par nteses se refere ao n mero de linhas enquanto que a segunda se refere ao n mero de colunas Assim a matriz A armazenar 4 valores inteiros Este resultado vem da multiplica o do n mero de linhas pelo n mero de colunas ou seja 2 x 2 4 A vari vel h armazenar 12 valores em 4 linhas e 3 colunas e a vari vel nomes ter 10 entradas em 2 linhas e 5 colunas 4 3 2 Preenchendo com valores os elementos de uma matriz O procedimento para preencher uma vari vel composta semelhante a de um vetor Assim como no caso dos vetores existem diferentes formas de realizar esta tarefa O uso de uma estrutura de repeti o 1 DO i 1 2 2 DO j 1 2 3 READ A i 5 a END DO 5 END DO Neste caso usamos a estrutura de repeti o DO END DO associado com a instru o de leitura READ para preencher os valores da vari vel composta A livrof90 v8 preliminarl 2014 5 5 1 07 page 86 97 CAP TULO 4 AS VARI VEIS COMPOSTAS ARRANJOS importante ressaltar que o preenchimento da matriz se fez pelas linhas Isto para cada valor de de i o valor da vari vel de controle 3 que representa as colunas varia de 1 at 2 para cada repeti o externa Se quisermos preencher por colunas basta trocar a linha 1 pela 2 Assim estaremos fixando o j e variando o i para cada repeti o externa O uso de uma estrutura de repe
114. er Systems Inc 865 Tahoe Boulevard P O Box 6091 Incline Village NV 89450 6091 Lahey fujitsu fortran 95 express user s guide linux edition 1999 Revi sion A 10 ELLIS T PHILIPS I R LAHEY T M Fortran 90 programming Harlow England Addison Wesley 1998 11 REID J The new features of fortran 2003 ISO IEC JTC1 SC22 WG5 N1579 Benson Oxon OX10 6LX UK v 1 p 1 38 2003 12 DE ALENCAR PRICE A M TOSCANL S S Implementa o de linguagens de programa o compiladores Number 9 in Livros did ticos Porto Alegre Editora Sagra Luzzatto 2000 13 http wwwlinux org ltimo acesso 03 de junho de 2001 livrof90 v8 preliminarl 2014 5 5 1 07 page 136 147 REFERENCIAS BIBLIOGRAFICAS 14 Cray Research Inc Eagan USA Optimizing application code on cray pvp systems Tr vopt 2 0 a volume i 1996 15 Cray Research Inc 2360 Pilot Knob Road Mendota Heights MN 55120 USA CfooTM commands and directives reference manual 1994 SR 3901 1 1 16 KERNIGHAN B W RITCHIE D M C a linguagem de programa o Padr o ansi Rio de Janeiro Campus 1989
115. er utilizado aqui com o mesmo significado Vejamos um exemplo Programa 2 2 Exemplo de entrada de dados PROGRAM leitura IMPLICIT NONE REAL 373 a D e WRITE x 60 ADVANCE NO Digite um numero real READ x a OPEN UNIT 20 FILE dados1 txt READ 20 Db READ 20 50 c 50 FORMAT F5 2 60 FORMAT A CLOSE 20 END PROGRAM leitura No primeiro READ o conte do da vari vel a ser preenchido via teclado e em formato livre Utilizar o teclado significa digitar uma informa o compat vel com o tipo da declara o da vari vel e na sequ ncia teclar lt ENTER gt INSI Observe que no WRITE aplicado o argumento ADVANCE e a pr xima instru o de leitura ou de escrita n o avan ar para a pr xima linha Assim na sequ ncia o cursor ficar posicionado ao lado da sa da anterior aguardando a leitura da vari vel a FALAR SOBRE O 60 format No segundo READ a vari vel b receber um valor que est armazenado num arquivo de nome dados1 txt identificado pela unidade l gica 20 anteriormente habilitada pela instru o OPEN J a outra entrada de informa o pela vari vel c tamb m oriunda do arquivo anterior mas formatada pela instru o FORMAT localizada no programa pelo r tulo n mero 50 que neste caso instrui o compilador a ler um n mero do tipo real com 5 espa os sendo dois para as casas decimais ap s a v rgula Neste caso o n mero 56 50 caber ajustad
116. eres como um conjunto de caracteres c digo chave A de texto nIw Interpreta os pr ximos w d gitos como um n mero in teiro c digo chave I nFw d Interpreta os pr ximos w d gitos como um n mero real numa nota o sem pot ncia de dez c digo chave E com d casas ap s o ponto decimal nEw d Ee Interpreta os pr ximos w d gitos como um n mero real de precis o simples numa nota o com pot ncia de dez c digo chave E com d casas ap s o ponto deci mal nESw d Ee Interpreta os pr ximos w d gitos como um n mero real de precis o simples numa nota o cient fica de pot n cia de dez c digo chave ES com d casas ap s o ponto decimal nDw d Ee Interpreta os pr ximos w d gitos como um n mero real de precis o dupla numa nota o com pot ncia de dez c digo chave D com d casas ap s o ponto decimal nX Fornece n espa os horizontais c digo chave x Tc E o conhecido Tab move a leitura escrita para a coluna c em que c o n mero da coluna Mais informa es sobre os tipos de formata o c digos chave podem ser obtidas nas refer ncias indicadas no final do livro Sempre que o tamanho da informa o for menor que o espa o reservado a informa o ser escrita justificada direita e ser o acrescentados espa os em branco antes para com livrof90 v8 preliminarl 2014 5 5 1 07 page 58 69 CAP TULO 2 TRABALHAND
117. eriores n o cont m pontos decimais porque s o valores inteiros Todas as multiplica es e divis es partindo da esquerda para a direita Todas as adi es e subtra es realizando as opera es da esquerda para a di reita Todas as opera es relacionais gt lt gt lt iniciando sempre da esquerda para a direita Todos os operadores NOT iniciando da esquerda para a direita Todos os operadores AND iniciando da esquerda para a direita Todos os operadores OR iniciando da esquerda para a direita ESTRUTURAS COM DECIS O OU SELE O Estruturas com Decis o ou Sele o s o procedimentos que permitem nos selecionar e executar se es espec ficas do c digo que ser o chamadas blocos ou at mesmo desviar para outra parte do c digo Elas s o as varia es da instru o IF mais a estrutura SELECT CASE 3 2 1 Estrutura Condicional Simples IF THEN A forma mais comum da instru o de decis o IF a estrutura condicional simples Esta es trutura permite que um bloco de procedimentos seja executado se e somente se uma dada express o l gica for verdadeira 7 8 livrof90 v8 preliminarl 2014 5 5 1 07 page 68 79 68 CAP TULO 3 AS ESTRUTURAS DE CONTROLE A sua forma geral em que IF especifica o inicio da estrutura de decis o IF END IF lt r tulo gt uma identifica o opcional do b
118. es l gicos e ou relacionais OPERADORES RELACIONAIS S o utilizados para comparar dois valores de um mesmo tipo Tais valores s o representa dos por vari veis e constantes ou express es aritm ticas que cont m operadores aritm ti cos Os operadores relacionais s o utilizados para a constru o de equa es O resultado de uma opera o relacional ser sempre um valor l gico isto um Verdadeiro Verdade V ou TRUE ou Falso Falsidade F ou FALSE Os operadores relacionais adotados pelo Fortran 95 est o descritos na Tabela 3 2 Observe a segunda coluna que traz a forma obsoleta do FORTRAN 77 mas que ainda v lida Tabela 3 2 Os operadores relacionais dispon veis no Fortran 95 Operadores Relacionais Fortran 95 FORTRAN 77 Fun o EQ iguala gt GT maior que lt LT menor que gt GE maior ou igual a LE menor ou igual a J NE diferente de Como mencionado anteriormemte o resultado um valor l gico Por exemplo na re la o A B C o resultado ser verdadeiro V ou falso F medida que o resultado da express o aritm tica A B seja respectivamente igual ou diferente do conte do da vari vel C OPERADORES L GICOS S o cinco 5 os operadores l gicos para a forma o de outras proposi es l gicas simples Os operadores est o descritos na Tabela 3 3 e as possibilidades de agrupamento est o descritos na Tabela verdade Tabela 3 4 abaixo Tabe
119. es podem criar o subprograma como uma unidade de programa tamb m chamada de procedimento em Fortran Depois de aprovada isto ap s compilar testar e depurar os erros o subprograma pode ser agregado ao programa principal Em Fortran h dois tipos de subprogramas ou procedimentos que se encaixam nesta categoria sub rotinas e fun es A agrega o pode ser realizada por procedimento interno ou externo PROCEDIMENTOS EXTERNOS Os procedimentos externos se localizam externamente ao programa principal isto ap s o END PROGRAM ou ainda em um arquivo separado e neste caso podem ser de outra lingua gem Nestes ltimos o procedimento externo sub rotina ou fun o deve ser compilado separadamente e ap s anexado ao execut vel principal por interm dio de op es de compi fortran 95 livrof90 v8 preliminarl 2014 5 5 1 07 page 98 109 98 CAP TULO 6 AS SUB ROTINAS E FUN ES la o do programa principal que veremos nesta se o Os procedimentos externos de outra linguagem muito utilizados s o os da linguagem C A estrutura geral e localiza o para o caso do procedimento externo pertencer ao mesmo arquivo do programa principal Um programa principal pode ter quantos procedimentos externos forem necess rios Se o procedimento externo n o estiver contido no mesmo arquivo f90 que est o programa principal necess rio anex lo no execut vel final Isto realizado compil
120. es poss veis Numa implementa o t pica metade IN4IComo curiosidade se existissem extraterrestres com oito dedos como voc esperaria que fosse a base represen tativa dos n meros Claro pensando como Ser Humano livrof90_v8 preliminarl 2014 5 5 1 07 page 8 19 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran destes valores s o reservados para representar n meros negativos e a outra metade para os positivos No caso 1 Byte 8 bits utilizado usualmente para representar n meros entre 128 e 127 inclusive Um sistema para representar os caracteres de linguagens N o Orientais deve incluir os seguintes s mbolos PERMITIDOS NO FORTRAN As 26 letras mai sculas ABCDEFGHIJKLMNOPORSTUVWXYZ As 26 letras min sculas abcdefghijklmnopqrstuvwxyz Os dez d gitos 0123456789 S mbolos comuns ou caracteres especiais lt espa o gt _ amp entre eles operadores aritm ticos el gicos lt gt gt lt N O PERMITIDOS NO FORTRAN Algumas letras especiais ou s mbolos tais como 7 entre outros O n mero total de caracteres e s mbolos requeridos menor do que 256 mas mesmo assim utilizado 1 Byte de mem ria para armazenar cada caracter Embora incompleto este o sistema de c digo ASCII American Standard Code for Information Interchange usado na maioria dos computadores Atualmente
121. f eh 10 228403 No loop 88 resultado da tangente de Inf eh NaN No loop 89 ooooooo No loop 85 j aparece o problema que a extrapola o do limite do expoente da pot ncia de dez A corre o neste caso depende do problema que est sendo resolvido Uma poss vel solu o a troca para precis o dupla das vari veis reais Neste caso ser necess rio executar novamente com a mesma sa da provis ria para verificar se o problema foi contornado Outra possibilidade se n o necess rio realizar um loop com 200 repeti es pode se alterar o loop paraDO i 1 84 O programa 1 14 corrigido apresentado a seguir As linhas que foram corrigidas est o destacadas e as linhas 137 e 138 podem ser descartadas depois de resolvido o erro Programa 1 15 Programa 1 14 corrigido PROGRAM teste erro IMPLICIT NONE INTEGER i j m REAL x y z theta REAL PARAMETER pi 3 14159265 lt DO 1 RIO Inicia um loop com 200 repeticoes x 1 EXP REAL i EXP REAL i Ww War x z TAN y theta y 180 0 pi Converte angulo p graus WRITE x O resultado da tangente de theta amp ahs ae Fee No OOD oo aly 139 140 320 livrof90 v8 preliminarl 2014 5 5 1 07 page 44 55 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran END DO Finaliza o loop com 200 repeticoes WRITE x theta z Soh para fins didaticos END PROGRAM teste
122. finaliza es cujo objetivo limpar desalocar a me m ria de ponteiros quando deixam de existir manipula o otimizada de dados entre outras a aloca o de componentes o atributo VOLATILE o qual indicar que o dado objeto poder sofrer altera o ao longo da exe cu o mesmo por outro programa que esteja rodando em paralelo transfer ncia de aloca es de mem ria e acr scimos nos procedimentos intr nsecos avan os nas Entradas Sa das opera es de transfer ncia definidas pelo usu rio para da dos definidos pelo usu rio controle nas convers es de formatos constantes nomi nativas para unidade l gicas pr conectadas acesso as mensagens de erro instru o FLUSH que permitar entre outras coias ler via teclado caracter por caracter e tam b m tornar dispon vel o dado para outro processo Entrada Sa da assincr na que permitir qie outras instru es podem ser executadas enquanto uma instru o de En trada Sa da leitura escrita est em execu o procedimento ponteiros suporte para as exce es do padr o para pontos flutuantes TEEE 1989 mais interoperabilidade com a linguagem C permitindo por exemplo acesso a bibliotecas de baixo n vel da linguagem C e vice versa ou seja bibliotecas escritas em Fortran podem ser acessadas pela linguagem C suporte ao conjunto de caracteres internacionais acesso aos caracteres ISO 10646 2000 4 byte que suficiente para cobrir todas a
123. forma o valor do ngulo em graus para radianos e livrof90 v8 preliminarl 2014 5 5 1 07 page 19 30 Fortran 95 curso b sico Gilberto Orengo imprime o valor do cosseno do ngulo Todo o procedimento foi executado em precis o simples cujo tema ser tratado na p gina 23 A numera o a esquerda n o faz parte do c digo e a sua utiliza o para melhor explicar cada linha do c digo ou programa Esta ser uma pr tica daqui para frente Lembre se que ainda ter s contato com todos os elementos Fortran portanto se n o compreender alguma descri o ela ser tratada ao longo do livro Programa 1 2 Exemplo de programa que converte ngulos em graus para radianos PROGRAM graus para rad IMPLICIT NONE I Este programa converte angulos em graus para radianos l REAL theta ang_rad REAL PARAMETER pi 3 14159265 WRITE x Indique um angulo em graus READ x theta ang rad theta pi 180 0 Aqui ocorre a conversao WRITE O angulo theta em graus vale amp angara alditanio sk WRITE Teos theta COS ang rad END PROGRAM graus para rad Procurou se neste exemplo deixar clara a estrutura de um programa Fortran 95 e ob serve que as instru es da linguagem est o em negrito Embora seja opcional um programa Fortran 95 inicia com a instru o PROGRAM seguida do nome do programa Na sequ ncia constam as declara es de vari veis
124. gonline com REAL pi alfa theta t EX modulo pi 3214159265 WRITE Digite o valor do angulo em graus n READ x alfa theta alfaxpi 180 0 Converte p radianos WRITE Digite o valor da Forca em Newtons READ f 12 13 14 15 livrof90 v8 preliminarl 2014 5 5 1 07 page 32 43 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran fx f xCOS theta modulo ABS fx WRITE NAN Eorca DNO eixo x em modulo eh Tr modulo END PROGRAM uso_funcoes H casos que ser necess rio utilizar as fun es intr nsecas para obter outras Por exem plo no caso de logaritmos em outras bases usa se a mudan a de base pela rela o log z no Fortran LOG10 x LOG1O a log a loga x H fun es intr nsecas que determinam rela es entre Inteiros Reais e Complexos des critas na tabela 1 2 que tamb m ser o importantes no decorrer do livro Tabela 1 2 Algumas fun es intr nsecas para manipula o de inteiros e reais Instru o Argumento Fun o REAL x I Ro C Converte um n mero inteiro real de dupla precis o e complexos em um n mero real de precis o simples Ex REAL 7 resulta em 7 00000000 DBLE x IRsC Converte um n mero inteiro real de precis o simples e complexo em um n mero real de precis o dupla Ex DBLE 7 resulta em 7 000000000000000 INT x RC Converte um n mero real de precis
125. gramas que contenham a declara o USE do referido m dulo Isto pode nem sempre ser desejado o caso se os procedimentos do m dulo tamb m contenham vari veis que perten am s as suas pr prias fun es Elas estar o mais a salvo se os usu rios do pacote n o interfiram com seus trabalhos internos Por default todos os nomes num m dulo s o PUBLIC mas isto pode ser trocado usando a declara o PRIVATE Vejamos o exemplo livrof90 v8 preliminarl 2014 5 5 1 07 page 117 128 Fortran 95 curso b sico Gilberto Orengo 1 MODULE change ac 2 IMPLICIT NONE 3 PRIVATE 4 PUBLIC casa 1 hotel rs 5 REAL casa 1 fazenda rs 6 INTEGER apto 1 hotel rs 8 END MODULE change ac Neste caso uma unidade de programa que use este m dulo n o ter acesso as vari veis fazenda rseapto 1 Mas ter acesso as vari veis casa 1ehotel rs Sobre m dulos existem ainda outras caracter sticas interessantes mas isto que vimos j o suficiente para mostrar a sua potencialidade Assim chegamos ao final deste minicurso de Introdu o ao Fortran 90 95 evidente que o que foi apresentado pode ser aprofundado principalmente sobre o ltimo assunto m dulos e interfaces Muitas outras novas instru es escaparam ao minicurso por motivo bvio tais como as instru es FORALL espec fica para processamento paralelo WHERE TYPE CASE POINTER e TARGET que entre outras tornaram a linguagem Fort
126. guagem Fortran foi desenvolvido to dos os programas de computador eram escritos usando o c digo assembler Foi John Backus e sua equipe ent o trabalhando na IBM que prop s e desenvolveu um m todo econ mico e eficiente de programar A id ia foi de projetar uma linguagem que possibilitasse expressar f rmulas matem ticas de uma maneira mais natural do que na poca era feito somente com a linguagem assembler Do resultado de suas primeiras tentativas surgiu o FORTRAN forma abreviada para IBM Mathematical FORmula TRANslation System Esta nova linguagem possibilitou que as instru es acima fossem escritas de maneira menos criptografada como por exemplo K I J A seguir veremos a diferen a entre compiladores interpretadores e depuradores Compilador Compilador um programa que a partir de um c digo fonte escrito em uma linguagem de programa o de alto n vel cria um programa semanticamente equivalente por m escrito em outra linguagem conhecido por c digo objeto ou linguagem de m quina ou ainda ins tru es de c digo assembler o qual chamaremos simplesmente de execut vel As principais numa compila o a partir de um c digo fonte s o 1 An lise l xica processo que analisa a entrada de linhas de caracteres de um c digo fonte caractere a caractere e produz uma seqii ncia de s mbolos chamado s mbolos l xi cos ou simplesmente s mbolos tokens que podem ser manipulados mais facilmente na
127. h begin minipage 1 0 Linewidth footnotesize bfseries Programa thechapter arabic np 1 end minipage egroup vspace 6pt noindent textcolor cinza1 fboxsep2 5pt fboxsep5pt colorbox cinza1 normalcolor box0 endgroup par addvspace 6pt minus 3pt noindent normalcolor ignorespacesafterend refstepcounter np let Programa programa let endPrograma endprograma Para os exemplos de programas que apresentam continua o na p gina seguinte alterou se o nome do ambiente para contprog e substitui se a linha bfseries Programa thechapter arabic np 1 pela bfseries Continua o do Programa thechapter arabic np livrof90 v8 preliminarl 2014 5 5 1 07 page 134 145 AP NDICE E O EHX E ESTE LIVRO OS MINI SUM RIOS DOS CAP TULOS A id ia deste item no in cio de cada cap tulo tem dois objetivos Primeiro informar ao leitor o que encontrar no decorrer do mesmo e segundo transcrever uma frase de um cientista conhecido para possibilitar uma reflex o O IXIEX proporciona o pacote minitoc sty para gerar mini sum rios mas a op o em cri los manualmente foi para ter controle sobre todo o conte do deste item como por exemplo filtrar os itens que constar o no mini sum rio O comando INIZIO 1 2 gera o mini sum rio newcommand INIZIO 2 vspace 8cm color cinza6 rule textwidth 3mm 2cm noindent begin minipage t 0 5 textwid
128. ica IMPLICIT NONE LOGICAL a b c TRUE a 5572 je 547 IF c THEN WRITE x x TRUE ou verdadeiro ELSE WRITE x FALSE ou falso END IF WRITE 5 u Resultados Ce S77 el S lt i s ane END PROGRAM logica livrof90 v8 preliminarl 2014 5 5 1 07 page 67 78 Fortran 95 curso b sico Gilberto Orengo 3 1 3 Hierarquia dos Operadores A ordem de prioridades entre os operadores utilizada na linguagem Fortran 1 2 3 4 5 6 7 8 Opera es que est o no interior de par nteses iniciando sempre dos par nteses mais internos para os mais externos Todas as potencia es e depois as radicia es SQRT Obs a radicia o pode ser transformada numa potencia o por exemplo V6 6 1 2 que na linguagem Fortran fica 6x 1 2 Deve se tomar muito cuidado nesta opera o porque numa potencia o o expoente sempre inteiro Assim neste caso o expoente para n o ser nulo j que 1 2 0 na aritm tica de inteiros preciso fazer uma divis o por reais Quando isto for realizado a opera o trocada por a china 61 2 el 2In 6 e o cuidado est na base que n o poder ser negativa porque o logaritmo de n mero negativo n o definido A potencia o sempre ser realizada da direita para a es querda 3 38 6561 mas cuidado com 342 316 43046721 que diferente da anterior Os resultados ant
129. il r1 6 i2 INT rlxil 7 13 NINT rlxil 8 r2 rl xxil 9 WRITE x x il 32 33 rl r2 1 END PROGRAM exemplo 1 5 O programa abaixo tem o objetivo de calcular os comprimentos dos lados de um tri ngulo ret ngulo A adjacente e B oposto dados os valores da hipotenusa C e do ngulo O programa ser executado Se n o explique Se sim ele produzir re sultados corretos Explique Caso necessite de altera o o que voc modificaria ou acrescentaria 1 PROGRAM exemplo3 2 REAL a b c theta 3 WRITE Entre com o comprimento da hipotenusa C 4 READ C 5 WRITE Entre com o valor do angulo THETA em graus 6 READ x theta 7 a cxCOS theta 8 b cxSIN theta 9 WRITE O comprimento do lado adjacente eh a 10 WRITE O comprimento do oposto eh p u END PROGRAM exemplo3 1 6 Que valores sair o quando as seguintes instru es forem executadas livrof90 v8 preliminarl 2014 5 5 1 07 page 47 58 Fortran 95 curso b sico Gilberto Orengo 1 7 1 8 1 9 1 10 1 11 1 PROGRAM exemplo4 2 INTEGER i 3 LOGICAL 1 4 REAL a 5 a 0 05 6 i NINT 2 3 141593 a 7 1 i gt 100 8 a ax 5 3 9 WRITE x x i a 1 10 END PROGRAM exemplo4 Escreva um programa em Fortran 95 que calcule o pagamento semanal de empregados horistas O programa dever perguntar ao usu rio o valor pago por hora por fu
130. im como para outros tipos de compiladores por uma palavra chave que depende de compilador para compilador No nosso caso o 995 do Fortran G95 Ao compilar anexado ao c digo entre outras instru es matem ticas instru es de dispositivos de entrada e sa da de dados por exemplo via teclado e via moni tor respectivamente Os arquivos execut veis gerados s o espec ficos para cada processador e ou sistema operacional isto c digo compilado num computador com processador Intel Pentium ou AMD n o ser executado numa Esta o Sun SPARC e vice versa Da mesma forma um c digo compilado num computador com sistema operacional Windows n o ser executado num computador com sistema operacional Linux UNIX ou MacOS e vice versa Assim quando trocarmos de plataforma processador e ou sistema operacional devemos compilar novamente o c digo Observe que um termo novo c digo ou c digo computacio nal foi introduzido e se refere a um programa de computador gerado com uma linguagem de programa o No Ap ndice na p g apresentado o compilador G95 utilizado como refer ncia neste livro indicado como baix lo na internet e instal lo tanto para a plataforma Win dows como para Linux Exemplos de uso do compilador est o descritos a partir da p gina 16 Existe outra forma de executar um programa de computador gerado por uma lingua gem de programa o S o os interpretadores E para corrigir erros em programas po
131. ios e problemas Costumo evidenciar que em programa o h uma diferen a entre exerc cios e problemas ou entre a solu o de problemas e pr tica com exerc cios O primeiro subentende que o segundo foi realizado exaustivamente e assim estaremos em princ pio habilitados para resolver ou solucionar problemas O endere o da p gina http www orengonline com fortran95 Tamb m est o dispon veis as respostas e coment rios a respeito dos exerc cios do livro no item exerc cios E para verificar se est pronto para resolver problemas um conjunto deles est dispon vel no item problemas METODOLOGIA Nos exemplos de programas as instru es da linguagem Fortran ser o destacadas em negrito e os elementos que n o fazem parte da parte da sintaxe da linguagem ser o escritos sem negrito Mas no texto para chamar aten o ser o tamb m destacados em negrito Gilberto Orengo Santa Maria 2007 livrof90_v8 preliminarl 2014 5 5 1 07 page 1 12 CONSIDERA ES INICIAIS Apresentando o Fortran Neste cap tulo voc encontrar TA Introdu o ss sos pasa gem W aku E 1 1 5 2 Dados Reais REAL 21 OLIVO ge elo ong af sai a Go sen Bs 2 Precis o Simples Single Precision 21 Um Breve Hist rico sobre o Fortran 3 Precis o Dupla Double Precision 22 1 2 Os bits e bytes 6 1 5 3 Os N meros Complexos COMPLEX 22 1 3 Como Trabalha a Mem
132. ista entre inteiros e reais sempre ser real Vejamos como isso ocorre na seguinte sequ ncia para a terceira express o 2 1 2 gt 2 1 2 2 2 4 sd 2 5 Cada termo resolvido separadamente Primeiro pela hierarquia resolve se a divis o Como tem uma opera o envolvendo um inteiro e um real inicialmente o Fortran converte o inteiro para real A seguir a opera o de divis o realizada No pr ximo passo novamente h o en volvimento entre inteiro e real Novamente primeiro o Fortran converte o inteiro para real para finalmente fornecer o resultado em real Outro cuidado quanto ao envolvimento de opera es mistas com exponencia o Por exemplo seja 61 2 que na linguagem Fortran fica 6 1 2 Deve se tomar muito cui dado nesta opera o porque numa potencia o o expoente sempre inteiro Assim neste caso o expoente n o pode ser nulo j que 1 2 0 na aritm tica de inteiros Ent o preciso fazer uma divis o por reais Quando o expoente fracion rio a opera o substituida por a eblna em que b real 61 2 e1 2 1n 6 sendo que a base inteira foi convertida para real e passou como argumento do logaritmo natural Ent o o cuidado est na base que n o poder ser negativa porque o logaritmo de n mero negativo n o definido Finalmente um ltimo cuidado embora n o tem nada a ver com opera es mistas importante salientar A potencia o sempre ser realizad
133. itiva e metade para a negativa Assim o intervalo dado por 27128 2127 que resulta em 10788 1088 Isto quer dizer que um n mero escrito em precis o simples ter at 7 ou 8 algarismos signifi cativos d gitos decimais e o seu expoente da pot ncia de 10 deve estar contido no intervalo entre 38 e 38 Excedendo a este intervalo acarretar no erro de overflow PRECIS O DUPLA ou DUPLA PRECIS O Double Precision O Fortran 95 inclui uma possibilidade de representar n meros reais de forma mais ampla do que a precis o simples default nos computadores Esta possibilidade conhecida como Dupla Precis o ou Double Precision Usualmente a dupla precis o de 8 Bytes ou 64 bits sendo 53 bits para a mantissa e 11 bits para o expoente Assim temos i Mantissa precis o n 53 bits 9 1 25 que equivale entre 15 e 16 algarismos significativos ii Expoente gt n 11 bits gr 9M bits 9204810 sendo metade para a parte positiva e outra para a negativa Assim o intervalo dado por 271924 lt 21024 que resulta em 107308 lt gt 10308 Desta forma um n mero escrito em precis o dupla ter at 15 ou 16 algarismos significativos d gitos decimais e o seu expoente da pot ncia de 10 deve estar contido no intervalo entre 308 e 308 Excedendo a este intervalo acarretar no erro de overflow livrof90 v8 preliminarl 2014 5 5 1 07 page 24 35
134. iver confuso na hora da depura o ssas a r rr r eres 127 D 4 Guia pr tico para resolu o de problemas de programa o 127 E OBIE e este Livro 129 Ed SobreotextO 064 nestas sa s hO Ewe Ee ee ea 129 E2 A defini o dos tons decinza ss s va was 0 ee 130 E3 A ota de margem pusa 5664 dua oo S OREO SON E YE QPU ea 131 E 4 As notas de observa es no texto 1 ee 131 livrof90 v8 preliminarl 2014 5 5 1 07 page vi 6 SUMARIO E 5 Os quadros das Instru es Fortran95 ee 132 E 6 Os exemplos de programas Fortran95 2 0 ee 133 E 7 Os mini sum rios dos Cap tulos 2 0 20 0 0000000 ae eee 134 E 8 As Refer ncias Bibliogr ficas 2 0 ee 134 Refer ncias Bibliogr ficas 135 livrof90 v8 preliminarl 2014 5 5 1 07 page vii 7 Fortran 95 curso b sico Gilberto Orengo livrof90 v8 preliminarl 2014 5 5 1 07 page vii 8 Apresenta o Nesta parte ser transcrito os textos de apresenta o de dois pesquisadores da rea de F sica e de Matem tica usu rios ativos e seniors do Fortran livrof90 v8 preliminarl 2014 5 5 1 07 page viii 9 livrof90 v8 preliminarl 2014 5 5 1 07 page ix 10 Pref cio Texto provis rio Este livro o resultado de um longo per odo de conta
135. ivo dados txt cont m os seguintes valores em que o s mbolo _ indica espa o em branco 30 40 21 50 A sa da ser 50 60 A verifica o de aprendizado pela pr tica com exerc cios e com a solu o de proble mas altamente recomend vel que fa a os exerc cios a seguir bem como os dispon veis no site http wwrw orengonline com fortran95 Ap s este treinamento estar apto a resolver pro blemas As respostas e coment rios a respeito dos exerc cios encontram se no referido endere o eletr nico em exerc cios E para verificar se est pronto para resolver problemas um conjunto deles est dispon vel em problemas tamb m no site acima indicado importante lembrar que este livro introdut rio e portanto n o cont m todas as ca pacidades mais avan adas das instru es Fortran Para uma abordagem neste n vel aconselha se os livros listados nas refer ncias biblioigr ficas livrof90 v8 preliminarl 2014 5 5 1 07 page 62 73 CAP TULO 2 TRABALHANDO COM ARQUIVOS ENTRADAS SAIDAS I O DE DADOS EXERC CIOS 2 1 O que ser impresso nas seguintes instru es Fortran Use a 345 e b 1 0020E6 e c 1 0001B6 a INTEGER a WRITE 100 a 100 FORMAT 1 a 14 1 b WRITE ES12 6 D c WRITE x 7 O resultado da diferenca entre ES14 6 e ES14 6 eh ES14 6 b a b a 2 2 Qual a largura
136. ivrof90 v8 preliminarl 2014 5 5 1 07 page 72 83 CAPITULO 3 AS ESTRUTURAS DE CONTROLE em que SELECT CASE especifica o inicio da estrutura de sele o direta lt express o gt a express o que servir de chave de sele ao Dever ser do tipo inteiro ou caracter ou l gico CASE a instru o que instruir o c digo a testar o lt seletor i gt lt seletor i gt o valor ou intervalo que ser comparado com a lt express o gt CASE DEFAULT uma instru o optativa O objetivo ativ la quando nenhum dos testes anteriores realizados pela instru o CASE for satisfeito O FUNCIONAMENTO Se o valor da express o est dentro dos valores inclu dos no seletor 1 ent o os pro cedimentos do bloco 1 ser o executados e a seguir o fluxo de execu o desviado para o END SELECT De forma semelhante se o valor de express o estiver entre os valores do seletor 2 os procedimentos do bloco 2 ser o executados A mesma id ia se aplica aos de mais outros casos desta estrutura O CASE DEFAULT opcional mas se estiver presente s ser executado se todos os seletor i anteriores forem falsos Ainda se o algoritmo n o conti ver o CASE DEFAULT e mesmo assim todos os seletor i anteriores forem falsos nenhum bloco da estrutura SELECT CASE ser executado O programa a seguir imprime mensagens conforme o valor da temperatura Programa 3 5 Exemplo de estrutura por sele o direta PROGRAM c
137. l que a vari vel real arma zenada em c 5 seja usada como um inteiro na sub rotina cuidado Estes tipos de erros podem ser evitados se usarmos a declara o MODULE no lugar do COMMON A DECLARA O MODULE A declara o MODULE ou m dulo simplesmente pode conter dados procedimentos ou ambos que podemos compartilhar entre unidades de programas programa principal subprograma e em outros MODULE Os dados e procedimentos estar o dispon veis para uso na unidade de programa atrav s da declara o USE seguida do nome do m dulo Ficar mais claro com um exemplo simples 8 2 1 Compartilhando Dados usando o MODULE O m dulo abaixo ser compartilhado com outras duas unidades de programas Vejamos MODULE teste Declara dados para compartilhar entre duas rotinas IMPLICIT NONE SAVE INTEGER PARAMETER num_vals 5 REAL DIMENSION num_vals valores END MODULE teste A declara o SAVE garante que todos os dados declarados no m dulo ser o preserva dos quando forem acessados por outros procedimentos Ele deve sempre inclu do em qual quer m dulo que declara dados compartilhados Agora vejamos como usar o m dulo acima atrav s do seguinte programa PROGRAM testa module Tlustra o compartilhamento via MODULE USE teste IMPLICIT NONE REAL PARAMETER pi 3 141592 valores pix 1 2 3 4 5 CALL subl SAVE um dos avan os do Fortran 90
138. la 3 3 Os operadores l gicos dispon veis no Fortran 95 Operadores L gicos Operador Fun o NOT nega o AND conjun o OR disjun o EQV equival ncia NEQV n o equival ncia livrof90 v8 preliminarl 2014 5 5 1 07 page 66 77 CAPITULO 3 AS ESTRUTURAS DE CONTROLE Tabela 3 4 Resultado de opera es l gicas Tabela verdade 1 valor Operador 2 valor Resultado NOT NOT AND AND AND OR OR OR EQV EQV EQV EQV NEQV NEQV NEQV NEQV lt r lt mm lt lt ri mm lt lt m r lt m lt lt lt lt lt lt r lt lt r r lt lt lt lt lt 7 lt Mm Na opera o com AND o resultado ser verdadeiro somente se ambos os valores re lacionados forem verdadeiros V No caso do operador OR o que interessa que um dos valores relacionados seja verdadeiro V para o resultado ser verdadeiro Em Fortran 95 os resultados de vari veis l gicas para verdadeiro V e falso F s o respectivamente Te F de TRUE e FALSE importante salientar que a atribui o a uma vari vel l gica realizada pelos valores TRUE para verdadeiro e FALSE para falso Por exemplo LOGICAL a TRUE LOGICAL b FALSE Digite o programa compile o e execute o para verificar o resultado Programa 3 1 Exemplo com operadores l gicos PROGRAM log
139. la a media x bar e o desvio padrao std dev 10 x bar sum x real n u std dev SQRT real n sum x2 sum x 2 real n real n 1 Perceba que os valores de x n o foram armazenados para c lculo da m dia x bar e do desvio padr o std dev Neste caso os dados foram lidos via teclado linha 5 Estes mesmos dados poderiam ser lidos de um arquivo Os dois maiores problemas associados com uso de arrays desnecess rias s o 1 Arrays desnecess rias desperdi am mem ria Arrays desnecess rias podem consumir uma grande quantidade de mem ria gerando com isso um programa maior do que ele neces sita ser Um programa grande requer mais mem ria para execut lo e portanto requer mais disponibilidade do computador Em alguns casos o tamanho extra do programa pode n o ser executado num dado computador 2 Arrays desnecess rias restringem a efici ncia do programa Para entender este ponto vamos considerar o programa exemplo acima que calcula a m dia e o desvio padr o de um conjunto de dados Se o programa projetado com 1000 elementos est ticos como en trada da array ent o ele somente trabalhar para um conjunto de dados de at 1000 elementos Se n s encontramos um conjunto de dados maior do que 1000 elementos o programa ter que ser recompilado e relinked com um tamanho maior para a array Por outro lado um programa que calcula a m dia e o desvio padr o de um conjunto de dados que s o lidos de um arq
140. lima temp INTEGER temp c WRITE x Informe a temperatura ambiente em Celsius READ x x temp c SELECT CASE temp c CASE 1 WRITE Hoje esta muito frio CASE 0 WRITE x x Temperatura de gelo da agua CASE 1 20 WRITE x Hoje esta frio mas suportavel CASE 21 25 WRITE x Hoje o clima esta agradavel CASE 26 35 WRITE Hoje est quente CASE DEFAULT WRITE Hoje o dia esta muito quente END SELECT END PROGRAM clima temp O valor de temp c controlar o fluxo do algoritmo Se a temperatura for menor ou igual a 1 ou menor que 0 ent o o primeiro bloco ser executado isto sair na tela do monitor a informa o Hoje esta muito frio e o fluxo incondicionalmente desviado livrof90 v8 preliminarl 2014 5 5 1 07 page 73 84 Fortran 95 curso basico Gilberto Orengo 73 para END SELECT O bloco abandonado Se n o for o caso isto a temperatura for igual a zero ent o o segundo bloco ser executado e n o o primeiro e novamente ap s ser exe cutado o procedimento do bloco o fluxo desviado para o final do bloco E assim sucessi vamente Observe que os selecionadores valores atribu dos para compara o com temp c n o se superp em um valor de temperatura s pode aparecer uma e somente uma vez no selecionador importante salientar que os lt seletor i gt podem assumir lt valor nico gt Executa
141. loco de decis o lt condi o l gica gt determina um teste l gico que se for verdadeira ent o THEN executa os lt procedimentos execut veis gt Se for falsa ent o THEN o fluxo de execu o desviado incondicionalmente para a linha seguinte ao END IF A sequ ncia de instru es IF THEN obrigatoriamente escrita na mesma linha END IF especifica o final do bloco de decis o lt r tulo gt Como o r tulo opcional n o comum utiliz lo para um nico bloco INDENTA O Observe a indenta o utilizada na defini o acima e no exemplo a seguir Estes afastamen tos facilitam a visualiza o dos blocos ou estruturas no programa Este estilo adotado ao longo do livro e uma boa pr tica de programa o No exemplo a seguir uma estrutura de decis o simples testa um n mero para identificar se mpar ou n o Para a solu o necess rio utilizar a fun o intr nseca MOD que fornece o resto da divis o entre n meros inteiros As fun es intr nsecas ou procedimentos intr nsecos est o descritos na p gina 31 no Cap tulo 1 Programa 3 2 Exemplo de estrutura por decis o simples PROGRAM no impar INTEGER a WRITE Digite um numero inteiro READ x a IF MOD a 2 1 THEN WRITE O numero digitado eh impar END IF END PROGRAM no impar Neste caso se a express o l gica MOD a 2 1 for verdadeira uma instru o de sa da imprimir uma frase n
142. loco de soma ou subtra o de vetores desde que os vetores sejam conformes isto tenham a mesma dimens o forma ou mesmo n mero de elementos Por exemplo livrof90 v8 preliminarl 2014 5 5 1 07 page 84 95 CAP TULO 4 AS VARI VEIS COMPOSTAS ARRANJOS INTEGER DIMENSION 5 A 10 INTEGER DIMENSION 5 B 2 INTEGER DIMENSION 5 C O resultado um vetor com os elementos todos iguais a 12 j que todos os vetores tem dimens o igual a 5 A multiplica o de vetores A multiplica o de vetores poss vel desde que os vetores sejam conformes isto tenham a mesma dimens o Este procedimento um produto interno ou produto escalar e em Fortran 95 realizado com a instru o DOT PRODUCT vetor1 vetor2 como segue INTEGER DIMENSION 5 A 10 B 2 INTEGER C C DOT PRODUCT A B que equivalente a C A 1 B 1 A 2 B 2 A 5 B 5 ou a C SUM AxB em que neste ltimo foi utilizado a instru o SUM para somar os elementos do produto de dois vetores O resultado final simplesmente um n mero e neste exemplo o resultado 100 AS MATRIZES As matrizes s o vari veis compostas bidimensionais Por exemplo seja a matriz da 2 3 10 6 em que a11 2 a12 3 a21 10 e a22 6 s o seus componentes De uma forma geral a matriz A2x2 ter componentes descritos da seguinte maneira A 411 412 421 022 e neste caso disp
143. ma forma um c digo compilado num computador com sistema operacional Win dows n o ser executado num computador com sistema operacional Linux e vice versa Assim quando trocarmos de plataforma processador e ou sistema operacional de vemos compilar novamente o c digo 3 Execute o c digo programa usando o comando No Linux nome programa ou a out No Windows nome programa exe ou a exe ou simplesmente nome programa ou a Agora que sabemos a sequ ncia da cria o de um programa Fortran segue abaixo um programa que imprime uma mensagem na tela do monitor Programa 1 1 O primeiro programa WRITE x x Ola mundo externo END Digite o num editor de texto preferido salve o com um nome desejado compile o con forme descrito na p gina 17 e ap s execute o Este o mais simples dos programas em Fortran Cont m apenas duas linhas e utiliza a instru o WRITE para transferir para a tela do monitora frase Ola mundo externo que est contida entre as aspas simples As aspas simples podem ser substitu das por duplas aspas por exemplo para contemplar a seguinte sa da que cont m uma aspa simples no seu texto WRITE x A queda d agua eh bonita END Observe novamente que todo programa Fortran 95 termina com a instru o END O SEGUNDO PROGRAMA Neste exemplo o programa 1 2 j s o apresentadas boas pr ticas de programa o que ser o descritas na sequ ncia O c digo trans
144. mado pelo usu rio substitui o inteiro no argumento UNIT dos exemplos acima Programa 2 3 Exemplo do uso de unidades l gicas 1 PROGRAM unidadel 2 IMPLICIT NONE 3 INTEGER a b ue 4 WRITE x Digite um numero inteiro 5 READ x a 6 b ax10 7 WRITE x Informe o numero gt 8 da unidade logica amp 8 amp de saida 9 READ ue 10 OPEN UNIT ue FILE saidal txt 11 WRITE ue b 12 CLOSE ue 13 END PROGRAM unidadel FORMATANDO AS SA DAS E OU ENTRADAS FORMAT Nos exemplos anteriores utilizamos entradas e sa das de dados sem formata o isto da maneira como foram gerados os dados ou resultados elas foram impressas seja na tela do monitor ou num arquivo poss vel converter a representa o interna como est na mem ria conforme a declara o da vari vel para uma representa o externa utilizando a instru o n o execut vel FORMAT Este comando simplesmente instrui o compilador que a sa da ou entrada de dado obedecer uma formata o estabelecida A sintaxe da instru o FORMAT lt r tulo gt FORMAT lt c digo chave gt em que lt r tulo gt um n mero inteiro associado a instru o FORMAT o qual ser o n mero de chamada por uma instru o READ e ou WRITE A instru o FORMAT pode ser posicio nada em qualquer linha no programa ap s as declara es de vari veis lt c digo chave gt especifica o s formato s adotado para entrada e ou s
145. mais COMPLEX 4 Intervalo 1 18 x 10738 at 3 40 x 1038 Precis o 7 8 d gitos decimais COMPLEX 8 Intervalo 2 23 x 107308 at 1 79 x 10308 Precis o 15 16 d gitos decimais COMPLEX 10 Intervalo 1074931 at 104932 Precis o aproximadamente 19 d gitos decimais LOGICAL 1 Valores TRUE e FALSE LOGICAL 2 Valores TRUE e FALSE LOGICAL 4 Valores TRUE e FALSE LOGICAL 8 Valores TRUE e FALSE CHARACTER 1 Conjunto de c digos da ASCII Precis o 1 caracter Obs indica o caso default isto assume se o valor na aus ncia de indica o livrof90 v8 preliminarl 2014 5 5 1 07 page 122 133 AP NDICE B OS TIPOS DE DADOS INTR NSECOS SUPORTADOS PELO FORTRAN 95 livrof90 v8 preliminarl 2014 5 5 1 07 page 123 134 Gloss rio ATRIBUI O assignment uma instru o na forma vari vel valor num rico ou express o designado ou identificado pelo s mbolo de igualdade Por exemplo z 4 indica que o valor inteiro 4 atribu do a vari vel z Outro exemplo x y 2 2 0xy cujo valor s ser atribu do a vari vel x ap s a solu o num rica da express o a direita DISPOSITIVO device um meio material ou equipamento tal como uma unidade de disco HD disquete CD teclado monitor impressora ou at mesmo a mem ria do computador INSTRU O statement uma seqti ncia de tokens ou seja uma sequ ncia de
146. mmer s Guide to Fortran 7 de Clive G Page da University of Leicester UK 1995 A diferen a entre o Fortran 90 e o 95 sutil No Fortran 95 foram realizadas peque nas corre es do Fortran 90 e introduzidas algumas facilidades de programa o paralela como por exemplo o procedimento FORALL A escolha do t tulo do livro foi pelo Fortran 95 embora n o trataremos neste texto a respeito dos avan os do Fortran 95 que far parte da sequ ncia do livro numa edi o mais avan ada Este livro tem um perfil introdut rio e veremos os conceitos m nimos necess rios para uma inicia o na linguagem Fortran intro duzindo alguns conceitos mais modernos do Fortran 90 95 Este livro foi pensado para ser usado por estudantes que n o conhecem a linguagem Fortran bem como por aqueles que j dominam a linguagem Os programadores que tiveram contato com o antigo e bom FORTRAN 77 ter o neste livro uma atualiza o especialmente nos ltimos quatro cap tulos aconselh vel para os iniciantes que leiam os cap tulos na sequ ncia em que s o apresentados J os conhecedores da linguagem podem saltear entre livrof90 v8 preliminarl 2014 5 5 1 07 page x 11 SUMARIO os cap tulos conforme a necessidade mas sugerido que leiam o primeiro cap tulo para entenderem algumas peculiaridades da escrita do livro Na p gina oficial do livro estar o dispon veis atualiza es corre es novidades exer c c
147. narl 2014 5 5 1 07 page 30 41 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran escrita como segue REAL 8 dupla 2 A declara o da linha 10 DOUBLE PRECISION ser considerada obsoleta em breve E importante ent o substitu la por REAL KIND 8 dupla que tem o mesmo significado Na declara o da linha 11 o atributo LEN 10 indica o tamanho m ximo que o caracter pode assumir Aqui tamb m pode ser omitido a palavra chave LEN sem perda de signifi cado exemplificado na linha seguinte Por curiosidade a palavra chave LEN vem da palavra em ingl s length que significa comprimento OS PROCEDIMENTOS INTR NSECOS H tarefas que s o executadas com frequ ncia quando trabalhamos no computador por exemplo quando efetuamos c lculos podemos utilizar seguidamente o cosseno de um ngulo ou at mesmo o logaritmo ou a raiz quadrada de um n mero real O Fortran ofe rece com muita efici ncia um conjunto de procedimentos intr nsecos que fazem parte do n cleo do compilador O Fortran 95 tem mais de 130 procedimentos intr nsecos divididos em diferentes classes Elementares s o os procedimentos matem ticos num ricos de manipula o de caracte res e de bits Consulta que relatam ou retornam o estado de determinado procedimento como por exemplo se a aloca o de mem ria ou a leitura de um dado foi um sucesso ou n o Transforma o procedimento que transforma de um estado
148. ncio n rio e o n mero de horas trabalhada na semana O c lculo deve se basear na seguinte express o Total Pago Valor da Hora x Horas Trabalhadas 1 1 Finalmente voc dever mostrar o valor pago total Teste seu programa calculando o valor pago semanalmente para uma pessoa que ganha R 7 50 por hora e trabalha 39 horas A dist ncia entre dois pontos 1 y1 e x2 y2 no plano Cartesiano dado pela equa o d y zi z2 2 y1 y2 1 2 Escreva um programa em Fortran 90 95 para calcular a dist ncia entre quaisquer dois pontos x1 y1 e 2 y2 especificados pelo usu rio Use boas pr ticas de programa o no seu programa Calcule a dist ncia entre os pontos 2 3 e 8 5 Desenvolva um programa que fornecido pelo usu rio um n mero entre 1000 e 9999 separe e escreva os valores referentes ao milhar a centena a dezena e a unidade Exem plo no caso do n mero 7452 milhar 7000 centena 400 dezena 50 e a unidade 2 O aumento dos funcion rios de uma f brica calculado com base em 80 do IGP M acumulado no ano ndice Geral de Pre os do Mercado da Funda o Get lio Vargas FGV Fa a um programa que leia o n mero do funcion rio o valor do IGP M e o sal rio atual do funcion rio A seguir calcule o aumento e o novo sal rio Escreva o n mero do funcion rio o aumento e o novo sal rio Obs use os seguintes nomes s vari veis n mero do funcion rio nf IGP M igpm aumento do s
149. nda sa da uma coluna em branco foi acrescentada antes do n mero 678 para completar o n mero de casas da declara o formatada j que ele menor que o espa o reservado Ou seja sempre que o n mero for menor que o espa o reservado o n mero ser escrito justificado direita As formata es podem ser utilizadas diretamente nas instru es READ e WRITE Por exemplo as seguintes instru es WRITE 100 al a2 READ 200 a3 a4 100 FORMAT 13 2X E10 2 200 FORMAT 215 podem ser substitu das por WRITE x 13 2X E10 2 al a2 READ x 215 a3 a4 CORRIGINDO ERROS DEBUGGING 1 2 Quando utilizamos entradas e sa das formatadas via arquivo necess rio muita aten o Veremos dois casos de posicionamento dos dados de entrada ENTRADA DE DADOS EM UMA NICA LINHA DE UM ARQUIVO O programa abaixo recebe dados reais de um arquivo em uma nica entrada pela instru o READ conforme uma formata o espec fica Programa 2 6 Exemplo de erro devido a formata o inadequada PROGRAM format real IMPLICIT NONE REAL a Db c OPEN UNIT 10 FILE dados txt STATUS OLD WRITE Digite dois numeros reais para soma los READ 10 100 a b Unica entrada C livrof90 v8 preliminarl 2014 5 5 1 07 page 61 72 Fortran 95 curso basico Gilberto Orengo 8 WRITE x 100 c 9 100 FORMAT F5 2 10 END PROGRAM format_real O arqu
150. ndo encontra um RETURN ou END FUNCTION A instru o RETURN opcional e raramente utilizada pois a execu o sempre termina num END FUNCTION A livrof90 v8 preliminarl 2014 5 5 1 07 page 102 113 CAP TULO 6 AS SUB ROTINAS E FUN ES declara o Tipo opcional se a declara o IMPLICIT NONE estiver presente Caso contr rio necess rio declarar o tipo de fun o Estes tipos podem ser REAL INTEGER COMPLEX CHARACTER ou LOGICAL Ap s ser executada a fun o retorna um valor que ser usado para continuar a execu o da express o na qual a fun o foi chamada Um exemplo de fun o definida usu rio mostrado abaixo a qual calcula o valor da fun o f x az2 bz c num ponto z Programa 6 3 Um exemplo de fun o REAL FUNCTION func x a b c Objetivo calcular um polinomio quadratico do tipo arxx 2 bax c IMPLICIT NONE REAL INTENT IN x a b c Dados de entrada da funcao Calculo da expressao func arx 2 o C N N m amp OWN END FUNCTION func Esta fun o produz um resultado real Observe que o atributo INTENT n o usado com a declara o do nome da fun o func porque ela sempre ser usada somente como sa da Note tamb m que se n o fosse declarada como real a vari vel func deveria ser declarada no corpo da FUNCTION como de h bito Um programa que usa esta fun o pode ser Programa 6 4 Um programa para tes
151. nos prestigiando que sua vez chegar Fa a um programa que leia um n mero inteiro de 3 algarismos e imprima uma infor ma o se o algarismo da casa das centenas par ou mpar Crie um programa para ler um n mero inteiro de 4 algarismos e imprimir se ou n o m ltiplo de quatro o n mero formado pelos algarismos que est o nas casas da unidade e da centena Desenvolva um programa que leia o ano de nascimento de uma pessoa e o ano atual A seguir imprima a idade da pessoa N o se esque a de verificar se o ano de nascimento um ano v lido Construir um programa em Fortran 95 que calcule a m dia aritm tica de v rios valores inteiros positivos lidos externamente O final da leitura acontecer quando for lido um valor negativo Mostrar o resultado ao final Escreva um programa em Fortran 95 que calcule a m dia dos n meros digitados pelo usu rio se eles forem pares Termine a leitura se o usu rio digitar O zero Mostrar o resultado ao final Desenvolva um programa em Fortran 95 que some os n meros fornecidos pelo usu rio at que o n mero lido seja igual a zero e mostre a soma Chico tem 1 5 metros e cresce 2 cent metros por ano enquanto Z tem 1 1 metros e cresce 3 cent metros por ano Fa a um programa que calcule e mostre quantos anos ser o necess rios para que Z seja maior que Chico Fa a um programa em Fortran 95 que leia um n mero n que indicar quantos valores devem ser lidos a seguir e para c
152. o Pref cio 1 CONSIDERA ES INICIAIS Apresentando o Fortran 11 1 2 13 1 4 1 5 1 6 1 7 TOLO ee rge RS oe E E OHSS Pe Saeed OULINPOZ z S Sate amp alee VOS 3 OG 2 S Si BS X EES eae 84 Um Breve Hist rico sobre o Fortran gt 2 2 2 aa v esa es eee Os Pits bytes ul as ds e e hee Goa BIA a hy El ga ars 4 Como Trabalha a Mem ria do Computador Compilador s 24004040 2 se map p hos a a 2 R EO DO pave ead aS Interpretadof cus crees 5 6S 2244 Sees bev ee SR aa d Depurador i su s Sed Sede BS ee GUS hum ap ee ea ees ee eS 2 As Unidades de Programa s ss s cs soro sot s S Q Q k eon ee O Programa Principal Main Program rere O Formato livre seise gia eae ioe ew ee SUS SNS SS S a Poe ee Q 9 O Conjunto deCaracteres amas vs Qs eb SC E aa QL E l Os Nomes Simb licos em Fortran 2 s w s wa a s po wow a k wn w ss Os R tulos em Fortran e O Primeiro Programa ass wasis wk suqus E ana SOP s sha sun KUR S Ea wU ua N OQ Segundo Programa uyu snes ee USU kupa S SW s Co a G n ee wa s A Despensa de Dados no Fortran95 sore doe s a sis e e a n pan sa a K 1 5 1 Dados Inteiros INTEGER Precis o Simples 1 5 2 Dados Reais ou de Pontos Flutuantes REAL Precis o Simples Single Precision e ca c sawa s s s uyu aoro tt Precis o Dupla Double Precision 1 5 3 Os N meros Complexos COMPL
153. o SUBROUTINE marca o in cio de uma sub rotina O nome da sub rotina deve seguir os padr es do Fortran deve ter at 31 caracteres e pode ter tanto letras do al fabeto como n meros mas o primeiro caracter deve ser obrigatoriamente uma letra A lista de argumentos cont m uma lista de vari veis arrays ou ambas que s o passadas para a sub rotina quando a mesma ativada Estas vari veis s o chamadas argumentos mudos dummy arguments porque a sub rotina n o aloca mem ria para elas A aloca o ser efeti vada quando os argumentos forem passados na chamada da sub rotina Qualquer unidade de programa pode chamar uma sub rotina at mesmo outra sub Dolorosa 10 11 12 13 livrof90 v8 preliminarl 2014 5 5 1 07 page 100 111 CAP TULO 6 AS SUB ROTINAS E FUN ES rotinalNU Para usar ou chamar uma sub rotina usado a declara o CALL da seguinte maneira CALL lt nome da sub rotina gt lt lista de argumentos gt em que a ordem e tipo dos argumentos na lista de argumentos devem corresponder a ordem e tipo dos argumentos mudos declarados na sub rotina A sub rotina finaliza sua exe cu o quando encontra um RETURN ou um END SUBROUTINE e retorna ao programa que a requisitou na linha seguinte ao CALL Quando a execu o encontra um RETURN imedia tamente o fluxo de execu o desviado para a linha que cont m o END SUBROUTINE Um exemplo simples ilustra melhor o que uma s
154. o bloco se lt valor nico gt lt express o gt lt valor m ximo gt Executa o bloco para todos os valores de lt express o gt me nores ou igual a lt valor m ximo gt lt valor m nimo gt Executa o bloco para todos os valores de lt express o gt mai ores ou iguala lt valor m nimo gt lt valor m nimo gt lt valor m ximo gt Executa o bloco para todos os valores da lt express o gt entre lt valor m nimo gt inclusive e lt valor m ximo gt inclusive 3 3 ESTRUTURAS DE REPETI O LOOPS Veremos dois tipos de estruturas de repeti o o DO END DO eo DO IF END DO conhecido tamb m por DO infinito Em ambos a caracter tisca principal repetir procedimentos conforme uma l gica estabelecida 3 3 1 A Estrutura de repeti o DO END DO A sua forma geral em que DO especifica o in cio da repeti o dos procedimentos internos ao bloco DO END DO e inicia a execu o dos lt procedimentos gt lt r tulo gt uma identifica o opcional da estrutura de repeti o lt contador gt lt valor i gt lt valor f gt lt incremento gt o controle das repe ti es pela vari vel de controle contador sempre do tipo inteiro Mais lt valor i gt um valor inteiro que determina o in cio do contador lt valor_f gt um valor inteiro que determina o final do contador e assim o fim do bloco de repeti o fortran 95 fortran 95 livrof
155. o resumo dos cap tulos em um nico local por acreditar que esta metodologia contribua mais para o aprendizado e seja mais did tica do que o resumo no final de cada cap tulo INTO termo compilador se refere no jarg o da inform tica a um software que faz a tradu o de um programa fonte codificado em um c digo leg vel para a m quina Estudaremos o compilador na p gina 10 INZ Informa es a respeito da licen a GNU podem ser obtidas em http www fsf org livrof90_v8 preliminarl 2014 5 5 1 07 page 4 15 CAPITULO 1 CONSIDERAGOES INICIAIS Apresentando o Fortran UM BREVE HISTORICO SOBRE O FORTRAN Para muitos nos anos 80 0 Fortran estava morto e sepultado porque a sintaxe da lin guagem foi e at os dias atuais considerada arcaica por muitos programadores que apren deram linguagens mais modernas O Fortran uma linguagem de computador para programa o t cnica e cient fica a qual foi criada sob medida para execu o eficiente em uma vasta variedade de processadores A primeira padroniza o ocorreu 1966 e desde ent o foram realizadas tr s revis es 1978 1991 e 1997 A revis o de 1991 foi a maior das tr s Uma quarta revis o foi implementada em acordo com o Encontro da ISO IEC JTC1 SC22 WG5 em 1997 que considerou todas as sugest es e pedidos dos usu rios da linguagem culminando no Fortran 2003 Os avan os significativos da revis o de 1991 foram a aloca
156. o simples ou dupla e complexo em um n mero inteiro por meio de truncamento Ex INT 5 9 re sulta em 5 e INT 3 5 resulta em 3 INT CMPLX 2 4 1 7 resulta em 2 NINT x R C Converte um n mero real em um n mero inteiro por meio de arre dondamento em que x um real Ex NINT 5 9 resulta em 6 e INT 2 4 resulta em 2 CMPLX x y IR Converte um n mero real ou inteiro s em um n mero complexo em que x um real Ex CMPLX 5 resulta em 5 0 0 0 e CMPLX 2 4 3 7 resulta em 2 4 3 7 CEILING x R fornece o menor inteiro maior ou igual ao real x Ex CEILING 3 15 4e CEILING 3 15 3 FLOOR x R fornece o maior inteiro menor ou igual ao real x Ex FLOOR 3 15 3 e FLOOR 3 15 4 Conven o para o Argumento I Inteiro R Real de simples ou dupla precis o Rs Real de precis o simples Ro Real de dupla precis o C Complexo Uma listagem completa das fun es pr definidas est dispon vel no site http www orengonline com fortran95 ou no Manual de Refer ncia da Linguagem Para o com pilador G95 consulte o endere o eletr nico http www g95 org 1 7 2 A Aritm tica com inteiros e reais AS EXPRESS ES ARITM TICAS As express es aritm ticas s o aquelas que apresentam como resultado um valor num rico livrof90 v8 preliminarl 2014 5 5 1 07 page 33 44 Fortran 95 curso b sico Gilberto Orengo que
157. odem ser utilizadas ou acessadas em qualquer parte do c digo inclusive no interior dos subprogramas J as vari veis declaradas locais no programa prin cipal e no interior dos subprogramas n o podem ser acessadas fora dos mesmos e no caso dos subprogramas s existir o enquanto o referido subprograma estiver ativo no fluxo de execu o do programa O exemplo abaixo evidencia as diferen as entre elas Os procedimentos MODULE e as instru es USE ser o estudadas no Cap tulo 8 na p gina 111 e os subprogramas FUNCTION e SUBROUTINE no Cap tulo 6 na p gina 97 Mesmo assim poss vel compreender como s o usadas aqui Programa 1 3 Exemplos de declara es globais e locais MODULE var IMPLICIT NONE INTEGER a l b 2 c _ VARIAVEIS GLOBAIS END MODULE var PROGRAM teste dec global USE var gt ativa as variaveis globais IMPLICIT NONE INTEGER res VARIAVE1 LOCAL CALL soma res WRITE x O resultado eh res CALL mult res WRITE x O resultado eh res CONTAINS SUBROUTINE soma z IMPLICIT NONE INTEGER z d 4 _ _ _ VARIAVEIS LOCAIS WRITE o U hm Some O valor dalvariovelke intensa READ C ca ap lo or ap cl END SUBROUTINE soma END PROGRAM teste_dec_global SUBROUTINE mult z USE var gt ativa as variaveis globais IMPLICIT NONE INTEGER z d 4 VARIAVEIS LOCAI
158. om a declara o DEALLOCATE liberando mem ria para ser reutilizada A sua estrutura DEALLOCATE lista das vari veis a serem desalocadas STAT nome do status Um exemplo DEALLOCATE ontem 100 0 10 STATUS info onde o STATUS tem o mesmo significado e uso que tem na declara o ALLOCATE Ap s de salocar a array os dados que a ela pertenciam n o existem mais na mem ria Ent o tenha livrof90 v8 preliminarl 2014 5 5 1 07 page 94 105 CAP TULO 5 A ALOCA O DIN MICA DE MEM RIA ALLOCATABLE muito cuidado Devemos sempre desalocar qualquer array uma vez que tenha terminado o seu uso Esta pr tica especialmente importante em SUBROUTINE e FUNCTION QUANDO DEVEMOS USAR UMA ARRAY Em programa o principalmente em Fortran se fala muito em arrays mas talvez nunca nos perguntamos quando devemos us las Em geral se muitos ou todos os dados devem estar na mem ria ao mesmo tempo para resolver um problema eficientemente ent o o uso de arrays para armazenar estes dados ser apropriado para este problema Por outro lado arrays n o ser o necess rias O exemplo abaixo parte de um programa mostra como nem sempre preciso usar uma array 2 DOi 1 n Le valores 3 WRITE x Entre com o numero 4 READ x x x 5 WRITE O numero eh x 6 sum x sum x x Acumulando a soma 7 sum x2 sum x2 xx x 2 8 END DO 9 Agora calcu
159. om controle de erro por isso aquela tela Erro de Prote o Geral Argh Este tipo de erro n o ocorre por exemplo na linguagem Java livrof90_v8 preliminar1 2014 5 5 1 07 page 89 100 Fortran 95 curso b sico Gilberto Orengo site http wwrw orengonline com fortran95 Ap s este treinamento estar apto a resolver pro blemas As respostas e coment rios a respeito dos exerc cios encontram se no referido endere o eletr nico em exerc cios E para verificar se est pronto para resolver problemas um conjunto deles est dispon vel em problemas tamb m no site acima indicado importante lembrar que este livro introdut rio e portanto n o cont m todas as ca pacidades mais avan adas das instru es Fortran Para uma abordagem neste n vel aconselha se os livros listados nas refer ncias biblioigr ficas livrof90_v8 preliminarl 2014 5 5 1 07 page 90 101 CAPITULO 4 AS VARIAVEIS COMPOSTAS ARRANJOS EXERCICIOS 4 1 Escreva um programa em Fortran 95 que leia 1 vetor de 15 elementos inteiros cada A seguir mostre o terceiro elemento do vetor e imprima o resultado da multiplica o do quinto elemento pelo d cimo elemento 4 2 Escreva um programa em Fortran 95 que leia 2 vetores de 10 elementos inteiros cada Criar um terceiro vetor que seja a uni o dos dois primeiros Mostrar o vetor resultante 4 3 Escreva um programa em For
160. or de e for zero caso que deve ser tratado especialmente considerando a resposta padr o como 1 por exemplo Para ilustrar melhor imagine o caso em que deseja se verificar se um vetor est ordenado em ordem n o decrescente Para isso basta verificar se v n lt v n 1 para todos os elementos exceto o ltimo pois para ele essa propriedade n o tem sentido Os casos patol gicos s o causa de grande parte dos problemas especialmente quando se trabalha com ponteiros Refer ncias www gamedev net Skiena Steven S The Algorithm Design Manual Telos 1997 livrof90 v8 preliminarl 2014 5 5 1 07 page 129 140 O IATFX e este Livro Com o objetivo did tico e tamb m de incentivo ao uso do IATRX ser o apresentados algumas das linhas de programa o em FIX que foram utilizadas na elabora o deste livro Trabalho com BIEX desde 1986 e as distribui es que eu utilizo atualmente s o o te tex no Linux e MikTeX no Windows Ambas funcionam perfeitamente embora eu prefira a do Linux por quest o puramente ideol gica Como referido no Capitulo 1 o BIFX distri bu do gratuitamente mas n o de c digo aberto embora as classes cls e pacotes sty o sejam Elas s o freeware Para editar os documentos utilizo no Linux o kile e no Win dows o WinShell quem podem ser obtidos gratuitamente respectivamente nos endere os http kile sourceforge net e http www winshell org Esta escolha
161. osta linhas por colunas Na mem ria a vari vel A armazenar seus componentes representada esquematica mente como segue na Figura 4 2 dispondo linhas por colunas A matriz 4 armazena valores inteiros ordenados por linha Assim na primeira linha temos os elementos 2 e 3 Perceba que desta forma os elementos de uma matriz s o ar mazenados na mem ria em uma sequ ncia de linhas Podemos efetuar o ordenamento por livrof90 v8 preliminarl 2014 5 5 1 07 page 85 96 Fortran 95 curso b sico Gilberto Orengo A 1 DIAG BD A 2 D A 2 2 2 3 10 6 Figura 4 2 Representa o na mem ria da vari vel composta A coluna A diferen a no ordenamento por linha ou coluna est no momento da montagem da matriz ou seja na informa o passada para a mem ria Isto ser visto logo a seguir Uma matriz assim como um vetor s armazenar valores de um mesmo tipo isto nunca poderemos armazenar numa matriz valores reais e inteiros ao mesmo tempo Teremos que criar uma vari vel que armazene os valores reais e outra para os inteiros 4 3 1 A declara o de uma matriz A declara o de uma matriz ou de uma vari vel composta bidimensional segue a seguinte estrutura 1 INTEGER A 2 2 2 REAL h 4 3 3 CHARACTER nomes 2 5 ou por 1 INTEGER DIMENSION 2 2 A 2 REAL DIMENSION 4 3 h 3 CHARACTER DIMENSION 2 5 nomes Avari vel A t
162. par centering begingroup setlength fboxsep 5pt findlength setbox0 vbox bgroup noindent hsize 1 0 Linewidth begin minipage 1 0 Linewidth small end minipage egroup vspace 6pt noindent textcolor cinza4 fboxsep2 5pt fboxsep5pt colorbox cinza4 normalcolor box0 endgroup par addvspace 6pt minus 3pt noindent normalcolor ignorespacesafterend let Sintaxebox sintaxebox let endSintaxebox endsintaxebox O pacote fancyvrb sty que habilita o ambiente Verbatim livrof90 v8 preliminarl 2014 5 5 1 07 page 133 144 Fortran 95 curso basico Gilberto Orengo OS EXEMPLOS DE PROGRAMAS FORTRAN 95 Os exemplos de programas Fortran 95 como o do primeiro programa Programa 1 2 O primeiro programa WRITE x Ola mundo externo END foram introduzidos da seguinte forma begin programa O primeiro programa fvset fontsize scriptsize numbers none fontfamily tt fontseries b VerbatimInput xleftmargin 12 5mm ex primeiro f90 end programa no qual foi utilizado novamente o pacote fancyvrb sty com a op o do comando VerbatimInput que anexa um arquivo no texto neste caso o ex primeiro 90 O ambiente programa foi gerado pelas seguintes linhas newcounter np novo contador setcounter np 1 newenvironment programa 1 par centering begingroup setlength fboxsep 5pt findlength setbox0 vbox bgroup noindent hsize 1 0 Linewidt
163. pessoa a resposta ser A parte da palavra digitada eh sso Podemos comparar caracteres da tabela ASCII A compara o ser utilizando as opera es l gicas de maior gt e menor lt por exemplo A gt a gt Falso ou FALSE livrof90 v8 preliminarl 2014 5 5 1 07 page 38 49 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran a gt A Verdadeiro ou TRUE AAa gt AAb gt Falso ou FALSE Y gt 9 gt Verdadeiro ou TRUE gt 9 Verdadeiro ou TRUE Isto poss vel porque na tabela ASCII os caracteres s o conhecidos pelas suas posi es num ricas inteiros Assim por exemplo todas as letras mai sculas vem antes das min suculas portanto as mai sculas possuem um n mero de refer ncia menor do que as min sculas O operador concatena o poss vel combinar dois ou mais conjunto de caracteres strings para formar um con junto maior Esta opera o feita pelo operador concatena o a dupla barra para esquerda Vejamos o exemplo Programa 1 10 Exemplo de concatena o de strings 1 PROGRAM ex conc 2 CHARACTER LEN 15 totall 3 CHARACTER LEN 7 total2 4 CHARACTER LEN 9 partel 5 CHARACTER LEN 6 parte 6 partel Gilberto 7 parte2 Orengo 8 cocali parceil parce 9 total2 partel 1 parte2 10 WRITE x x A primeira concatenacao eh totall 11 W
164. por engano escrever TA no lugar de TAN para a fun o tangente n o aparecer nesta primeira compila o Quando for detectado ser como erro de defini o de fun o Realizada esta corre o a coloca o dos dois pontos compila se novamente E a a surpresa Acompanhe a detec o dos erros de l gica na figura 1 2 Perceba que o compilador procura auxiliar indicando o prov vel tipo e posi o do s erro s Isto fica claro com a nota o In file ex erro f90 7 x 1 EXP i EXP i 1 Error Type of argument x in call exp at 1 should be REAL 4 not INTEGER 4 que indica o arquivo ex erro f90 ea linha 7 Perceba ainda que o 1 abaixo do EXP i indica a prov vel posi o do erro na linha O prov vel tipo de erro Error est no tipo de argumento da exponencial que deve ser real de precis o simples e n o inteiro Neste caso foram dois tipos de erro embora apare am tr s na indica o do compilador O primeiro a respeito do argumento da exponencial que espera um valor real e foi passado livrof90 v8 preliminarl 2014 5 5 1 07 page 42 53 42 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran G 7 gt em Orengo linux orengo Documents Fortran Shell Konsole 5 Sess o Editar Ver Favoritos Configura es Ajuda lorengo linux orengo Documents Fortran gt g95 ex erro f90 In file ex erro f90 5 REAL PARAMETER pi 3 14159265 E
165. poss veis O menor agrupamento de bits chamado de Byte Um Byte consiste de um grupo de 8 bits e a unidade fundamental usada para medir a capacidade da mem ria de um computador A partir desta unidade fundamental temos 1024 Bytes 1 KByte 1 KiloByte ou 1 KB devido a base dois temos 219 1024 1024 KBytes 1 MByte 1 MegaByte ou 1 MB 22 1048576 Bytes 1024 MBytes 1 GByte 1 GigaByte ou 1 GB 229 Bytes 1024 Gbytes 1 TByte 1 TeraByte ou 1 TB 2 Bytes Para compreendermos um pouco mais o sistema bin rio busquemos algo familiar o nosso sistema decimal ou sistema de base 10 representado pelo conjunto 0 1 2 3 4 5 6 7 8 9 Representamos um n mero nesta base por exemplo o 152 da seguinte forma 152 15219 1 x 107 5 x 10 2 x 10 O sub ndice 10 usado para indicar a base num rica E como representamos um n mero na base num rica do computador ou base 2 N4 Bem fazemos da mesma forma que na base 10 Vejamos o exemplo do n mero 101 101 1012 1 x 2 0 x 2 1 x 2 510 o qual representa no sistema decimal ao n mero 5 Observe que os tr s d gitos bin rios podem representar oito valores poss veis do 019 0002 110 0015 at 710 1115 Em geral como mencionado anteriormente se n bits s o agrupados juntos para formar um n mero bin rio ent o eles podem representar 2 valores poss veis Assim um grupo de 8 bits 1 Byte pode representar 256 valor
166. poss vel o que elas processar o Por exemplo se uma vari vel armazenar o valor de pi ent o conveniente cham la de pi Outro se uma express o calcular o sal rio de um funcion rio ap s o seu aumento interessante cham la de salario final N8 lt espaco gt significa um espa o em branco livrof90 v8 preliminarl 2014 5 5 1 07 page 16 27 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran OS R TULOS EM FORTRAN Os procedimentos ou instru es em Fortran podem ter suas posi es identificadas no pro grama Essa identifica o conhecida como r tulo e descrito por um 1 at cinco 5 alga rismos sendo o primeiro algarismo n o nulo localizado sempre a esquerda na linha antes da instru o ou procedimento Os r tulos s o importantes por exemplo na instru o n o execut vel FORMAT que ser estudada na se o 2 6 do Cap tulo 2 na p gina 56 Exemplos de r tulos v lidos em Fortran 200 1234 20000 10 00010 Os dois ltimos r tulos s o equivalentes Um mesmo r tulo n o poder identificar duas ou mais linhas na mesma unidade de programa O r tulo e por consequ ncia instru es ou procedimentos poder ser invocado chamado quantas vezes for necess rio O PRIMEIRO PROGRAMA Veremos um exemplo simples de programa escrito na linguagem Fortran 95 O primeiro pro grama Como de praxe em qualquer livro de linguagem de programa o
167. programa principal e nos subprogramas Observe que no programa princi pala vari vel que receber a sa da do subprograma res e no interior dos subprogramas z Para finalizar toda vez que um subprograma ativado o programa principal altera o seu fluxo de execu o para o subprograma Ap s a realiza o da tarefa do subprograma o livrof90 v8 preliminarl 2014 5 5 1 07 page 29 40 Fortran 95 curso b sico Gilberto Orengo fluxo retorna para a pr xima linha ap s a chamada CALL Observe tamb m que a vari vel res ret m o ltimo valor a ela atribu do e que a vari vel d do tipo local A seguir s o apresentados exemplos de declara es de vari veis num programa For tran Programa 1 4 Exemplo com declara es de vari veis num programa Fortran INTEGER a b c INTEGER ai doi junho 2001 INTEGER dia 1 INTEGER PARAMETER mes 5 REAL KIND 8 oi REAL PARAMETER ola 4 0 REAL PARAMETER pi 3 141593 REAL DIMENSION 4 al REAL DIMENSION 3 3 bl DOUBLE PRECISION dupla CHARACTER LEN 10 primeiro ultimo CHARACTER 10 primeiro Meu nome CHARACTER meio escuro LOGICAL claro LOGICAL escuro FALSE COMPLEX nao COMPLEX DIMENSION 256 aqui END Inicialmente como mencionado os dois pontos s o facultativos quando n o inici alizamos a vari veis caso da linha 1 Assim seriam necess rios
168. r o default na aus ncia do par metro lt modo gt YES ou seja a nova sa da avan ar para uma nova posi o ou nova linha Adotando o argumento lt modo gt como NO n o ocorrer avan o para a nova linha ou posi o de escrita Uma aplica o pode ser vista na p g 52 no exemplo da instru o READ Vejamos o seguinte exemplo Programa 2 1 Exemplo de sa da de dados PROGRAM saida IMPLICIT NONE INTEGER a 10 b 20 c 135 WRITE x a OPEN UNIT 10 FILE saidal txt WRETE Oe Wo WRITE 10 200 We 200 FORMAT 13 CLOSE 10 END PROGRAM saida No primeiro WRITE o conte do da vari vel a ser escrito na tela do monitor e em formato livre No segundo o resultado armazenado na vari vel b ser escrito no arquivo de nome saidal txt identificado pela unidade l gica 10 procedimento permitido pela instru o OPEN J a outra sa da de resultado pela vari vel c tamb m no arquivo anterior mas formatada pela instru o FORMAT localizada no programa pelo r tulo n mero 200 que neste caso instrui o compilador a imprimir um n mero do tipo inteiro com 3 algarismos Como exemplo o n mero 135 poder ser impresso ajustadamente no espa o designado Quando o n mero n o couber nos espa os determinados pela formata o uma sequ ncia de asteris cos ser impressa no lugar do n mero ou da informa o A instru o CLOSE que encerra a atividade da unidade 10 estu
169. ran todas as vari veis que armazenar o os dados devem ser declaradas Uma vari vel sempre ter um nome um tipo um tamanho e um valor S o cinco os tipos de da dos intr nsecos tr s num ricos INTEGER REAL COMPLEX e dois n o num ricos LOGICAL e CHARACTER O tipo de declara o DOUBLE PRECISION dispon vel no FORTRAN 77 ainda suportado pelo Fortran 95 mas considerado um subconjunto ou um tipo kind do REAL Os tipos de dados foram tratados anteriormente e assumiremos que uma vari vel arma zenar algum tipo de dado Ent o estas duas palavras dados e vari veis ser o sin nimos no sentido que ambas est o relacionadas a valores que ser o armazenados e manipulados por interm dio de vari veis A sintaxe geral de uma declara o de vari vel lt tipo gt KIND lt par repres gt lt atributos gt lt variaveis gt em que lt tipo gt um dos tipos de dados estudados anteriormente e podem ser INTEGER REAL COMPLEX LOGICAL e CHARACTER respectivamente representando inteiros reais com plexos l gicos e caracteres KIND lt par_repres gt em Fortran 95 cada um dos cinco tipos intr nsecos anteri ores possui um valor inteiro n o negativo denominado par metro de representa o do tipo de dado Este par metro o valor correspondente em bytes disponibilizados para sua representa o como vimos em detalhes para os inteiros e reais a partir da p gina 23 Na normatiza o d
170. ran 2003 Como ocorreu com o Fortran 95 em rela o ao Fortran 90 ser uma pequena evolu o somente incluindo corre es e esclarecimen tos do Fortran 2003 Mas ser nesta vers o a implementa o mais efetiva na manipula o de processamento paralelo e os tipos de dados BIT A linguagem Fortran definida de acordo com o Padr o Internacional ISO IEC 1539 Atualmente os padr es que conduzem as implementa es do Fortran s o ANSI X3 198 1992 R1997 T tulo Programming Language Fortran Extended infor malmente conhecida como Fortran 90 O padr o publicado pela ANSI ISO IEC 1539 1 1997 T tulo Information technology Programming languages Fortran Part 1 Base language informalmente conhecido como Fortran 95 Existem mais duas partes deste padr o A Parte 1 foi formalmente adotada pelo ANSI ISO IEC 1539 2 2000 T tulo Part 2 Varying length strings Descreve um conjunto de procedimentos adicionais que fornecem formas de strings conterem comprimentos va ri veis ISO IEC 1539 3 1998 T tulo Part 3 Conditional compilation Descreve um conjunto de recursos adicionais que podem ser utilizados em op es de compila o Estas informa es bem como not cias a respeito das atualiza es podem ser visualiza das no endere o http fwwiw nag co uk sc22wg5 151539 family html Est dispon vel no endere o http vww orengonline com fortran95 uma transcri o de uma reportagem do New York Times
171. ran mais po derosa ainda A proposta inicial era de apresentar alguns avan os que a linguagem Fortran sofreu nestes ltimos anos e acredito ter alcan ado o objetivo Agora quando fores usar a linguagem Fortran j sabes que a mesma n o morreu como muitos apregoam Pelo con tr rio ela constantemente atualizada e est mais do que nunca forte no seu principal uso como ferramenta do meio cient fico Agora j mais embasado interessante visitar o site em ingl s http www ibiblio org pub languages fortran ch1l 2 html que traz um texto de Craig Burley comparando as linguagens C 16 e Fortran 90 95 Vale a pena x Lista de Exerc cios 3 Ufa a ltima livrof90 v8 preliminarl 2014 5 5 1 07 page 118 129 CAP TULO 8 OS PROCEDIMENTOS MODULE livrof90 v8 preliminarl 2014 5 5 1 07 page 119 130 A Tabela ASCII de Caracteres A ASCII American Standard Code for Information Interchange uma tabela de padr es de ca racteres reproduzida parcialmente a seguir Para visualizar a tabela completa ASCII e outras acesse o endere o eletr nico http www lookuptables com Tabela A 1 Tabela ASCII de Caracters Bin rio Decimal Caracter ASCII Bin rio Decimal Caracter ASCII vee axia e 0100 0001 65 A 0010 0000 32 espa o 0100 0010 66 B 0010 0001 33 0100 0011 67 C 0010 0010 34 ne ne tee 0
172. res reais 4 9 Uma empresa deseja aumentar seus pre os em 20 Fazer um programa em Fortran 90 95 que leia o c digo e o pre o de custo de cada produto e calcule o novo pre o calcule tamb m a m dia dos pre os com e sem aumento e mostre o c digo e o pre o novo de cada produto e no final as m dias A entrada de dados deve terminar quando for lido um c digo de produto nulo 4 10 Elaborar um programa em Fortran 90 95 que leia um conjunto de 8 valores e os escreva em um vetor A seguir separe os valores que s o pares e ao final indique quantos s o pares e mpares 4 11 Escreva um programa em Fortran 90 95 que leia um conjunto de 9 valores reais e os escreva em uma matriz 3 x 3 A seguir divida cada elemento da diagonal da matriz por 2 0 e escreva o resultado livrof90 v8 preliminarl 2014 5 5 1 07 page 91 102 A Aloca o Din mica de Mem ria ALLOCATABLE Vimos no primeiro cap tulo como declarar vari veis Aqui nos deteremos um pouco nas ar rayslN1l ou matrizes Uma array um grupo de vari veis ou constantes todas do mesmo tipo que s o referidas por um nico nome Os valores no grupo ocupam localiza es conse cutivas na mem ria do computador Um valor individual dentro da array chamado de ele mento da array e sua identifica o ocorre pelo nome da array juntamente com um subscrito que aponta para sua posi o dentro da array Por exemplo seja uma array de 3 elementos
173. rgula Ao longo do livro ser o apresentados outros atributos para a declara o de vari veis os uso dos dois dois pontos opcional mas ser obrigat rio caso deseja se inicializar a vari vel no momento da sua declara o lt vari veis gt s o os nomes das vari veis que armazenar o os dados separados por v r gulas O nome de uma vari vel poder ter at 31 caracteres e iniciar sempre com uma letra do alfabeto jamais com um algarismo que poder ser utilizado a partir da segunda posi o assim como o underscore N o conter caracter especial HJ amp em qualquer posi o do nome bem como letras acentuadas ou cedilhadas A ATRIBUI O DE VALOR VARI VEL Uma vari vel um registrador de posi o de mem ria que pode conter qualquer dado nu m rico e n o num rico sendo poss vel alterar ou n o durante a execu o do programa No Fortran uma vari vel recebe um valor por interm dio do sinal de igualdade Esta opera o recebe o nome de atribui o de um valor a uma vari vel conforme o exemplo a 15 Aqui a vari vel a recebeu o valor igual a 15 isto foi atribu do a ela na mem ria o valor inteiro 15 Esta interpreta o importante porque poderemos ter o seguinte caso b 6 b 5 b eh um acumulador em que inicialmente a vari vel b recebe o valor 6 e numa instru o posterior receber um valor que depender do seu valor anterior Ou
174. roblemas de valores singulares Tamb m est o disponibilizadas solu es para fatoriza o de matrizes associadas LU Cholesky OR SVD Schur Schur ge neralizada Solu es com matrizes densas e esparsas tamb m est o dispon veis bem como funcionalidades para tratar com matrizes reais e complexas tanto em precis o simples como dupla Programa 6 5 A sub rotina DGESV da LAPACK SUBROUTINE DGESV N NRHS A LDA IPIV B LDB INFO x LAPACK driver routine version 3 1 Univ of Tennessee Univ of California Berkeley and NAG Ltd November 2006 Scalar Arguments INTEGER INFO LDA LDB N NRHS oe a Array Arguments INTEGER IPIV DOUBLE PRECISION A LDA B LDB Purpose DGESV computes the solution to a real system of linear equations A X B where A is an N by N matrix and X and B are N by NRHS matrices The LU decomposition with partial pivoting and row interchanges is used to factor A as A P L x U where P is a permutation matrix L is unit lower triangular and U is upper triangular The factored form of A is then used to solve the system of equations A X B Arguments amp IN input INTEGER The number of linear equations i e the order of the matrix A N gt 0 NRHS input INTEGER The number of right hand sides i e the number of columns of the matrix B NRHS gt 0
175. rocl 8 3 1 Usando M dulos para Criar Interfaces Expl citas Mas porque nos darmos o trabalho de incluir procedimentos sub rotinas e fun es num m dulo J sabemos que poss vel compilar separadamente uma sub rotina e cham la numa outra unidade programa ent o porque passar por etapas extras i e incluir uma sub rotina num m dulo compilar o m dulo declarar o m dulo atrav s da declara o USE e s a chamar a sub rotina A resposta que quando um procedimento compilado dentro de um m dulo e o m dulo usado numa chamada de programa todos os detalhes da interface de procedimentos est o dispon veis para o compilador Assim quando o programa que usa a sub rotina com pilado o compilador pode automaticamente verificar o n mero de argumentos na chamada do procedimento o tipo de cada argumento se cada argumento est ou n o numa array e o INTENTINI de cada argumento Em resumo o compilador pode capturar muito dos erros comuns que um programador pode cometer quando usa os procedimentos Um procedimento compilado dentro de um m dulo e acessado pelo USE dito ter uma Interface Expl cita O compilador Fortran conhece todos os detalhes a respeito de cada argu mento no procedimento sempre que o mesmo utilizado e o compilador verifica a interface para assegurar que est sendo usado adequadamente Ao contr rio procedimentos que n o est o em m dulos s o chamados ter uma Inter face Impl ci
176. rquivo n o existe e ser criado C REPLACE um novo arquivo ser aberto Se o arquivo j existe os dados ser o apaga dos para ser re utilizado d STRATCH o arquivo ser criado temporariamente e ap s o uso ser eliminado Neste caso o argumento FILE n o pode ser especificado isto o arquivo n o ter nome e UNKNOWN desconhecido Este o argumento padr o por defini o default na aus ncia do STATUS Exemplos OPEN UNIT 10 FILE resultados txt STATUS NEW OPEN UNIT 20 FILE dadosl txt STATUS OLD OPEN 50 FILE entradal txt No primeiro exemplo uma unidade l gica com o n mero 10 criada e cuja unidade f sica ou arquivo de nome resultados txt conter e ou estar habilitado para armazenar valores Perceba que um arquivo novo ou seja ele ser criado na execu o do programa Caso o arquivo interno j exista o compilador retornar uma mensagem de erro e encerrar a execu o No segundo exemplo a unidade l gica ser de n mero 20 e o arquivo dados1 txt existente caso contr rio o compilador acusar um erro de inexist ncia do arquivo interno No ltimo caso a unidade l gica a 50 e o arquivo entradal txt mas observe que a palavra chave UNIT foi omitida bem como o status e portanto considerado como desconhecido A INSTRU O cLOSE Quando uma unidade l gica est conectada ao seu arquivo externo ele permanece neste estado at o sua desconex o ou
177. rrays acima t m em comum O tamanho de cada array foi declarado no in cio do programa Este tipo de declara o de array chamado de aloca o est tica de mem ria porque o tamanho de cada array deve ser grande o suficiente para conter o maior valor do problema que o programa ir resolver Isto pode trazer s rias limita es Se declarar mos uma array sem saber ao certo seu futuro tamanho poderemos estar sobrecarregando a mem ria do computador caso venhamos a usar por exemplo s 20 ou 30 da mem ria alocada para a array Com isso tornaremos a execu o mais lenta ou at mesmo sem mem ria suficiente para executar o programa No outro extremo est o caso de dimensionarmos a array abaixo do que ela necessitar de aloca o de mem ria Desta forma o programa n o poder resolver problemas maiores Ent o como o programador resolver este problema Se o mesmo possuir o programa fontelN poder alterar a declara o e recompil lo Mas isto nem sempre poss vel E como faremos com os programas propriet rios A melhor solu o projetar o programa com aloca o din mica de mem ria O tama nho da array ser dinamicamente alocada quando for necess rio e no tamanho exato Assim otimizamos e controlamos melhor o uso da mem ria e podemos executar problemas tanto com arrays grandes quanto pequenas O ATRIBUTO ALLOCATABLE E AS DECLARA ES ALLOCATE E DEALLOCATE No Fortran 90 95 uma array alocada dinamicamente d
178. s de entrada e sa da de dados Ent o gerado o execut vel em linguagem de m quina para uma determinada arqui tetura de computador isto dependente de m quina Para auxiliar na compreens o de algumas fun es de um compilador usaremos uma analogia com a linguagem portuguesa Seja a seguinte afirma o Ela comprar duas febre e tamb m comprar um cordeiro ambos ama a Inicialmente numa an lise l xica verifica se que o caracter n o pertence ao conjunto de s mbolos da l ngua portuguesa Para corrigir os dois caracteres fia ser o substitu dos por nh Na an lise sint tica verificado se a estrutura est em acordo com as regras gramaticais Neste caso ser detectado dois erros que ser o corrigidos por comprar comprar febre gt febres Na an lise sem ntica verificado se a frase faz sentido E neste exemplo n o apresenta significado porque febre n o objeto venal Provavelmente houve um engano e a afirma o correta seja Ela comprar duas lebres e tamb m comprar um cordeiro ambos amanh E por fim uma otimiza o pode ser realizada se o autor desejar porque a frase est correta e compreens vel Se for o caso teremos por exemplo Ela comprar duas lebres e um cordeiro amanh livrof90 v8 preliminarl 2014 5 5 1 07 page 12 23 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran No Fortran o compilador evocado ass
179. s de execu o do c digo Nos compiladores que disp em de inter face gr fica esta tarefa facilitada Nos compiladores de linhas de comando o depurador de erros ativado por meio de op es de compila o No Ap ndice descrito o uso do depurador de erros no compilador G95 A seguir veremos os tr s tipos de erros citados incialmente ERRO DE SINTAXE O erro de sintaxe o mais simples e o pr prio compilador identifica o indicando como um erro de compila o Este erro est relacionado com a escrita das instru es Fortran S o exemplos de erro de sintaxe Programa 1 11 Exemplos de erros de sintaxes INTEGR Db lt br 2 WRITE x Db END Na primeira linha o erro est na escrita sintaxe da declara o de vari vel do tipo in teiro que escrita INTEGER e n o INTEGR Na terceira linha o erro est na separa o dos argumentos da instru o WRITE que s o separados por v rgula e n o por ponto e v rgula O correto Programa 1 12 Corre es dos erros de sintaxes INTEGER Db lo 2 WRITE x Db END ERRO DE TEMPO DE EXECU O o tipo de erro que ocorre na execu o do programa quando uma opera o ilegal tentada Na maioria das vezes uma opera o matem tica por exemplo uma divis o por zero Ou ainda a atribui o de um caracter no lugar de um inteiro ou real sendo este tamb m um erro de l gica Quando este tipo de erro detectado a execu o abor
180. s e dupla diferentes e assim mesmo funcionar corretamente A resposta est num dos avan os da linguagem Fortran Agora poss vel especificarmos valores para a mantissa e o expoente conforme a conveni ncia e com isso tamb m obtermos maior portabilidade do programa Isto feito atrav s de uma fun o intr nseca que seleciona automaticamente o tipo de valor real para usar quando se troca de computador Esta fun o chamada SELECTED REAL KIND A forma geral desta fun o SELECTED REAL KIND p precis o r expoente ou range onde precis o o n mero de d gitos decimais requerido e range o tamanho do expoente re querido da pot ncia de 10 Os dois argumentos precis o e range s o argumentos opcionais um deles ou ambos podem ser informados Vejamos os exemplos abaixo kind number SELECTED REAL KIND p 6 r 37 ELECTED REAL KIND p 12 kind number kind number SELECTED REAL KIND r 100 kind number SELECTED REAL KIND 13 200 kind number SELECTED REAL KIND 13 NNNnNN WN kind number SELECTED REAL KIND p 17 Num computador com processador PC Pentium e usando o compilador Lahey Fujitsu Fortran 90 95 a primeira fun o retornar um 4 para precis o simples e as outras quatro fun es retornar o um 8 precis o dupla A ltima fun o retornar 16 mas para o compilador da Portland PGHPF
181. s insetos ou seja fazer um debugging Assim este termo foi mantido no meio acad mico e at hoje utilizado para erro e procura de erros livrof90 v8 preliminarl 2014 5 5 1 07 page 13 24 Fortran 95 curso b sico Gilberto Orengo 1 a execu o passo a passo de um programa chamada single stepping 2 a suspens o do programa para examinar seu estado atual em pontos predefinidos conhecidos como breakpoints ou pontos de parada e 3 o acompanhamento do valor de vari veis que tamb m o programador pode definir por meio das watch expressions que podem ser usadas inclusive para gerar uma suspens o ou ativar um breakpoint por exemplo em um programa que calcula a raiz quadrada uma dessas condi es seria se a vari vel que cont m o argumento passasse a ser nega tiva Na se o 1 8 p g 38 trataremos a respeito de erros em Fortran 95 Veremos a seguir como criar e executar o primeiro programa em Fortran Mas antes precisamos dos conceitos de unidades de programas Para obter mais informa es a respeito do processo de compila o aconselha se o livro descrito na ref 12 AS UNIDADES DE PROGRAMA Unidades de programa s o os menores elementos de um programa Fortran que podem ser compilados separadamente Existem cinco tipos de unidades de programas Programa Principal ou Main Program Sub Programa FUNCTION s o as fun es definidas pelo usu rio Sub Programa SUBROUTINE s
182. s linguagens escritas do mundo E a escolha constru da em blocos e executa instru es em passos em que cada bloco trata de uma parte da instru o e dessa forma acelera a execu o do programa 2 a escalar a chegada das entradas no microprocessador quando nada mais est acontecendo e desta forma aumentando a velocidade aparente de processamento b iniciar o processamento de uma segunda instru o enquanto a atual ainda est processando de forma a aumentar a velocidade de execu o de um programa Fonte DIC Michaelis UOL distribui o gratuita em CDROM livrof90_v8 preliminarl 2014 5 5 1 07 page 6 17 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran pelo usu rio por ponto ou v rgula para dados num ricos formatados de Entradas Sa das Uma nova fun o intr nseca para caracteres a qual retorna o tipo de conjunto de caracteres SELECTED CHAR KIND NAME integra o com sistemas operacionais que permitir acessar os argumentos na linha de comando e a vari veis de ambiente do interpretador bem como as mensagens de erros do processador O compilador G95 que ser utilizado nos exemplos deste livro j cont m as caracter s ticas implantadas no Fortran 2003 Para um conhecimento mais abrangente a respeito desta atualiza o do Fortran aconselha se a refer ncia 11 da qual foram extra das as informa es descritas acima No Fortran 2008 ser revisado o Fort
183. seguinte ELSE IF lt condi o l gica 2 gt THEN ser executada Nesta linha novamente um teste l gico realizado e se for verdadeiro os lt procedimentos bloco 2 gt ser o executados e na sequ ncia desvi ado para a primeira linha ap s o END IF Se for falsa o pr ximo ELSE IF ser execu tado e assim sucessivamente Se nenhuma condi o l gica anterior for verdadeira ou por outras palavras se todas as i simas condi es l gicas forem falsas o procedimento padr o default logo abaixo o ELSE ser executado END IF especifica o final do bloco de decis o lt r tulo gt Como o r tulo opcional n o comum utiliz lo para um nico bloco Observe que pelo menos um ELSE IF ou um ELSE necess rio para ser considerado uma estrutura condicional composta No exemplo a seguir uma estrutura testa o discriminante de uma equa o quadr tica b2 4ac para c lculo das ra zes com o objetivo de identificar as ra zes 10 11 12 13 livrof90 v8 preliminarl 2014 5 5 1 07 page 70 81 CAPITULO 3 AS ESTRUTURAS DE CONTROLE Programa 3 3 Exemplo de estrutura por m ltiplas decis es PROGRAM raizes REAL a b c WRITE Digite os coeficientes da eq READ x a b cC IF b 2 4 0xaxc lt 0 0 THEN WRITE x Raizes complexas STOP ELSE IF b 2 4 0xaxc 0 0 THEN WRITE x A solucao tera 2 raizes e iguais ELSE
184. segunda etapa por um parser conhecido como leitor de sa da livrof90 v8 preliminarl 2014 5 5 1 07 page 11 22 Fortran 95 curso b sico Gilberto Orengo 2 An lise sint tica parsing processo que analisa uma sequ ncia de entrada para de terminar sua estrutura gramatical segundo uma determinada gram tica formal Nesta etapa identificada por exemplo que o WRTE est incorreto O correto WRITE que uma instru o de escrita 3 An lise sem ntica a fase da compila o em que verifica se as estruturas do programa far o sentido durante a sua execu o ou seja detecta os erros sem nticos Por exem plo verifica a multiplica o entre tipos de dados diferentes tal como n mero inteiro multiplicado por um n mero real Nesta etapa preparada por meio de coleta as in forma es a pr xima fase da compila o que a fase de s ntese por pelo menos mais tr s etapas 4 Gerador de c digo intermedi rio como o pr prio nome traduz um passo interme di rio que em alguns casos poder ser o c digo objeto final 5 Otimizador de c digo nesta etapa o c digo intermedi rio otimizado em termos de velocidade de execu o e espa o de mem ria 6 Gerador do C digo objeto nesta fase gerado o c digo objeto otimizado ou n o dependendo das op es de compila o Os objetivos desta etapa s o por exemplo reserva de mem ria para as vari veis e de dispositivo
185. somente nas linhas 3 4 6 7 12 e 15 mas uma boa pr tica de programa o coloc los Como vimos anteriormente sempre bom inicializarmos as vari veis para evitar que venham carregadas de algum lixo da mem ria As vari veis al e b1 s o vari veis compostas ou simplesmente arrays i e vetores ou matrizes como demonstra o atributo DIMENSION Estes tipos de vari veis ser o estudadas no Cap tulo 4 na p gina 79 No primeiro caso um vetor de tamanho 4 e no segundo uma matriz 3 x 3 Nestes dois exemplos informado ao processador que ele deve reservar na sua mem ria um espa o para armazenar as arrays al e b1 Esta uma aloca o est tica de mem ria ou seja do in cio at o fim da execu o do programa este espa o de mem ria est reservado para este procedimento mesmo que somente sejam usadas no in cio do programa Mais adiante veremos como alocar mem ria dinamicamente pelo comando que ser estudada no Cap tulo 5 na p gina 91 Outra considera o com rela o ao atributo KIND na linha 5 que especifica o tipo de precis o desejada Na aus ncia assumido como precis o simples que seria KIND 4 em que o algarismo 4 indica a precis o simples Assim para obtermos precis o dupla necess rio acrescentar o atributo KIND 8 em que o algarismo 8 indica a dupla precis o Na declara o permitido omitir a palavra chave KIND podendo assim a declara o ser livrof90 v8 prelimi
186. ssos exemplos anteriores na p g 80 Figura 4 1 a vari vel R armazenar 3 va lores elementos inteiros A vari vel nome armazenar dois valores de tamanho igual a 5 caracteres cada O argumento LEN indica o tamanho de cada vari vel do tipo caracter Se este argumento for omitido ser assumido o valor default igual a 1 No exemplo abaixo CHARACTER LEN 1 DIMENSION 3 nomel equivalente a CHARACTER DIMENSION 3 nomel ea vari vel composta array armazenar 3 valores de tamanho igual a 1 cada Na segunda representa o inserido o argumento DIMENSION no qual entre par nte ses indicamos a quantidade de elementos do vetor ou seja a sua dimens o 4 2 2 Preenchendo com valores os elementos de um vetor O procedimento para preencher uma vari vel composta diferente da simples pois temos que informar todos os elementos de uma vari vel com o mesmo nome Existem diferentes formas de fazer esta tarefa veremos algumas Preenchendo todos os elementos de uma nica vez Para preencher uma vari vel composta por exemplo A de uma nica vez o procedimento A 10 ou ainda na pr pria declara o da vari vel INTEGER DIMENSION 5 A 10 Assim todos os elementos da vari vel A do tipo real ser o preenchidos pelo valor igual a 10 livrof90 v8 preliminarl 2014 5 5 1 07 page 83 94 Fortran 95 curso b sico Gilberto Orengo O uso de uma estrutura de repeti
187. stru o CLOSE js ss em sak sS a a kel SU HUN A h Sot RO S b a Soe 54 2 6 Formatando as sa das e ou entradas FORMAT J 56 2 7 Corrigindo Erros DEBUGGING 6 0 dus ga ue a JW Yg G WO an S in w a Rua 60 Entrada de dados em uma nica linha de um arquivo 60 EXCIC CIOS arma nee hae gt Pee eee EP Gee a ee a ele Ca 62 AS ESTRUTURAS DE CONTROLE 63 Sil Introdu o sp sandes owen eae eee h Bala e SE eo eee eo als 63 3 1 1 Express es Aritm ticaS a l suc sls aw ER PA ae N aca a 64 3 12 Express es L gICaS a ace aie ea E E Genta eran ed tae ru le a EI 5 65 Operadores Relacionais ses s w s w kok son ee 65 Operadores L gicos a sis a s woe 8 E lt QO saias a ess ad 65 3 1 3 Hierarquia dos Operadores uuu eposa 2 0 000000 00002 eee 67 3 2 Estruturas com Decis o ou Sele o 2 67 3 2 1 Estrutura Condicional Simples IF THEN 67 3 2 2 Estrutura Condicional Composta IF THEN ELSE IF 69 3 2 3 Adnstru o IF L GICO em w suara ud uwa q qua A v WR P b W UW RUS 71 3 24 A estrutura de sele o direta SELECT CASE CASE 71 3 3 Estruturas de Repeti o Loops e s ssas enea a e hu nia q a e e SU 73 3 3 1 A Estrutura de repeti o DO END DO 73 3 3 2 A Estrutura de repeti o DO IF END DO ou DO infinito 74 Oso do WHIBE s s s gence a ae ee eee wa la eee eae ee es 76 EXECIC CIOS a p
188. ta Desta forma o compilador Fortran n o tem informa es a respeito destes INHO INTENT xx que especifica o tipo de uso do argumento mudo onde o xx pode ser IN OUT e INOUT O atributo INTENT IN especifica que o argumento mudo entrada na unidade de programa e n o pode ser redefi nido no seu interior j o atributo INTENT OUT especifica que o argumento mudo sa da da unidade de programa e o atributo INTENT INOUT especifica que o argumento mudo tanto de entrada como de sa da na unidade de programa INTENT outro avan o do Fortran 90 Esta decla ra o espe cifica a in ten o de uso de um argu mento mudo livrof90 v8 preliminarl 2014 5 5 1 07 page 116 127 CAP TULO 8 OS PROCEDIMENTOS MODULE procedimentos quando ele compilado numa unidade programa que o solicite Assim ele assume que o programador realmente verificou corretamente o n mero o tipo a inten o de uso etc dos argumentos Se esta preocupa o n o foi tomada numa sequencia de chamada errada o programa ser executado com falha e ser dif cil de encontr la Nada melhor que um exemplo para dirimir d vidas O caso a seguir ilustra os efeitos da falta de concatena o quando a sub rotina chamada est inclu da num m dulo O m dulo dado por 1 MODULE erro interf 2 CONTAINS 3 SUBROUTINE bad argumento i 4 IMPLICIT NONE 5 INTEGER INTENT IN i 6 WRITE I i 7
189. tada N14 Bug significa em ingl s qualquer tipo de inseto Os primeiros computadores de tamanhos de grandes salas paravam os processamentos devido a insetos que se localizavam em seus dispositivos Para retornar ao trabalho era preciso retirar os insetos ou seja fazer um debugging Assim este termo foi mantido no meio acad mico e at hoje utilizado para erro e procura de erros a livrof90 v8 preliminarl 2014 5 5 1 07 page 40 51 CAP TULO 1 CONSIDERA ES INICIAIS Apresentando o Fortran ERRO DE L GICA O erro de l gica mais dif cil de identificar porque o programa compilado e executado sem problemas mas o resultado est errado Neste caso o compilador n o tem condi es de reconhecer e est ligado diretamente forma de programar O compilador pode somente identificar um erro de l gica que est ligada a declara o de vari veis Neste caso tamb m um erro de tempo de execu o Por exemplo Programa 1 13 Exemplo de erro de l gica INTEGER b READ x Db WRITE x bx2 END Neste caso a vari vel b declarada como inteira e se for inserida na linha 2 uma informa o diferente de um valor inteiro por exemplo real acusar um erro e abortar a execu o do programa Outros erros de l gica s o dif ceis de detectar como por exemplo a divis o por um n mero pr ximo de zero que pode levar o programa a gerar resultados errados Ou ainda se m
190. tar fun o definida usu rio do Programa 6 3 PROGRAM testa func IMPLICIT NONE Testa a funcao que calcula f x ax 2 bx REAL func REAL a op e x WRITE Entre com os coef quadraticos a be c WRITE Digite o coef a READ a WRITE Digite o coef b Dolo amp N BR 10 READ b it WRITE x Digite o coef c 12 READ C 13 WRITE Entre com a localizacao na qual quer fazer o calculo 14 READ x x 15 WRITE 100 Calculo em 4 sx funes et lee 16 100 FORMAT A F10 4 A F12 4 17 END PROGRAM testa func Note que a fun o func declarada como tipo real tanto na pr pria fun o como no programa principal da qual ativada Para mais informa es procure pela literatura indi cada nas Refer ncias Bibliogr ficas livrof90 v8 preliminarl 2014 5 5 1 07 page 103 114 Fortran 95 curso b sico Gilberto Orengo AS BIBLIOTECAS DE SUB ROTINAS E FUN ES A Netlib um conjunto de c digos matem ticos artigos e base de dados O endere o eletr nico http fwwiw netlib org O uso das subrotinas e fun e prontas como LAPACK e BLAS s o timos exemplos 6 4 1 A biblioteca LAPACK A biblioteca LAPACK escrita em FORTRAN 77 e fornece rotinas para resolver equa es li neares simult neas solu es de sistemas de equa es lineares por m nimos quadrados pro blemas de autovalores e p
191. te criar um cabe alho co mentado em cada fun o definindo exatamente o que espera se que ela fa a quais suas entradas e quais suas sa das O pseudo c digo rascunhado pode ser muito til para isso Agindo assim n o se precisa ler diversas linhas de c digo para saber o que uma fun o faz recomend vel que se escreva os coment rios enquanto se escreve o programa porque menos prov vel que se escreva alguma coisa til ou significativa depois Escreva enquanto programa e seus coment rios ser o muito mais completos D 2 2 Utilize margens e indenta o apropriadamente A cada novo loop express es condicionais defini o de fun es e blocos de comandos seu c digo deve ser indentado um n vel mais direita pressione TAB ou a barra de espa o algumas vezes Esteja certo de voltar ao n vel de indenta o anterior quando terminar o bloco Linhas em branco tamb m s o muito teis para aumentar a legibilidade do seu c digo Umas duas linhas entre as defini es de fun es e procedimentos e uma linha entre a defi ni o de vari veis e o c digo ir o separar claramente cada parte o que torna a identifica o delas mais r pida Isso torna o c digo bem mais claro D 2 3 Use nomes sugestivos para vari veis fun es e procedimentos O c digo fica incrivelmente mais dif cil de ser depurado quando vari veis importantes se chamam p t mal qq e assim por diante Deve se sempre utilizar nomes sugestivos para
192. th tiny 1 vspace 1cm mbox end minipage hspace 0 05 textwidth begin minipage t 0 4 textwidth scriptsize noindent sffamily 2 vspace 1cm mbox end minipage rule textwidth 3mm em que o primeiro argumento 1 a parte da lista de conte dos do referido capitulo co piada e editada do arquivo nome livro toc gerado pelo TEX O segundo argumento 2 cont m a frase para reflex o AS REFER NCIAS BIBLIOGR FICAS livrof90 v8 preliminarl 2014 5 5 1 07 page 135 146 REFER NCIAS BIBLIOGR FICAS 1 KNUTH D E The TEXbook Reading Massachusetts Addison Wesley 1984 2 LAMPORT L ETeX A document preparation system Reading Massachusetts Addison Wesley 1986 3 GOOSSENS M MITTELBACH F SAMARIN A The ETEX companion Reading Mas sachusetts Addison Wesley 1994 4 KOPKA H DALY P W A guide to ETEX2 Document preparation for beginners and advanced users Harlow England Addison Wesley 1997 5 http www miktex org Site com links e distribui o gratuita de pacotes para Win dows como LaTeX WinShel GhostView e outros Ultimo acesso 02 de junho de 2001 6 CHAPMAN S J Fortran 90 95 for scientists and engineers Boston Massachusetts WCB McGraw Hill 1998 7 http www lahey com ltimo acesso 03 de junho de 2001 8 http www pgroup com ltimo acesso 03 de junho de 2001 9 Lahey Comput
193. ti o 1 PROGRAM numeros pares 2 IMPLICIT NONE 3 INTEGER i j 4 3 0 5 DO i 1 1000 6 WRITE GC Contador 7 IF MOD i 2 0 THEN 8 WR I TE Cn im numero parta 9 j 9 1 10 IF j 100 EXIT 1 END IF 12 END DO 13 END PROGRAM numeros pares As estruturas de repeti o assim como as de decis o IF tamb m podem ser aninha das ou seja podem conter uma dentro da outra Por exemplo ext DO i 1 20 intl DO IF a gt b EXIT intl int2 DO 4 200 1 1 END DO int2 END DO int1 END DO ext Ei a a im E importante que fa a os exerc cios a seguir As respostas e coment rios a respeito dos exerc cios est o no site oficial do livro http www orengonline com fortran95 livrof90 v8 preliminarl 2014 5 5 1 07 page 77 88 Fortran 95 curso b sico Gilberto Orengo EXERC CIOS 3 1 Criar um programa que entre com um n mero inteiro e informe se ele ou n o divis vel por 5 Dica aqui ser necess rio testar se o resto de uma divis o por 5 zero ou n o Em Fortran 95 isto feito pela fun o MOD a b conforme tabela 1 1 na p gina 31 3 2 Criar um programa que entre com um n mero inteiro e informe se ele divis vel por 3 e por 7 Obs aqui ser necess rio o uso dos operadores l gicos 3 3 Criar um programa em Fortran 95 que entre com um n mero inteiro e informe se ele par ou mpar 3 4 Segundo uma tabela m dica o peso ideal est relacionado com a alt
194. ti o em conjunto com uma express o Da mesma forma utilizada para os vetores temos 1 x 0 2 DO i 1 2 3 DO j 1 2 4 A i j x j 5 x x 3 6 END DO 7 END DO Neste caso os valores da vari vel ser o A 1 1 1 A 1 2 5 A 2 1 7e A 2 2 11 Novamente aqui foi utilizado o contador interno j na express o fun o matem tica Esta n o necessariamente uma pr tica de programa o poder amos trocar por uma outra express o 4 3 3 A manipula o dos elementos de uma matriz Elemento a elemento Podemos manipular os elementos como segue atribuindo as a vari vies simples Nos exemplos abaixo os valores dos elementos foram retirados da matriz anterior A2x2 A 2 1 A 1 1 A 2 2 y b Nestes casos os resultados para as vari veis simples s o respectivamente y 7 e b 12 A soma ou subtra o de matrizes A soma ou subtra o de matrizes poss vel desde que as matrizes sejam conformes isto que tenham mesma dimens o Por exemplo 1 INTEGER DIMENSION 5 3 A 10 2 INTEGER DIMENSION 5 3 B 12 3 INTEGER DIMENSION 5 3 C 4 5 C A B O resultado uma matriz com os elementos todos iguais a 22 A soma realizada elemento a elemento conforme apresentado abaixo 10 10 10 12 12 12 10 12 10 12 10 412 22 22 22 10 10 10 12 12 12 10 12 10 12 10 412 22 22 22 10 10 10 12 12 12 10 12 10412 10412 22 22 22 10 10 10 12 12 12 10412 10 12 10 412 22 22 22 10 10 10 12 12
195. to com a linguagem Fortran Tudo come ou na gradua o do Curso de F sica na Universidade Federal de Santa Maria RS UFSM entre 1984 e 1989 passou pelo Mestrado em F sica Aplicada UFSM com o aux lio fundamental dos professores Cl udio de Oliveira Gra a UFSM e Manoel Siqueira da Universidade Federal de Minas Gerais UFMG No doutorado em Engenharia Nuclear pela Universidade Federal do Rio Grande do Sul UFRGS o passo final em que parte da tese foi a constru o de uma vers o inicial de um c digo computacional sob tutela do professor Marco Tulio M B de Vilhena UFRGS Tamb m contribu ram o curso ministrado na UFRGS para alunos da Engenharia Mec nica ao lado da professora Cynthia Segatto e a constru o de um material did tico para um Minicurso de Fortran 90 95 para a Semana Acad mica do Curso de F sica M dica do Centro Universit rio Franciscano UNIFRA em junho de 2001 Uma forte contribui o tamb m venho das aulas da disciplina Linguagem de Programa o Cient fica para o Curso de F sica M dica UNIFRA desde 2002 A minha forma o em Fortran foi baseada principalmente no aprendizado autodidata Todos os livros citados nas refer ncias tiveram influ ncia sobre a minha vis o a respeito da linguagem Fortran e na forma de programar Portanto algumas caracter sticas deles foram incorporadas subconscientemente e podem fazer parte do meu texto Um destes livros que considero uma refer ncia o Professional Progra
196. tran 95 que leia 2 vetores de 8 elementos inteiros cada e a seguir efetue a multiplica o dos vetores e mostre o resultado 4 4 Criar um programa em Fortran 90 que leia um conjunto de 30 valores e os coloque em 2 vetores conforme forem pares ou mpares O tamanho de cada vetor de 5 posi es Se algum vetor estiver cheio escrev lo Terminada a leitura escrever o conte do dos dois vetores Cada vetor pode ser preenchido tantas vezes quantas forem necess rias Obs o zero n o classificado nem como n mero par e nem como mpar 4 5 Fazer um programa em Fortran 90 que leia um conjunto de 10 valores inteiros armazene os em um vetor e escreva os ao contr rio da ordem de leitura A sa da dos dados deve ser num arquivo com o nome saida txt 4 6 Criar um programa em Fortran 90 que entre com 4 nomes e imprima uma listagem contendo todos os nomes Considere que cada nome poder ter at 10 caracteres A sa da dos dados deve ser num arquivo com o nome nomes txt 4 7 Criar um programa em Fortran 90 que leia 6 n meros reais e os ordene em ordem decrescente isto do maior para o menor valor Este dar trabalho dif cil Dica monte um conjunto de 5 elementos e pense numa estrat gia na ponta do l pis antes de se aventurar no programa 4 8 Repita o exerc cio 4 7 mas lendo os 6 valores de entrada de um arquivo de nome da dos1 txt Dica importante n o esque a de criar o arquivo e digitar nele os 6 valo
197. tualiza es seguiram um padr o e o outro avan o veio com o FORTRAN 77 em 1977 Entre as novas caracter sticas est o as que permitiram escre ver e armazenar mais facilmente programas estruturados Nesta vers o foram introduzidas novas estruturas como o bloco de decis o l gica IF THEN e foi a primeira vers o que habilitou o manuseio amig vel de vari veis tipo caracteres CHARACTER ou strings A atualiza o mais importante foi a que deu origem ao Fortran 90 Esta vers o inclui todo o FORTRAN 77 que serve de base mas com mudan as significativas tais como i a implementa o da aloca o din mica de mem ria para os arranjos ou em ingl s arrays vetores e matrizes ii mudan as nas opera es com arrays iii a parametriza o das fun es intr nsecas permitindo assim utilizar mais do que dois tipos de precis o simples e dupla para vari veis do tipo real e complexa iv capacidade de escrever procedimentos internos e recursivos como tamb m chamar os procedimentos atrav s de argumentos sendo estes opcionais ou obrigat rios v a implementa o do conceito de ponteiros vi melhor portabili dade entre compiladores e processadores vii o uso de caracter sticas especiais do hardware tais como cache de instru es pipelinelN3l da CPU disposi es de programa o paralela ve IN31pipeline arquitetura de computador em pipeline encadeada 1 CPU Unidade Central de Processamento que
198. tura via teclado de um valor para armazenar na va ri vel x e escrita da frase Ola amigo que est entre as aspas Ambas instru es ser o estudadas no Cap tulo 2 e vari vel um elemento que armazenar algum valor e ser estu dada na p gina 25 Outros exemplos a 23 b 150 c 23 76 que significa atribui o de valores s vari veis a b e c A atribui o de valores s vari veis ser estudada na p gina 27 OS NOMES SIMB LICOS EM FORTRAN Os nomes simb licos s o utilizados em Fortran para se referir a v rios elementos como nomes de programa e de vari veis Um nome inicia necessariamente com uma letra e ter no m ximo at 31 caracteres os quais poder o ser letras d gitos e underscore tra o baixo _ proib do o uso de caracteres especiais de caracteres acentuados ou cedilhados tais como lt espago gt lt gt amp ac E S o chamados de simb licos como mencionado anteriormente p g 10 porque substituem aquelas instru es de m quina de localiza o de elementos na mem ria Exemplos de nomes v lidos em Fortran t 2006 t2006 primeiro programa Metodo LTSN AaBb Calculo integral definida soma SOMA Soma Exemplos de nomes inv lidos em Fortran 2 t 2006 primeiro programa calculo do 7 ilegal Q caracter a o dist ncia nome muito longo nao pode ser usado D nomes as vari veis e as unidades de programa que representem mais pr ximo
199. uando se trata de um c digo que voc j escreveu diversas vezes por exemplo encontrar um elemento em um vetor ou determinar se um n mero par ou mpar Ao escrever um programa importante que se tenha pensado muito nele antes com o objetivo de visualiz lo como um todo Criando um rascunho pr vio do programa podem aparecer v rias abordagens do problema e as dificuldades ficam mais f ceis de serem supera das Assim esquematizar o programa ajuda a fixar exatamente o que se deseja e economiza se tempo em frente ao monitor na tentativa de escrever um programa que execute o desejado ESCREVA UM C DIGO LEG VEL Escrever um c digo leg vel muito importante para facilitar o entendimento de um programa At para o pr prio criador do c digo Em programa claro e auto explicativo fica mais dif cil se perder e torna muito mais f cil a depura o livrof90 v8 preliminarl 2014 5 5 1 07 page 126 137 APENDICE D COMO ABORDAR UM PROBLEMA DE PROGRAMAGAO D 2 1 Comente seu c digo enquanto escreve n o depois Coment rios s o ferramentas muito teis para tornar o c digo mais leg vel E interessante comentar tudo que n o seja muito claro N o comente algo que seja bvio como por exemplo i 0 Atribui o valor 0 a vari vel i Comente algo como x LEN frase LEN frase 2 x recebe a posicao para frase ficar centralizada Em programas muito grandes ou complicados interessan
200. ub rotina Programa 6 1 Um exemplo de sub rotina SUBROUTINE exemplo sub ladol lado2 hipotenusa IMPLICIT NONE Calcula hippotenusa de um triangulo retangulo Declaracao dos parametros de chamada REAL INTENT IN ladol Dado de entrada da sub rotina REAL INTENT IN lado2 Dado de entrada da sub rotina REAL INTENT OUT hipotenusa Dado de saida da sub rotina Declaracao das variaveis locais internamente a sub rotina REAL temp temp ladol 2 lado2 x2 hipotenusa SORT temp RETURN END SUBROUTINE exemplo sub Neste exemplo que calcula a hipotenusa de um tri ngulo ret ngulo tr s argumentos s o passados para a sub rotina Dois argumentos s o de entrada lado1 e lado2 e um de sa da hipotenusa Aqui introduzida uma novidade do Fortran 95 o atributo P que especifica o uso pretendido dos argumentos da sub rotina e tamb m das fun es des critos a seguir INTENT IN este atributo especifica que o argumento do subprograma seja recebido como dado de entrada pelo subprograma quando chamado por uma unidade de programa Assim o argumento n o poder ser redefinido ou ficar indefinido durante a execu o do procedimento subprograma INTENT OUT este atributo especifica que o argumento do subprograma um dado de sa da do subprograma quando chamado por uma unidade de programa Cada argu mento associado dessa forma deve ser definido ou atribuido um valor INTENT INOUT este
201. uitos arredondamentos s o executados muitas vezes podem tamb m levar a um erro de resultado Para estes e outros tipos de erros de l gica o que podemos fazer tomar algumas precau es as quais s o Utilizar sempre a instru o IMPLICIT NONE que obriga a declara o de todas as va ri veis do c digo computacional Nas express es aritm ticas e ou l gicas usar parent ses para tornar claro a ordem de execu o na express o Inicializar todas as vari veis Assim se evita que alguma sujeira de mem ria conta mine os c lculos ou as manipula es de dados Escrever todas as entradas de dados Desta forma poss vel visualizar que dados fo ram informados ao programa e assim possibilita sua confirma o e se for o caso sua corre o Uma pr tica utilizada para encontrar poss veis erros permear o c digo com instru es tipo WRITE estou aqui 1 WRITE estou aqui 2 ou com WRITE x lt resultadol gt WRITE x x lt resultado2 gt e assim sucessivamente para termos certeza do fluxo de execu o do c digo Vejamos um exemplo Imagine que parte de um c digo de 320 linhas precisa calcular a tangente de um ngulo para cada n que a soma de n vezes a express o n a e ou seja j 1 nvezesa tg 5 e e n 1 em que j 200 no nosso exemplo 132 133 134 135 136 137 138 320 livrof90 v8 preliminarl 2014 5 5 1 07
202. uivo n o ter limite para o tamanho do conjunto de dados livrof90 v8 preliminarl 2014 5 5 1 07 page 95 106 Fortran 95 curso b sico Gilberto Orengo MANIPULA O ENTRE ARRAYS Rapidamente veremos outra caracter stica do Fortran 90 95 que o fato de podermos operar com arrays tal como fazemos com n meros Isto quando operamos a b c se a 5 e b 6 c ser 11 Se as arrays s o conformes mesma forma este tipo de opera o fica subentendida Vejamos o caso abaixo Digite e execute o 1 PROGRAM operacao array IMPLICIT NONE N 3 INTEGER i 4 REAL DIMENSION 4 a 1 2 3 4 5 REAL DIMENSION 4 b 5 6 7 8 6 REAL DIMENSION 4 c d 7 DO i 1 4 8 c i a i b i 9 END DO 10 d at b 1 WRITE 100 c c 12 WRITE 100 d d 13 100 FORMAT A 5 F6 1 1X 14 END PROGRAM operacao array Neste exemplo a array c resulta da soma dos elementos conformes da array a com os da array b J a array d obtida usando a nova instru o do Fortran 90 95 que faz implicita mente a descri o anterior Lista de Exerc cios 2 s assim exercitando saberemos de nossas limita es livrof90 v8 preliminarl 2014 5 5 1 07 page 96 107 CAP TULO 5 A ALOCA O DIN MICA DE MEM RIA ALLOCATABLE livrof90 v8 preliminarl 2014 5 5 1 07 page 97 108
203. ura e o sexo Fazer um programa em Fortran 95 que receba a altura h e o sexo de uma pessoa A seguir calcule e imprima o seu peso ideal utilizando as seguintes f rmulas a para homens 71 7 h 58 b para mulheres 62 1 h 44 7 Dica n o esque a a altura um n mero real e necess rio saber se homem ou mulher Ou seja podemos solicitar a informa o por interm dio da indica o de f ou F ou m ou M Revise leitura de caracteres no Cap tulo 2 3 5 Crie tr s programas em Fortran 95 O primeiro escrever todos n meros de 100 at 1 O segundo escrever os 100 primeiros pares e o ltimo imprimir os m ltiplos de 5 no intervalo de 1 at 500 3 6 Elabore um programa em Fortran 95 que escreva a soma dos n meros entre 25 e 200 Dica neste caso a soma realizada da seguinte forma somal somal 1 N o esque a de informar antes de come ar o loop da soma DO END DO o valor inicial de somal 3 7 Crie um programa em Fortran 95 que escreva a soma dos n meros pares entre 25 e 200 Dica se baseie no exerc cio 3 6 3 8 Criar um programa em Fortran 95 que escreva o fatorial de um dado n mero Impor tante existe limite de m quina para o tamanho do n mero Dica n o esque a que n o definido fatorial de n mero negativo e que 0 1 3 9 Criar um programa que encontre o n simo termo da s rie de Fibonacci A s rie de Fibonacci dada por fib n fib n 1
204. urgiu na d cada de 50 sendo a primeira linguagem de alto n vel a ser criada Embora seja a precursora das linguagens ela foi projetada com os conceitos da programa o estruturada No que diz respeito modulariza o de programas a linguagem Fortran oferece facilidades atrav s de sub rotinas SUBROUTINE e fun es FUNCTION o que torna poss vel a implementa o de programas modulares e estruturados No Fortran 90 95 esta modulariza o teve um avan o significativo atrav s das declara es e procedi mentos MODULE tanto que esta declara o tem status de programa Como veremos esta caracter stica muito importante Um dos usos da declara o MODULE substituir as declara es COMMON no comparti lhamento de dados Antes de estudarmos esta utilidade veremos qual a fun o do COMMON nos programas Fortran A DECLARA O common Programas e subprograma em Fortran podem utilizar vari veis que s o declaradas de forma a compartilhar uma mesma rea de mem ria Este compartilhamento tem a finalidade de economizar mem ria pois vari veis de m dulos ou subprograma diferentes ocupar o uma mesma posi o de mem ria Isto anos atr s era uma caracter stica muito utilizada pois era vis vel o problema de mem ria Hoje este problema pode at ser amenizado mas sempre que pudermos economizar mem ria melhor Assim continuamos sempre otimizando o uso de mem ria e os COMMON ainda s o usados O uso do COMMO
205. urso b sico Gilberto Orengo 99 ocorre por exemplo com o c lculo da fun o seno ou cosseno nas fun es intr nsecas Am bos os procedimentos ser o descritos a seguir Os benef cios dos subprogramas s o principalmente 1 Testes Independentes Cada subprograma pode ser codificado e compilado como uma unidade independente antes de ser incorporado ao programa principal Este passo conhecido como uma unidade de teste 2 Procedimentos Re utiliz veis Em muitos casos diferentes partes de um programa po dem usar o mesmo subprograma Com isto reduz o esfor o de programa o e tamb m simplifica a depura o dos erros 3 Isolamento do restante do Programa As nicas vari veis no programa principal que podem se comunicar e tamb m serem trocadas pelo procedimento s o as que est o de claradas nos argumentos 3 Cooperativismo Os subprogramas podem ser desenvolvidos por diferentes programa dores e em diferentes partes do mundo e ap s disponibilizados para uso Um exemplo o reposit rio de subprogramas da biblioteca matem ica LAPACK que ser estudada na p g 103 O uso de subprogramas uma boa pr tica de programa o em c digos muito extensos 6 2 AS SUB ROTINAS SUBROUTINE Uma sub rotina um procedimento Fortran que chamado pela declara o CALL que recebe valores de entrada e retorna valores de sa da atrav s de uma lista de argumentos A forma geral de uma sub rotina A declara
206. vo externo A estrutura do arquivo determinada pelos dados formatados ou n o o tipo de acesso ao arquivo e espa o comprimento para a informa o O Fortran fornece instru es e procedimentos para manipular dados por leitura e es crita conhecidas por entradas e sa das de dados inclusive com o uso de arquivos internos Do ingl s vem a denomina o Input Output ou simplesmente I O para Entrada Sa da de dados Entre as instru es dispon veis veremos somente algumas a saber WRITE e READ que s o respons veis pela transfer ncia de dados OPEN que conecta as unidades l gicas aos arquivos e FORMAT que fornece informa es expl citas de formato dos dados O objetivo deste livro dar uma forma o b sica portanto n o ser o tratados assuntos relativos a tra tamento de posicionamento interno num arquivo tipos de arquivos entre outros Para um avan o no estudo da linguagem Fortran consulte as refer ncias bibliogr ficas na p g 135 A INSTRU O wRITE A instru o WRITE utilizada para transferir dados para o arquivo de sa da Output ou seja escreve os resultados ou informa es de sa da do programa A sintaxe WRITE UNIT lt unidade gt FMT lt formato gt ADVANCE lt modo gt em que UNIT lt unidade gt um argumento obrigat rio e indica a unidade l gica disposi tivo para a qual ser transferido o valor ou informa o contido na mem ria Como unidade padr o default
207. xtcolor cinza4 tiny fortran 25cm bfseries Large xspace textcolor cinza4 90 AS NOTAS DE OBSERVA ES NO TEXTO As notas utilizadas ao longo do texto como por exemplo o da p gina 2 foram geradas com o seguinte comando newcommand NNOTAJ 2 begin flushright vspace 4cm begin minipage t 0 8 textwidth small bfseries sffamily color cinza4 1 2cm color cinza4 rule textwidth 1mm 05cm color cinza4 scriptsize sffamily 2 livrof90 v8 preliminarl 2014 5 5 1 07 page 132 143 AP NDICE E O EHX E ESTE LIVRO color cinza4 hrulefill end minipage end flushright vspace 1cm OS QUADROS DAS INSTRUGOES FORTRAN 95 Os quadros que cont m as formas das sintaxes das instru es Fortran 95 como o exemplo abaixo WRITE UNIT lt unidade gt EMT lt formato gt ADVANCE lt modo gt foram introduzidas pelos ambientes begin sintaxebox begin Verbatim fontfamily tt fontseries b commandchars numbers none xleftmargin 5mm codes catcode 3 catcode 1 WRITE UNIT lt unidade gt FMT lt formato gt ADVANCE lt modo gt end Verbatim end sintaxebox sendo que o ambiente sintaxebox gerado pelas seguintes linhas newlength Linewidth def findlength setlength Linewidth linewidth addtolength Linewidth 4 fboxrule addtolength Linewidth 3 fboxsep newenvironment sintaxebox
208. za m dio conter a sintaxe de instru es ou procedimentos do For tran 95 AaBb escritas com o tipo typewriter negrito identificar o elementos referentes ao Fortran 95 AaBb escritas com o tipo helv tica negrito identificar o exemplos referentes ao IATEX dispon veis no Ap ndice E os colchetes sempre indicar o que o elemento Fortran 95 opcional por exemplo uma declara o uma instru o ou um atributo Nx em sobrescrito identifica uma nota de rodap em que x sera o n mero da nota notas como esta em fonte helv tica permitir o inser es informativas ou explicativas ou ainda de advert ncias a respeito da programa ao em linguagem Fortran O conte do sobre Fortran 6 10 extenso para ser tratado num livro que pretende ser introdut rio Sendo assim veremos os conceitos m nimos necess rios para uma inicia o na linguagem Fortran e na sequ ncia introduziremos alguns conceitos mais modernos do Fortran 90 95 o qual chamaremos somente de Fortran 95 Entre as evolu es sofri das pelo Fortran relativas ao FORTRAN 77 daremos nfase a tr s as fun es intr nsecas SELECTED REAL KIND e SELECTED INT KIND Cap 7 na p g 107 que permitem maior portabilidade entre computadores e compiladores Fortran a declara o de vari veis ALLO CATABLE Cap 5 na p g 91 que habilita a aloca o din mica de mem ria e as Declara es e Procedimentos do tipo MODULE no Cap 8 na p g 111 que

Download Pdf Manuals

image

Related Search

Related Contents

User Guide  Sony WM-EX505 User's Manual  HF180 - Koenig  FCW.801 kapak.indd  取扱説明書 品番 WJ-HD150 シリーズ - psn  やさしさをつなぐ街 - 株式会社 福祉の街    KOHLER K-11344-47 Installation Guide  

Copyright © All rights reserved.
Failed to retrieve file