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