You are on page 1of 29
Apostila de FORTRAN Rita Valéria Andreoli Joao Carlos Carvalho INPE dezembro/2001 Apresentagaio No documento final do I-EPGMET (Encontro dos Alunos de Pés-Graduagdo em Meteorologia), realizado em 2000, expressa-se claramente que os alunos gostariam de ter cursos introdutérios dos principais softwares ¢ linguagens de programagio utilizados pela comunidade de Meteorologia do INPE. Desde entdo, essa demanda permaneceu presente, mas adormecida. Recentemente, em setembro, com a retomada das discussdes sobre a necessidade de cursos, propds-se a elaboragdo de apostilas simples, basicas, voltadas para o usuario que nada ou muito pouco conhece do software ou da linguagem de programagao. Dessa proposta nasceu o Projeto Apostila, © Projeto Apostila é composto de 5 grupos. Cada grupo foi responsavel pela elaboragio de uma apostila sobre um software ou uma linguagem de programacdo. Os grupos so: Rosane Chaves € Daniel Andres (Grads); Rita Valéria Andreoli e Joo Carlos Carvalho (Fortran); Marcelo Zeri (Matlab); Pablo Fernandez e Emanuel Giarolla (Latex); e Hélio Camargo e Marcos Oyama (Unix). Os grupos, durante 2 meses, trabalharam intensamente (sem se descuidar das suas dissertagdes & teses) para produzir as apostilas. A apostila que vocé est recebendo é fruto do esforgo de um dos grupos. Gostariamos de agradecer a todos os colegas que revisaram a versio "0" das apostilas: Alexandra Amaro de Lima, Antonio Marcos Mendonga, Edna Sousa, Elizabeth Reuters, Everson dal Piva, José Francisco de Oliveira Jinior, Marcos Yoshida, Mauricio Bolzan, Patricia Moreno Simées, Paulo Marcelo Tasinaffo, Raimundo Moura, Rodrigo de Souza e Wantuir Aparecido de Freitas. As sugesties, criticas e os comentirios apresentados foram de grande valia. Muito obrigado! Gostariamos, também, de agradecer a Anisio Moliterno por disponibilizar a drea publica da fractal para 0s arquivos de exemplos das apostilas. As apostilas ndo tém 0 objetivo de competir com os cursos que so oferecidos pelo CPTEC ou INPE, mas complementar. A idéia é que 0 usuirio, apés estudar a apostila, possa caminhar sozinho, consultando manuais ou os colegas; ou seja, torne-se independente. A apostila é uma ponte, ndo o fim, Recomenda-se aos leitores da apostila que fagam os cursos oferecidos pelo CPTEC ow INPE: sempre temos algo a aprender! Além disso, no futuro, as apostilas podem servir de base para cursos ministrados por alunos - instrutores. Espera-se que, no futuro, outros Projetos Apostila sejam realizados, melhorando ¢ atualizando as apostilas existentes. Além disso, outras apostilas (p.ex. Fortran 90), poderdo ser elaboradas, Boa leitura! Instalagio dos exemplos Pega a alguém do Suporte (ou algum colega que conhega um pouco de UNIX) para instalar os exemplos na sua érea. As instrug S Jo as seguintes: 1, Transfira (via ftp, como usudrio anénimo) 0 arquivo instala_apostila da Area piblica da fractal ( /pub/software/apostila ) para 0 hone do usuario. (em negtito esté 0 que vocé deve digitar; 0 é a tecla Enter) nevasca:/nome/fulano>#tp fractal 0 Name (fracta!:fulano) anonymous 6 Guest login ok. Password: fulano@eptec.inpe.br 0 Guest login ok. NCHO: no irk aparecer na tela >ed pub/software/apostila 0 ase 6 >get instala_apostila 0 quit 0 ome/fulano> 2. Abra a permissio de execugdo de instala, evasca: /home/£ >chmod utx instala_apostila 0 Explicagio dos exemplos A apostila de programagio em FORTRAN contém varios exemplos, que sio disponibilizados a0 usuario, Esses exemplos, esto na forma original apresentada na apostila, e encontram-se no arquivo prog_for.tar 1) adiciona.f- este programa soma mimeros de 1 4100, utilizando 0 comando DO, encerrado pelo comando enddo; 2) adicional.f-executa a mesma operagdo do programa anterior, mas utiliza 0 comando CONTINUE, para encerrar o lago do comando DO; 3) array2.f'- calcula média ¢ desvio padrdode uma série de dados fornecida a partir do tecaldo; 4) calcula_pi.f - calcula o valor de pi, utilizando uma funedo intrinseca; 5) contagem.f - faz contagem regressiva a partir de um mimero fornecido via teclado; 6)contagem1.f~ permite observar quando estéo sendo executadas as primeira e segunda intreacées na estrutura de lagos aninhados (comando DO); 7) equacao.f- calcula a equagao de segundo grau; 8) equacdol.f- calcula a equagéo de segundo grau, e suas raizes, wtilizando a estrutura do IF aritmético; 9) equacao2.f- calcula a equagdo de segundo grau, e suas raizes utilizando 0 comando IF expandido. 10) ler_arg.f- /é séries temporais a partir de arquivos em disco, faz a soma e gera um arquivo de saida; -fornece um conceito, dependendo, da nota fornecida via teclado; 11) nota 12) rad £- calcula o nivel de radiagdo utilizando 0 comando DO WHILE £- mostra um exemplo de formatacao; 14) raio.f- calcula a drea do circulo de raio r 15) read.f - lé um arquivo do disco ndo formatado, e escreve com um formato especifico 16) sart.f- calcula raiz quadrada de um niimero, utilizando uma fungad intrinseca 17) teste.f- exemplo simpes utilizando a estrura do IF légico simples 18) somaL.f, soma2.f, soma3.f. soma4.f e somaS.f - so exemplo simples, utilizando alguns comandos bisicos. os *.dat - sdo séries temporais, utilizadas em alguns exemplos. 19) os arq SUMARIO LINTRODUCAO Formatagao Compilacao ¢ execugdo 2. CONCEITOS BASICOS Comando Stop Comando End Comando Pause Comando Parameter 3. DECLARAGAO DE VARIAVEIS Tipos de Variévei Inteiras (INTEGER) Reais (REAL) Alfanuméricas (CHARACTER) Légicas (LOGICAL) 4, OPERADORES: Atribuigdo Operadores Literais Operadores Aritméticos Operadores Relacionais Operadores Légicos Prioridade 5. FUNGOES INTRINS! Fungées Trigonométricas Outras Fungées 6. COMANDOS DE CONTROLE Comando IF Comando DO Comando DO WHILE 7. COMANDOS E FORMATOS DE ENTRADA E SAIDA Comando READ Comandos WRITE e PRINT Canais de entrada e saida - Teclado e monitor - Arquivos em disco: Comandos OPEN e CLOSE Formatos 8, REFERENCIAS BIBLIOGRAFICAS 10 24 1. INTRODUCAO, O FORTRAN (FORmula TranSLATION) é uma linguagem de alto nivel, desenvolvida entre 1954 € 1958 por John Backus ¢ colaboradores. Como o proprio nome diz, ele permite uma tradugo qu direta de formulas, por meio de uma simbologia de variéveis ¢ operadores algébricos, sendo assim por exceléncia uma linguagem voltada para problemas que possam ser formulados matematicamente, em particular nos campos da fisica, da engenharia, da estatistica ¢ da propria matemitica. Apesar de ele permitir a elaboragdo de cédigos extremamente sofisticados para a resolugio de problemas de grande complexidade, 0 amplo sucesso do FORTRAN nos meios académicos ¢ cientificos deve-se ao uso de uma terminologia simples (em inglés) - OPEN, READ, STOP, etc - aliada a codificag3o de cima para baixo (top-down approach), linha por linha, aproximando-se bastante do procedimento manual para a resolugo desses problemas. Assim, a idéia é expressar de mancira simples o problema a ser resolvido. Vamos comegar com um exemplo simples, Imagine que o nosso problema é fazer a soma de trés valores. O primeiro paso é, entdo, tentar descrever as ctapas a serem seguidas para obter essa soma. A ctapas a screm seguidas seriam: ler os valores, somar os valores, imprimir seu resultado e finalizar. Vamos agora tentar descrever esse problema em linguagem Fortran, seguindo essas etapas. 23456789 !linha de comentario program soma tinicia o programa chamado soma integer k,n,m 'declara que k,n,m so variaveis inteiras n=l tatribui o valor 1 a variavel n Jatribui o valor 3 & variével m soma ne m, ¢ 0 resultado é armazenado em k lescreve na tela a varivel k para a execugao do programa !fim do programa soma Como podemos notar acima, uma estrutura basica que inclui o comando program (da um nome ao programa), declaragao de varidveis, célculo, e os comandos stop e end, & seguida para a elaboragio de um programa em Fortran . Além disso, podemos notar que alguns critérios de formatagao so usados para editar 0 programa. O programa pode ser editado em qualquer editor de texto (como, nedit, textedit, etc), Formatagéo Os seguintes critérios devem ser seguidos para se escrever um programa em FORTRAN no modo de formulério fixo: * colunas 1 a 5: so usadas eserever os rétulos (label) ou niimeros de comando, Estes nimeros devem ser inteiros e estar totalmente contido nestas colunas, Nao podem se repetir ¢ no precisam estar em ordem crescente. Serio usados para que outros comandos possam identificar aquela linha; * coluna 6: qualquer caractere diferente de 0 (zero) nesta coluna indica que o que vem a seguir & continuagao da linha anterior ou da Gltima linha que ndo seja um comentirio (préximo item); podem existir até 19 linhas de continuago; © colunas 7 a 72: comandos; * colunas 73 a 80: ignoradas pelo compilador, * como as palavras- comando em FORTRAN so todas em inglés, letras acentuadas, ¢¢ — cedilha (¢) ¢ til NAO so aceitas, Conhecendo, agora, a convengao de colunas utilizada para a elaborago de um programa em FORTRAN, tente editar o programa dado na introducdo, em seu editor de texto de preferéncia, Com © programa ja editado a partir da sétima coluna (no esqueca), salve seu programa com a extensio .f (por exempio somal.f). O proximo passo é a compilagdo ¢ execugio desse programa. Compilacéo e Execugio A compilaco de um programa em FORTRAN numa workstation, sob unix é feita no terminal, via teclado, nao se usa 0 mouse. No prompt do terminal digite: £77 -o .f Assim, considerando seu programa somal.f, a compilagao sera: £77 -o somal.exe somal.f Quando voeé executar © comando de compilagdo ir aparecer no prompt a seguinte mensagem: somal.f: MAIN soma: Se houver erro em seu programa, apare executivel eré mensagem de erro no terminal e no serd criado 0 A execugio ser realizada a seguir. No prompt do terminal digite: ou seja, somal .exe Agora que ja conhece os comandos de compilagZo e execusao faga um teste, Para verificar isto, inclua em seu programa um erro. Vocé pode introduzir um outro operador além da soma para gerar esse erro (k=*n+m). Agora é s6 compilar novamente o programa e ver a mensagem de erro. Seguindo nosso exemplo 1 (somal.f), alguns conceitos bas! referem-se a estrutura basica. cos so apresentados, a seguir. Eles 2. CONCEITOS BASICOS 1, Comentarios: nao sio interpretados pelo computador; um bom programa deve conter muitos para que fique o mais claro possivel. Em FORTRAN a letra c ou os caracteres * e ! na primeira coluna indicam que toda a linha é um comentirio, Na linha de comentério é permitido o uso de qualquer caracter, especial ou nio. Note que no programa somal.f, a primeira linha que define as colunas inicia-se com a letra c, Muitos comentarios também so colocados em cada linha, apés 0 caracter ! 2. Constantes: + Numé podem conter qualquer valor real, inteiro ou complexo. A parte decimal é separada da inteira por um ponto’.’. Os zeros antes € depois do ponto decimal podem ser omitidos, se ndo forem significativos, O expoente decimal ¢ indicado pela letra ‘e” ou *E’, deve vir entre o nimero ¢ seu expoente sem 0 uso de espagos entre eles. Nimeros negativos assim como a parte exponencial quando for negativa deve vir precedida do sinal menos ‘-". O sinal +” é opcional em ambas as partes, Os mimeros imagindrios devem vir entre parénteses e a parte real deve ser separada por uma virgula da parte imaginaria, 20, 5,4 (inteiras) 5, LOE+05_, -2.55E-02 (reais) 542i => (5.0,2.0) (complexa) © Alfanuméricas: (so as ‘strings’, seqiiéncias de letras e/ou nameros) podem conter qualquer seqiiéncia de caracteres. Deve vir entre aspas " ou apéstrofos * *. As aspas tém preferéncia sobre os apéstrofos; portanto, um valor literal pode conter apéstrofos, desde que seu valor venha entre aspas. Nao é permitido o uso de caracteres especiais e letras acentuadas. 3. Maitisculas e Mimisculas: 0 FORTRAN nio faz qualquer distingdo entre letras maiisculas ¢ minasculas. F permitido inclusive 0 uso do nome da variavel eserita de formas diferentes no mesmo programa. EX.: VAR = var = Var. 4, Os programas podem conter no inicio 0 seu nome (program nome_do _programa), ¢ devem terminar com a palavra ‘end’. Outra forma de parar o programa, e esta pode ser usada em qualquer parte dele, é usando a palavra ‘stop’. O programa terminard independentemente de haver mais comandos na seqiiéncia, COMANDO STOP - termina a execugdo do programa, Embora ndo seja comum, ele pode aparecer no meio do programa. COMANDO END - indica o final do programa devendo ser obrigatoriamente a sua tiltima linha. COMANDO PAUSE - interrompe temporariamente a execugdo do programa, que é retornada a partir daquele ponto assim que 0 usudrio fornecer um comando adequado. Esse comando pode ser incluido no exemplo anterior para verificarmos seu uso. 23456789 Ninha de comentario program soma finicia o programa chamado soma integer k,n,m Ideclara que k,n,m so varidveis inteiras tatribui o valor 1 a variével n tribui o valor 3 & variével m ause ‘ digite a letra c para continuar komen !soma ne m, e o resultado e armazenado em k print*,k lescreve na tela a varidvel k stop para a execugo do programa end !fim do programa soma COMANDO PARAMETER Este comando define um nome para uma constante. A diferenga entre um valor com ‘parameter’ uma varidvel comum & que com ‘parameter’ o valor nao pode ser modificado em nenhuma parte do programa ou ser lido através de um comando de leitura ‘read’. Vamos entao introduzir 0 comando parameter em nosso programa somal.f e definir um segundo programa (soma2.f) 23456789 program soma linicia o programa chamado soma parameter (raio=3) {define um nome simbélico para uma constante integer k,n,m Ideclara que k,n,m so variéveis inteiras integer pi Ideclara que o valor de raio é inteiro fatribui o valor 1 a variavel n {atribui o valor 3 a variével m {soma n , me raio, eo resultado é armazenado em k lescreve na tela a varivel k tpara a execuco do programa {fim do programa soma Um outro programa considerando 0 comando parameter, mostrado abaixo (raio.) © 0 programa calcula a area do circulo com raio r program circle real r, area, pi parameter (pi = 3.14159) weite (*,*) "Give radius x: lescrevena tela o valor der read (*,*) © Mé o valor de r area = pitrer Icalcula a drea e atribui o valor em area write (*,*) ‘Ar = ', area stop end Como jé vimos acima, sempre declaramos que tipo de variveis estamos utilizando. Assim, uma descrigdo dos tipos de varidveis ¢ feita. Em seguida so apresentados os operadores aritméticos. 3. DECLARAGAO DE VARIAVEIS As variéveis podem ser inteiras, reais, alfanuméricas ou literais. A declaragao de uma variével deve vir antes que ela seja usada, através dos comandos de especificagao explicita, tais como: integer, real, complex, character. Se isto no ocorrer, o compilador assumira as variéveis que comegam com as letras I até N como inteiras (INTEGER*4) e todas as outras como reais (REAL*4). Isso é chamado declaragdo implicita. Quando nio se deseja declarar implicitamente nenhuma varidvel usa- se 0 comando “implicit none” Para se declarar variaveis que sejam matrizes ¢ vetores deve-se indicar suas dimensdes logo apés 0 nome da variivel; entre parénteses, e separadas umas das outras por virgula, Ex.: a(4,3) indica uma matriz a de 4 linhas por 3 colunas. Tipos de Variaveis: Inteiras (INTEGER): sao aquelas as quais se atribuem valores inteiros. Reais (REAL): sio aquelas as quais se atribuem valores reais. Alfanuméricas (CHARACTER): sio as palavras ou expresses, CHARACTER NOME*w - w representa 0 nimero maximo de caracteres que a variavel pode conter dentro do programa. Légicas (LOGICAL): As varidveis légicas sio “nomes” aos quais se atribuem valores de constantes logicas. Assim, podem assumir os valores .TRUE. (VERDADEIRO) ou .FALSE. (FALSO) , ou somente Te F. 4, OPERADORES Atribuigéo A variavel ou identificador que estiver a esquerda do sinal de atribuigdo ‘=* recebe expresso, constante ou varidvel que estiver a direita. Veja que em nosso exemplo (somal.f) as variaveis m, n e k recebem valores através desse operador Operadores Literais Uma fungdo siti para varidveis literais é a concatenagdo, ou a jungao de duas ou mais palavras. Em FORTRAN a concatenagao é feita pelo operador *//”. Ex: ja = ‘meteor’ lb = ‘ologia’ lc=alb => c= ‘meteorologia” Operadores Aritméticos Executam operagGes aritméticas comuns. FORTRAN Matematica Significado Tradicional + + Soma = ~ Subtragio, * Multiplicag: 7 Divisdo a Potenciagao Dois operadores ndo podem aparecer lado a lado. Ex: A*-B(errado) ; A*(-B) (certo). Quando uma varidvel inteira recebe 0 resultado de uma divisio com resto, este resto é desprezado ou seja o valor é truncado, Alguns exemplos de expressdes aritméticas so: C= AD +B? D = E**(1/2) lg=(atbyi(c+d) Uma observacao importante, & que o quociente entre dois nimeros inteiros resulta sempre num inteiro mais préximo; igual ou menor ao valor verdadeiro, pelo processo de truncamento puro € simples. Assim, quando consideramos uma expresso do tipo D=E**(1/2), 0 resultado da divistio (1/2) sera 0 (zero). Para contornar esse problema, escrevemos os valores da divisio como reais, acrescentando um ponto apés cada mimero da divisdo; a expressio torna-se: D= E72) Operadores Relacionais Comparam variaveis, constantes ou expresses e retomam ‘.TRUE.’ ou ‘1’ se a comparagao for verdadeira, FALSE.’ ou ‘0” se a comparagao for falsa. FORTRAN Significado LT. (less than) MENOR QUI LE.(less than or equal to) s MENOR OU IGUAL QUE EQ (equal to) = IGUAL A -NE.(not equal to) 2 DIFERENTE DE GT.(greater than) > MAIOR QUE, ‘GE (greater than or equal to) > MAIOR OU IGUAL QUE Exs: ANEB NOME.EQ.’JOAO’ B**2-4.*A*C LT. 0, Operadores Légicos So usados quando é necessario mais de uma condigao relacional ou quando é preciso inverter seu resultado. Alguns exemplos da estrutura basica so mostrados. FORTRAN Significado “AND. Jungio OR. Disjungio OT. Negagao Ex: LI .AND. L2 ; (A LT. B) AND. (C GT. B) Dois operadores l6gicos e/ou relacionais nao podem aparecer lado a lado X NOT. EQ. ¥ (errado) ; X NE. Y (certo) Prioridade (Operador Prioridade * F = = 7 2 = 7 7 3 EQ. a NE. e : e GE, e LT. e LE. + NOT. = AND. e OR. Tr O uso de parénteses pode ser feito para trocar a ordem de prioridade. As expresses sto calculadas de dentro para fora (Ss) (6) @) a) (8°) t t t t Ex: (A+B-C*(X-¥**2)/3.0)*Z+W + t + G3) ay n Com 0 conhecimento dos tipos de variaveis ¢ operadores aritméticos podemos incorporar novos comandos ao nosso programa inicial. Tente incluir em seu primeiro programa outras operagées. No exemplo abaixo, a soma de variveis reais ¢ a concatenago de strings sfo incluidas (exemplo3, soma3.f). 23456789 program soma ‘inicia o programa chamado soma integer k,n,m !declara que k,n,m so varidveis inteiras real a,b, Ideclara que as variaveis a,b,c sio reais character*2 estado Ideclara que estado & string com 2 caracteres character*3 codigo Ideclara que estado & string com 3 caracteres character*S tudo Ideclara que estado é string com 5 caracteres tatribui o valor 1 a variavel n tatribui o valor 3 a variavel m !soma n em, eo resultado ¢ armazenado em k 5 tatribui o valor 2.5 a variavel a 0 fatribui o valor 1.0 a varidvel b b !soma ae b, e 0 resultado é armazenado em ¢ lescreve na tela a variével k e ¢ print*,k,c estado = “SP atribui o string SP a variavel estado codigo=01a ! atribui o string O1a A varidvel cédigo tudo= estado//codigo —_ !eoncatena estado e eédigo e atribui a tudo print*, tudo lesereve na tela a variével tudo stop para a execugdo do programa end {fim do programa soma O exemplo seguinte (equacao.) faz a resolugaio de uma equagao de 2°. 234567 C este programa calcula equacao de segundo grau program equacao {inicia o programa equacio integer b,a,c Ideclara que as varidveis a,b,c sao inteiras real delta a=4 b delta=b**2-4,0+A*C laloula a equagdo e resultado é atribuido a delta write(*,*)delta Jescreve na tela o valor de delta stop end Tente, agora, montar alguns programas simples. 5, FUNCOES INTRINSECAS Existem varias fungdes predefinidas em FORTRAN, que podem ser usadas em qualquer parte do programa. Aqui algumas dessas fungées sao apresentadas. Fungoes Trigonométricas Nome Definigao Tipo de Tipo da Argumento Fungio ISIN) [Seno (radianos). Se x for [Real ou IREAL*4 -omplexo, a parte real é omplexo. jassumida como valor em jradianos. SIN (x) [Arcoseno (radianos). Real, ke. 1 |REAL*4 JRetorna valores na faixa \[-m /2, 2/2] (cos mno (Fadianos) Se x ou IREAL*4 for complexo, a parte feomplexo al & assumida como jvalor em radianos, |ACOS (x) _[Arcocoseno (radianos)) (Real, [x|.le. 1 [REAL*4 IRetoma valores na faixa On) TAN) __|Tangente (radianos) [Real [REAL*4 TAN (x) _[Arcotangente (radianos). [Real JREAL*4 JRetorna valores na faixa l-n/2, w/2] INH (x) Seno Hiperbalico eal [REAL*4 (radianos) SOSH (x) |Coseno Hiperbélico [Real [REAL*4 (radianos) TANIT (x) _[Tangente Iiperbélica [Real [REAL*4 ‘radianos) Outras Fungdes Nome Definigio Tipo de | Tipoda J|Argumento| Fungo [ALOGIO (x) _|[Logaritmo de x na base 10 Real Real [ALOG (x) __|Logaritmo neperiano de x (x > 0) [Real Real EXP (x) fo niimero e (base dos logaritmos [Real Real Ineperianos) elevado ax [ABS (%) [valor absolut de x [Real Real TABS (x) __|valor absoluto de x inteiro_[Inteiro FIX (x) [Conversio de real para inteiro, [Real inteiro truncando FLOAT (x)__|Conversio de inteiro parareal__[Inteiro [Real IDBLE (x) [Converte para dupla precisio [Real Real (dupla recisio) [CMPLX (x) __[Converte para o tipo complexo [Real [Complexo [SIGN (x.y) [Fomece valor positivo de x se y 2[Real Real JO e negativo de x sey <0 [MOD (x,y) __|resto da divisio de x por y Inteiro lInteiro |AMOD (x,y) _[resto da divisdo de x por y ISQRT (x) jraiz quadrada de x (x > 0) Como usé-las? Nos exemplos a seguir mostramos dois exemplos simples. Um calcula o valor de (calcula_pi.f) e 0 outro a raiz.quadrada de um nimero qualquer (sqrt.f). 234567 c Calcular o namero pi. c Pi @ 0 arco cujo cosseno é — program p_cale real pi pisacos(-1.0) tealoula o valor de pi utilizando a fungao acos write(*,*) 'Pi= "pi top nd C Este programa calcula a raiz quadrada de um numero ¢ utilizando a funcao ORT program funcoes implicit none real x, y print *,'entre com um numero real' read *, x yesart (x) tealoula a raiz quadrada de x e armazena em y print *,'a raiz quadrada do numero dado ', y stop end 6.COMANDOS DE CONTROLE Como jé foi dito, uma das caracteristicas da linguagem FORTRAN € o processamento de cima para baixo, linha por linha, Entretanto, essa ordem pode ser alterada quando utilizamos algumas condigdes para que os calculos sejam realizados. Isso pode ser feito utilizando 0 comando IF. Estrutura do IF OIF (“se”) & utilizado quando queremos optar por varias altemativas dependendo do resultado ou do dado fornecido. Ha duas formas de sintaxe mais comuns: IF com uma alternativa (estrutura condicional simples) — A. sintaxe do comando é: IF (condigao) then Bloco 1 end if Neste caso, se a condigio for verdadeira, 0 blocol é executado, Caso seja falsa, ele pula e prossegue com 0 programa, Vamos voltar a0 nosso primeiro exemplo ¢ incluir uma condigdo para que cle execute a soma (exemplo, soma4.f). €23456789 program soma linicia 0 programa chamado soma integer k,n,m declara que k,n,m sdo variaveis inteiras !atribui o valor | a variavel n latribui o valor 3 a variavel m -ne. 0) then — !seo valor de m for diferente de zero, entdo fsoma ne m, ¢ 0 resultado e armazenado em k Iinaliza 0 bloco fescreve na tela a varidvel k tpara a execugdo do programa {fim do programa soma IF com duas alternativas (estrutura condicional composta) - Aqui, se a condigdo for verdadeira, o blocol é executado; se nao, o bloco2 é que sera executado. A sintaxe do comando €: (condigao) then Como ficaria agora nosso exemplo? ( somaS.f) C23456789 program soma tinicia o programa chamado soma integer k,n,m Ideclara que k,n,m so variaveis inteiras !atribui o valor 1 4 variavel n !atribui o valor 3 a variavel m if(m .ne. 0)then !seo valor de m for diferente de zero, entio 'soma ne m, ¢ 0 resultado é armazenado em k Ise a condigao nao for verdadeira fo valor den é atribuido a k Ifinaliza o bloco lescreve na tela a varivel k para a execugao do programa !fim do programa soma IF légico simples ~ executa ou nio o comando a sua frente (na seqiiéncia, na mesma linha) dependendo de sua condigdo. Este comando pode ser de qualquer tipo, atribuigdo, eserita, leitura (teste.f). A sintaxe nesse caso é: IF (condigao) comando 234567 program teste real x,y y-x — !se valor dex maior que y, 0 valor de x € atribuido a y IF aritmético Uma maneira de se deslocar num programa, usando uma expresso no lugar de uma variavel & a seguinte: IF (exp. Numéric: Exp. numérica nfo pode ser complexa. rl, 12, 13 so rétulos. Se o valor de ‘exp. numérica’ for menor que zero comando vai para a linha com o rotulo (label) rl, quando for igual a zero comando vai para linha com o rétulo 12 e quando for maior que zero vai para 13. Retomando ao exemplo equacao.f , e podemos incluir comando if aritmético (exemplo equacaol.f) 234567 C este programa calcula equacao de segundo grau program equacao Jinicia o programa equagio real b,a,c,x, x1,x2 _ Meclara que as varidveis a,b,c sfo inteiras real delta a=4 ce delta-b**2-4.0*A*C write (*,*)delta if (delta) tealcula a equagio; resultado é atribuido a delta lescreve na tela o valor de delta 30 Ise delta menor que zero executa a linha com e label 10, se delta igual a zero executa a linha c com label 20, se delta maior que zero executa a © linha com label 30 10 print*, “delta < 0 ; no real roots’ go to 100 1a execugo é desviada para o comando stop 20 x=-b/(2.0%a) print*, “delta = 0 al real roots’ P a x1=x2= °,x go to 100 fa execugio & desviada para o comando stop 0 sd=sqrt (delta) x1=0.5*(-b-sd) /a =5* (-b+sd) /a ta > 0; Além do comando If aritmético, neste programa nés usamos, pela primeira vez, a formatagdo dos label. Note que os numeros 10, 20 ¢ 30 estio definidos entre as colunas de 1 a 5. O uso dos apéstrofos também foi incluido quando desejamos eserever na tela uma mensagem. IF expandido — neste caso, virias condi es so testadas. A estrutura a sintaxe IF (condigao ) then blocol else if (condigdo2) then ploco: else if (condig&o n) then blocon else bloco (n+1) end if Um exemplo neste caso pode ser visto abaixo (notas.f) ¢ Exemplo de programa usando o comando IF em sua forma © expandida 623456 program resultadon implicit none todas as varidveis devem ser declaradas explicitamente lesereve na tela a nota 9.00) then !seanota for maior que 9, entdo executa 0 comando a seguir; se nao, testa a nova condigé print *,'muito ben else if (nota then print *,'voce else if (nota 5.00) then nt ' else ¢ melhorar um pouco! tt *,'farelo!l!!!!!' end if Mfinaliza 0 bloco if stop end Um segundo exemplo é rescrevermos o programa equacaol.f utilizando a estrutura de if estendido (equacao2.f). 234567 C este programa calcula equacao de segundo grau program equacao ‘inicia o programa equagio PX, x1) x2 Ideclara que as variaveis a,b,c sdo inteiras delta=b**2-4.0*A*C Ieula a equagao; resultado é atribufdo a delta write (*,*)delta tescreve na tela o valor de delta if (delta 0) tt Ise a condigdol for verdadeira, entdo executa a c linha abaixo e finaliza 0 bloco if print*, ‘delta <0 ; no real roots’ else if(delta .eq. 0)then — !seacondicaol for falsa a condigao2 c é testada; se for verdadeira, executa os e comandos das linhas seguintes e finaliza. c Se for falsa, uma condigio3 ¢ testada b/ (2.0*a) print*, delta = 0 ; two equal real roots’ print *, 1x else if (delta .gt. 0) then _ Itestaa terceira condigdo d=sart (delta) #1=0.5* (-b-sd) /a two different real roots xl= /,x1 x2= /, x2 Mfinaliza 0 bloco if COMANDO DO (faga) Quando 0 mesmo comando precisa ser executado varias vezes até que se atinja uma certa condigio ‘ou um nimero certo de repetigdes, 0 melhor € usar as estruturas de repetigao. Estas estruturas so bem simples e podem economizar varias linhas de comando. Lagos simples do i = ibeg, iend, inc (comandos a serem executados) end do ‘i? 6 uma varidvel inteira que recebe inicialmente o valor ‘ibeg’, a seqiiéncia de comandos se repete, ¢ 0 valor de ‘i’ aumenta de ‘incr’ a cada vez que 0 comando volta para a linha do ‘do’. A repeticgo 6 para quando o valor de ‘i’ & maior que ‘iend”. A palavra chave ‘end do” pode ser escrita como ‘enddo’. ‘ibeg’, ‘iend’ e ‘incr’ podem ser constantes ou variaveis inteiras ou reais, positivas ou negativas. Quando ‘incr’ for igual a 1 ele pode ser omitido. © exemplo a seguir pode ajudar a entender 0 comando do (adiciona.f). 234567 c somar os nimeros iros de 1 a 100. program p_add100 c inicializa um acumulador. ia=0 latribui o valor zero para varidvel que iré acumular os valores do ic+1,100,1 tpara os valores de 1 a 100 com intervalo de 1, faz iasiatic ladiciona o valor de ic & soma (ia) end do lencerra o loop write(*,*) stop end Outra forma para encerrar um lago do comando DO , é utilizando 0 comando CONTINUE. A estrutura basica do comando don i = 1,10 (comandos do bloco) n continue “n” label (niimero inteiro) referente ao comando a CONTINUE que identifica o final da seqiiéneia de comandos a ser executada varias vezes. O exemplo anterior utilizando 0 comando continue sera (adicional.f): 234567 c somar os numeros iros de 1 a 100. program p_add100 c inicializa um acumulador. ia=0 latribui o valor zero para varivel que ira acumular os valores do 10 ic=1,100,1 — !paraos valores de 1 a 100 com intervalo de 1, faz jasiatic adiciona o valor de ie & soma (ia) 10 continue Jenquanto ic <100, 0 comando do é executado write(*,*) stop end Outro Exemplo: (contagem.f) © este programa fornecido az contagem regressiva a partir de um numero program contagem | inicio do programa implicit none ! todas varidveis devem ser declaradas explicitamente integer interv, tempo, inicio _ ! declaraas varidveis do tipo inteiras parameter (interv=-1) !aconstante -I é representada pela varidvel interv print *, ‘entre com um numero inteiro' ! escreve na tela tudo © que estiver entre aspas read *, inicio 116 0 numero digitado e 0 atribui a varidvel inicio print *, ‘comegou a contagem regressiva’ do 10 tempo-inicio, 1, interv — ! executao comando dentro do lago até que a varidvel inicio seja igual a1 print *, tempo 10 continue print *, ‘bummmm!!* stop end ! £im do programa Lagos aninhados A situagdio em que temos um DO dentro de outro DO é chamado de lagos aninhados, ou seja, 0 lago intemo sera executado 0 mimero de vezes determinado pelo lago extemno. Este tipo de estrutura & fundamental quando trabalhamos com matrizes. No exemplo abaixo (contagem|.f) 0 comando no interior do lago sera executado 50 vezes. do i=1,10 ! (externo) ! do j=1,50 ! (interno) ! (comando) end do ! end do ! (externo) ! @ este programa p ¢ executado o primeiro e o segundo do! program loop implicit none integer m,n parameter. ( integer i, 3 ite observar quando esta sendo! print *,' ij! do 10 i=1,m 1 inicio do lago externo print *, 'primeiro do ', do 20 j=1,n 1 inicio do lago interno print *, ‘segundo do ',i,3 20 continue ! fim do lago interno 10 cont ! fim do lago externo stop end COMANDO "DO WHILE" Este comando & utilizado para executar um bloco repetidas vezes enquanto a condigao for verdadeira, A partir do momento em que a condigao passa a ser falsa, este sai do lago continuando a execugdo do restante do programa, a sintaxe do comando &: DO WHILE (condigao) (comandos do bloco) :ND DO O programa abaixo mostra a utilizagao do comando DO WHILE (rad. !gste programa calcula o nivel de radiacao e o grau de seguranga! !o programa utiliza o comando do while, que é utilizado para lexecutar um bloco repetida: 0 for !verdadeira. A partir do momento em que a condicao passa a ser 'falsa, este sai do loop continuando a execucao do restante do !programa. program radiacao implicit none vezes enquanto a cond is devem ser declaradas explicitamente real radseg, fatseg, min ! declaragio das varidveis do tipo reais parameter (radseg=0.466, fatseg=10.0) !atribui nomes as variveis integer dia ! declaragdo das varidveis do tipo inteira dia=0 t *, "entre com o nivel de radiacao do dia! *, nivrad *, 'n.dias rad ' adseg/fatseg (nivrad n) !executa as instrugdes dentro do laco ate que a c condigao seja satisfeita (nivead .gt. radseg) then print *,dia,nivrad,' inseguro! else pri dia, nivrad, ' seguro! end if ai nivrad=nivrad/2.0 end do 1 fim do comando do while end 7. COMANDOS E FORMATOS DE ENTRADA E SAIDA Os comandos de entrada e saida, na sua forma mais simplificada, possuem a seguinte estrutura: COMANDO READ ~ permite a entrada de dados via teclado ou de um arquivo em disco. fread (unidade, formato) lista_de_parametros * unidade: se mimero inteiro, especifica o canal (arquivo em disco) se * ,indica entrada de dados via teclado * formato: se niimero inteiro, especifica rétulo de formato se * ,indica formato livre 23456 program ler integer a,b,c print*,entre com os valores de ab c read(*,*) a,b,c sum-atbtc stop end COMANDO WRITE - permite a saida de dados para 0 monitor ou para um arquivo em disco. [write (unidade, formato) lista_de_pardmetr ‘As mesmas especificagdes para unidade e formato, dadas acima, so utilizadas para o comado write. Podemos notar que, nos exemplos utilizados anteriormente, esses comandos eram expressos considerando a entrada de dados via teclado ¢ saida na tela. Ou seja, nossa unidade ¢ formato eram definidos por '*” 3456 program escrever integer a,b,c print*,entre com read(*,*) a,b,c sum-atb+e write (*,*)a,b,c, sum stop end lores de abe Uma outra maneira de escrever os arquivos de saida é através do comando “PRINT” . Esse comando permite a saida de dados exclusivamente para 0 monitor. Sua sintaxe &: [Print formato, lista de parimetros Onde lista_de_pardmetros representa os dados que serdo impressos, © devem vir separados por virgula. esta lista pode conter varidveis ou expressdes alfanuméricas; estas tltimas devem vir entre apéstrofos * + 23456 program ler integer a,b,c print*,entre com os read(*,*) a,b,c sum=atb+c print*, “sum =",sum ‘op end As unidades *6’ e ‘*’ se nao forem definidas dentro do programa, serio consideradas como 0 terminal (‘write’ ou ‘print”). Da mesma forma as unidades ‘5’ ou ‘*” so definidas como o teclado (‘read’). © comando ‘print’ imprime sempre os resultados na unidade definida como o terminal. CANAIS DE ENTRADA E SAIDA - Teclado e monitor No comando READ(*,formato), os dados de entrada devem ser digitados no teclado, conforme a especificagio do formato, se for o caso; e separados por virgula ou espago em branco, para formato livre. Nos comandos WRITE(*,formato) ¢ PRINT, os dados serio exibidos no monitor conforme a especificagao de formato, se for 0 caso; ou em formato aleatério, escolhido pelo computador, para formato livre. © exemplo a seguir cal (array.f) a média e desvio padrio a partir de dados fornecidos via teclado c¢ este programa calcula a media e o desvio padrao de uma erie de dados fornecidos a partir do teclado program conjloop integer maxitm parameter (maxitm = 8) cs! integer i real x(maxitm), averag, stdev, sum, sumsqr print *, ‘entre’, maxitm, 'numeros, um por Linh, do 10 i=1, maxitm read *, x(i) 10 continue sum = 0 sumsar = 0.0 do 20 i=1,maxitm sum = sum + x(i) sumsar = sumsar + x(i) ** 2 20 continue averag=sum/real (maxitm) stdev=sq: sumsqrt/real(maxitm) - averag ** 2) 20 print * print 15, 'o valor medio e', averag print 15, 'o desvio padrao e', stdev 15 format (1x, a, £8.1) print * print *, 'tabela de diferenga entre x(i) e a media! print 25, 'i', 'x(i)', 'diferengat (x, a4, 3x, a8, 3x, al4 i=l, maxitm 35, i, x(i), x(i)-averag (ix, i4, 3x, £8.1, 3x, £14 30 continue stop end Arquivos em disco Como especificado anteriormente, o 1° argumento nos comandos READ ou WRITE especifica 0 canal de entrada/saida. Assim, se a “unidade” for um némero (inteiro), é feita uma associagao entre a lista de varidveis a ser lida 0 nome do arquivo correspondente através dos comandos OPEN e CLOSE. COMANDO OPEN (abrir) OPEN (UNIT=nimero da unidade,FILE="nome_arquivo’ STATUS="tipo_arquivo’) Ex: OPEN (UNIT=1,FILE="dados’,STATUS=’OLD’) OPEN (UNIT=2,FILE="dados’,STATUS="NEW’) * Omimero da unidade deve ser um mimero inteiro no associado a um outro arquivo. * 0 tipo de arquivo deve ser ‘NEW’ para um arquivo de saida novo , ‘OLD’ para um arquivo j4 existente, ou ‘UNKNOWN’ para arquivo desconhecido. Em geral no se usa 0 NEW porque os compiladores dio mensagem de erro quando o arquivo ja existe e vocé quer ignorar o que foi escrito anteriormente nesse arquivo. Entio se usa 0 UNKNOWN para arquivos novos também. COMANDO CLOSE (fechar) Um arquivo pode também ser fechado. Isto fard com que o FORTRAN coloque uma marca de fim de arquivo naquele ponto, esta marca pode ser identificado por outro comando ou fungao . Onde status="estado’ é opcional. [close (unidade,statu: low lendfile unidade ado pode ser ‘keep’ que mantém o arquivo na memeéria (esta & a opso assumida quando status~estado’ é omitida), ou ‘delete’ que apaga o arquivo da meméria. Arquivos fechados podem ser reabertos em qualquer parte do programa, O exemplo a seguir (ler_arg.f) mostra a leitura e escrita de arquiv 1s em disco. ai 6234567 program ler_arq ‘ce programa le series temporais real varl (104) ,var2(104),x(104),y(104),z (104) USS SSS E SESS ESOS USSG TEI ESS USEUSOO IE II IIE ce © arquivos de entrada OHSS SEES S ESOS SES IHS ICSU ESTEE ISU TOE IIE open (10, fil c', status="old') open (11, file ct, status="old") CHEESES BESS E DEH D ESSER TIESTO TI © arquivo de saida UHCI S SHOES O STU S I OIHOO IIA RIERA RE open (12, file='soma.asc', status="'new') © leitura de dados eererttrrrtrrr Tress Teeeterer tern errerrrecerrrrrtrrerarestrecy do 1=1,104 read(10,*)varl(1)_ ‘lera varl contida no arg referente a unidade 10 read(11,*)var2(1) _!ler var2 contida no arg referente na unidade 11 x(1)=varl (1) latribui o valor da varidvel para x y(1)=var2 (1) latribui o valor da varidvel para y z(1)=x(1)+y(1) write (12,*)2(1) lesereve o arq_saida na unidade 12 enddo close (10) close (11) close (12) FORMATOS A maioria dos exemplos mostrados consideram que os arquivos de entrada e saida tem uma formatagio livre, definida pelo caracter *. E um recurso itil para se evitar erros. Os formatos servem para que os dados sejam impressos ou lidos de uma forma especifica, determinado pelo programador. Os formatos so compostos por uma seqiiéncia de especificagdes que determinarao como os dados serio processados. Cada uma dess s especificagSes devem vir separadas por virgulas. Pode-se ainda imprimir constantes numéricas ¢ alfanuméricas, sendo que esta ultima deve vir entre apéstrofos * * A forma de se declarar os formatos é a seguinte: format (especificagaol, especific ) 2 Onde r é um numero inteiro, e representa o rétulo do ‘format’. Um mesmo ‘format’ pode ser usado por varios comandos de escrita e leitura, Strings devem vir entre apéstrofos duplos (‘string’) nesse formato, [Formato [Uso fim [Valores Inteiros Im: nimero de posigdes reservadas,|Ex: valor formato inclusive para o sinal 12345 15 Em. [Valores Reais lm: numero total de posigdes|Ex: 12345678 F9.4 reservadas, incluindo o ponto decimal In: mimero de casas decimais [Em.n [Valores Reais com expoente Im: nimero total de _posigdes,|Ex: 0.1234E+04 —E10.4 inclusive o sinal ¢ ponto decimal da mantissa, simbolo E, ¢ o sinal e os: dois digitos do expoente In: mimero de casas decimais da mantissa, mx. [Deixa m espagos em branco ‘m nimero de espagos em branco [Am] [Seqiiéncia de Caracteres Im: néimero de caracteres JEx: meteorologia—_ A(12) Caso as strings sejam maiores que 0 espago reservado a elas, serdo tomados apenas os m primeiros caracteres. Se forem menores, elas serao alinhadas a direita e os outros espacos deixados em branco, “belo horizonte read (*, “(al0)") nome > belo horiz hwrite (*, “(a15)’) nome > belo horiz [Nome A seguir, dois exemplos ( read.f e radiacao.f, respectivamente) serio apresentados considerando algumas especificagdes de formato. 23456 program read ¢ Este programa le os dados do arquivo "sen_cos.dat" que ¢ possui formatacao livre e imprime para a tela usando o © comando FORMAT integer nmax, u parameter (nmax=1000, u=20) real x(nmax), y(nmax), z(nmax) open (u, FILE='sen_cos.dat', STATUS="OLD"') !abre o arquivo dec dados ad(u,*) on 118 o numero de pontos 10 20 100 if (n.GT.nmax) then Ise n>nmax ento, executa os comandos do if write(*,*) 'Erro: n = ',n,'e maior que nmax =', nmax stop para a execugdo endif Mfinaliza o bloco if do 10 i= 1, 1 para valores de 1 a n, faga read(u,*) x(i), y(i), 2(4) 118 os valores de x, yz enddo close (u) fecha a unidade u do 20 i= 1, n tpara valores de 1 an, faga write (*,100) x(i), y(i), 2(i) lesereve os valores de x, y, z para © formato definido enddo format (3(F10.4)) lespecificagao do formato. Neste caso, o niimero 3 representa o niimero de vezes que a especificagdo de formato deve se repetir stop end !programa que mostra um exemplo de formatacao usando o comando format teste tarea program radiacao programa calcula o grau de contaminagao de uma certa! eo tempo necessario para que esta que com um grau! !de seguranga! 15 25 35 real radseg, fatseg parameter (radse integer dia real nivrad, radmin dia-0 print *,"entre com o nivel de radiagao do dia’ read *, nivrad print 15, 'n, dias', ‘radiacao', 'condicao! format (1x,a7,2x,all,2x,a8) radmin=radseg/fatseg do while (nivrad .gt. radmin) if (nivrad .gt. radseg) then print 25, dia, nivrad, 'inseguro' format (1x, i7, 2x, £11.7, 2x, a8) else print 35, dia, nivrad, 'seguro' format (1x, i7, 2x, £11.7, 2x, a8) end if dia = dia +3 nivrad = nivrad/2.0 end do end -466, fatseg=10.0) 24 REFERENCIAS BIBLIOGRAFICAS Esta apostila foi preparada levando em consideragdo, 0 objetivo principal, que é fornecer subsidios 4 um piiblico sem nenhum conhecimento prévio do assunto; razao pela qual a abordagem é iniciada a partir de conceitos basicos da linguagem FORTRAN, tais como as convenges para a definig&o de varidveis e as regras para operagdes aritméticas simples. Além disso, teve-se a preocupagio de reunir um contetido minimo que permitisse ao usuério a aquisicdo de informacées suficientes para a elaboracdo de um programa em FORTRAN de complexidade simples a média. Nao obstante, acreditamos que outros tpicos, como, fungées e subrotinas, ndo apresentados nesta apostila, poderao ser titeis na geracao de programas mais sofisticados, como também na compreensdo de cédigos escritos por outros autores. Assim, algumas referéncias sdo apresentadas, pois acreditamos que essas poderao servir de complemento ao material reunido nesta apostila, em particular, para aqueles interessados em aplicagdes mais especificas de programacdo em FORTRAN. 1, Shibata, C. S. Fortran Basico: Notas de aula referentes ao curso organizado pelo setor de treinamento. INPE. Primeira edigo, julho de 1996. Esta apostila serve como guia introdutério ao uso de Fortran, com uma abordagem ampla do assunto. E um material compreensivel para um usuario ndo especializado, ¢ suficientemente bom para a resoluedo de problemas simples. 2. Farrer, H. ; Becker, C. G.; Faria, E. C.; Campos, F.F.; Matos, H. F.; Santos, M. A.; Maia, M. L. Programagcio estruturada de computadores: FORTRAN ESTRUTURADO. Editora Guanabara Koogan S.A., p.194, 1992, E um livro bastante claro e didatico, e contém varios exemplos e exercicios propostos. 3. Hehl, M. E. Linguagem de programagio estruturada: FORTRAN 77. Editora McGraw-Hill, 1987. E um livro no muito didético, indicado para usudrios que jé possuem algum conhecimento prévio sobre o assunto, 4, Press, W. H. et al Cambridge Univ. Pre: ‘umerical Recipes in Fortran: the Art of Scientific Computing. , Cambrigde, 1986. Livro em nivel mais avancado, Traz um breve desenvolvimento tedrico do problema, seguido do cédigo numérico correspondente.

You might also like