Fortran - Basic Input Output

Finora abbiamo visto che possiamo leggere i dati dalla tastiera usando il read * e visualizzare l'output sullo schermo utilizzando il print*dichiarazione, rispettivamente. Questa forma di input-output èfree format I / O, e si chiama list-directed input Output.

L'I / O semplice in formato libero ha la forma:

read(*,*) item1, item2, item3...
print *, item1, item2, item3
write(*,*) item1, item2, item3...

Tuttavia, l'I / O formattato offre maggiore flessibilità sul trasferimento dei dati.

Input output formattato

L'output di input formattato ha la sintassi come segue:

read fmt, variable_list 
print fmt, variable_list 
write fmt, variable_list

Dove,

  • fmt è la specifica del formato

  • lista-variabili è un elenco delle variabili da leggere dalla tastiera o da scrivere sullo schermo

La specifica del formato definisce il modo in cui vengono visualizzati i dati formattati. Consiste in una stringa, contenente un elenco di fileedit descriptors tra parentesi.

Un edit descriptor specifica il formato esatto, ad esempio larghezza, cifre dopo il punto decimale ecc., in cui vengono visualizzati caratteri e numeri.

Per esempio

Print "(f6.3)", pi

La tabella seguente descrive i descrittori:

Descrittore Descrizione Esempio
io

Viene utilizzato per l'output di numeri interi. Questo assume la forma "rIw.m" dove i significati di r, w e m sono riportati nella tabella sottostante. I valori interi sono correttamente giustificati nei loro campi. Se la larghezza del campo non è abbastanza grande da contenere un numero intero, il campo viene riempito con asterischi.

print "(3i5)", i, j, k
F

Viene utilizzato per l'output di numeri reali. Questo assume la forma "rFw.d" dove i significati di r, w e d sono riportati nella tabella sottostante. I valori reali sono giustamente giustificati nei loro campi. Se la larghezza del campo non è abbastanza grande da contenere il numero reale, il campo viene riempito con asterischi.

print "(f12.3)", pi
E

Viene utilizzato per l'output reale in notazione esponenziale. L'istruzione descrittiva "E" assume la forma "rEw.d" dove i significati di r, wed sono forniti nella tabella sottostante. I valori reali sono giustamente giustificati nei loro campi. Se la larghezza del campo non è abbastanza grande da contenere il numero reale, il campo viene riempito con asterischi.

Si noti che, per stampare un numero reale con tre cifre decimali, è necessaria una larghezza di campo di almeno dieci. Uno per il segno della mantissa, due per lo zero, quattro per la mantissa e due per l'esponente stesso. In generale, w ≥ d + 7.

print "(e10.3)", 123456.0 restituisce '0.123e + 06'
ES

Viene utilizzato per l'output reale (notazione scientifica). Questo assume la forma "rESw.d" dove i significati di r, w e d sono indicati nella tabella sottostante. Il descrittore "E" descritto sopra differisce leggermente dalla tradizionale "notazione scientifica" ben nota. La notazione scientifica ha la mantissa nell'intervallo da 1.0 a 10.0 a differenza del descrittore E che ha la mantissa nell'intervallo da 0.1 a 1.0. I valori reali sono giustamente giustificati nei loro campi. Se la larghezza del campo non è abbastanza grande da contenere il numero reale, il campo viene riempito con asterischi. Anche qui, il campo della larghezza deve soddisfare l'espressione w ≥ d + 7

print "(es10.3)", 123456.0 restituisce "1.235e + 05"
UN

Viene utilizzato per l'output dei caratteri. Questo assume la forma "rAw" dove i significati di r e w sono riportati nella tabella sottostante. I tipi di carattere sono giustamente giustificati nei loro campi. Se la larghezza del campo non è abbastanza grande da contenere la stringa di caratteri, il campo viene riempito con i primi caratteri "w" della stringa.

print "(a10)", str
X

Viene utilizzato per l'output di spazio. Questo assume la forma "nX" dove "n" è il numero di spazi desiderati.

print "(5x, a10)", str
/

Descrittore barra: utilizzato per inserire righe vuote. Questo assume la forma "/" e forza il successivo output di dati su una nuova riga.

print "(/, 5x, a10)", str

I seguenti simboli vengono utilizzati con i descrittori di formato:

Suor n Simbolo e descrizione
1

c

Numero di colonna

2

d

Numero di cifre a destra della cifra decimale per input o output reali

3

m

Numero minimo di cifre da visualizzare

4

n

Numero di spazi da saltare

5

r

Conteggio ripetizioni: il numero di volte per utilizzare un descrittore o un gruppo di descrittori

6

w

Larghezza campo: il numero di caratteri da utilizzare per l'input o l'output

Esempio 1

program printPi

   pi = 3.141592653589793238 
   
   Print "(f6.3)", pi 
   Print "(f10.7)", pi
   Print "(f20.15)", pi 
   Print "(e16.4)", pi/100 
   
end program printPi

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

3.142
3.1415927
3.141592741012573
0.3142E-01

Esempio 2

program printName
implicit none

   character (len = 15) :: first_name
   print *,' Enter your first name.' 
   print *,' Up to 20 characters, please'
   
   read *,first_name 
   print "(1x,a)",first_name
   
end program printName

Quando il codice sopra viene compilato ed eseguito, produce il seguente risultato: (supponiamo che l'utente inserisca il nome Zara)

Enter your first name.
Up to 20 characters, please
Zara

Esempio 3

program formattedPrint
implicit none

   real :: c = 1.2786456e-9, d = 0.1234567e3 
   integer :: n = 300789, k = 45, i = 2
   character (len=15) :: str="Tutorials Point"
   
   print "(i6)", k 
   print "(i6.3)", k 
   print "(3i10)", n, k, i 
   print "(i10,i3,i5)", n, k, i 
   print "(a15)",str 
   print "(f12.3)", d
   print "(e12.4)", c 
   print '(/,3x,"n = ",i6, 3x, "d = ",f7.4)', n, d
   
end program formattedPrint

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

45
045
300789 45  2
300789 45  2
Tutorials Point
123.457
0.1279E-08

n = 300789 d = *******

La dichiarazione di formato

L'istruzione format consente di combinare e abbinare caratteri, numeri interi e output reali in un'unica istruzione. Il seguente esempio lo dimostra:

program productDetails 
implicit none 

   character (len = 15) :: name
   integer :: id 
   real :: weight
   name = 'Ardupilot'
   id = 1
   weight = 0.08
   
   print *,' The product details are' 
   
   print 100
   100 format (7x,'Name:', 7x, 'Id:', 1x, 'Weight:')
   
   print 200, name, id, weight 
   200 format(1x, a, 2x, i3, 2x, f5.2) 
   
end program productDetails

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

The product details are
Name:       Id:    Weight:
Ardupilot   1       0.08