Você está na página 1de 54

livrof90_v6 2007/3/14 10:59 page i #1

Srie Linguagem de Programao Cientca

Fortran 95:
Gilberto Orengo
Professor adjunto do Curso de Fsica Mdica Centro Universitrio FranciscanoUNIFRA
http://www.orengonline.com/ orengo@orengonline.com

curso bsico

1a Edio

Editora XXX

livrof90_v6 2007/3/14 10:59 page ii #2

Copyright c 2007 de Gilberto Orengo Copyright dos Apndices c 2007 de Gilberto Orengo Capa Lucas Rodrigues dos Santos
A Preparao e digitao no L TEX Gilberto Orengo

Ilustraes no texto Gilberto Orengo e Lucas Rodrigues dos Santos Reviso CCCC DDDD HHHH Impresso Grca ZZZZZZZZ (55) xxxx.xxxx Santa MariaRS Site do Livro http://www.orengonline.com/fortran95/

Dados Internacionais de Catalogao na Publicao (CIP) Cmara Brasileira do Livro, SP, Brasil Orengo, Gilberto, 1961 Fortran 95: curso bsico / Gilberto Orengo. Santa Maria: Editora da UNIFRA, 2007. ISBN: XX-XXXX-XXX-X 1. Informtica 2. Fortran 3. Linguagem de Programao YY-XXXX
Arquivo L EX original: livrof90_v5.tex AT

CDD-ZZZ.ZZ

ndices para catlogo sistemtico: 1. Linguagem de programao 2. Fortran 90/95

[2007] Espao reservado Editora Todos os direitos desta edio reservados ..

livrof90_v6 2007/3/14 10:59 page iii #3

SUMRIO

Apresentao Prefcio 1 CONSIDERAES INICIAIS: Apresentando o Fortran 1.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . Um Breve Histrico sobre o Fortran . . . . . . . O Livro . . . . . . . . . . . . . . . . . . . . . . . 1.2 Os bits e bytes . . . . . . . . . . . . . . . . . . . . . . 1.3 Como Trabalha a Memria do Computador? . . . . 1.4 As Unidades de Programa . . . . . . . . . . . . . . . O Programa Principal (Main Program) . . . . . . . . O Formato livre . . . . . . . . . . . . . . . . . . O Conjunto de Caracteres . . . . . . . . . . . . . Os Nomes Simblicos em Fortran . . . . . . . . Os Rtulos em Fortran . . . . . . . . . . . . . . O Primeiro Programa . . . . . . . . . . . . . . . . . . O Segundo Programa . . . . . . . . . . . . . . . . . . 1.5 A Despensa de Dados no Fortran 95 . . . . . . . . 1.5.1 Dados Inteiros - INTEGER (Preciso Simples) 1.5.2 Dados Reais ou de Pontos Flutuantes - REAL Preciso Simples (Single Precision) . . . . . Preciso Dupla (Double Precision) . . . . . 1.5.3 Os Nmeros Complexos - COMPLEX . . . . . 1.5.4 Os outros dados: LOGICAL e CHARACTER . . 1.6 A Declarao das Variveis . . . . . . . . . . . . . . 1.7 Os Procedimentos Intrnsecos . . . . . . . . . . . . . 1.7.1 As Funes Matemticas Intrnsecas . . . . . 1.7.2 A Aritmtica com inteiros e reais . . . . . . . A Atribuio de valor varivel . . . . . . . . . . As Expresses Aritmticas . . . . . . . . . . . . . A Aritmtica dos inteiros . . . . . . . . . . . . . . A Aritmtica dos reais . . . . . . . . . . . . . . . . A Aritmtica mista: entre inteiros e reais . . . . .

vii ix 1 1 2 3 4 7 9 9 10 10 11 11 11 14 17 17 17 18 18 19 19 20 23 23 25 25 26 27 27 28

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

livrof90_v6 2007/3/14 10:59 page iv #4

iv

SUMRIO

1.7.3 A Manipulao de Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.8 Corrigindo Erros DEBUGGING . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2 TRABALHANDO COM ARQUIVOS ENTRADAS/SADAS (I/O) DE DADOS 2.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 A instruo WRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 A instruo READ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 A instruo OPEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 A instruo CLOSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6 Formatando as sadas e/ou entradas (FORMAT) . . . . . . . . . . . . . . . Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 AS ESTRUTURAS DE CONTROLE 3.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Expresses Aritmticas . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Expresses Lgicas . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . Operadores Lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3 Hierarquia dos Operadores . . . . . . . . . . . . . . . . . . . . . . 3.2 Estruturas com Deciso (ou Seleo) . . . . . . . . . . . . . . . . . . . . . 3.2.1 Estrutura Condicional Simples (IF...THEN) . . . . . . . . . . . 3.2.2 Estrutura Condicional Composta (IF...THEN...ELSE IF) . 3.2.3 A instruo IF Lgico . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.4 A estrutura de seleo direta (SELECT CASE...CASE) . . . . . . 3.3 Estruturas de Repetio (Loops) . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 A Estrutura de repetio DO...END DO . . . . . . . . . . . . . . . 3.3.2 A Estrutura de repetio DO...IF...END DO ou DO innito . . O uso do WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 AS VARIVEIS COMPOSTAS Arrays 4.1 Os Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Preenchendo com valores os elementos de um vetor . . 4.1.2 A manipulao dos elementos de um vetor . . . . . . . 4.2 As Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 A declarao de uma matriz . . . . . . . . . . . . . . . . 4.2.2 Preenchendo com valores os elementos de uma matriz 4.2.3 A manipulao dos elementos de uma matriz . . . . . Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 AS SUB-ROTINAS E FUNES 5.1 Introduo . . . . . . . . . . . . Procedimentos Externos . Procedimentos Internos . . 5.2 As Sub-rotinas SUBROUTINE 5.3 As Funes FUNCTION . . . . 41 41 42 42 43 45 46 48 53 55 55 56 57 57 57 59 59 59 61 63 63 65 65 66 68 69 71 72 73 74 75 76 76 77 79 81 81 81 82 83 84

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

livrof90_v6 2007/3/14 10:59 page v #5

Fortran 95: curso bsico (Gilberto Orengo)

6 AS FUNES INTRNSECAS SELECTED_REAL_KIND E SELECTED_INT_KIND 89 6.1 Selecionando Preciso de Maneira Independente do Processador . . . . . . . . 91 7 A ALOCAO DINMICA DE MEMRIA (ALLOCATABLE) 93 7.1 O Atributo ALLOCATABLE e as Declaraes ALLOCATE e DEALLOCATE . . . . . 94 7.2 Quando Devemos Usar uma Array? . . . . . . . . . . . . . . . . . . . . . . . . . 96 7.3 Manipulao entre Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 8 OS PROCEDIMENTOS MODULE 8.1 A Declarao COMMON . . . . . . . . . . . . . . . . . . . . 8.2 A Declarao MODULE . . . . . . . . . . . . . . . . . . . . 8.2.1 Compartilhando Dados usando o MODULE . . . . 8.3 Os Procedimentos MODULE . . . . . . . . . . . . . . . . . . 8.3.1 Usando Mdulos para Criar Interfaces Explcitas 8.3.2 A Acessibilidade PUBLIC e PRIVATE . . . . . . . Apndices:
A A O L TEX e este Livro A.1 Sobre o texto . . . . . . . . . . . . . . . A.2 A denio dos tons de cinza . . . . . A.3 A nota de margem . . . . . . . . . . . A.4 As notas de observaes no texto . . . A.5 Os quadros das Instrues Fortran 95 A.6 Os exemplos de programas Fortran 95 A.7 Os mini-sumrios dos Captulos . . . A.8 As Referncias Bibliogrcas . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

99 99 101 101 103 103 105 106 107 107 108 109 109 110 111 112 112 113 115 117 119

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

B Lista de Compiladores Fortran C A Tabela ASCII de Caracteres D Os tipos de Dados Intrnsecos suportados pelo Fortran 95 E Glossrio

F Resumo dos Captulos 121 F.1 Cap. 1: CONSIDERAES INICIAIS: Apresentando o Fortran . . . . . . . . . . 121 F.2 Cap. 2: Trabalhando com Arquivos Entradas/Sadas de Dados . . . . . . . . . 121 Referncias Bibliogrcas ndice Remissivo 122 125

livrof90_v6 2007/3/14 10:59 page vi #6

vi

SUMRIO

livrof90_v6 2007/3/14 10:59 page vii #7

Apresentao

Nesta parte ser transcrito os textos de apresentao de dois pesquisadores da rea de Fsica e de Matemtica, usurios ativos e seniors do Fortran.

livrof90_v6 2007/3/14 10:59 page viii #8

livrof90_v6 2007/3/14 10:59 page ix #9

Prefcio

(Texto provisrio) Este livro o resultado de um longo perodo de contato com a linguagem Fortran. Tudo comeou na graduao do Curso de Fsica, na Universidade Federal de Santa Maria-RS (UFSM), entre 1984 e 1989, passou pelo Mestrado em Fsica Aplicada/UFSM, com o auxlio fundamental dos professores Cludio de Oliveira Graa/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 nal, em que parte da tese foi a construo de uma verso inicial de um cdigo computacional, sob tutela do professor Marco Tulio M. B. de Vilhena/UFRGS. Tambm contriburam o curso ministrado na UFRGS, para alunos da Engenharia Mecnica ao lado da professora Cynthia Segatto e, a construo de um material didtico para um Minicurso de Fortran 90/95, para a Semana Acadmica do Curso de Fsica Mdica do Centro Universitrio Franciscano (UNIFRA), em junho de 2001. Uma forte contribuio tambm venho das aulas da disciplina Linguagem de Programao Cientca para o Curso de Fsica Mdica/UNIFRA, desde 2002. A minha formao em Fortran foi baseada principalmente no aprendizado autodidata. Todos os livros citados nas referncias tiveram inuncia sobre a minha viso a respeito da linguagem Fortran e na forma de programar. Portanto, algumas caractersticas deles foram incorporadas, subconscientemente, e podem fazer parte do meu texto. Um destes livros que considero uma referncia o Professional Programmers Guide to Fortran77, de Clive G. Page da University of Leicester, UK, 1995. A diferena entre o Fortran 90 e o 95 sutil. No Fortran 95 foram realizadas pequenas correes do Fortran 90 e introduzidas algumas facilidades de programao paralela, como por exemplo, o procedimento FORALL. A escolha do ttulo do livro foi pelo Fortran 95, embora no trataremos neste texto a respeito dos avanos do Fortran 95, que far parte da sequncia do livro, numa edio mais avanada. Este livro tem um perl introdutrio e veremos os conceitos mnimos necessrios para uma iniciao na linguagem Fortran, introduzindo alguns conceitos mais modernos do Fortran 90/95. Este livro foi pensado para ser usado por estudantes que no 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 tero neste livro uma atualizao especialmente nos ltimos quatro captulos. aconselhvel para os iniciantes que leiam os captulos na sequncia em que so apresentados. J os conhecedores da linguagem podem saltear entre

livrof90_v6 2007/3/14 10:59 page x #10

SUMRIO

os captulos, conforme a necessidade, mas sugerido que leiam o primeiro captulo, para entenderem algumas peculiaridades da escrita do livro. Na pgina ocial do livro estaro disponveis atualizaes, correes, novidades, exerccios e problemas. Costumo evidenciar que em programao h uma diferena entre exerccios e problemas, ou entre a soluo de problemas e prtica com exerccios. O primeiro subentende que o segundo foi realizado exaustivamente e, assim, estaremos, em princpio, habilitados para resolver ou solucionar problemas. O endereo da pgina : http://www.orengonline.com/fortran95/ Tambm esto disponveis as respostas e comentrios a respeito dos exerccios do livro, no item exerccios. E, para vericar se est pronto para resolver problemas, um conjunto deles est disponvel no item problemas. METODOLOGIA ... Nos exemplos de programas as instrues da linguagem Fortran sero destacadas em negrito, e os elementos que no fazem parte da parte da sintaxe da linguagem sero escritos sem negrito. Mas, no texto, para chamar ateno sero tambm destacados em negrito. Gilberto Orengo Santa Maria, 2007

livrof90_v6 2007/3/14 10:59 page 1 #11

CAPTULO I

1
1 2 3 4 7 9 9 10 10 11 11 11 14 17 17 1.5.2 Dados Reais - REAL . . . . . . . . . Preciso Simples (Single Precision) Preciso Dupla (Double Precision) . 1.5.3 Os Nmeros Complexos - COMPLEX . 1.5.4 Os dados: LOGICAL e CHARACTER . 1.6 A Declarao das Variveis . . . . . . . . . 1.7 Os Procedimentos Intrnsecos . . . . . . . . 1.7.1 As Funes Matemticas Intrnsecas 1.7.2 A Aritmtica com inteiros e reais . . . A Atribuio de valor varivel . . . . . . As Expresses Aritmticas . . . . . . . . A Aritmtica dos inteiros . . . . . . . . . A Aritmtica dos reais . . . . . . . . . . . A Aritmtica mista: entre inteiros e reais . 1.7.3 A Manipulao de Caracteres . . . . 1.8 Corrigindo Erros DEBUGGING . . . . . . Exerccios . . . . . . . . . . . . . . . . . . . . 17 18 18 19 19 20 23 23 25 25 26 27 27 28 28 32 38

CONSIDERAES INICIAIS: Apresentando o Fortran


Neste captulo voc encontrar: 1.1 Introduo . . . . . . . . . . . . . . . . . . Um Breve Histrico sobre o Fortran . . . O Livro . . . . . . . . . . . . . . . . . 1.2 Os bits e bytes . . . . . . . . . . . . . . . 1.3 Como Trabalha a Memria do Computador? . 1.4 As Unidades de Programa . . . . . . . . . . O Programa Principal (Main Program) . . . . O Formato livre . . . . . . . . . . . . . O Conjunto de Caracteres . . . . . . . Os Nomes Simblicos em Fortran . . . Os Rtulos em Fortran . . . . . . . . . O Primeiro Programa . . . . . . . . . . . . O Segundo Programa . . . . . . . . . . . . 1.5 A Despensa de Dados no Fortran 95 . . . 1.5.1 Dados Inteiros - INTEGER (Preciso Simples) . . . . . . . . . . . . . . .

1.1 INTRODUO
Seja bem-vindo ao universo Fortran. Neste incio de conversa importante salientar que este texto foi integralmente escrito com o A A L TEX [1][5]. O L TEX um sistema de processamento de textos utilizado especialmente para produzir documentos cientcos de alta qualidade tipogrca. tambm til para outros A tipos de documentos, desde simples cartas at livros completos. O L TEX utiliza o TEX como base para seu processamento e a sua distribuio gratuita, disponvel para a maioria dos sistemas operacionais como o UNIX, Linux, Windows, OSMac, Sun e VMS. Nas Universidades encontrado, previamente instalado, nas redes UNIX/Linux de computadores (exceto A redes Windows). aconselhvel, se voc ainda no teve contato com L TEX que o faa. uma ferramenta computacional muito poderosa para uso no meio acadmico e cientco. No A Apndice A so apresentadas algumas linhas de programao L TEX, que foram utilizadas na elaborao deste livro.

livrof90_v6 2007/3/14 10:59 page 2 #12

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

UM BREVE HISTRICO SOBRE O FORTRAN Para muitos, nos anos 80, o Fortran estava morto e sepultado, porque a sintaxe da linguagem foi e, at os dias atuais, considerada arcaica por muitos programadores que aprenderam linguagens mais modernas. A linguagem Fortran a matriz de todas as linguagens cientcas de computadores. No comeo tinha somente a inteno de traduzir equaes cientcas para cdigos de computadores e, foi neste sentido um programa verdadeiramente revolucionrio. Antes do Fortran todos os programas de computadores eram lentos e originavam muitos erros. Na primeira verso, o FORTRAN I, lanada entre 1954 e 1957, a linguagem era muito pequena em comparao com as verses mais modernas. Entre outras coisas, continha somente as declaraes de variveis para os tipo inteiro (INTEGER) e real (REAL) e tambm no havia sub-rotinas. Durante este perodo percebeu-se diversos erros, que forou a IBM lanar o FORTRAN II em 1958. Um avano ocorreu com o lanamento da verso FORTRAN IV, em 1962, que permitiu os cientistas utilizarem pelos prximos 15 anos. Com isso, em 1966 o Fortran adotou uma padronizao, a American National Standards Institute Instituto Nacional Americano de Padronizao(ANSI) e passou a ser chamado de FORTRAN 66. A partir desta verso, todas as atualizaes seguiram um padro e o outro avano veio com o FORTRAN 77, em 1977. Entre as novas caractersticas esto as que permitiram escrever e armazenar mais facilmente programas estruturados. Nesta verso foram introduzidas novas estruturas, como o bloco de deciso lgica IF...THEN e foi a primeira verso que habilitou o manuseio amigvel de variveis tipo caracteres (CHARACTER). A atualizao mais importante foi a que deu origem ao Fortran 90. Esta verso inclui todo o FORTRAN 77 que serve de base, mas com mudanas signicativas, tais como: i) a implementao da alocao dinmica de memria para as arraysvetores e matrizes; ii) mudanas nas operaes com arrays; iii) a parametrizao das funes intrnsecas, permitindo assim utilizar mais do que dois tipos de preciso (simples e dupla) para variveis do tipo real e complexa; iv) capacidade de escrever procedimentos internos e recursivos, como tambm chamar os procedimentos atravs de argumentos, sendo estes, opcionais ou obrigatrios; v) a implementao do conceito de ponteiros; vi) melhor portabilidade entre compiladores e processadores; vii) o uso de caractersticas especiais do hardware, tais como: cache de instrues, pipeline[1] da CPU, disposies de programao paralela (vetorizao), entre outras. Estes novos conceitos da linguagem zeram do Fortran 90 uma linguagem mais eciente, especialmente para a nova gerao de supercomputadores, e que nos permite dizer: a linguagem Fortran continuar a ser usada com sucesso por muito tempo. Embora o Fortran no seja muito utilizado fora dos campos da cincia da computao e da anlise numrica, permanece como uma linguagem que desempenhar tarefas da rea da computao numrica de alto rendimento. Neste sentido, o Fortran at hoje superior em relao aos seus competidores, em especial em aplicaes cientcas computacionalmente intensivas
[1] pipeline: arquitetura de computador em pipeline (encadeada); 1. CPUUnidade Central de Processamento que construda em blocos e executa instrues em passos em que cada bloco trata de uma parte da instruo e dessa forma acelera a execuo 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 instruo enquanto a atual ainda est processando de forma a aumentar a velocidade de execuo de um programa. Fonte: DIC Michaelis UOL, distribuio gratuita em CDROM.

livrof90_v6 2007/3/14 10:59 page 3 #13

Fortran 95: curso bsico (Gilberto Orengo)

como fsica, matemtica, meteorologia, astronomia, geofsica e engenharias, porque permite a criao de programas que primam pela velocidade de execuo. Atualmente, os dois padres que conduzem as implementaes do Fortran so: ANSI X3.198-1992 (R1997). Ttulo: Programming Language Fortran Extended. informalmente conhecida como Fortran 90. O padro publicado pela ANSI. ISO/IEC 1539-1:1997. Ttulo: Information technology - Programming languages - Fortran Part 1: Base language. informalmente conhecido como Fortran 95. Existem mais duas partes deste padro. A Parte 1 foi formalmente adotada pelo ANSI. Est disponvel no endereo http://www.orengonline.com/fortran95/ uma transcrio de uma reportagem do New York Times, de 13 de junho de 2001, a respeito dos criadores do Fortran. O ttulo Pioneers of the Fortran Programming Language. O LIVRO muito importante para compreenso na leitura do livro observar as seguintes convenes adotadas.
NOTAO DO LIVRO
As seguintes notaes ou convenes so usadas ao longo do livro:
fortran

95

na linha que aparece este smbolo, como nota de margem, ser destacado na mesma cor a instruo referente ao Fortran 95, que no havia no FORTRAN 77. fundo cinza claro conter um exemplo de programa Fortran 95. A numerao dos programas seguir sequencialmente na ordem arbica, antecedida do nmero do captulo. fundo cinza mdio conter a sintaxe de instrues ou procedimentos do Fortran 95.

AaBb

escritas com o tipo typewriter negrito identicaro elementos referentes ao Fortran 95.
A escritas com o tipo helvtica negrito identicaro exemplos referentes ao LTEX, disponveis no Apndice A.

AaBb

os colchetes sempre indicaro que o elemento Fortran 95 opcional, por exemplo, uma declarao, uma instruo ou um atributo. notas como esta, em nte helvtica, permitiro inseres informativas, ou explicativas ou ainda de advertncias a respeito da programaao em linguagem Fortran.

O contedo sobre Fortran [6][10] extenso para ser tratado num livro que pretende ser introdutrio. Sendo assim, veremos os conceitos mnimos necessrios para uma iniciao na linguagem Fortran e, na sequncia introduziremos alguns conceitos mais modernos do Fortran 90/95, o qual chamaremos somente de Fortran 95. Entre as evolues sofridas pelo

livrof90_v6 2007/3/14 10:59 page 4 #14

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

fortran

95
fortran

95

fortran

95

Fortran (relativas ao FORTRAN 77), mencionadas antes, daremos nfase a trs: as funes intrnsecas SELECTED_REAL_KIND e SELECTED_INT_KIND (Cap. 6, na pg. 89), que permitem maior portabilidade entre computadores e compiladores Fortran; a declarao de variveis ALLOCATABLE (Cap. 7, na pg. 93), que habilita a alocao dinmica de memria e; as Declaraes e Procedimentos do tipo MODULE (no Cap. 8, na pg. 99) que, entre outras funes, substitui com primazia os confusos e perigosos COMMON. Sutilmente ao longo do texto sero apresentados outros pequenos avanos da linguagem, sempre destacados pela conveno acima descrita. As atualizaes do Fortran 95 como o uso de ponteiros (POINTER) ou, os tipos de dados denidos pelo usurio (TYPE), entre outras, sero tratadas em outra oportunidade. Eles faro parte da sequncia deste livro, que tratar de questes mais avanadas relativas ao Fortran 95. Abordagens mais completas a respeito do Fortran podem ser encontradas nos livros citados nas referncias bibliogrcas. Mas importante ter em mente que, tambm, sempre que estiverem usando um compilador[2] Fortran, uma valiosa fonte de informao encontra-se no Guia (ou Manual) do Usurio (Users Guide) e no Manual de Referncia da Linguagem (Language Reference Manual) do referido compilador. Ser utilizado como referncia o compilador Fortran G95 desenvolvido, sob a licena GNU[3] , pela comunidade de Software Livre e pode ser obtido gratuitamente no site http://www.g95.org, para diferentes plataformas e sistemas operacionais. Uma lista de compiladores Fortran encontrada no Apndice B. As aplicaes da linguagem caro restridas as reas da Fsica, da Matemtica e das Engenharias, embora o Fortran possa ser aplicado a outras reas como por exemplo Economia, Administrao, Informtica e Biologia. Este livro poder ser usado por estudantes que no 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 aconselhvel que leiam (estudem) os captulos na sequncia em que se encontram. Os conhecedores da linguagem podem saltear entre os captulos, conforme a necessidade, mas interessante que leiam este captulo, para entenderem algumas peculiaridades da escrita do livro. A seguir estudaremos termos cujos signicados sero importantes em todo o livro. Veremos tambm os conceitos relacionados a estrutura de um programa Fortran, tais como os tipos e a declarao de dados. E, criaremos passo-a-passo um programa Fortran, decrevendo e explanando cada etapa.

1.2 OS BITS E BYTES


Para uma aprendizagem mais signicativa necessrio e importante conhecermos alguns termos utilizados nesta rea da computao. Um ponto forte no uso de computadores a memria. As memrias dos computadores so compostas de milhes de interruptores eletrnicos individuais, cada um assumindo ON ou OFF (ligado ou desligado), nunca
[2] O termo compilador se refere, no jargo da informtica, a um software que faz a traduo de um programa fonte codicado em um cdigo legvel para a mquina. Estudaremos o compilador na pgina 8. [3] Informaes a respeito da licena GNU podem ser obtidas em http://www.fsf.org/.

livrof90_v6 2007/3/14 10:59 page 5 #15

Fortran 95: curso bsico (Gilberto Orengo)

num estado intermedirio. Cada um dos interruptores representa um dgito binrio (tambm conhecido como bit de binary digit), em que o estado ON interpretado como o binrio 1 e o estado OFF como o binrio 0. Diversos bits agrupados representam o sistema binrio de nmeros ou simplesmente sistema de base dois, representado pelo conjunto {0,1}. Para comparao, a base do sistema decimal 10 (0 a 9). O nmero de arranjos possveis para nmeros binrios fornecido por 2n , em que n o nmero de opes possveis. 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 memria de um computador. A partir desta unidade fundamental temos: 1024 Bytes = 1 KByte (1 KiloByte ou 1 KB), devido a base dois temos: 210 = 1024. 1024 KBytes = 1 MByte (1 MegaByte ou 1 MB = 220 = 1048576 Bytes). 1024 MBytes = 1 GByte (1 GigaByte ou 1 GB = 230 Bytes). 1024 Gbytes = 1 TByte (1 TeraByte ou 1 TB = 240 Bytes). Para compreendermos um pouco mais o sistema binrio 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 nmero nesta base (por exemplo, o 152) da seguinte forma: 152 15210 = (1 102 ) + (5 101 ) + (2 100 ) , O sub-ndice 10 usado para indicar a base numrica. E como representamos um nmero na base numrica do computador ou base 2[4] ? Bem, fazemos da mesma forma que na base 10. Vejamos o exemplo do nmero 101:
PRONNCIA DOS BINRIOS
A pronncia dos nmeros na base 2 no igual ao da base 10, isto , o nmero 101 pronunciado UM ZERO UM, enquanto que na base 10 pronunciado CENTO E UM

101 1012 = (1 22 ) + (0 21 ) + (1 20 ) = 510 , o qual representa no sistema decimal ao nmero 5. Observe que os trs dgitos binrios podem representar oito valores possveis: do 010 (= 0002 ), 110 (= 0012 ), . . . , at 710 (= 1112 ). Em geral, como mencionado anteriormente, se n bits so agrupados juntos para formar um nmero binrio, ento eles podem representar 2n valores possveis. Assim, um grupo de 8 bits (1 Byte) pode representar 256 valores possveis. Numa implementao tpica, metade destes valores so reservados para representar nmeros negativos e a outra metade para os positivos. No caso 1 Byte (8 bits) utilizado usualmente para representar nmeros entre 128 e +127, inclusive.
[4] Como curiosidade, se existissem extraterrestres com oito dedos, como voc esperaria que fosse a base representativa dos nmeros? Claro, pensando como Ser Humano!!!

livrof90_v6 2007/3/14 10:59 page 6 #16

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

Um sistema para representar os caracteres (de linguagens No-Orientais) deve incluir os seguintes smbolos: PERMITIDOS NO FORTRAN: As 26 letras maisculas: ABCDEFGHIJKLMNOPQRSTUVWXYZ As 26 letras maisculas: abcdefghijklmnopqrstuvwxyz Os dez dgitos: 0123456789 Smbolos comuns ou caracteres especiais: <espao> = + / < > ( ) , ? ! . : _ ; $ % & * NO PERMITIDOS NO FORTRAN: Algumas letras especiais ou smbolos, tais como: @ # [ ] { } entre outros. O nmero total de caracteres e smbolos requeridos menor do que 256, mas mesmo assim utilizado 1 Byte de memria para armazenar cada caracter. Embora incompleto, este o sistema de cdigo ASCII (American Standard Code for Information Interchange), usado na maioria dos computadores. Atualmente, est no processo de implementao um outro sistema de cdigo mais geral, chamado Unicode, que contemplar tambm as linguagens orientais. Todas as mquinas tem um tamanho de palavra"(wordsize) uma unidade fundamental de armazenamento, por exemplo, 8 bits, 16 bits, etc. Esta unidade difere entre as mquinas, em um processador Pentium c , por exemplo, poder ser de 32 bits (4 Bytes). Isto ser importante mais adiante. Outro conceito interessante o Flop, que uma operao de ponto utuante por segundo. Uma operao de ponto utuante ocorre quando dois nmeros reais so adicionados. Hoje, se fala de MegaFlops ou at mesmo em GigaFlops. Para nalizar, um comentrio a respeito de processamento paralelo (ou vetorizao). O processamento paralelo ocorre quando duas ou mais CPUs[5] trabalham simultaneamente na soluo de um mesmo problema. Assim, obtm-se maior velocidade e volume de processamento computacional. Para fazermos uso deste procedimento necessrio que o compilador Fortran 95 nos habilite tal procedimento e que o programa seja projetado com este objetivo, i.e., implementando as declaraes intrnsecas para o processamento paralelo. Como exemplo de compiladores comerciais que habilitam a vetorizao temos, entre outros, o LaheyFujitsu 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 tambm permite o processamento paralelo.
[5] CPU:

Central Processor Unit ou, no bom portugus, Unidade Central de Processamento.

livrof90_v6 2007/3/14 10:59 page 7 #17

Fortran 95: curso bsico (Gilberto Orengo)

1.3 COMO TRABALHA A MEMRIA DO COMPUTADOR?


Para entendermos como funciona a memria do computador, usaremos um exemplo hipottico, cujo tamanho de palavra de 8-bits:
3F29 1 0 1 0 1 1 1 0 3F2A

3F2B

3F2C

A memria dos computadores enderevel, i.e., para cada alocao de memria dado um nmero especco, o qual freqentemente representado em hexadecimal (base 16), por exemplo, 3F2C. Mas, porque usar base 16? Vejamos sucintamente o motivo no quadro abaixo.
SISTEMA HEXADECIMAL
Os computadores trabalham no sistema dos nmeros binrios, mas ns simples mortais pensamos no mundo do sistema de nmeros decimais. Felizmente, podemos programar os computadores para aceitarem os nossos nmeros decimais, convertendo-os internamente para os binrios da mquina. Mas, quando os cientistas, tcnicos e engenheiros trabalham diretamente com o sistema binrio percebem que o mesmo difcil de manipul-los. Vejamos, por exemplo, o nmero 110010 no sistema decimal, que escrito 0100010011002 no sistema binrio. Para evitar difcil manipulao no sistema binrio, uma alternativa quebrar o nmero binrio em grupos de 3 e 4 bits e com isso obter novas bases, respectivamente, base 8 (series octal) e base 16 (series hexadecimal). Vejamos ltima representao, a base 16 ou hexadecimal. Um grupo de 4 bits pode representar qualquer nmero entre 0(= 00002 ) e 15(= 11112 ) (lembram do 2n ?). Ento, um nmero hexadecimal tem 16 dgitos: 0, 1, . . . , 8, 9 mais de A, B, . . . , E, F. Assim, 916 = 910 ; A16 = 1010 ; B16 = 1110 ; e assim por diante. Podemos quebrar um nmero binrio em grupos de 4 e substituir os dgitos hexadecimais apropriados para cada grupo. Vejamos o nosso nmero 110010 = 0100010011002 . Quebrando-o em grupos de 4, temos: 0100|0100|11002 . Substituindo cada grupo pelo apropriado hexadecimal, obtemos 44C16 , que representa o mesmo padro de bits do nmero binrio, mas de maneira simplicada

A CPU est habilitada a ler e escrever numa especca localizao (rea) de memria. Grupos de reas de memria so tratados como informaes inteiras (no nmeros inteiros) possibilitando assim armazenar mais informaes. Usar a identicao criptogrca hexadecimal para localizao de memria incomum (porque mais complicado!!), assim o Fortran 95 possibilita substitu-las por nomes (em ingls). Quando os computadores so ligados, cada localizao de memria conter algum tipo de valor, e neste caso os valores sero aleatrios (randmicos). Em geral, os valores sero os que permanecem na memria do uso anterior. Por esta razo, muito importante inicializar as localizaes de memria antes de comear qualquer manipulao da mesma como clculos, declarao de variveis, etc.

livrof90_v6 2007/3/14 10:59 page 8 #18

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

Todas as CPU tem um conjunto de instrues (ou linguagem prpria da mquina) para sua manipulao. De maneira geral, todos os programas Fortran 95 so convertidos (ou compilados) para o conjunto de instrues (ou linguagem de mquina). Grosseiramente falando, todos os processadores tm o mesmos tipos de instrues. Assim, a CPU pode dizer coisas como, busque o contedo da rea de memria 3F2C ou escreva este valor na localizao (rea) de memria 3F2A. Esta basicamente a maneira de como os programas trabalham. Considere a seguinte seqencia de instrues em cdigo assembler: LDA 3F2C carregue (ou busque) os contedos de 3F2C ADD 3F29 adicione estes contedos em 3F29 STO 3F2A armazene o valor resultante na localizao 3F2A Esta seqencia de instrues, que tem signicado somente ilustrativo para os nossos propsitos, efetivamente adiciona dois nmeros e armazena o resultado numa rea de memria diferente. At 1954, quando o primeiro dialeto da linguagem Fortran foi desenvolvido, todos os programas de computador eram escritos usando o cdigo assembler. Foi John Backus e sua equipe, ento trabalhando na IBM, que props e desenvolveu um mtodo econmico e eciente de programar. A idia foi de projetar uma linguagem que possibilitasse expressar frmulas matemticas 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 instrues acima fossem escritas de maneira menos criptografada, como por exemplo: K =I +J. Um compilador tem a tarefa de converter um procedimento, como o da expresso acima, em instrues de cdigo assembler. Um esquema apresentado ao lado. Um compilador Fortran evocado por uma palavra chave, que depende de compilador para compilador. Ao compilar anexado ao cdigo, entre outras coisas, instrues matemticas, entrada de dados via teclado e sada de resultados (dados) via monitor, por exemplo. Os arquivos executveis so especcos para cada processador e/ou sistema operacional, i.e., cdigo compilado num computador com processador Intel Pentium no ser executado numa Estao Sun SPARC e vice-versa. Da mesma forma, um cdigo compilado num computador com sistema operacional Windows no ser executado num computador com sistema operacional Linux e vice-versa. Assim, quando trocarmos de plataforma (processador e/ou sistema operacional), devemos compilar novamente o cdigo. Observe que um termo novo, cdigo ou cdigo computacional, foi introduzido e se refere a um programa de computador gerado com uma linguagem de programao. Exemplo de uso est descrito adiante, na pgina 12. Veremos a seguir como criar e executar o primeiro programa em Fortran.

livrof90_v6 2007/3/14 10:59 page 9 #19

Fortran 95: curso bsico (Gilberto Orengo)

1.4 AS UNIDADES DE PROGRAMA


Unidades de programa so 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 (so as funes denidas pelo usurio) Sub-Programa SUBROUTINE (so as sub-rotinas) Unidade de Programa BLOCK DATA Unidade de Programa MODULE A seguir veremos o primeiro tipo. Os subprogramas SUBROUTINE e FUNCTION esto descritos no Captulo 5, na pgina 81. A unidade de programa MODULE apresentada no Captulo 8, na pgina 99. A unidade de programa BLOCK DATA no ser abordada neste livro. A leitura complementar sobre estas unidades de programa so encontradas nas referncias indicadas ou no Manual do Usurio do compilador.

fortran

95

Programa Principal (Main Program)


A execuo de um programa principal inicia com a primeira declarao ou instruo executvel no programa principal e naliza com a instruo END do programa principal ou com uma instruo STOP, localizada em qualquer lugar do programa. De fato o que determina a nalizao do programa o END. Quando encontrado um STOP ele remete o uxo de execuo incondicionalmente para o END, e assim a execuo do programa abortada. A forma estrutural de um programa principal em Fortran 95 : [PROGRAM nome_do_programa] [USE nome_do_use] [IMPLICIT NONE] [declarao global dos dados] instrues executveis e no-executveis CONTAINS [subprogramas internos] END [PROGRAM nome_do_programa] em que, os colchetes indicam que o elemento Fortran opcional[6] e, a ordem obrigatria est indicada na seqencia exposta. uma boa prtica de programao iniciar o cdigo com a instruo PROGRAM seguida do referido nome, tornando claro o incio do programa principal. Cada um dos itens da estrutura sero tratados no decorrer do livro.
[6] Lembrando a conveno: neste livro, os colchetes sempre indicaro que o elemento (por exemplo, uma declarao, uma instruo ou um atributo) opcional.

livrof90_v6 2007/3/14 10:59 page 10 #20

10

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

Um cdigo computacional tem um e somente um programa principal. a estrutura de referncia, isto , o compilador reconhece somente um END que obrigatrio, ou quando existir, inicialmente, somente um PROGRAM que opcional. Para as demais unidades de programa no h nmero mnimo ou mximo de aparies. Antes de criarmos os dois primeiros programas, importante e necessrio vermos alguns elementos do Fortran 95. O FORMATO LIVRE No Fortran 95 podemos escrever em qualquer coluna (posio) na linha e temos 132 posies para ocupar. Este chamado de formato livre. No FORTRAN 77, verso anterior ao Fortran 90/95, se inicia o cdigo a partir da coluna 7 at 72. As colunas 1 at 6 so utilizadas para instrues de controle de uxo do cdigo e para localizao de rtulos, como os utilizados na instruo FORMAT. A coluna 6, especicamemte, indica, pela escrita de um caracter qualquer, a continuao da linha anterior. Da coluna 73 at 80 o campo de identicao do carto. Esta estrutura, chamada de formato xo, era devido ao carto de digitao, em que cada linha tinha 80 colunas (posies) para ser perfurado, para posterior manipulao de leitura e processamento pelo computador. O Fortran 95 tambm suporta o formato xo. O CONJUNTO DE CARACTERES O conjunto de caracteres do Fortran consiste, como visto na pgina 6, de: As 26 letras maisculas: ABCDEFGHIJKLMNOPQRSTUVWXYZ As 26 letras maisculas: abcdefghijklmnopqrstuvwxyz Os dez dgitos: 0123456789 Smbolos comuns ou caracteres especiais: <espao> = + / < > ( ) , ? ! . : _ ; $ % & *

Em Fortram as letras maisculas so equivalentes as correspondentes minsculas, exceto quando estiverem relacionadas com as declaraes do tipo CHARACTER, que ser estudado na seo 1.5.4, na pgina 19. Isto , para o Fortran os nomes TESTE, teste, Teste e TeStE so equivalentes no h distino entre maisculas e minsculas. O caracter ponto-e-vrgula (;) pode ser usado para separar duas ou mais instrues numa mesma linha, como por exemplo: READ(*,*) x; WRITE(*,*) A saida eh: que signica, respectivamente, leitura via teclado de um valor para armazenar na varivel x e, escrita da frase A saida eh: , que est entre as aspas. Ambas instrues sero estudadas no Captulo 2. Outros exemplos: a = 23 ; b = 150 ; c = 23.76 que signica, atribuio de valores s variveis a, b e c. A atribuio de valores s variveis ser estudada na pgina 25.

livrof90_v6 2007/3/14 10:59 page 11 #21

Fortran 95: curso bsico (Gilberto Orengo)

11

OS NOMES SIMBLICOS EM FORTRAN Os nomes simblicos so utilizados em Fortran para se referir a vrios elementos tais como nomes de programa e de variveis. Um nome inicia, necessariamente, com uma letra e poder ter at 31 caracteres e poder conter letras, dgitos e underscores traos-baixos ( _ ). No conter caracter especial, nem caracteres acentuados ou cedilhados (<espao> = + / < > ( ) , ? ! . : ; $ % & * @ # [ ] { } ). So chamados de simblicos, como mencionado anteriormente (pg. 8), porque substituem aquelas instrues de mquina de localizao de elementos na memria. Exemplos de nomes vlidos em Fortran: t_2006 Metodo_LTSN soma t2006 AaBb SOMA primeiro_programa Calculo_integral_definida Soma

Exemplos de nomes invlidos em Fortran: 2_t_2006 calculo_do_ ao_distncia primeiro programa ilegal_@_caracter nome_muito_longo_nao_pode_ser_usado

OS RTULOS EM FORTRAN Os procedimentos ou instrues em Fortran podem ter suas posies identicadas no programa. Essa identicao conhecida como rtulo e descrito por um (1) at cinco (5) algarismos, sendo o primeiro algarismo no nulo. localizado sempre a esquerda na linha, antes da instruo ou procedimento. Os rtulos so importantes, por exemplo, na instruo no executvel FORMAT, que ser estudada na seo 2.6 do Captulo 2, na pgina 48. Exemplos de rtulos vlidos em Fortran: 200 1234 20000 10 00010

Os dois ltimos rtulos so equivalentes. Um mesmo rtulo no poder identicar duas ou mais linhas na mesma unidade de programa. O rtulo (e por consequncia instrues ou procedimentos) poder ser invocado (chamado) quantas vezes for necessrio.

O PRIMEIRO PROGRAMA
Veremos um exemplo simples de programa escrito na linguagem Fortran 95: O primeiro programa. Como de praxe em qualquer livro de linguagem de programao, o primeiro programa apresentado sempre ensina como escrever uma mensagem na tela do monitor. Isto tem um signicado importante que o seguinte: todos os procedimentos realizados por um programa (ou cdigo computacional), como por exemplo clculos de expresses matemticas, precisam ser mostrados para o usurio e isso s possvel por intermdio de uma sada de informao. Caso contrrio, todas as informaes manipuladas caro aprisionadas na memria do computador sem que saibamos seus valores, e se perdero ao desligar o computador.

livrof90_v6 2007/3/14 10:59 page 12 #22

12

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

Para criar um programa necessrio seguir os trs seguintes passos[7] : 1. Digite o cdigo fonte em um editor de texto e salve-o com a extenso .f90. O termo cdigo fonte ser utilizado para o arquivo contendo as instrues Fortran 95 em modo texto.
O EDITOR DE TEXTO
Para elaborao do programa Fortran possvel utilizar qualquer editor, com exceo daqueles que ao salvar o arquivo anexem instrues de controle do prprio editor. Assim, ao compilar o programa contido neste arquivo poder ocorrer um erro de compilao devido a estas instrues (muitas vezes caracteres) de controle. Assim, evite o WORD e o WORDPAD, no caso do Windows. Utilize o NOTEPAD (o mesmo que BLOCO DE NOTAS) para digitar os programas, e salve-o com a extenso .f90 ou .f95. Importante: habilite no Salvar como a opo Todos. Assim ser evitado o indesejvel acrscimo da extenso .txt aps a extenso .f90 ou .f95

2. Gere o programa executvel usando o comando g95 do compilador G95. Importante: Antes de seguirmos, uma advertncia: ser dado preferncia por instrues utilizadas no GNU/Linux[11]. Para usurios do Windows, a transferncia de instrues quase automtica para uso no terminal DOS. Por exemplo, para acionar o compilador G95, j instalado, utilizado o comando g95 tanto para o sistema operacional GNU/Linux[8] como para o Windows, isto , no terminal do DOS ou do GNU/Linux[9] digitamos esta palavra chave seguida do nome do programa em Fortran 95. Assim, para gerar um executvel, digite no terminal DOS ou num terminal Linux: g95 nome_programa.f90 Este comando: 1 ) verica, no programa (cdigo fonte), as sintaxes das instrues Fortran, 2 ) na sequncia, gera um cdigo objeto com nome nome_programa.o, 3 ) e repassa o cdigo objeto para o linkador[10] , que anexa bibliotecas (sistema, E/S (Entrada/Sada de dados), etc.) e gera um executvel, com um nome default chamado a.out no Linux e a.exe no Windows.
[7] Existem compiladores Fortran que apresentam uma rea de trabalho totalmente integrada, isto , possvel num mesmo ambiente digitar o cdigo fonte, compil-lo para gerar o executvel e execut-lo. o caso, por exemplo, dos compiladores Lahey, PowerStation e Portland. [8] Para exemplicar o uso de outro compilador, por exemplo, o da Lahey/Fujitsu for GNU/Linux, compila-se com o comando lf95. [9] Conselho: se voc no trabalha com o sistema operacional GNU/Linux, experimente !!! gratuito e no por isso ineciente, pelo contrrio, altamente estvel e convel. [10] Infelizmente, na falta de uma palavra apropriada em Portugus, para a ao de quem faz um link (ligao, vnculo, elo), que reforce a idia em computao, estou usando linkador.

livrof90_v6 2007/3/14 10:59 page 13 #23

Fortran 95: curso bsico (Gilberto Orengo)

13

Para alterar o nome do arquivo executvel possvel utilizar uma opo do compilador, a -o seguida do nome que se deseja para o executvel. Assim, temos para o exemplo acima: g95 -o nome_de_saida nome_programa.f90 O nome de sada, no caso do Linux, pode ser acrescido de uma extenso ou no. Para o Windows necessrio acrescentar a extenso EXE, para evitar algum problema referente a estrutura de arquivo. Para outras opes do compilador, consulte o manual do Usurio. Somente para o Linux, digite man g95 para ler o manual. No 3 item acima, o compilador anexa ao cdigo, entre outras coisas, clculos matemticos, entrada de dados via teclado e sada de resultados (dados) via monitor, por exemplo. Os arquivos executveis so especcos para cada processador e/ou sistema operacional, i.e., cdigo compilado num computador com processador Intel Pentium no ser executado numa Estao Sun SPARC e vice-versa. Da mesma forma, um cdigo compilado num computador com sistema operacional Windows no ser executado num computador com sistema operacional Linux e vice-versa. Assim, quando trocarmos de plataforma (processador e/ou sistema operacional), devemos compilar novamente o cdigo. Observe que um termo novo, cdigo ou cdigo computacional, foi introduzido e se refere a um programa de computador gerado com uma linguagem de programao. 3. Execute o cdigo (programa) usando o comando: No Linux: No Windows: ou simplesmente: ./nome_programa ou ./a.out nome_programa.exe ou a.exe nome_programa ou a

Agora que sabemos a sequncia da criao de um programa Fortran, segue abaixo um programa que imprime uma mensagem na tela do monitor. Programa 1.1 O primeiro programa WRITE(*,*) Ola mundo externo .... END Digite-o num editor de texto preferido, salve-o com um nome desejado, compile-o, conforme descrito na pgina 12 e aps execute-o. Este o mais simples dos programas em Fortran. Contm apenas duas linhas e utiliza a instruo WRITE(*,*) para transferir para a tela do monitor a frase Ola mundo externo ...., que est contida entre as aspas simples. As aspas simples podem ser substitudas por duplas aspas, por exemplo, para contemplar a seguinte sada, que contm uma aspa simples no seu texto: WRITE(*,*) "A queda dagua eh bonita." END Observe, novamente, que todo programa Fortran 95 termina com a instruo END.

livrof90_v6 2007/3/14 10:59 page 14 #24

14

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

O SEGUNDO PROGRAMA
Neste exemplo, o programa 1.2, j so apresentadas boas prticas de programao que sero descritas na sequncia. O cdigo transforma o valor do ngulo em graus para radianos, e imprime o valor do cosseno do ngulo. Todo o procedimento foi executado em preciso simples, que veremos na pgina 18. A numerao a esquerda no faz parte do cdigo e a sua utilizao para melhor explicar cada linha do cdigo (ou programa). Esta ser uma prtica daqui para frente. Lembre-se que ainda ters contato com todos os elementos Fortran, portanto, se no compreender alguma descrio ela ser tratada ao longo do livro. Programa 1.2 Exemplo de programa que converte ngulos em graus para radianos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14

PROGRAM graus_to_rad IMPLICIT NONE ! ! Este programa converte angulos em graus para radianos ! REAL :: theta, ang_rad REAL, PARAMETER :: pi=3.14159265 WRITE(*,*)"Indique um angulo em graus: " READ(*,*)theta ang_rad = theta*pi/90.0 ! Aqui ocorre a conversao WRITE(*,*) O angulo ,theta,, em graus, vale,& ang_rad, radianos WRITE(*,*) cos(theta) = ,COS(ang_rad) END PROGRAM graus_to_rad Procurou-se neste exemplo deixar clara a estrutura de um programa Fortran 95 e observe que as instrues da linguagem esto em negrito. Embora seja opcional, um programa Fortran 95 inicia com a instruo PROGRAM seguida do nome do programa. Na sequncia constam as declaraes de variveis, entre as linhas 2 e 7. O corpo do programa, que contm as instrues excutveis (e tambm no executveis), est entre as linhas 8 e 13. E, naliza com a instruo END seguida do nome do programa. A seguir veremos uma descrio de cada linha, indicando o que executa ou instrui o computador a realizar. Aproveitaremos para indicar as boas prticas de programao e algumas exigncias da linguagem Fortran. Linha 1: Nesta linha ocorre o incio do cdigo ou programa em Fortran. A palavra-chave PROGRAM seguido do nome do programa. Como visto anteriormente, na pgina 11, devemos ter cuidado ao nomear um programa. O nome de um programa Fortran 95 poder ter at 31 caracteres e iniciar sempre com uma letra do alfabeto, poder conter letras, algarismos e o caracter trao baixo ou underscore ( _ ), que poder ser utilizado aps a primeira letra. Reiterando, embora seja opcional, uma boa prtica de programao colocar a instruo PROGRAM (sempre na primeira linha) seguido de um nome.

livrof90_v6 2007/3/14 10:59 page 15 #25

Fortran 95: curso bsico (Gilberto Orengo)

15

Linha 2: O IMPLICIT NONE, que j estava disponvel nas ltimas verses do FORTRAN 77, obriga-nos a declarar todas a variveis do problema, auxiliando a depurar eventuais erros de escrita ou de dupla declarao. Embora seja opcional, tambm uma boa prtica de programao colocar a instruo IMPLICIT NONE. Linha 3: O caracter ! (sinal de exclamao) instrui o compilador que a sua direita o contedo seja ignorado, ou seja, a linha apenas um comentrio no programa. uma boa prtica de programao escrever comentrios a respeito de certas atitudes e linhas do programa. Assim, comente o mximo possvel o seu programa. Neste caso foi utilizado simplesmente para deixar uma linha em branco, embora no Fortran possvel deixar em branco quantas linhas desejar, sem a necessidade do sinal de exclamao. Linha 4: Nesta linha o comentrio para descrever a utilizao do programa. O uso de comentrios evita o esquecimento, por exemplo, do signicado de cada varivel 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 tambm formas de contato com o programador, como por exemplo, o e-mail. No esquea, aps o sinal ! o contedo ser ignorado. Linha 5: Mais uma linha em branco comentada. Linha 6: Aparece a primeira declarao global de varivel, que do tipo real. Observe atentamente a sintaxe. Primeiro se escreve o tipo de dado (varivel) seguido de dois dois-pontos e, na sequncia, separados por vrgulas as variveis. Os nomes da variveis seguem os mesmos critrios que vimos para o nome do programa. aconselhvel nomear as variveis com nomes mais prximo possvel da sua funo no programa. Por exemplo, theta, no jargo matemtico est relacionado com ngulo, assim como o nome ang_rad, ngulo em radianos. As declaraes de variveis sero estudadas com mais detalhes na pgina 20. Linha 7: Aparece a segunda declarao de varivel, que tambm do tipo real. Note que foi acrescentado um parmetro na declarao. Neste caso o PARAMETER, que instrui o compilador a xar o valor da varivel pi ao longo de todo o programa, no permitindo que seja alterado. Uma tentativa de alterar o valor de pi acarretar num erro de execuo. A diferena para a declarao anterior que as duas variveis, theta e ang_rad, podem ser alteradas a qualquer momento no programa. Linha 8: Nesta linha aparece a primeira instruo executvel, que de escrita pelo WRITE, neste caso, na tela do monitor. Note que a mensagem est entre duplas aspas. Linha 9: Agora uma instruo executvel de leitura apresentada, pelo READ, que receber um valor para a varivel theta via teclado. Mais informaes a respeito de instrues de leitura e escrita esto no Captulo 2, na pg. 41. Linha 10: Nesta linha ocorre a converso de graus para radianos, por intermdio de uma expresso matemtica. Observe que o sinal de igual no indica uma igualdade propriamente dita, mas sim uma atribuio (que ser estudado na pgina 25). Isto , primeiro so realizadas todas as operaes no lado direito da igualdade para posterior atribuio do resultado nal varivel, neste caso a varivel ang_rad. Note tambm que foi adicionado um comentrio aps uma instruo. Esta mais uma caracterstica do Fortran 95, isto , permite que se faa comentrio em qualquer parte do programa, sempre com o !.

fortran

95

fortran

95

fortran

95

livrof90_v6 2007/3/14 10:59 page 16 #26

16

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

fortran

95

Linha 11: Nesta linha impresso, pelo WRITE, o resultado das operaes executveis anteriores, e novamente na tela do monitor. Agora uma mltipla sada, todas separadas por vrgula, que envolve valores armazenados nas variveis (que ser estudado na pgina 25), e de frases literais (entre aspas). Observe tambm o caracter &, que posicionado no nal da linha indica que a linha continuar na seguinte. Se um nome, palavra-chave ou constante quebrado por um &, o primeiro caracter da prxima linha deve ser outro &, seguido do restante do nome, palavra-chave ou constante. Veja o exemplo:
11 12

WRITE(*,*) O angulo ,theta,, em graus, & &vale, ang_rad, radianos O nmero mximo permitido de continuaes de linhas igual a 39. Ateno: o & no funciona no interior dos comentrios (!) e no pode ser seguido de um comentrio.

Linha 12: Aqui continua a linha anterior, indicado pelo & no nal da linha 11. opcional o uso de outro & no incio da linha, a no ser nos casos citados acima. Linha 13: impresso o outro resultado, tambm na tela do monitor. Linha 14: a linha que encerra o programa. Caso no tivssemos escrito a linha 1, poderamos encerrar o programa somente com a instruo END. Como escrevemos a instruo PROGRAM graus_to_rad, devemos encerrar obrigatoriamente com a instruo END seguido de PROGRAM graus_to_rad. Encerramos a breve anlise do nosso segundo programa Fortran. Foi somente um exemplo, e assim deve ser encarado, porque existem outras tantas instrues, funes, declaraes Fortran, que somente lendo este livro at o nal ters uma boa noo antes de comear efetivamente a programar em Fortran. A medida que formos avanando outros programas sero propostos. Em resumo, a estrutura geral de um programa Fortran : 1. BLOCO DA DECLARAO GLOBAL DAS VARIVEIS, que um conjunto de instrues no-executveis que denem as variveis que sero utilizadas ao longo do programa. Os sub-programas tem acesso as variveis declaradas nesta etapa. BLOCO DE EXECUTVEIS - o corpo do programa (contm entradas e sadas de dados inclusive), que o cdigo em si. Poder conter instrues no-executveis. BLOCO DE ENCERRAMENTO DO PROGRAMA, que so instrues que nalizam o programa e podem ser: END [PROGRAM] e STOP, este poder aparecer em qualquer parte do programa e quantas vezes for necessria. J o END [PROGRAM] nico.

2.

3.

A seguir, para avanarmos no aprendizado da linguagem Fortran, veremos como funciona a despensa de dados para o Fortran, especialmente como armazenar e manipular nmeros inteiros e reais, na sequncia os complexos.

livrof90_v6 2007/3/14 10:59 page 17 #27

Fortran 95: curso bsico (Gilberto Orengo)

17

1.5 A DESPENSA DE DADOS NO FORTRAN 95


O Fortran disponibiliza uma variedade de maneiras para armazenar e lidar com os dados. Os tipos de dados suportados pelo Fortran so: INTEIROS: nmeros nos quais no h fraes, ou que no possuem parte fracionria. So exatos. REAIS: nmeros que so representados com uma parte fracionria ou que possuem ponto decimal. So conhecidos tambm como nmeros representados em ponto utuante. COMPLEXOS: nmeros do plano complexo, que possuem uma parte imaginria (que representada por um nmero real) e uma parte real (Na pgina 19). LGICOS: so dados que assumiro somente um valor: verdadeiro ou falso (Na pg. 19). CARACTERES: so dados constitudos por letras e smbolos (Na pgina 19). Veremos com mais detalhes os inteiros e reais. Deixaremos para o estudante se aprofundar nos demais tipos de dados representativos no Fortran.

1.5.1

Dados Inteiros - INTEGER (Preciso Simples)

Os dados inteiros so armazenados exatamente na memria do computador e consistem de nmeros inteiros positivos, inteiros negativos e zero. A quantidade de memria disponvel para armazen-los depender de computador para computador, e poder ser de 1, 2, 4 ou 8 Bytes. O mais comum de ocorrer nos computadores atuais 4 Bytes (32 bits). Como um nmero nito de bits usado para armazenar cada valor, somente inteiros que caiam dentro de um certo intervalo podem ser representados num computador. Normalmente, o menor nmero inteiro que pode ser armazenado em n-bits inteiros, chamada de preciso simples, : Menor Valor Inteiro = 2n1 e o maior valor que pode ser armazenado em n-bits inteiros : Maior Valor Inteiro = 2n1 1 Para o caso tpico de 4 Bytes inteiros, temos para o menor valor e o maior valor possveis, respectivamente, 2.147.483.648 e +2.147.483.647. Quando tentarmos usar valores abaixo ou acima destes ocorre um erro chamado de overow condition e indicado na execuo do programa.

1.5.2

Dados Reais ou de Pontos Flutuantes - REAL

Os nmeros reais so armazenados na forma de notao cientca. J sabemos que nmeros muito grandes ou muito pequenos podem ser convenientemente escritos em notao cientca. Por exemplo, a velocidade da luz no vcuo aproximadamente 299.800.000 m/s. Este nmero ser mais manusevel se escrito em notao cientca: 2,998 108 m/s. As duas

livrof90_v6 2007/3/14 10:59 page 18 #28

18

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

partes de um nmero expresso em notao cientca so chamadas de mantissa e expoente da potncia de dez. A mantissa 2, 998 e o expoente 8 (no sistema de base 10). Na linguagem do computador os nmeros reais so escritos de forma similar, a diferena se encontra no sistema usado porque o computador trabalha na base 2. Assim, se N -bits so dedicados para representar (e armazenar) um nmero real, parte reservada para a mantissa e parte para o expoente. A mantissa caracteriza a preciso e o expoente caracteriza o tamanho que pode ser assumido pelo nmero. nesta repartio, e tambm na quantidade, de bits que comea a diferenciao entre os computadores e compiladores Fortran.

PRECISO SIMPLES (Single Precision) A grande parte dos computadores usam como preciso simples 4 Bytes (32 bits) para repartir entre a mantissa e o expoente. Normalmente esta diviso contempla 24 bits para a mantissa e 8 bits para o expoente. Assim, temos: i) Mantissa (preciso) n = 24 bits (3 Bytes) 2n1 = 223 = 8.388.608 que equivale a 7 algarismos signicativos, ii) Expoente n = 8 bits (1 Byte) 2n = 28 bits = 225510 , sendo metade para a parte positiva e metade para a negativa Assim, o intervalo dado por 2128 2127 , que resulta em 1038 1038 . Isto quer dizer que um nmero escrito em preciso simples ter at 7 ou 8 algarismos signicativos (dgitos decimais) e o seu expoente (da potncia de 10) deve estar contido no intervalo entre 38 e 38. Excedendo a este intervalo acarretar no erro de overow.

PRECISO DUPLA ou DUPLA PRECISO (Double Precision) O Fortran 95 inclui uma possibilidade de representar nmeros reais de forma mais ampla, do que a preciso simples - default nos computadores. Esta possibilidade conhecida como Dupla Preciso (ou Double Precision). Usualmente a dupla preciso de 8 Bytes (ou 64 bits), sendo 53 bits para a mantissa e 11 bits para o expoente. Assim, temos: i) Mantissa (preciso) n = 53 bits 2n1 = 252 que equivale entre 15 e 16 algarismos signicativos, ii) Expoente n = 11 bits 2n = 211 bits = 2204810 , sendo metade para a parte positiva e outra para a negativa Assim, o intervalo dado por 21024 21024 , que resulta em 10308 10308 . Desta forma, um nmero escrito em preciso dupla ter at 15 ou 16 algarismos signicativos (dgitos decimais) e o seu expoente (da potncia de 10) deve estar contido no intervalo entre 308 e 308. Excedendo a este intervalo acarretar no erro de overow.

livrof90_v6 2007/3/14 10:59 page 19 #29

Fortran 95: curso bsico (Gilberto Orengo)

19

1.5.3

Os Nmeros Complexos - COMPLEX

O estudo feito para os nmeros reais extensivo para os nmeros complexos. A forma geral de um nmero complexo c = a + bi, em que c o nmero complexo, a (parte real) e b (parte imaginria) so ambos reais, e i 1. Em Fortran, os nmeros complexos so representados por dois nmeros reais constantes separados por vrgula e entre parnteses. O primeiro valor corresponde a parte real e o segundo a parte imaginria. Vejamos os seguintes casos em Fortran, cujo nmero complexo est ao lado: (1.,0.) (0.7071,0.7071) (1.01E6,0.5E2) (0,-1) = = = = 1 + 0i (real puro) 0.7071 + 0.7071i 1010000 + 50i i (imaginrio puro)

Em que o E representa a base 10 e o nmero aps o expoente. Desta forma, o que vimos para os reais, vlido para os complexos. A diferena est no procedimento Fortran, que feito pela declarao COMPLEX, que veremos adiante. A funo CMPLX, que ser estudada na pgina 25tabela 1.2, converte um nmero inteiro ou real em complexo. Programando em Fortran 95 deveremos ter cuidado ao declarar as precises de nossas variveis, j que tanto a denio de preciso simples como a de preciso dupla podem mudar de computador para computador[11] . O Fortran 95 possibilita modicarmos a mantissa e o expoente, para escrevermos programas que possam ser facilmente portveis entre processadores diferentes, com tamanho de palavra (wordsize) diferentes. Isto obtido por uma funo intrnseca que seleciona automaticamente a mnima preciso especicada, mesmo quando se troca de computador. Para os reais, esta funo a SELECTED_REAL_KIND, que veremos no Captulo 6, na pgina 89. Para os inteiros temos a funo SELECTED_INT_KIND.

fortran

95

1.5.4

Os outros dados: LOGICAL e CHARACTER

Alm dos dados inteiros, reais e complexos, existem outros dois dados (ou tipos de variveis para armazenar dados): os lgicos e os caracteres. Os Lgicos (LOGICAL) So dados que assumiro somente valor verdadeiro ou falso e, so especialmente teis em tomadas de deciso, que sero estudadas no Captulo 3, na pgina 55. Os valores so: .TRUE. (Verdadeiro) e .FALSE. (Falso). Os Caracteres literais (CHARACTER) So dados constitudos por letras e smbolos e so formados pelo conjunto de cdigos da American Standard Code for Information Interchange (ASCII), que determina um padro de caracteres, e est reproduzida parcialmente no Apndice C.
[11] Exemplos da dependncia da combinao Processador/Compilador: num Supercomputador Cray T90/CF90[12][13], a preciso simples 64 bits e a dupla 128 bits; j num PC/Lahey Fortran 95 e num PC/G95, a preciso simples 32 bits e a dupla 64 bits.

livrof90_v6 2007/3/14 10:59 page 20 #30

20

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

1.6 A DECLARAO DAS VARIVEIS


Em Fortran, todas as variveis que armazenaro os dados devem ser declaradas. So cinco os tipos de dados intrnsecos, trs numricos: INTEGER, REAL, COMPLEX, e dois nonumricos: LOGICAL e CHARACTER. O tipo de declarao DOUBLE PRECISION, disponvel no FORTRAN 77, ainda suportado pelo Fortran 95, mas considerado um subconjunto (ou um tipo kind) do REAL. Todos os tipos de dados foram tratados anteriormente e assumiremos que uma varivel armazenar algum tipo de dado. Ento estas duas palavras, dados e variveis, sero sinnimos, no sentido que ambas esto relacionadas a dados que sero armazenados e manipulados por intermdio de variveis. A sintaxe geral de uma declarao de varivel : <tipo> [([KIND=]<par_repres.>)][<atributos>][::] <variaveis> em que: <tipo> : um dos tipos de dados estudados anteriormente e podem ser: INTEGER, REAL, COMPLEX, LOGICAL e CHARACTER, respectivamente representando, inteiros, reais, complexos, lgicos e caracteres. ([KIND=]<par_repres.>) : em Fortran 95, cada um dos cinco tipos intrnsecos anteriores possui um valor inteiro no negativo denominado parmetro de representao do tipo de dado. Este parmetro o valor correspondente em bytes disponibilizados para sua representao, como vimos em detalhes para os inteiros e reais, a partir da pgina 18. Na normatizao da linguagem Fortran 90/95 cou estabelecido um padro: qualquer processador deve suportar pelo menos dois parmetros de representao (o KIND) para os tipos de dados REAL e COMPLEX e pelo menos um parmetro para os tipos de dados INTEGER, CHARACTER e LOGICAL. A tabela D.1, no Apndice D, contm todos os tipos de dados, seus parmetros de representao e intervalos de armazenamento, baseado no compilador G95. <atributos> : outros: so informaes adicionais a respeito do tipo de dado e podem ser, entre

DIMENSION(<formas>) : indica a forma de uma array, em que (<formas>) indica as

dimenses separadas por vrgulas. So exemplos: unidimensional: DIMENSION(7), um vetor de 7 elementos; bidimensional: DIMENSION(3,4), uma matriz 3 4, com 12 elementos. Este argumento ser estudado no Captulo 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 no no momento da declarao da varivel. Este argumento ser estudado no Captulo 7.

livrof90_v6 2007/3/14 10:59 page 21 #31

Fortran 95: curso bsico (Gilberto Orengo)

21

Obs.: Podem ser declarados mais de um atributo para a mesma varivel, os quais sero separados por vrgula. Ao longo do livro sero apresentados outros atributos para a declarao de variveis. :: : os uso dos dois dois pontos opcional, mas ser obrigatrio caso deseja-se inicializar a varivel no momento da sua declarao.

<variveis> : so os nomes das variveis que armazenaro os dados, separados por vrgulas. O nome de uma varivel 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 posio, assim como o underscore (_). No conter caracter especial ( , ( ){ }[ ]! . : @ # $ % & *) em qualquer posio do nome, bem como letras acentuadas ou cedilhadas. A seguir so apresentados exemplos de declaraes num programa Fortran: Programa 1.3 Exemplo de programa que converte ngulos em graus para radianos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

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) :: a1 REAL, DIMENSION(3,3) :: b1 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 (::) so facultativos quando no inicializamos a variveis, caso da linha 1. Assim, seriam necessrios somente nas linhas 3, 4, 6, 7, 12 e 15, mas uma boa prtica de programao coloc-los. Como vimos anteriormente, sempre bom inicializarmos as variveis, para evitar que venham carregadas de algum lixo da memria. As variveis a1 e b1 so variveis compostas ou simplesmente arrays, i.e., vetores ou matrizes, como demonstra o atributo DIMENSION. Estes tipos de variveis sero estudadas no Captulo 4, na pgina 71. No primeiro caso, um vetor de tamanho 4 e, no segundo, uma matriz 3 3. Nestes dois exemplos, informado ao processador que ele deve reservar na
fortran

95

livrof90_v6 2007/3/14 10:59 page 22 #32

22

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

fortran

95

sua memria um espao para armazenar as arrays a1 e b1. Esta uma alocao esttica de memria, ou seja, do incio at o m da execuo do programa este espao de memria est reservado para este procedimento, mesmo que somente sejam usadas no incio do programa. Mais adiante, veremos como alocar memria dinamicamente pelo comando ALLOCATABLE, que ser estudada no Captulo 7, na pgina 93. Outra considerao com relao ao atributo KIND, na linha 5, que especica o tipo de preciso desejada. Na ausncia assumido como preciso simples, que seria (KIND=4), em que o algarismo 4 indica a preciso simples. Assim, para obtermos preciso dupla necessrio acrescentar o atributo (KIND=8), em que o algarismo 8 indica a dupla preciso. Na declarao permitido omitir a palavra-chave KIND=, podendo assim a declarao ser escrita como segue REAL(8) :: dupla A declarao da linha 10 ser considerada obsoleta em breve. importante, ento, substitu-la por REAL(KIND=8) :: dupla que tem o mesmo signicado. Na declarao da linha 11 o atributo LEN=10 indica o tamanho que o caracter pode assumir. Aqui tambm pode ser omitido a palavra-chave LEN= sem perda de signicado, exemplicado na linha seguinte. Por curiosidade, a palavra-chave LEN vem da palavra em ingls length que signica comprimento. Ser tratado mais adiante, mas j introduziremos aqui o conceito de atribuio. Para atribuir um valor a uma varivel se faz por intermdio do sinal de igual (=), apresentada em algumas das declaraes acima. Mas importante ressaltar que o signicado do smbolo de igualdade nada tem a ver com o do usado na Matemtica. Vejamos o porqu. Seja a seguinte parte de um cdigo computacional, INTEGER :: a a = 34 Aqui a varivel a recebeu o valor igual a 34, isto , foi atribudo a ela (para armazenar na memria) o valor 34. Esta interpretao importante porque poderemos ter o seguinte caso: INTEGER :: b b = 2 b = 1 + b em que, inicialmente a varivel b recebe o valor 2, e numa instruo posterior receber um valor que depender do seu valor anterior. Ou seja, o novo valor ser o anterior somado de 1. E esta uma prtica muito utilizada em programao. Pelo ponto de vista matemtico teramos um erro, pois o resultado nal seria 0 = 1, que um absurdo. Mas do ponto de vista computacional temos que o primeiro passo resolver a expresso do lado direito da igualdade e aps atribuir o resultado para a varivel do lado esquerdo da igualdade, que a reter na memria do computador at que, posteriomente, seja alterada se assim for necessrio e possvel.

livrof90_v6 2007/3/14 10:59 page 23 #33

Fortran 95: curso bsico (Gilberto Orengo)

23

1.7 OS PROCEDIMENTOS INTRNSECOS


H tarefas que so executadas com frequncia quando trabalhamos no computador, por exemplo, quando efetuamos clculos podemos utilizar seguidamente o cosseno de um ngulo ou at mesmo o logaritmo ou a raiz quadrada de um nmero real. O Fortran oferece com muita ecincia um conjunto de procedimentos intrnsecos, qua fazem parte do ncleo do compilador. O Fortran 95 tem mais de 130 procedimentos intrnsecos, divididos em diferentes classes: Elementares: so os procedimentos matemticos, numricos, de manipulao de caracteres e de bits; Consulta: que relatam ou retornam o estado de determinado procedimento, como por exemplo, se a alocao de memria ou a leitura de um dado foi um sucesso ou no; Transformao: procedimento que transforma de um estado para outro, como por exemplo, a converso de um nmero real em inteiro ou vice-versa. Mistos: que incluem rotinas relativas ao processador e ao tempo, como por exemplo, DATE_AND_TIME. No nos preocuparemos em mostrar todos e nem em apresentar na classicao feita acima. Alguns desses procedimentos sero vistos a seguir, especialmente os relativos a funes matemticas e de transformao numrica. Outros, referentes a caracteres, sero estudados na pgina 29.

1.7.1

As Funes Matemticas Intrnsecas

Como ocorre numa simples calculadora de mo, o Fortran 95 oferece quase uma centena de funes pr-denidas ou conhecidas funes intrnsecas, ou procedimentos intrnsecos, tais como cosseno e seno de um ngulo. Algumas funes esto apresentadas na tabela 1.1, nas quais so indicados os possveis argumentos de cada uma das funes. H funes intrnsecas que determinam relaes entre Inteiros, Reais e Complexos, descritas na tabela 1.2 (pg. 25), que tambm sero importantes no decorrer do livro. H casos que ser necessrio utilizar as funes intrnsecas para obter outras. Por exemplo, no caso de logaritmos em outras bases, usa-se a mudana de base pela relao: loga (x) = log(x) log(a)
no Fortran

LOG10(x)/LOG10(a)

Na sequncia, um cdigo apresentado, o qual exemplica do uso de funes intrnsecas do Fortran. Foram utilizadas duas funes, o COS, que fornece o cosseno do ngulo (dado em radianos) e, a funo ABS, que retm o sinal de um nmero inteiro ou real, isto , fornece o valor numrico sem o sinal, conhecido como absoluto do nmero.

livrof90_v6 2007/3/14 10:59 page 24 #34

24

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

Tabela 1.1 Alguns procedimentos intrnsecos (matemticos) do Fortran 95.


Instruo ACOS(x) ASIN(x) ATAN(x) ATAN2(y,x) COS(x) SIN(x) TAN(x) EXP(x) LOG(x) LOG10(x) ABS(x) MOD(x,y)
Argumento

Funo
arccos(x) arcseno(x) arctag(x) ou arctg(x) arctag(y/x) ou arctg(y/x) cos(x) seno(x) tag(x) ou tg(x) ex ln(x) log(x) |x| (mdulo de x) x/y (resto da diviso). o resultado de x INT(x/y)*y. Ex.: MOD(3,2) 1 e MOD(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 necessrio 0.5. x fornece a diferena positiva. Se X > Y, ento DIM(x,y) = X-Y. Se Y > X e o resultado negativo, ento DIM(x,y) = 0. Ex.: DIM(5,3) 2 e DIM(3,5) 0. E DIM(4.5,2.5) 2.0. fornece o maior valor entre os argumentos. Deve ter no mnimo 2 argumentos. Ex.: MAX(2,5,0) 5. fornece o menor valor entre os argumentos. Deve ter no mnimo 2 argumentos. Ex.: MIN(2,5,0) 0.

R R R R RC RC R R RC R IRC IR

SQRT(x) DIM(x,y)

RC IR

MAX(x1,x2,...) MIN(x1,x2,...)

IR IR

argumento em radianos. argumento > zero. argumento 0. Conveno para o Argumento: I: Inteiro, R: Real de simples ou dupla preciso, RS: Real de preciso simples, RD: Real de dupla preciso, C: Complexo.

Programa 1.4 Exemplo de uso de funes intrnsecas do Fortran.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

PROGRAM uso_funcoes IMPLICIT NONE ! Exemplo do uso de funcoes intrinsecas ! Autor: Gilberto Orengo (e-mail: orengo@orengonline.com) REAL :: pi,alfa,theta,f,fx,modulo pi = 3.14159265 WRITE(*,*) "Digite o valor do angulo (em graus):" READ(*,*)alfa theta = (alfa*pi)/180.0 ! Converte p/radianos WRITE(*,*)"Digite o valor da Forca (em Newtons):" READ(*,*)f fx = f*COS(theta) modulo = ABS(fx) WRITE(*,*)"A Forca no eixo x, em modulo, eh: ", modulo END PROGRAM uso_funcoes

livrof90_v6 2007/3/14 10:59 page 25 #35

Fortran 95: curso bsico (Gilberto Orengo)

25

Tabela 1.2 Algumas funes intrnsecas para manipulao de inteiros e reais.


Instruo REAL(x)
Argumento

Funo
Converte um nmero inteiro, real de dupla preciso e complexos em um nmero real de preciso simples. Ex.: REAL(7) resulta em 7.00000000. Converte um nmero inteiro, real de preciso simples e complexo em um nmero real de preciso dupla. Ex.: DBLE(7) resulta em 7.000000000000000. Converte um nmero real de preciso simples ou dupla e complexo em um nmero inteiro por meio de truncamento. Ex.: INT(5.9) resulta em 5, e INT(3.5) resulta em 3. INT(CMPLX(2.4,1.7)) resulta em 2. Converte um nmero real em um nmero inteiro por meio de arredondamento; em que x um real. Ex.: NINT(5.9) resulta em 6, e INT(2.4) resulta em 2. Converte um nmero real ou inteiro(s) em um nmero 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) fornece o menor inteiro maior ou igual ao real x. Ex.: CEILING(3.15) 4 e CEILING(-3.15) -3. fornece o maior inteiro menor ou igual ao real x. Ex.: FLOOR(3.15) 3 e FLOOR(-3.15) -4.

I RD C

DBLE(x)

I RS C

INT(x)

RC

NINT(x)

RC

CMPLX(x,y)

IR

CEILING(x) FLOOR(x)

R R

Conveno para o Argumento: I: Inteiro, R: Real de simples ou dupla preciso, RS: Real de preciso simples, RD: Real de dupla preciso, C: Complexo.

Uma listagem completa das funes pr-denidas est disponvel no site http://www.orengonline.com/fortran95/ ou no Manual de Referncia da Linguagem. Para o compilador G95, consulte o endereo eletrnico http://www.g95.org.

1.7.2

A Aritmtica com inteiros e reais

A ATRIBUIO DE VALOR VARIVEL Uma varivel um registrador de posio de memria que pode conter qualquer dado, ou seja, nmeros ou caracteres, que podem variar ou no durante a execuo do programa. No Fortran, uma varivel recebe um valor por intermdio do sinal de igualdade. Esta operao recebe o nome de atribuio de um valor a uma varivel. Seja o exemplo: a = 15 Aqui a varivel a recebeu o valor igual a 15, isto , foi atribudo a ela (na memria) o valor 15. Esta interpretao importante porque poderemos ter o seguinte caso: b = 6 b = 5 + b em que, inicialmente a varivel b recebe o valor 6, e numa instruo posterior receber um valor que depender do seu valor anterior. Ou seja, o novo valor ser o anterior somado de 5. E esta uma prtica muito utilizada em programao. Pelo ponto de vista matemtico

livrof90_v6 2007/3/14 10:59 page 26 #36

26

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

teramos um erro, pois o resultado nal seria 0 = 5, que um absurdo. Mas do ponto de vista computacional temos que o primeiro passo resolver a expresso do lado direito da igualdade, que igual a 11, e aps atribuir o resultado para a varivel do lado esquerdo da igualdade, que o reter na memria do computador. AS EXPRESSES ARITMTICAS As expresses aritmticas so aquelas que apresentam como resultado um valor numrico que pode ser um nmero inteiro ou real, dependendo dos operandos e operadores. Os operadores aritmticos esto descritos na tabela 1.3. Tabela 1.3 Os operadores aritmticos disponveis no Fortran 95. Operadores Aritmticos Operador binrio * / + Operador unrio + Funo multiplicao diviso soma ou adio subtrao potenciao Funo indica nmero positivo indica nmero negativo Exemplos 5*2; A*B 2/7; 8.5/3.1; 3 + 5; A + J 5 1; x y 3**5 Exemplos +3 1

M/N

importante ressaltar alguns pontos na aritmtica de inteiros e reais: a) Dois operadores no podem estar lado-a-lado. Por exemplo: 2*7 ilegal. Na programao em Fortran escrito como segue: 2*(7). Da mesma forma devemos ter cuidado com a exponenciao. O correto 2**(3) e no 2**3. b) A multiplicao implcita no aceita no Fortran, isto , a expresso z(xy) deve ser escrita como z*(xy). c) A radiciao pode ser transformada numa potenciao, por exemplo, 6 (6)1/2 , que na linguagem Fortran ca 6**(1./2.). Deve-se tomar muito cuidado nesta operao e este assunto tratado na pgina 28. A ordem de prioridades nas operaes aritmticas, na linguagem Fortran : 1 Operaes que esto no interior de parnteses, iniciando sempre dos parnteses mais internos para os mais externos. Os parnteses determinaram a ordem da operao. Ento, use sem restries os parnteses para evindeciar a ordem das operaes. 2 Todas as potenciaes (**) e depois as radiciaes (SQRT). 3 Todas as multiplicaes (*) e divises (/), partindo da esquerda para a direita. 4 Todas as adies (+) e subtraes (), realizando as operaes da esquerda para a direita.

livrof90_v6 2007/3/14 10:59 page 27 #37

Fortran 95: curso bsico (Gilberto Orengo)

27

A ARITMTICA DOS INTEIROS A operao entre nmeros inteiros resulta em nmeros inteiros. Desta forma deveremos ter cuidado com algumas operaes, em especial com a diviso. Vejamos os casos abaixo. 1 =0 2 7 =3 2 2 =1 2 8 =4 2 3 =1 2 9 =4 2 4 =2 2 5 =1 4 5 =2 2 7 =1 4 6 =3 2 1 =0 3

Baseado nos resultados devemos ter cautela quando formos utilizar estas operaes de diviso entre inteiros, porque, por exemplo na primeira diviso, 1 = 0 = 0.5 , 2 sendo este ltimo o resultado da diviso entre reais. Aqui os nmeros reais so tratados com ponto decimal e no com a vrgula, como estamos habituados no dia-a-dia. Sugere-se que utilize os nmeros inteiros nos procedimentos estritamente necessrios, por exemplo, em contadores de repeties ou ainda em ndices de variveis compostas, como matrizes e vetores. A ARITMTICA DOS REAIS As mesmas operaes realizadas anteriormente com inteiros, entre reais resultar em: 1.0 = 0.5 2.0 7. = 3.5 2. 1. = 0.3333333 3. 2. = 1. 2. 8. = 4. 2.
(Preciso simples)

3. = 1.5 2. 9. = 4.5 2.

4. = 2. 2. 5. = 1.25 4.

5. = 2.5 2. 7 = 1.75 4

6. = 3. 2.

1. = 0.333333333333333 3.

(Preciso dupla)

Observe as duas ltimas divises, que diferenciam quanto a preciso. Um cuidado que precisamos ter quanto as operaes que estamos acostumados a realizar nas operaes matemticas do dia-a-dia, tal como 3.0*(1.0/3.0) = 1.0 mas, 2.0*(1.0/2.0) = 1.0 Esta diferena est na forma como o computador manipula os dados, que dependem da preciso estabelecida. Assim, quando formos realizar testes de igualdades devemos ter muito cuidado.

livrof90_v6 2007/3/14 10:59 page 28 #38

28

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

A ARITMTICA MISTA: ENTRE INTEIROS E REAIS Quando misturamos operaes de reais com inteiros, devemos ter cuidado extremo. Vejamos o porqu? 1) 2) 3) 4) 5) 2 + 2. 2 + 2 + 2. 1/2 + 1/2 1./2 1/2. + 1./2. resulta em: resulta em: resulta em: resulta em: resulta em: 2 2. 2.5 2.5 2.5

A primeira expresso somente entre inteiros e no h novidade, porque o resultado ser um inteiro. A ltima tambm no tem novidade, porque o resultado ser um real, porque todos os termos so reais. A partir da segunda expresso, at a quarta, temos operaes mistas. O resultado de uma operao mista, entre inteiros e reais, sempre ser real. Vejamos como isso ocorre, na seguinte sequncia, para a terceira expresso: 2 + 1./2 = 2 + 1./2. = 2 + .5 = 2. + .5 = 2.5

Cada termo resolvido separadamente. Primeiro, pela hierarquia, resolve-se a diviso. Como tem uma operao envolvendo um inteiro e um real, inicialmente o Fortran converte o inteiro para real. A seguir a operao de diviso realizada. No prximo passo novamente h o envolvimento entre inteiro e real. De novo, primeiro o Fortran converte o inteiro para real, para nalmente fornecer o resultado em real. Outro cuidado quanto ao envolvimento de operaes mistas com exponenciao. Por exemplo, seja 61/2 , que na linguagem Fortran ca 6**(1./2.). Deve-se tomar muito cuidado nesta operao, porque numa potenciao o expoente sempre inteiro. Assim, neste caso o expoente no pode ser nulo, j que 1/2 = 0, na aritmtica de inteiros. Ento preciso fazer uma diviso por reais. Quando isto realizado a operao trocada por: ab = eb ln a 61/2 = e1./2. ln(6.) ,

e o cuidado est na base, que no poder ser negativa, porque o logaritmo de nmero negativo no denido. Finalmente, um ltimo cuidado e no tem nada a ver com operaes mistas. A potenciao sempre ser realizada da direita para a esquerda, assim (34 ) = 38 = 6561 , diferente de
2 2

34 = 316 = 43046721 . Os resultados anteriores no contm pontos decimais porque so valores inteiros.

1.7.3

A Manipulao de Caracteres

Um conjunto de caracteres agrupados (string) representa uma palavra. A posio que cada caracter (carter) ocupa neste agrupamento determinar o signicado da palavra. No so aceitos caracteres acentuados (, , , , ...) e caracteres especiais (, , , ...).

livrof90_v6 2007/3/14 10:59 page 29 #39

Fortran 95: curso bsico (Gilberto Orengo)

29

Os computadores somente entendem nmeros, assim um cdigo ASCII a representao numrica dos caracteres tais como a ou @. A tabela ASCII possui 256 posies e contm tambm caracteres acentuados, para contemplar a lngua latina (Portugus, Espanhol, Italiano, etc). Algumas funes para manipular caracteres so descritas a seguir. LEN(x) = retorna o nmero (inteiro) de caracteres que compem um conjunto de caracteres (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.5 O uso da funo LEN.
1 2 3 4 5 6 7 8

PROGRAM uso_len IMPLICIT NONE CHARACTER :: nome INTEGER :: a nome = fisica a = LEN(nome) WRITE(*,*)"Tamanho da palavra = ", a END PROGRAM uso_len A sada na tela do monitor, ser: Tamanho da palavra = 6

LEN_TRIM(x) = retorna o nmero (inteiro) de caracteres sem os espaos em branco que compem 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 funo 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.6 O uso da funo ACHAR.
1 2 3 4 5 6 7 8 9 10

PROGRAM uso_achar CHARACTER :: letras INTEGER :: posicao WRITE(*,*)"Digite um inteiro para obter o& & caracter ASCII:" WRITE(*,*)"(Nao esqueca que eh entre 0 e 256)" READ(*,*) posicao letras = ACHAR(posicao) WRITE(*,*)"O caracter eh: ", letras END PROGRAM uso_achar

livrof90_v6 2007/3/14 10:59 page 30 #40

30

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

Se for digitado 110, a sada na tela do monitor ser: O caracter eh: n, ou se for digitado 56, a sada na tela do monitor ser: O caracter eh: 8. Observe que neste ltimo retornado pela funo ACHAR(56) o caracter 8 e no o algarismo 8. Desta forma no podemos oper-lo aritmeticamente. IACHAR(x) = retorna um nmero inteiro, que indica a posio do caracter x na tabela ASCII, em que x deve estar entre aspas (simples ou duplas). Se esta entrada for requisitada por intermdio de uma leitura (pelo comando READ), no so usadas aspas, pois ser armazenada em uma varivel. Exemplo: IACHAR(b) resulta no inteiro 98. Exemplo em um programa: Programa 1.7 O uso da funo IACHAR.
1 2 3 4 5 6 7 8 9

PROGRAM uso_iachar CHARACTER :: letra INTEGER :: posicao WRITE(*,*)"Digite um caracter da tabela ASCII:" READ(*,(A))letra posicao = IACHAR(letra) WRITE(*,*) "A posicao na tabela ASCII eh: ",& posicao END PROGRAM uso_iachar Se for digitado o caracter s, a sada na tela do monitor ser: A posicao na tabela ASCII eh: 115. Este resultado poder ser manipulado aritmeticamente.

CONSIDERAES IMPORTANTES: possvel retirar ou retornar parte de uma palavra (string). Por exemplo, seja a string pessoa. Podemos retirar somente o conjunto sso. Isto possvel somente com a utilizao de variveis que armazenem caracteres. Vejamos como isto funciona por intermdio do seguinte programa. Programa 1.8 Retorna parte de uma string.
1 2 3 4 5 6 7 8 9

PROGRAM parte_de_char CHARACTER(LEN=20) :: total CHARACTER(LEN=3) :: parte WRITE(*,*)"Digite uma palavra, com ate & & 20 posicoes:" READ(*,*)total parte = total(3:5) WRITE(*,*) "A parte da palavra digitada eh: ", parte END PROGRAM parte_de_char Assim, se for digitado a palavra pessoa, a resposta ser: A parte da palavra digitada eh: sso

livrof90_v6 2007/3/14 10:59 page 31 #41

Fortran 95: curso bsico (Gilberto Orengo)

31

Podemos comparar caracteres da tabela ASCII. A comparao ser utilizando as operaes lgicas de maior (>) e menor (<), por exemplo: A > a = Falso (ou .FALSE.) a > A = Verdadeiro (ou .TRUE.) AAa > AAb = Falso (ou .FALSE.) i > 9 = Verdadeiro (ou .TRUE.) * > ) = Verdadeiro (ou .TRUE.) Isto possvel porque na tabela ASCII os caracteres so conhecidos pelas suas posies numricas (inteiros). Assim, por exemplo, todas as letras maisculas vem antes das minsuculas, portanto as maisculas possuem um nmero de referncia menor do que as minsculas.

O operador concatenao (//): possvel combinar dois ou mais conjunto de caracteres (strings) para formar um conjunto maior. Esta operao feita pelo operador concatenao, a dupla barra para esquerda, //. Vejamos o exemplo.

Programa 1.9 Exemplo de concatenao de strings.


1 2 3 4 5 6 7 8 9 10 11 12

PROGRAM ex_conc CHARACTER(LEN=15) :: total1 CHARACTER(LEN=7) :: total2 CHARACTER(LEN=9) :: parte1 CHARACTER(LEN=6) :: parte2 parte1 = Gilberto parte2 = Orengo total1 = parte1//parte2 total2 = parte1(1)//parte2 WRITE(*,*) "A primeira concatenacao eh: ", total1 WRITE(*,*) "A segunda concatenacao eh: ", total2 END PROGRAM ex_conc

Os resultados sero, respectivamente, Gilberto Orengo e GOrengo.

Desta forma, encerramos a apresentao dos elementos essenciais do Fortran 95. A partir deste ponto possvel criar programas simples, sem que necessitem de tomadas de deciso ou de processos de repetio, que veremos no Captulo 3, na pgina 55. Encerrando este captulo veremos como encontrar e depurar erros de programao.

livrof90_v6 2007/3/14 10:59 page 32 #42

32

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

1.8 CORRIGINDO ERROS DEBUGGING


Ao criarmos um cdigo estamos sujeitos a erros, os quais podem ser de trs tipos: de sintaxe, de tempo-de-execuo e de lgica. Infelizmente errar tambm um atributo inerente a programao. O pargrafo abaixo, retirado do livro do Chapman [6], na pgina 70, ilustra com primazia esta situao.
... existem duas coisas certas na vida, a morte e os impostos. Mas se trabalhamos com programao acrescente mais uma certeza nesta lista: se escrever um programa com nmero de linhas signicativos, ele apresenter erro na primeira execuo ...

Historicamente os erros de programao so conhecidos como bugs[12] , e o processo de localizao dos erros como debugging. ERRO DE SINTAXE O erro de sintaxe o mais simples e o prprio compilador identica-o, indicando como um erro de compilao. Este erro est relacionado com a escrita das instrues Fortran. So exemplos de erro de sintaxe: Programa 1.10 Exemplos de erros de sintaxes.
1 2 3 4

INTEGR :: b b = 2 WRITE(*;*) b END

= =

Na primeira linha o erro est na escrita (sintaxe) da declarao de varivel do tipo inteiro, que escrita INTEGER e no INTEGR. Na terceira linha, o erro est na separao dos argumentos da instruo WRITE que so separados por vrgula e no por ponto e vrgula. O correto : Programa 1.11 Correes dos erros de sintaxes.
1 2 3 4

INTEGER :: b b = 2 WRITE(*,*) b END

ERRO DE TEMPO-DE-EXECUO o tipo de erro que ocorre na execuo do programa quando uma operao ilegal tentada. Na maioria das vezes uma operao matemtica, por exemplo, uma diviso por zero. Ou
[12] Bug signica em ingls 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 acadmico e at hoje utilizado para erro e procura de erros.

livrof90_v6 2007/3/14 10:59 page 33 #43

Fortran 95: curso bsico (Gilberto Orengo)

33

ainda, a atribuio de um caracter no lugar de um inteiro ou real, sendo este tambm um erro de lgica. Quando este tipo de erro detectado a execuo abortada. ERRO DE LGICA O erro de lgica mais difcil de identicar, porque o programa compilado e executado sem problemas, mas o resultado est errado. Neste caso o compilador no tem condies de reconhecer e est ligado diretamente forma de programar. O compilador pode somente identicar um erro de lgica que est ligada a declarao de variveis. Neste caso tambm um erro de tempo-de-execuo. Por exemplo: Programa 1.12 Exemplo de erro de lgica.
1 2 3 4

INTEGER :: b READ(*,*) b WRITE(*,*) b*2 END Neste caso, a varivel b declarada como inteira e se for inserida, na linha 2, uma informao diferente de um valor inteiro, por exemplo real, acusar um erro e abortar a execuo do programa. Outros erros de lgica so difceis de detectar, como por exemplo, a diviso por um nmero prximo de zero que pode levar o programa a gerar resultados errados. Ou ainda, se muitos arredondamentos so executados muitas vezes podem, tambm, levar a um erro de resultado. Para estes e outros tipos de erros de lgica o que podemos fazer tomar algumas precaues, as quais so: Utilizar sempre a instruo IMPLICIT NONE, que obriga a declarao de todas as variveis do cdigo computacional; Nas expresses aritmticas e/ou lgicas usar parentses para tornar claro a ordem de execuo na expresso. Inicializar todas as variveis. Assim se evita que alguma sujeira de memria contamine os clculos ou as manipulaes de dados. Escrever todas as entradas de dados. Desta forma possvel visualizar que dados foram informados ao programa e, assim possibilita sua conrmao e se for o caso, sua correo. Uma prtica utilizada para encontrar possveis erros permear o cdigo com instrues tipo WRITE(*,*)estou aqui 1, WRITE(*,*)estou aqui 2, ..., ou com WRITE(*,*)<resultado1>, WRITE(*,*)<resultado2> e assim sucessivamente, para termos certeza do uxo de execuo do cdigo. Vejamos um exemplo. Imagine que parte de um cdigo de 320 linhas precisa calcular a tangente de um ngulo, para cada n, que a soma de n vezes a expresso 1 + en , en

livrof90_v6 2007/3/14 10:59 page 34 #44

34 ou seja,

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

n vezes a tg
n=1

1 + en en

em que j = 200 no nosso exemplo. O programa abaixo reproduz parte do referido cdigo. Por este motivo no deveria apresentar uma sada de valor, um WRITE, j que o mesmo utilizado no decorrer do cdigo original e assim, no precisaria ser impresso neste ponto do cdigo. Mas foi acrescentado uma sada antes da nalizao do programa, somente com ns didticos, para visualizarmos que existem limitaes computacionais que devem ser observadas. Programa 1.13 Exemplo de erros em cdigos computacionais.
1 2 3 4 5

PROGRAM teste_erro IMPLICIT NONE INTEGER :: i, j, m REAL :: x, y, z, final REAL, PARAMETER : pi=3.14159265 DO i = 1,200 x = 1./EXP(i) + EXP(i) y = y + x z = TAN(y) theta = (y*180.0)/pi ! Converte p/graus END DO WRITE(*,*) theta,z ! Soh para fins didaticos END PROGRAM teste_erro Ao compilarmos o programa alguns erros sero detectados pelo compilador. O primeiro erro ser o de sintaxe, porque foi esquecido os dois pontos (:) na declarao da varivel pi, indicado pelo compilador, conforme mostra a gura 1.1. Relembrando, sempre que inicializarmos uma varivel na sua declarao obrigatrio o uso de dois dois pontos (::). Com erro deste porte abortada a compilao. Portanto, os erros de lgica no aparecem. Mas cuidado, nem todos os erros de sintaxe so detectados nesta etapa. Por exemplo, se por engano escrever TA no lugar de TAN, para a funo tangente, no aparecer nesta primeira compilao. Quando for detectado, ser como erro de denio de funo. Realizada esta correo, a colocao dos dois pontos (:), compila-se novamente. E a a surpresa!!! Acompanhe a deteco dos erros de lgica na gura 1.2. Perceba que o compilador procura auxiliar indicando o provvel tipo e posio do(s) erro(s). Isto ca claro com a notao: 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)

132 133 134 135 136 137 138

320

livrof90_v6 2007/3/14 10:59 page 35 #45

Fortran 95: curso bsico (Gilberto Orengo)

35

Figura 1.1 No terminal do Linux: indicao do erro de sintaxe, apresentados pelo compilador G95.

Figura 1.2 Indicao dos erros apresentados pelo compilador G95.

que indica o arquivo (ex_erro.f90) e a linha 7. Perceba ainda que o 1, abaixo do EXP(i), indica a provvel posio do erro na linha. O provvel tipo de erro (Error:) est no tipo de argumento da exponencial, que deve ser real de preciso simples, e no inteiro. Neste caso foram dois tipos de erro, embora apaream trs na indicao do compilador. O primeiro a respeito do argumento da exponencial, que espera um valor real e foi passado um inteiro. A correo feita utilizando a funo REAL(i), que converte o inteiro para real. Observe que no possvel trocar a declarao da varivel i porque ela um contador

livrof90_v6 2007/3/14 10:59 page 36 #46

36

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

do loop DO, que ser estudado no Captulo 3, na pgina 55. E contador sempre inteiro. O segundo erro, o indicado pelo compilador, decorrente do primeiro, porque esperado ento que EXP(i) seja uma funo denida pelo usurio j que estaria recebendo um valor inteiro. Mas, corrigido o primeiro erro, este deixa de existir. Comprove se verdadeira a armaao !!! Para isto, corrija somente o primeiro erro e re-compile. O segundo erro de lgica (ou terceiro indicado pelo compilador) a ausncia de declarao da varivel theta. Esta deteco foi possvel pela presena do IMPLICIT NONE na segunda linha. Corrigido, compilado e executado o resultado surpreendente: +Inf NaN No ocorreu o esperado, que eram resultados numricos. O +Inf signica overow (+ innito), ou seja, nmero muito grande, que ultrapassou o limite do expoente da potncia de dez. O NaN signica Not-a-Number, isto , no um nmero. Para identicar onde est o problema, foi acrescentado uma sada de informao, localizada no interior do DO. A sada utilizada foi: WRITE(*,*)"O resultado da tangente de ",theta, "eh: ",z, & "(No loop: ", i, ")" O objetivo imprimir em cada passo (loop), o resultado parcial. Observe parte das 200 sadas:
O O O O O O O O O O O resultado resultado resultado resultado resultado resultado resultado resultado resultado resultado resultado da da da da da da da da da da da tangente tangente tangente tangente tangente tangente tangente tangente tangente tangente tangente de de de de de de de de de de de 5.0220527E+36 eh: 2.1734016 (No loop: 80 ) 1.3651355E+37 eh: -0.5998777 (No loop: 81 ) 3.7108228E+37 eh: -0.3660946 (No loop: 82 ) 1.0087063E+38 eh: -10.567177 (No loop: 83 ) 2.741948E+38 eh: 2.4247808 (No loop: 84 ) +Inf eh: 2.221997 (No loop: 85 ) +Inf eh: 1.0551705 (No loop: 86 ) +Inf eh: 0.4865762 (No loop: 87 ) +Inf eh: 10.228403 (No loop: 88 ) +Inf eh: NaN (No loop: 89 ) +Inf eh: NaN (No loop: 90 )

No loop 85 j aparece o problema, que a extrapolao do limite do expoente da potncia de dez. A correo neste caso depende do problema que est sendo resolvido. Uma possvel soluo a troca para preciso dupla das variveis reais. Neste caso ser necessrio executar novamente com a mesma sada provisria, para vericar se o problema foi contornado. Outra possibilidade: se no necessrio realizar um loop com 200 repeties, pode-se alterar o loop para DO i = 1,84. O programa 1.13, corrigido, apresentado a seguir. As linhas que foram corrigidas esto destacadas e as linhas 137 e 138 podem ser descartadas depois de resolvido o erro.

livrof90_v6 2007/3/14 10:59 page 37 #47

Fortran 95: curso bsico (Gilberto Orengo)

37

Programa 1.14 Programa 1.13 corrigido.


1 2 3 4 5

PROGRAM teste_erro IMPLICIT NONE INTEGER :: i, j, m REAL :: x, y, z, theta REAL, PARAMETER :: pi=3.14159265

= =

132 133 134 135 136 137 138 139 140

DO i = 1,200 x = 1./EXP(REAL(i)) + EXP(REAL(i)) = y = y + x z = TAN(y) theta = (y*180.0)/pi ! Converte p/graus WRITE(*,*)"O resultado da tangente de ",theta,& "eh: ", z, "(No loop: ", i, ")" END DO WRITE(*,*) theta,z ! Soh para fins didaticos END PROGRAM teste_erro Mais informaes a respeito de procura e correo de erros de programao 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 sero pedidos no exerccios a seguir. Em cada captulo, quando necessrio, um captulo sobre debugging ser escrito. Isto demonstra a importncia de reconhecer erros e corrgi-los para que o cdigo de fato funcione como esperamos.

320

importante para a vericao de aprendizado a prtica com exerccios e a soluo de problemas. Perceba que h uma diferena entre soluo de problemas e prtica com exerccios. O primeiro subentende que o segundo foi realizado exaustivamente. Estaremos mais preparados para resolver ou solucionar problemas se estivermos devidamente treinados. Portanto, altamente recomendvel que faa os exerccios a seguir, bem como os disponveis no site http://www.orengonline.com/fortran95/. As respostas e comentrios a respeito dos exerccios encontram-se no referido endereo eletrnico, em exerccios. E, para vericar se est pronto para resolver problemas, um conjunto deles est disponvel em problemas, tambm no site acima indicado.

Para reexo !! S existem duas coisas innitas: o universo e a estupidez humana. E no estou muito seguro da primeira. Albert Einstein 1879 1955

livrof90_v6 2007/3/14 10:59 page 38 #48

38

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

EXERCCIOS
1.1) Sejam as variveis a, b, c, d, e, f, g, que so inicializadas como segue: a = 3. b = 2. c = 5. d = 4. e = 10. f = 2. g = 3. Avalie os seguintes procedimentos: a) c) y = a*b+c*d+e/f**g b) y = a*(b+c)*d+(e/f)**g y = a*(b+c)*(d+e)/f**g

Siga o exemplo de soluo: a) - Expresso para clculo: - Completando com os valores: - Calculando 2.**3.: - Calculando as multiplicaes e divises, da esquerda para a direita: y = 6. y = 6. y = 6. - Calculando as adies e o resultado nal: +5.*4.+10./8. +20. +10./8. +20. +1.25 y = a*b+c*d+e/f**g y = 3.*2.+5.*4.+10./2.**3. y = 3.*2.+5.*4.+10./8.

y = 27.25

1.2) No Fortran, a operao entre inteiros e reais no uma boa prtica, pois o computador converte o nmero inteiro em real e a seguir procede a operao. Desta forma, podemos perder informaes nestas operaes. Informe, do ponto de vista do Fortran, qual ser o resultado em cada uma das operaes 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 1.3) O programa abaixo ser compilado? Justique sua resposta.
1 2 3 4 5 6 7 8 9

PROGRAM exemplo1 IMPLICIT NONE INTEGER :: i,j INTEGER, PARAMETER :: k=4 i = k**2 j = i/k k = i+j WRITE(*,*)i,j,k END PROGRAM exemplo1

livrof90_v6 2007/3/14 10:59 page 39 #49

Fortran 95: curso bsico (Gilberto Orengo)

39

1.4) Que valores sairo do programa abaixo? Tente antes de executar o programa no computador, calcular as sadas. (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 2 3 4 5 6 7 8 9 10

PROGRAM exemplo2 IMPLICIT NONE INTEGER :: i1, i2, i3 REAL :: r1 = 2.4, r2 i1 = r1 i2 = INT(r1*i1) i3 = NINT(r1*i1) r2 = r1**i1 WRITE(*,*)i1, i2, i3, r1, r2 END PROGRAM exemplo2

1.5) O programa abaixo tem o objetivo de calcular os comprimentos dos lados de um tringulo retngulo (A=adjacente e B=oposto), dados os valores da hipotenusa(C) e do ngulo(). O programa ser executado? Se no, explique. Se sim, ele produzir resultados corretos? Explique. Caso necessite de alterao, o que voc modicaria ou acrescentaria?
1 2 3 4 5 6 7 8 9 10 11

PROGRAM exemplo3 REAL :: a, b, c, theta WRITE(*,*) Entre com o comprimento da hipotenusa C: READ(*,*)c WRITE(*,*) Entre com o valor do angulo THETA em graus: READ(*,*)theta a = c*COS(theta) b = c*SIN(theta) WRITE(*,*)O comprimento do lado adjacente eh:,a WRITE(*,*)O comprimento do oposto eh: ,b END PROGRAM exemplo3

1.6) Que valores sairo, quando as seguintes instrues forem executadas?


1 2 3 4 5 6 7 8 9 10

PROGRAM exemplo4 INTEGER :: i LOGICAL :: l REAL :: a a = 0.05 i = NINT(2.*3.141593/a) l = i>100 a = a*(5/3) WRITE(*,*)i, a, l END PROGRAM exemplo4

livrof90_v6 2007/3/14 10:59 page 40 #50

40

CAPTULO 1. CONSIDERAES INICIAIS: Apresentando o Fortran

1.7) Escreva um programa em Fortran 95 que calcule o pagamento semanal de empregados horistas. O programa dever perguntar ao usurio o valor paga por hora (por funcionrio) e o nmero de horas trabalhada na semana. O clculo deve se basear na seguinte expresso Total Pago = Valor da Hora 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. 1.8) A distncia entre dois pontos (x1 , y1 ) e (x2 , y2 ) no plano Cartesiano dado pela equao d= (x1 x2 )2 + (y1 y2 )2 (1.2)

Escreva um programa em Fortran 90/95 para calcular a distncia entre quaisquer dois pontos (x1 , y1 ) e (x2 , y2 ) especicados pelo usurio. Use boas prticas de programao no seu programa. Calcule a distncia entre os pontos (2,3) e (8,-5). 1.9) Desenvolva um programa que fornecido, pelo usurio, um nmero entre 1000 e 9999, separe e escreva os valores referentes ao milhar, a centena, a dezena e a unidade. Exemplo: no caso do nmero 7452, milhar: 7000; centena: 400; dezena: 50 e a unidade: 2. 1.10) O aumento dos funcionrios de uma fbrica calculado com base em 80% do IGP-M acumulado no ano (ndice Geral de Preos do Mercado, da Fundao Getlio Vargas FGV). Faa um programa que leia o nmero do funcionrio, o valor do IGP-M e o salrio atual do funcionrio. A seguir calcule o aumento e o novo salrio. Escreva o nmero do funcionrio, o aumento e o novo salrio. (Obs.: use os seguintes nomes s variveis: nmero do funcionrio = nf; IGP-M = igpm; aumento do salrio = as; salrio atual = satual; novo salrio = ns.) 1.11) O custo nal ao consumidor de um carro novo a soma do custo de fbrica com a percentagem do distribuidor e dos impostos (aplicados ao custo de fbrica). Supondo que a percentagem do distribuidor seja de 28% e os impostos de 45%, escreva um programa que leia o custo de fbrica de um carro e escreva o custo nal ao consumidor. (Obs.: 1) Use os seguintes nomes s variveis: custo de fbrica = cf; custo nal ao consumidor = cfc; percentagem do distribuidor = pd; impostos = pi. 2) Construa o programa com o mximo de informaes ao usurio) 1.12) Escreva um programa que calcule a posio, velocidade e acelerao de um corpo sujeito ao movimento harmnico simples, baseado nas equaes abaixo. Para iniciar, use = 0, n = 3.14159265, b = 2.5. Teste para um conjunto de valores de t. posicao = x = b sin (nt + ) velocidade = v = nb cos (nt + ) aceleracao = a = n2 b sin (nt + )

livrof90_v6 2007/3/14 10:59 page 41 #51

REFERNCIAS BIBLIOGRFICAS

[1] KNUTH, D. E. The TEXbook. Reading, Massachusetts: Addison-Wesley, 1984.


A [2] LAMPORT, L. LTEX: A document preparation system. Reading, Massachusetts: AddisonWesley, 1986. A [3] GOOSSENS, M., MITTELBACH, F., SAMARIN, A. The LTEX companion. Reading, Massachusetts: Addison-Wesley, 1994. A [4] KOPKA, H., DALY, P. W. A guide to LTEX 2 : Document preparation for beginners and advanced users. Harlow, England: Addison-Wesley, 1997.

[5] http://www.miktex.org/. Site com links e distribuio gratuita de pacotes, para Windows, como: LaTeX, WinShel, GhostView, e outros ltimo 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 Computer Systems, Inc., 865 Tahoe Boulevard P.O. Box 6091 Incline Village, NV 89450-6091. Lahey/fujitsu fortran 95 express users guide/linux edition, 1999. Revision A. [10] ELLIS, T., PHILIPS, I. R., LAHEY, T. M. Fortran 90 programming. Harlow, England: Addison-Wesley, 1998. [11] http://www.linux.org/. ltimo acesso: 03 de junho de 2001. [12] Cray Research, Inc., Eagan USA. Optimizing application code on cray pvp systems: Trvopt 2.0(a), volume i, 1996. [13] Cray Research, Inc., 2360 Pilot Knob Road Mendota Heights, MN 55120, USA. Cf90T M commands and directives reference manual, 1994. SR-3901 1.1.

livrof90_v6 2007/3/14 10:59 page 42 #52

42

REFERNCIAS BIBLIOGRFICAS

[14] KERNIGHAN, B. W., RITCHIE, D. M. C, a linguagem de programao: Padro ansi. Rio de Janeiro: Campus, 1989.

livrof90_v6 2007/3/14 10:59 page 43 #53

NDICE REMISSIVO

A Inteiros, Reais, 25 ADVANCE, 43 WRITE, 43 ALLOCATABLE, 93, 94 ALLOCATED, 95 Alocao de Memria, 7 Alocao de Memria Automtica, 84 Alocao Dinmica de Memria, 93, 94 ALLOCATABLE, 93, 94 Alocao Esttica de Memria, 94 Aritmtica, 25 Arquivos CLOSE, 43 OPEN, 43 READ, 43 WRITE, 43 formatao livre, 42 lista-direta, 42 Leitura do tipo CHARACTER, 45 Array, 96 Quando us-la?, 96 ASCII, 6 Assembler, Cdigo, 8 B Bit, 5 Byte, 5 GByte, 5 KByte, 5 MByte, 5 TByte, 5 C CALL, 84 Caracteres, 19 CHARACTER, 19

CLOSE, 47 COMMON, 99 Compartilhamento de Memria, 99 Compartilhamento de Memria, 99 Compilador, 6, 8 g95, 4 Lahey, 6 PGHPF, 6 Complexos, Nmeros, 19 CONTAINS, 102 CPU, 6 Cray, Supercomputador, 19 D Dados Lgicos, 19 LOGICAL, 19 Declarao de Dados, 20 Dgito binrio, 5 E Entrada/Sada de dados, I/O, 41 Executvel, Arquivo, 12 Expoente, 18 F FORMAT, 48 Notao cientca, 49 Potncia de dez, 49 Formatao livre, 42 Fortran 90/95, 6 Lahey, 6 PGHPF, 6 FORTRAN, Signicado, 8 Funes, 84 Denida-Usurio, 84 FUNCTION, 84

livrof90_v6 2007/3/14 10:59 page 44 #54

44
G g95compilador, 4, 6 H Hexadecimal, 7 I IMPLICIT NONE, 15 Input/Output, 41 I/O, 41 INTEGER, 17 Inteiros, 17 INTENT INOUT, 104 IN, 104 OUT, 104 Interfaces, 103 Explcitas, 103 Implcitas, 104 J John Backus, 8 K KIND, 89 L
A L TEX, 1 Linux/GNU, 12 Lista-direta, 42

NDICE REMISSIVO

P Ponto Flutuante, 17 Reais, 17 Preciso Dupla, 18 Preciso Simples, 18 PRIVATE, 105 Procedimentos, 81 Externos, 81 Funes (FUNCTION), 84 Internos, 82 Sub-rotinas (SUBROUTINE), 83 Processamento Paralelo, 6 g95, 6 Vetorizao, 6 Programa Principal, 9 PUBLIC, 105 R READ, 43 Leitura do tipo CHARACTER, 45 Reais, 17 Pontos Flutuantes , 17 REAL, 17 RETURN, 83 S SAVE, 102 SELECTED_INT_KIND, 92 SELECTED_REAL_KIND, 19 SELECTED_REAL_KIND, 91 Subprograma, 81 SUBROUTINE, 83 U Unicode, 6 Unidade lgica, 41 USE, 102 V Vetorizao, 6 Processamento Paralelo, 6 W WRITE, 42 ADVANCE, 43

M Mantissa, 18 MegaFlops, 6 MODULE, 99, 101 Declarao, 99 Procedimentos, 103 Mdulos, 99 O Objeto, Cdigo, 12 OPEN CLOSE, 47 OPEN, 45

Você também pode gostar