<< Espressioni ed assegnazioni

Indice

Cicli >>

 

I/O dei dati

 

  • PRINT
  • READ
  • FORMAT
  • X
  • I
  • F
  • E
  •  

    In questa sezione si vede come fare I/O dei dati da dispositivi standard (tastiera/monitor).

     

    PRINT

    Il comando base che permette di effettuare l'output in Fortran è:
          PRINT*, output
    dove output sono i valori da visualizzare separati da virgole (,).

    Esempi:
          PRINT*,X,Y,Z                visualizza i valori di X, Y e Z
          PRINT*,'Data =',D          visualizza Data = seguito dal valore di D

    Ogni istruzione di output viene visualizzata su una riga diversa dello schermo. Delle istruzioni del tipo:
          PRINT*,5,7.2
          PRINT*,'Ora =','18:45'
    restituiranno:
            5    7.2
            Ora =    18:45

    Un valore di tipo LOGICAL in output restutuirà o T o F (TRUE, FALSE).
    Un valore INTEGER o REAL viene invece visualizzato secondo il formato standard definito dall'implementazione, per poter adoperare un'altra formattazione si utilizza il comando FORMAT.

     

    READ

    Il comando per poter effettuare l'input in Fortran è:
          READ*, input
    dove input è la lista degli identificatori per i valori da inserire separati da virgole (,).

    Esempio:
          READ*,X,Y,Z                richiede i valori di X, Y e Z

    È conveniente inserire prima dell'istruzione di input un output con i valori richiesti. Così il precedente esempio diventa:
          PRINT*,'X,Y,Z'
          READ*,X,Y,Z

    Per le variabili di tipo LOGICAL, se il primo carattere fornito dall'utente è T o .T, allora la variabile assume il valore .TRUE., invece, se il primo carattere è F o .F, allore la variabile assume il valore .FALSE., altrimenti viene segnalato l'errore.

     

    FORMAT

    Per poter specificare il formato di I/O dei dati si adopera il seguente metodo:
          PRINT etichetta1, output
          READ etichetta2, input
    e1  FORMAT(formati1)
    e2  FORMAT(formati2)
    dove e1 ed e2 sono rispettivamente etichetta1 ed etichetta2.

    L'etichetta è un numero intero compreso tra 0 e 9999 che deve essere inserita (nei casi e1 ed e2) nelle colonne tra la 1 e la 5 (vedi Struttura di un programma).

    Le etichette e1 ed e2 mettono correlano i rispettivi FORMAT rispettivamente con PRINT e READ. Non è necessario che il FORMAT segua l'istruzione che lo ha richiamato, questa infatti può essere messa in un qualsiasi punto del programma, anche se per una maggiore leggibilità del codice si preferisce o farli seguire alle istruzioni che li richiamano o raggrupparli alla fine del programma prima dell'END.

    formati1 e formati2 sono rispettivamente la formattazione per il PRINT e per il READ.

    I formati sono quattro: X, I, F, E.

     

    X

    La X è utilizzata per generare degli spazi in uscita.
          PRINT e,output
    e    FORMAT(nX,formati)
    indica che l'istruzione PRINT prima di visualizzare i dati di output secondo formati, lascia n spazi vuoti (n intero positivo). Il numero n prima di X non può mai essere omesso, anche quando questo è uno. Nel precedente esempio X è posto prima degli altri formati, ad ogni modo questo può trovarsi in qualsiasi altro punto dell'elenco formati. La sua posizione dipende da come vogliamo visualizzare l'output.

     

    I

    La I è adoperata per specificare l'ampiezza delle variabili di tipo INTEGER.
          PRINT e,output
    e    FORMAT(In,formati)
    In indica che il primo output è un INTEGER, per visualizzare il quale sono stati riservati n spazi. Se il numero delle cifre c dell'intero è uguale a n (c = n), allora tutti gli spazi saranno occupati dalle cifre; se c < n, allora il numero verrà visualizzato allineato a destra, i restanti n - c resteranno vuoti; se c > n, allora il numero di spazi riservati è insufficiente e l'output sarà una serie di asterischi (*******).

    Ad esempio:
          I=1500
          J=2450000
          K=-33
          L=1000
          PRINT 1, I,J
          PRINT 1, I,K
          PRINT 2, K
          PRINT 2, L
          PRINT 3,I,L
    1    FORMAT(I5,I7)
    2    FORMAT(I3)
    3    FORMAT(2I5)
    restituirà in output:
          °15002450000
          °1500°°°°-33
          -33
          ***
          °1500°1000
    dove ° indica uno spazio vuoto. 2I5 significa I5,I5.

     

    F

    La F è adoperata per specificare l'ampiezza delle variabili di tipo REAL.
          PRINT e,output
    e    FORMAT(Fn1.n2,formati)
    Fn1.n2 indica che il primo output è un REAL, per visualizzare il quale sono stati riservati n1 spazi. n2 è il numero di cifre da visualizzare dopo il punto decimale. Da ciò segue che n1 deve essere maggiore di n2, più precisamente n1 > n2 + 1 (l'uno è il punto decimale). n2 può essere zero. Da quanto detto segue che se n2 sono gli spazi riservati per le cifre decimali, allora gli spazi riservati per le cifre intere sono n = n1 - n2 - 1. Se il numero delle cifre c dell'intero è uguale a n (c = n), allora tutti gli spazi saranno occupati dalle cifre; se c < n, allora il numero verrà visualizzato allineato a destra, i restanti n - c resteranno vuoti; se c > n, allora il numero di spazi riservati è insufficiente e l'output sarà una serie di asterischi (*******). Vediamo cosa accade con n2:
    sia 15.9627483 il numero da visualizzare:
    n1.n2 output
    7.4 15.9627
    10.6 °15.962748
    8.6 ********
    dove ° indica uno spazio vuoto.

    Esempio:
          X=1.57
          Y=2.45
          Z=-3.5
          PRINT 1, X,Y
          PRINT 2, Z
    1    FORMAT(2F5.2)
    2    FORMAT(F4.1)
    restituirà in output:
          °1.57°2.45
          -3.5
    2F5.2 significa F5.2,F5.2.

     

    E

    La E è adoperata per specificare l'ampiezza delle variabili di tipo REAL espresse con notazione esponenziale.
          PRINT e,output
    e    FORMAT(En1.n2,formati)
    En1.n2 indica che il primo output è un REAL, per visualizzare il quale sono stati riservati n1 spazi. n2 è il numero di cifre da visualizzare dopo il punto decimale. Da ciò segue che n1 deve essere maggiore di n2, più precisamente n1 > n2 + 6 (il 6 sono: il segno del numero, il punto decimale, il simbolo E prima dell'esponente, il segno dell'esponente, e due spazi per l'esponente). Lo spazio riservato per il segno del numero è utilizzato solo se questo è negativo (il segno dell'esponente è sempre indicato). n2 può essere zero. Da quanto detto segue che se n2 sono gli spazi riservati per le cifre decimali, allora gli spazi riservati per le cifre intere sono n = n1 - n2 - 6. Se il numero delle cifre c dell'intero è uguale a n (c = n), allora tutti gli spazi saranno occupati dalle cifre; se c < n, allora il numero verrà visualizzato allineato a destra, i restanti n - c resteranno vuoti; se c > n, allora il numero di spazi riservati è insufficiente e l'output sarà una serie di asterischi (*******). Vediamo cosa accade con n2:
    sia -15.7325892 il numero da visualizzare:
    n1.n2 output
    14.4 °°°-0.1573E+02
    8.2 -.16E+02
    7.2 *******
    dove ° indica uno spazio vuoto.

    Esempio:
          X=1.5783
          Y=-2.4511
          PRINT 1, X,Y
    1    FORMAT(2E10.2)
    restituirà in output:
          °°0.16E+01°-0.25E+01
    2E10.2 significa E10.2,E10.2.

     

    Esempio:
          PRINT 1, I,X,J,Y,K,Z
          PRINT 2,A,B
    1    FORMAT(1X,3(I3,3X,F10.4)
    2    FORMAT(1X,F8.2/2X,F15.5)
    il gruppo I3,3X,F10.4 viene ripetuto 3 volte. In 2 la / indica che viene visualizzato A dopo uno spazio e con F10.2, e a capo viene visualizzato B preceduto da due spazi e con F15.5.

    Negli esempi fatti si è utilizzato il comando FORMAT prevalentemente per l'output, ad ogni modo tutto il discorso vale anche per l'input.

     

    << Espressioni ed assegnazioni

    Indice

    Cicli >>