Programação em FORTRAN V João Manuel R. S. Tavares Output no écran Exemplo de escrita em formato livre (*): radius = 7.2345121 PRINT *,'Radius = ',radius,' cm' Resultado: Radius = 7.2345121 cm @2001 - João Tavares CFAC: Programação em FORTRAN - V 2 João Manuel R. S. Tavares 1
Formato livre O formato livre é simples e fácil de utilizar (por exemplo com as instruções PRINT * e READ *). Assume entradas numéricas, e portanto limitadas. Utiliza sempre a máxima resolução possível. Em programas com vários dados de entrada e/ou saída, pode originar interfaces complexas e desagradáveis. @2001 - João Tavares CFAC: Programação em FORTRAN - V 3 I/O formatada Sintaxe geral para I/O formatada: PRINT '(< Formato >)', < variável(eis) > READ '(< Formato >)', < variável(eis) > < Formato > é um especificador de formatação. @2001 - João Tavares CFAC: Programação em FORTRAN - V 4 João Manuel R. S. Tavares 2
formatação I formatação para variáveis consistem numa letra e dígito(s): A : Variável caracter; I : Variável inteira; F : Variável real; E : Variável real, forma exponencial;... @2001 - João Tavares CFAC: Programação em FORTRAN - V 5 formatação II A10 : Uma variável com 10 caracteres de comprimento (String). Exemplo: 'Hello '. I8 : Inteiro com 8 dígitos de comprimento. F6.2 : Variável real, 2 casas decimais, 6 dígitos de comprimento incluindo o ponto decimal e o sinal negativo. @2001 - João Tavares CFAC: Programação em FORTRAN - V 6 João Manuel R. S. Tavares 3
formatação III Exemplos de números formatados com F6.2 Número C1 C2 C3 C4 C5 C6 345.19 3 4 5. 1 9 1.2 1. 2 0-23.45-2 3. 4 5 5 5. 0 0 Sem nº de dígitos suficiente. 9999.99 * * * * * * @2001 - João Tavares CFAC: Programação em FORTRAN - V 7 formatação IV (2 valores inteiros) READ '(A30)', string1 READ '(A30, 2I4)', string2, num1, num2 PRINT '("Answer = ", F6.2)', answer ( / e X são nova linha e espaço.) (2 espaços) PRINT '(/"A = ", I2, 2X, "B = ", F10.1, //)', a, b PRINT '("Enter a number ")' READ *, number (2 novas linhas) @2001 - João Tavares CFAC: Programação em FORTRAN - V 8 João Manuel R. S. Tavares 4
formatação V WRITE (*, '(A\)') ' ANGULO : ' * - escrita no canal por defeito (monitor), \ - para continuar na mesma linha (no FORCE utilizar $ em vez de \) após a escrita. Equivalente a: PRINT '(A\)', ' ANGULO : ' READ (*, *) TETA 1º * - leitura a partir do canal por defeito (teclado), 2º * - leitura em formato livre. Equivalente a: READ *, TETA @2001 - João Tavares CFAC: Programação em FORTRAN - V 9 formatação VI Exemplos (estilo antigo: com etiquetas numéricas): 100 FORMAT (/'A = ', I2, 2X, 'B = ', F10.1//) PRINT 100, a, b READ 200, int1, int2, int3 200 FORMAT (3I5) @2001 - João Tavares CFAC: Programação em FORTRAN - V 10 João Manuel R. S. Tavares 5
Ficheiros de dados I Em primeiro lugar, é necessário abrir o ficheiro de dados. Depois, realiza-se a leitura ou a escrita dos dados. Finalmente, fecha-se o ficheiro. Ficheiros de dados são análogos a livros. Instrução OPEN em FORTRAN: OPEN (UNIT = x, FILE = y, STATUS = z) @2001 - João Tavares CFAC: Programação em FORTRAN - V 11 Ficheiros de dados II UNIT deve ser > 6 (UNIT 5 = teclado e UNIT 6 = écran). OPEN (UNIT = 20, FILE = 'data.dat', STATUS = 'NEW') Exemplos para FILE: FILE = 'data.dat' FILE = '/disk/n/gps/data/data.dat' FILE = file_name Exemplos para STATUS: STATUS = 'NEW' STATUS = 'OLD' STATUS = 'UNKNOWN' @2001 - João Tavares CFAC: Programação em FORTRAN - V 12 João Manuel R. S. Tavares 6
Ficheiros de dados III Escrita e Leitura: Desde que um ficheiro esteja aberto pode-se utilizar as instruções READ e WRITE para leitura e escrita de dados: READ (< unit >, < formato >) < variável(eis) > WRITE (< unit >, < formato >) < variável(eis) > A instrução WRITE também pode ser utilizada para escrever no ecrã. Por exemplo: WRITE (*, *) 'Ola' @2001 - João Tavares CFAC: Programação em FORTRAN - V 13 Ficheiros de dados IV READ (20, *) num1, num2, num3 WRITE (20, '(5X, I5, 10X, 3F5.1)') a, b, c, d READ (20, '(2F10.5)') data1(loop), data2(loop) (ficheiro em questão está associado à unidade 20) @2001 - João Tavares CFAC: Programação em FORTRAN - V 14 João Manuel R. S. Tavares 7
Ficheiros de dados V Fecho de um ficheiro de dados: CLOSE (UNIT = < unit > < unit >) CLOSE (UNIT = 20) ou CLOSE (20) Deve-se fechar os ficheiros quando já não são necessários! @2001 - João Tavares CFAC: Programação em FORTRAN - V 15 Ficheiros de dados VI Apontador do ficheiro: O apontador do ficheiro é posicionado no início quando o ficheiro é aberto. A instrução: REWIND (UNIT = < unit > < unit >) move o apontador para o início do mesmo. Exemplo: REWIND (20) ou REWIND (UNIT = 20) @2001 - João Tavares CFAC: Programação em FORTRAN - V 16 João Manuel R. S. Tavares 8
Ficheiros de dados VII Apontador do ficheiro: O apontador do ficheiro é posicionado no início quando o ficheiro é aberto. A instrução: BACKSPACE (UNIT = < unit > < unit >) recua o apontador um campo. Exemplo: BACKSPACE (20) ou BACKSPACE (UNIT = 20) @2001 - João Tavares CFAC: Programação em FORTRAN - V 17 Ficheiros de dados VIII Determinação de erros: IOSTAT: É utilizado para testar se um ficheiro (aberto com status 'OLD' ou 'UNKNOWN') existe. Exemplo: OPEN (IOSTAT = I, UNIT = 20, & FILE = 'test.dat', STATUS = 'OLD') (indicação de continuação de linha) IOSTAT retorna por I um valor inteiro. @2001 - João Tavares CFAC: Programação em FORTRAN - V 18 João Manuel R. S. Tavares 9
Ficheiros de dados IX Os valores inteiros de IOSTAT retornados são: = 0 : Ficheiro aberto sem erros. > 0 : Erro, ficheiro não encontrado. < 0 : Como a condição 0, mas no fim do ficheiro (EOF), ficheiro vazio. Como testar EOF (fim de ficheiro) durante a leitura de dados? @2001 - João Tavares CFAC: Programação em FORTRAN - V 19 (No fim do ficheiro salta para a linha 100.) Ficheiros de dados X Utilização da opção END numa instrução READ permite testar o EOF. Exemplo: DO WHILE (.NOT. 0 ) Condição sempre verdadeira. READ (25, '(I5)', END = 100) data(i) i = i+1 END DO 100 CONTINUE @2001 - João Tavares CFAC: Programação em FORTRAN - V 20 João Manuel R. S. Tavares 10