Você está na página 1de 13

livrof90_v5 2007/3/1 10:27 page 41 #1

CAP ITULO

2
Para reexo !! 41 42 42 43 45 46 48 52 Se um dia tiver que escolher entre o mundo e o amor... Lembre-se: Se escolher o mundo, car sem o amor, mas se escolher o amor, com ele conquistar o mundo!! Albert Einstein 1879 1955

TRABALHANDO COM ARQUIVOS ENTRADAS/SADAS (I/O) DE DADOS


Neste captulo voc encontrar: 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 . . . . . . . . . . . . . . . . . . . .

2.1 INTRODUO
As entradas e sadas de dados em Fortran so realizadas pelas unidades lgicas. Uma unidade lgica : - um nmero inteiro no negativo associado a um dispositivo fsico tal como uma unidade de disco (HD, disquete, CD,...), teclado, monitor ou uma impressora. A unidade lgica conectada a um arquivo ou dispositivo pela instruo OPEN (ver Seo 2.4, na pg. 45), exceto nos casos dos arquivos pr-conectados. - um asterisco, *, indica o arquivo ou dispositivo padro (default), pr-conectado, de entrada e de sada, usualmente o teclado e a tela do monitor, respectivamente. Leia a nota da pgina 46. - uma varivel tipo CHARACTER corresponde ao nome de um arquivo interno.

livrof90_v5 2007/3/1 10:27 page 42 #2

42 ARQUIVO

CAPTULO 2. TRABALHANDO COM ARQUIVOS ENTRADAS/SADAS (I/O) DE DADOS

O Fortran trata todos os dispositivos fsicos tais como unidades de discos, teclado, impressora, monitor ou arquivos internos como arquivo (le) ou arquivo externo. A estrutura do arquivo determinada pelos dados (formatados ou no), o tipo de acesso ao arquivo e espao (comprimento) para a informao. O Fortran fornece instrues e procedimentos para manipular dados por leitura e escrita, conhecidas por entradas e sadas de dados, inclusive com o uso de arquivos internos. Do ingls vem a denominao Input/Output, ou simplesmente I/O, para Entrada/Sada de dados. Entre as instrues disponveis veremos somente algumas, a saber: WRITE e READ, que so responsveis pela transferncia de dados, OPEN, que conecta as unidades lgicas aos arquivos e FORMAT, que fornece informaes explcitas de formato dos dados. O objetivo deste livro dar uma formao bsica, portanto no sero tratados assuntos relativos a tratamento de posicionamento interno num arquivo, tipos de arquivos, entre outros. Para um avano no estudo da linguagem Fortran, consulte as referncias bibliogrcas, na pg. 106.

2.2 A INSTRUO WRITE


A instruo WRITE utilizada para transferir dados para o arquivo de sada (Output), ou seja, escreve os resultados ou informaes de sada do programa. A sintaxe : WRITE([UNIT=]<unidade>,[FMT=]<formato>,[ADVANCE=<modo>]) em que: [UNIT=]<unidade> : um argumento obrigatrio e indica a unidade lgica (dispositivo1 ) para a qual ser transferido o valor (ou informao) contido na memria. Como unidade padro (default) utilizada a tela do monitor, e indicado por um asterisco (*). Uma unidade lgica diferente da padro determinada pela instruo OPEN (ver Seo 2.4, na pg. 45). A palavra-chave UNIT opcional2 e na maioria dos programas no utilizada. [FMT=]<formato> : um argumento obrigatrio e especica o(s) formato(s) para a escrita dos dados. Para instruir o compilador a escrever numa formatao livre (ou listadirigida) utilizado o asterisco (*), isto , o resultado ou a informao ser escrita da forma como foi gerado, em acordo com a declarao da varivel que contm a informao. Uma sada com formatao livre no tem boa apresentao visual. Uma formatao diferente da padro obtida pela instruo FORMAT, que ser descrita mais adiante (Seo 2.6, na pg. 48). A palavra-chave FMT opcional e no utilizada na maioria dos programas.
1 Dispositivo signica algum meio fsico como por exemplo, tela do monitor, a impressora, um arquivo numa unidade de disco seja magntica ou CD/DVD, o teclado, ou outro. 2 Neste livro, toda instruo ou argumento escrito entre colchetes ([ ... ]) considerado opcional.

livrof90_v5 2007/3/1 10:27 page 43 #3

Fortran 95: curso bsico (Gilberto Orengo)

43

ADVANCE=<modo> : argumento opcional, especica se a prxima sada (ou entrada) deve iniciar numa nova linha ou no. O padro (default), na ausncia do parmetro, <modo> =YES, ou seja, a nova sada avanar para uma nova posio ou nova linha. Adotando o argumento <modo> como NO no ocorrer avano para a nova linha ou posio de escrita. Uma aplicao pode ser vista na pg. 44, no exemplo da instruo READ. Vejamos o seguinte exemplo.
Programa 21: Exemplo de sada de dados
1 2 3 4 5 6 7 8 9 10

PROGRAM saida IMPLICIT NONE INTEGER :: a=10, b=20, c=135 WRITE(*,*) a OPEN(UNIT=10, FILE="saida1.txt") WRITE(10,*) b WRITE(10,200) c 200 FORMAT(I3) CLOSE(10) END PROGRAM saida

No primeiro WRITE, o contedo da varivel a ser escrito na tela do monitor e em formato livre. No segundo, o resultado armazenado na varivel b ser escrito no arquivo de nome saida1.txt, identicado pela unidade lgica 10, procedimento permitido pela instruo OPEN. J a outra sada de resultado, pela varivel c, tambm no arquivo anterior, mas formatada pela instruo FORMAT, localizada no programa pelo rtulo nmero 200, que neste caso instrui o compilador a imprimir um nmero (do tipo inteiro) com 3 algarismos. Como exemplo, o nmero 135 poder ser impresso ajustadamente no espao designado. Quando o nmero no couber nos espaos determinados pela formatao uma sequncia de asteriscos ser impressa no lugar do nmero ou da informao. A instruo CLOSE, que encerra a atividade da unidade 10, estudada na pg. 46.

2.3 A INSTRUO READ


A instruo READ transfere dados de uma unidade de entrada (Input) para uma varivel, isto , l dados que alimentaro com valores e/ou informaes o programa em Fortran. A sintaxe : READ([UNIT=]<unidade>,[FMT=]<formato>) em que: [UNIT=]<unidade> : a unidade lgica (dispositivo) da qual ser obtido o valor (ou informao). Como unidade padro utilizado o teclado e indicado por um asterisco (*). Entenda-se por teclado, os dados digitados por este dispositivo. Uma unidade lgica diferente da padro determinada pela instruo OPEN. A palavra-chave UNIT opcional, e no utilizada na maioria dos programas.

livrof90_v5 2007/3/1 10:27 page 44 #4

44

CAPTULO 2. TRABALHANDO COM ARQUIVOS ENTRADAS/SADAS (I/O) DE DADOS

[FMT=]<formato> : especica com que formato(s) a leitura dos dados realizada. Para instruir o compilador a ler numa formatao livre (ou lista-direta) utilizado o asterisco (*). Neste caso, a memria receber uma informao sem nenhum tipo de preocupao com a editorao da informao. Uma formatao diferente da livre obtida pela instruo FORMAT, que ser descrita na Seo 2.6 (na pg. 48). A palavra-chave FMT opcional e no utilizada na maioria dos programas.

O argumento ADVANCE apresentado na instruo WRITE tambm pode ser utilizado aqui, com o mesmo signicado. Vejamos um exemplo:
Programa 22: Exemplo de entrada de dados
1 2 3 4 5 6 7 8 9 10 11

PROGRAM leitura IMPLICIT NONE REAL :: a, b, c WRITE(*,*,ADVANCE="NO")"Digite um numero real: " READ(*,*) a OPEN(UNIT=20, FILE="dados1.txt") READ(20,*) b READ(20,50) c 50 FORMAT(F5.2) CLOSE(20) END PROGRAM leitura

No primeiro READ, o contedo da varivel a ser preenchido via teclado e em formato livre. Utilizar o teclado signica digitar uma informao, compatvel com o tipo da declarao da varivel, e na sequncia teclar <ENTER>3 . Observe que no WRITE aplicado o argumento ADVANCE, e a prxima instruo de leitura (ou de escrita) no avanar para a prxima linha. Assim, na sequncia, o cursor car posicionado ao lado da sada anterior aguardando a leitura da varivel a. No segundo READ, a varivel b receber um valor que est armazenado num arquivo de nome dados1.txt, identicado pela unidade lgica 20, anteriormente habilitada pela instruo OPEN. J a outra entrada de informao, pela varivel c, tambm oriunda do arquivo anterior, mas formatada pela instruo FORMAT, localizada no programa pelo rtulo nmero 50, que neste caso instrui o compilador a ler um nmero, do tipo real, com 5 espaos, sendo dois para as casas decimais aps a vrgula. Neste caso, o nmero 56.50 caber ajustadamente, pois tem 5 espaos (caracteres) e com duas casas decimais. Perceba que o ponto decimal faz parte da contagem dos espaos disponveis. Quando o nmero no couber nos espaos determinados pela formatao, o compilador arredondar o nmero, fazendo-o se ajustar na formatao determinada ou imprimir asteriscos.

3 Usaremos

a conveno <ENTER> para designar teclar ENTER.

livrof90_v5 2007/3/1 10:27 page 45 #5

Fortran 95: curso bsico (Gilberto Orengo)

45

CONSIDERAES ADICIONAIS SOBRE WRITE/READ 1) possvel ter mltiplas sadas e/ou entradas de dados, da seguinte forma: WRITE(*,*) a, c, resultado READ(*,*) b,g nas quais, as variveis (separadas por vrgulas) a, c e resultado fornecem sadas; e as variveis b e g recebem valores de entrada. 2) Para lermos uma informao do tipo CHARACTER necessrio alterar a instruo de leitura da seguinte forma: READ(*,(A)) b em que o argumento (A) especica a leitura de caracter, exigindo assim a declarao da varivel b como segue CHARACTER :: b ou, por exemplo CHARACTER(LEN=3) :: b Nesta ltima declarao, a varivel armazenar um caracter de comprimento igual at 3 unidades.

2.4 A INSTRUO OPEN


Esta instruo conecta ou reconecta um arquivo externo a uma unidade lgica de entrada ou de sada. Vimos que os dispositivos padres de entrada e sada, na maioria dos compiladores Fortran 95, so respectivamente, o teclado e a tela do monitor. A instruo OPEN permite alterar o dispositivo de entrada e de sada, que realizada na seguinte sequncia: associa-se o nome de um arquivo externo a uma unidade lgica, que ser usada nas instrues de entrada e sada de dados, e atribui-se um estado (status) ao arquivo. A sintaxe : OPEN([UNIT=]<nmero>, FILE="<nome_arq.>", [STATUS="<estado>"]) e deve estar localizada antes da unidade lgica ser utilizada. Os argumentos da instruo so: [UNIT=]<nmero> : o argumento que se refere a unidade lgica e ao seu respectivo arquivo de entrada/sada; UNIT uma palavra-chave e o <nmero> um nmero inteiro no negativo, sendo que o nico cuidado para no coincidir com o nmero adotado pelo compilador para os dispositivos padres, de entrada e sada. Neste sentido, aconselha-se adotar numerao acima de 8. A palavra-chave UNIT= opcional. FILE=<nome_arq.> : fornece o nome associado com a unidade lgica. importante que o nome contenha uma extenso, por exemplo dados1.txt.

livrof90_v5 2007/3/1 10:27 page 46 #6

46

CAPTULO 2. TRABALHANDO COM ARQUIVOS ENTRADAS/SADAS (I/O) DE DADOS

STATUS=<estado> : um argumento opcional e fornece o estado do arquivo, e <estado> pode ser: a) OLD : o arquivo j existe, b) NEW : o arquivo no existe, e ser criado, c) REPLACE : um novo arquivo ser aberto. Se o arquivo j existe os dados sero apagados, para ser re-utilizado, d) STRATCH : o arquivo ser criado temporariamente, e aps o uso ser eliminado. Neste caso o argumento FILE no pode ser especicado, isto , o arquivo no ter nome. e) UNKNOWN : desconhecido. Este o argumento padro por denio (default), na ausncia do STATUS. Exemplos: OPEN(UNIT=10, FILE="resultados.txt", STATUS="NEW") OPEN(UNIT=20, FILE="dados1.txt", STATUS="OLD") OPEN(50, FILE=entrada1.txt) No primeiro exemplo, uma unidade lgica com o nmero 10 criada e cuja unidade fsica (ou arquivo) de nome resultados.txt conter e/ou estar habilitado para armazenar valores. Perceba que um arquivo novo, ou seja, ele ser criado na execuo do programa. Caso o arquivo interno j exista, o compilador retornar uma mensagem de erro, e encerrar a execuo. No segundo exemplo, a unidade lgica ser de nmero 20 e o arquivo dados1.txt existente, caso contrrio o compilador acusar um erro de inexistncia do arquivo interno. No ltimo caso, a unidade lgica a 50 e o arquivo entrada1.txt, mas observe que a palavrachave UNIT foi omitida, bem como o status e, portanto, considerado como desconhecido.
AS UNIDADES PR-CONECTADAS
Foi mencionado que a numerao adotada para a unidade lgica no pode ser qualquer. Os compiladores designam nmeros inteiros para as suas unidades lgicas padro, chamadas de Unidades de Entrada/Sada Pr-conectadas. Por exemplo, a unidade lgica 5 est conectada ao dispositivo padro de entrada, usualmente o teclado, e a unidade 6 para o dispositivo de sada, usualmente a tela do monitor. Assim, nas instrues de entrada/sada de dados o asterisco representa estas unidades

2.5 A INSTRUO CLOSE


Quando uma unidade lgica est conectada ao seu arquivo externo, ele permanece neste estado at o sua desconexo, ou at que cesse a execuo do programa. Em outras palavras, nesta situao um arquivo permanece aberto. Assim, aps o uso do arquivo importante fech-lo para evitar erros indesejveis. A instruo CLOSE desconecta uma unidade lgica

livrof90_v5 2007/3/1 10:27 page 47 #7

Fortran 95: curso bsico (Gilberto Orengo)

47

do seu arquivo externo. Ou seja, fecha o acesso ao arquivo e libera o nmero da unidade lgica de I/O associada a ela. A sintaxe : CLOSE([UNIT=]<nmero>) em que: <nmero> : o nmero da unidade lgica denida no argumento UNIT da instruo OPEN. Podemos fechar vrios arquivos simultaneamente, bastando para isso informar as unidades separadas por vrgulas. Exemplos: CLOSE(10,12,20) CLOSE(UNIT=11) CLOSE(50) Observe que no primeiro exemplo a instruo CLOSE encerra simultaneamente 3 unidades lgicas. Outro ponto importante que a palavra-chave UNIT opcional e s foi utilizada no segundo exemplo. Para a instruo OPEN h outros argumentos, que no sero tratados aqui, e aconselhvel veric-los nos livros indicados nas referncias bibliogrcas, na pg. 106. Exemplos resolvidos:
1) Escreva um programa em Fortran 95 que leia um valor inteiro via dispositivo padro, multiplique-o por dez e escreva o resultado em um arquivo com nome saida1.txt. Soluo: Adotaremos como unidade de sada a 50, e as variveis a e b, respectivamente, para entrada e sada de dados. Assim, o cdigo abaixo resolve o nosso problema. Digite-o, compile-o e execute-o. 2) Escreva um programa em Fortran 95 que leia um valor inteiro armazenado num arquivo de nome saida1.txt (do exemplo anterior), multiplique-o por mil e escreva o resultado em um arquivo com nome saida2.txt. Soluo: Adotaremos como unidade de entrada a 60 e a de sada a 61 e, as variveis a e b, respectivamente, para entrada e sada de dados. Devemos lembrar que o arquivo de leitura j existe e, portanto, o argumento STATUS ter como parmetro OLD. O cdigo abaixo resolve o problema. Digite-o, compile-o e execute-o. Observe o uso da instruo & para quebra de linha no Fortran.

Programa 23:
PROGRAM open1 IMPLICIT NONE INTEGER :: a,b OPEN(UNIT=50,FILE="saida1.txt") WRITE(*,*)"Digite um no. inteiro" READ(*,*) a b = a*10 WRITE(50,*)b CLOSE(50) END PROGRAM open1

Programa 24:
PROGRAM open2 IMPLICIT NONE INTEGER :: a,b OPEN(UNIT=60,FILE="saida1.txt",& & STATUS="OLD") OPEN(61,FILE="saida2.txt") READ(60,*) a b = a*1000 WRITE(61,*)b CLOSE(60) CLOSE(61) END PROGRAM open2

livrof90_v5 2007/3/1 10:27 page 48 #8

48

CAPTULO 2. TRABALHANDO COM ARQUIVOS ENTRADAS/SADAS (I/O) DE DADOS

Podemos atribuir unidade lgica uma varivel, conforme o exemplo abaixo, no qual a varivel ue, cujo valor inteiro informado pelo usurio, substitui o inteiro no argumento UNIT dos exemplos acima.
Programa 25: Exemplo do uso de unidades lgicas
1 2 3 4 5 6 7 8 9 10 11 12 13

PROGRAM unidade1 IMPLICIT NONE INTEGER :: a,b,ue WRITE(*,*)"Digite um numero inteiro:" READ(*,*) a b = a*10 WRITE(*,*)"Informe o numero (>8) da unidade logica & &de saida:" READ(*,*) ue OPEN(UNIT=ue,FILE="saida1.txt") WRITE(ue,*)b CLOSE(ue) END PROGRAM unidade1

2.6 FORMATANDO AS SADAS E/OU ENTRADAS (FORMAT)


Nos exemplos anteriores utilizamos entradas e sadas de dados sem formatao, isto , da maneira como foram gerados os dados (ou resultados) elas foram impressas, seja na tela do monitor ou num arquivo. possvel converter a representao interna, como est na memria, conforme a declarao da varivel, para uma representao externa, utilizando a instruo no executvel FORMAT. Este comando simplesmente instrui o compilador que a sada (ou entrada) de dado obedecer uma formatao estabelecida. A sintaxe da instruo FORMAT : <rtulo> FORMAT(<cdigo-chave>) em que: <rtulo> : um nmero inteiro associado a instruo FORMAT, o qual ser o nmero de chamada por uma instruo READ e/ou WRITE. A instruo FORMAT pode ser posicionada em qualquer linha no programa, aps as declaraes de variveis. <cdigo-chave> : especica o(s) formato(s) adotado para entrada e/ou sada de dados, baseado na tabela 2.1. Podem ser utilizados mais de um cdigo separados por vrgula. At agora todas as sadas e entradas de dados foram realizadas sem preocupao com o formato. A partir deste momento deveremos ter cuidado ao utilizar a instruo FORMAT. Veremos alguns pontos importantes.

livrof90_v5 2007/3/1 10:27 page 49 #9

Fortran 95: curso bsico (Gilberto Orengo)

49

OS CDIGOS-CHAVE Existe mais de uma dzia de espcies de formatao (cdigos-chave) em Fortran 95, mas usaremos somente alguns, descrito na tabela 2.1. Para auxiliar na compreenso da tabela temos que: w: a largura do campo (nmero de dgitos) destinado ao referido dado. A largura do campo (w) inclui o nmero total de posies, inclusive o sinal e o ponto decimal da mantissa, o smbolo E, o sinal (de + ou de ) e os dois dgitos do expoente (ou os dgitos determinados para o expoente, e).; corresponde aos dgitos aps o ponto decimal espao (casas decimais da mantissa); os dgitos do expoente E; signica o nmero de vezes que a formatao ser utilizada, ou seja, indica uma repetio. Por exemplo, no caso de 3A8, signica que sero impressos ou lidos 3 variveis do tipo CHARACTER de tamanho igual a 8 cada. Tabela 2.1 Descrio de algumas formataes utilizadas na instruo FORMAT. Cdigo-chave nAw nIw nFw.d Signicado Interpreta os prximos w caracteres como um conjunto de caracteres (cdigo-chave A) de texto. Interpreta os prximos w dgitos como um nmero inteiro (cdigo-chave I). Interpreta os prximos w dgitos como um nmero real, numa notao sem potncia de dez (cdigo-chave E), com d casas aps o ponto decimal. Interpreta os prximos w dgitos como um nmero real, de preciso simples, numa notao com potncia de dez (cdigo-chave E), com d casas aps o ponto decimal. Interpreta os prximos w dgitos como um nmero real, de preciso simples, numa notao cientca de potncia de dez (cdigo-chave ES), com d casas aps o ponto decimal. Interpreta os prximos w dgitos como um nmero real, de preciso dupla, numa notao com potncia de dez (cdigo-chave D), com d casas aps o ponto decimal. Fornece n espaos horizontais (cdigo-chave X). o conhecido Tab: move a leitura/escrita para a coluna c, em que c o nmero da coluna.

d: e: n:

nEw.d[Ee]

nESw.d[Ee]

nDw.d[Ee]

nX Tc

Mais informaes sobre os tipos de formatao (cdigos-chave) podem ser obtidas nas referncias indicadas no nal do livro. Sempre que o tamanho da informao for menor que o espao reservado, a informao ser escrita justicada direita e sero acrescentados espaos em branco antes, para com-

livrof90_v5 2007/3/1 10:27 page 50 #10

50

CAPTULO 2. TRABALHANDO COM ARQUIVOS ENTRADAS/SADAS (I/O) DE DADOS

pletar o espao reservado. Quando a sada sem formatao o que determinar o espao reservado ser a denio de preciso adotada. Por exemplo, um nmero inteiro de preciso simples ter 11 espaos reservados para a sada ou leitura, j includo o sinal. O sinal positivo (+) omitido. O TAMANHO DO PAPEL DE IMPRESSO Antes do computador enviar a informao para o dispositivo de sada, construdo uma imagem de cada linha. A memria do computador que contm esta imagem chamada de rea de armazenamento de dados temporrio (output buffer). A largura de cada linha igual a 133 caracteres, sendo o primeiro espao destinado ao caracter de controle, que veremos a seguir. Os demais 132 espaos so para armazenar a sada de dados. Assim, cada impresso ou sada de informaes dividida em pginas, de tamanho aproximadamente igual a 37,8 cm para a largura e 27,9 cm para a altura. Estas dimenses esto relacionadas com os formulrios contnuos muito utilizados at o nal do sculo passado. Cada pgina dividida em linhas, e cada linha em 132 colunas, com um caracter por coluna. Para estas medidas, e dependendo do nmero de linhas por polegada que a impressora imprime, correspondem entre 60 e 72 linhas. As margens superior e inferior equivalem aproxidamente a 1,27 cm. O CARACTER DE CONTROLE Este item muito importante na sada de dados pelo WRITE. O primeiro caracter da imagem, contida na rea de armazenamento de dados temporrio, conhecido como caracter de controle e especica o espaamento vertical da sada. A tabela 2.2 apresenta as possibilidades e as aes deste caracter de controle. Tabela 2.2 Caracteres de controle da sada formatada. Caracter de controle Ao 1 <espao> 0 + Avana para a prxima pgina (Nova pgina) Espaamento simples entre linhas Espaamento duplo entre linhas No h espaamento entre linhas. Sobrescreve (escreve em cima da) a linha anterior

Se qualquer outro caracter for utilizado como caracter de controle resultar em espaamento simples entre linhas, como se fosse usado o espao em branco (<espao>). Para evitar erros na sada, no esquea do caracter de controle. Por exemplo, a seguinte instruo de sada WRITE(*,100) a 100 FORMAT(I2) imprimir um valor numrico inteiro de duas posies. Esta a inteno. Vejamos dois possveis valores. Se for passado para a varivel a o valor 7, a sada ser exatamente 7, justicada a direita. Mas se for passado o valor 71 o resultado ser 1, porque o primeiro

livrof90_v5 2007/3/1 10:27 page 51 #11

Fortran 95: curso bsico (Gilberto Orengo)

51

caracter destinado ao de controle, neste caso o 7 e foi assumido como espao em branco, portanto o espaamento entre linhas ser simples. No caso anterior no ocorreu erro porque o primeiro caracter foi um espao em branco, j que o nmero tinha somente um algarismo. Ento muita ateno. Alguns exemplos de formatao so apresentados a seguir.
Programa 26: Exemplo do uso de formatos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

PROGRAM format1 IMPLICIT NONE REAL :: a = 123.45, b = WRITE(*,100) a ! WRITE(*,200) a ! WRITE(*,300) a ! WRITE(*,400) a ! WRITE(*,500) a ! WRITE(*,600) a ! WRITE(*,700) a,b,c ! 100 FORMAT(0,E11.5) 200 FORMAT(0,F6.2) 300 FORMAT(1,E12.6) 400 FORMAT( ,E10.2) 500 FORMAT( ,E15.5E6) 600 FORMAT( ,ES10.2) 700 FORMAT(+,3ES10.2) END PROGRAM format1

6789.10, c = 0.000778
a a a a a a a saida: saida: saida: saida: saida: saida: saida: 0.12345E+03 123.45 0.123450E+03 0.12E+03 0.12345E+000003 1.23E+02 1.23E+02 6.79E+03

7.78E-04

Observe as sadas escritas como comentrio4 . Atente, especialmente para a segunda formatao, que exatamente o nmero original. As demais alteram a forma de escrever e no mudam o signicado matemtico da varivel a, a no ser nas ltimas que reduzem a preciso do valor. Na ltima, foram realizadas trs sadas com a mesma formatao, denida no FORMAT de rtulo 700. Nesta utilizada a formatao em notao cientca, e observe o caso do nmero 6789.10, que arredondado para se ajustar ao espao determinado e, no nmero 0.000778 os zeros so abandonados e ajustados no expoente da notao cientca. As duas primeiras sadas sairo na pgina corrente, com espaamento duplo entre linhas. Na terceira sada, o caracter de controle instrui que o resultado seja escrito numa pgina nova. Os demais sero escritos nesta mesma pgina com espaamento simples entre as linhas. A ltima sada sobrescrever a anterior. Mais informaes a respeito de formatao de sada/entrada de dados so obtidas nos livros sobre Fortran, citados nas referncias bibliogrcas, na pg. 106. Quando o nmero no se ajusta na formatao determinada, um conjunto de asteriscos impresso no lugar do nmero ou da expresso. Veja o exemplo abaixo.
4 Lembrete: um comentrio em Fortran inserido pela instruo ! (sinal de exclamao) antes da sentena que desejamos comentar. Pode aparecer em qualquer parte do programa.

livrof90_v5 2007/3/1 10:27 page 52 #12

52

CAPTULO 2. TRABALHANDO COM ARQUIVOS ENTRADAS/SADAS (I/O) DE DADOS

Programa 27: Exemplo de formatao inadequada


1 2 3 4 5 6 7

PROGRAM format2 IMPLICIT NONE INTEGER :: a1 = 12345, a2 = 678 WRITE(*,100) a1 ! a saida: **** WRITE(*,100) a2 ! a saida: 678 100 FORMAT( ,I4) END PROGRAM format2

Na primeira sada os asteriscos substituiram o nmero 12345, porque o espao reservado para sua impresso menor que o tamanho (em espaos) do nmero. Na segunda sada uma coluna em branco foi acrescentada antes do nmero 678 para completar o nmero de casas da declarao formatada, j que ele menor que o espao reservado. Ou seja, sempre que o nmero for menor que o espao reservado, o nmero ser escrito justicado direita. As formataes podem ser utilizadas diretamente nas instrues READ e WRITE. Por exemplo, as seguintes instrues WRITE(*,100) a1, a2 READ(*,200) a3, a4 100 FORMAT( ,I3,2X,E10.2) 200 FORMAT(2I5) podem ser substitudas por WRITE(*,( ,I3,2X,E10.2)) a1, a2 READ(*,(2I5)) a3, a4

A vericao de aprendizado pela prtica com exerccios e com a soluo de problemas. altamente recomendvel que faa os exerccios a seguir, bem como os disponveis no site http://www.orengonline.com/fortran95/. Aps este treinamento estar apto a resolver problemas. 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.

EXERCCIOS
2.1) O que sair impresso nas seguintes instrues Fortran? Use a = 345 e b = 1.0020E6 e c = 1.0001E6 a) INTEGER :: a WRITE(*,100) a 100 FORMAT((1,a = , I4.1)

livrof90_v5 2007/3/1 10:27 page 53 #13

Fortran 95: curso bsico (Gilberto Orengo)

53

b) WRITE(*,( , ES12.6)) b c) WRITE(*,( ,O resultado da diferenca entre ,ES14.6, e , ES14.6, eh: , ES14.6)) b,a,b-a

2.2) Qual a largura (w) mnima necessria para imprimir um valor real num formato de notao com potncia de dez (E) e numa notao cientca de potncia de dez (ES) com 5 bits signicativos de preciso? 2.3) Escreva um programa que leia dois valores reais de preciso simples de um arquivo de nome entrada.txt e escreva a soma deles em um novo arquivo, j existente, de nome saida.txt. Use a instruo FORMAT para os valores. 2.4)

Você também pode gostar