CFAC: Programação em FORTRAN - V FEUP/DEMEGI-SDI 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 @2001 - João Tavares João Manuel R. S. Tavares cm CFAC: Programação em FORTRAN - V 2 1 CFAC: Programação em FORTRAN - V FEUP/DEMEGI-SDI Formato livre @2001 - João Tavares 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. 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 João Manuel R. S. Tavares CFAC: Programação em FORTRAN - V 4 2 CFAC: Programação em FORTRAN - V FEUP/DEMEGI-SDI Especificadores de formatação I Especificadores de 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 Especificadores de formatação II Exemplos: 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 João Manuel R. S. Tavares CFAC: Programação em FORTRAN - V 6 3 CFAC: Programação em FORTRAN - V FEUP/DEMEGI-SDI Especificadores de 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 0 3 . 4 5 5 . 0 0 * * * * 1.2 -23.45 - 2 5 Sem nº de dígitos suficiente. 9999.99 @2001 - João Tavares * * CFAC: Programação em FORTRAN - V 7 Especificadores de formatação IV Exemplos: READ '(A30)', string1 READ '(A30, 2I4)', string2, num1, num2 (2 valores inteiros) PRINT '("Answer = ", F6.2)', answer (“ / ” e “ X ” são nova linha e espaço.) PRINT '(/"A = ", I2, 2X, "B = ", F10.1, //)', a, b (2 espaços) PRINT '("Enter a number ")' READ *, number @2001 - João Tavares João Manuel R. S. Tavares CFAC: Programação em FORTRAN - V (2 novas linhas) 8 4 CFAC: Programação em FORTRAN - V FEUP/DEMEGI-SDI Especificadores de formatação V Exemplos: 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 Especificadores de 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 João Manuel R. S. Tavares CFAC: Programação em FORTRAN - V 10 5 CFAC: Programação em FORTRAN - V FEUP/DEMEGI-SDI 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). Exemplos: 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 João Manuel R. S. Tavares CFAC: Programação em FORTRAN - V 12 6 CFAC: Programação em FORTRAN - V FEUP/DEMEGI-SDI 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 Exemplos: 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 João Manuel R. S. Tavares CFAC: Programação em FORTRAN - V 14 7 CFAC: Programação em FORTRAN - V FEUP/DEMEGI-SDI Ficheiros de dados V Fecho de um ficheiro de dados: CLOSE (UNIT = < unit > | < unit >) Exemplos: 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 João Manuel R. S. Tavares CFAC: Programação em FORTRAN - V 16 8 CFAC: Programação em FORTRAN - V FEUP/DEMEGI-SDI 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) @2001 - João Tavares João Manuel R. S. Tavares IOSTAT retorna por I um valor inteiro. CFAC: Programação em FORTRAN - V 18 9 CFAC: Programação em FORTRAN - V FEUP/DEMEGI-SDI 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 Ficheiros de dados X Utilização da opção END numa instrução READ permite testar o EOF. Condição sempre verdadeira. Exemplo: DO WHILE ( .NOT. 0 ) (No fim do ficheiro salta para a linha 100.) @2001 - João Tavares João Manuel R. S. Tavares READ (25, '(I5)', END = 100) data(i) i = i+1 END DO 100 CONTINUE CFAC: Programação em FORTRAN - V 20 10