En aquest tema, aprendrem com gestionar l'entrada i la sortida (I/O) en Fortran. La capacitat de llegir dades des de l'usuari o des de fitxers, així com escriure resultats, és fonamental per a qualsevol programa. Fortran proporciona diverses instruccions per a la gestió d'I/O que veurem a continuació.
Conceptes Clau
-
Instruccions de Lectura i Escriptura:
READ
: Per llegir dades des de l'entrada estàndard o des de fitxers.WRITE
: Per escriure dades a la sortida estàndard o a fitxers.
-
Unitats de Fitxer:
- Les unitats de fitxer són identificadors numèrics que Fortran utilitza per referir-se a fitxers oberts.
-
Format d'I/O:
- Fortran permet especificar formats per a l'entrada i la sortida de dades, controlant com es llegeixen o escriuen els valors.
Instruccions Bàsiques d'I/O
READ
i WRITE
Les instruccions READ
i WRITE
són les més utilitzades per a la gestió d'I/O en Fortran. A continuació, es mostren exemples bàsics de com utilitzar aquestes instruccions.
Exemple de READ
i WRITE
amb Entrada i Sortida Estàndard
PROGRAM IOExample IMPLICIT NONE INTEGER :: num REAL :: val ! Llegir un enter des de l'entrada estàndard PRINT *, 'Introdueix un número enter:' READ *, num ! Llegir un real des de l'entrada estàndard PRINT *, 'Introdueix un número real:' READ *, val ! Escriure els valors llegits a la sortida estàndard PRINT *, 'Has introduït l''enter:', num PRINT *, 'Has introduït el real:', val END PROGRAM IOExample
Format d'I/O
Fortran permet especificar formats per a l'entrada i la sortida de dades. Això és útil per controlar com es mostren els valors.
Exemple de Format d'I/O
PROGRAM IOFormatExample IMPLICIT NONE INTEGER :: num REAL :: val ! Llegir un enter i un real des de l'entrada estàndard PRINT *, 'Introdueix un número enter i un número real:' READ *, num, val ! Escriure els valors amb format PRINT '(A, I5)', 'Enter: ', num PRINT '(A, F10.2)', 'Real: ', val END PROGRAM IOFormatExample
En aquest exemple, I5
especifica un enter amb un ample de 5 caràcters, i F10.2
especifica un real amb un ample de 10 caràcters i 2 decimals.
Gestió de Fitxers
Obrir i Tancar Fitxers
Per treballar amb fitxers, primer cal obrir-los utilitzant la instrucció OPEN
i tancar-los amb la instrucció CLOSE
.
Exemple d'Obrir i Tancar Fitxers
PROGRAM FileIOExample IMPLICIT NONE INTEGER :: unit_num, i REAL :: data(5) ! Assignar una unitat de fitxer unit_num = 10 ! Obrir el fitxer per escriure OPEN(unit=unit_num, file='output.txt', status='unknown') ! Escriure dades al fitxer DO i = 1, 5 data(i) = i * 1.1 WRITE(unit_num, *) data(i) END DO ! Tancar el fitxer CLOSE(unit_num) END PROGRAM FileIOExample
Llegir des de Fitxers
Per llegir dades des d'un fitxer, utilitzem la instrucció READ
amb la unitat de fitxer corresponent.
Exemple de Lectura des de Fitxers
PROGRAM FileReadExample IMPLICIT NONE INTEGER :: unit_num, i REAL :: data(5) ! Assignar una unitat de fitxer unit_num = 10 ! Obrir el fitxer per llegir OPEN(unit=unit_num, file='output.txt', status='old') ! Llegir dades del fitxer DO i = 1, 5 READ(unit_num, *) data(i) END DO ! Escriure les dades llegides a la sortida estàndard PRINT *, 'Dades llegides del fitxer:' DO i = 1, 5 PRINT *, data(i) END DO ! Tancar el fitxer CLOSE(unit_num) END PROGRAM FileReadExample
Exercicis Pràctics
Exercici 1: Lectura i Escriptura Bàsica
Escriu un programa que llegeixi un nom i una edat des de l'entrada estàndard i després escrigui aquests valors a la sortida estàndard.
Solució
PROGRAM BasicIOExercise IMPLICIT NONE CHARACTER(LEN=50) :: name INTEGER :: age ! Llegir el nom i l'edat des de l'entrada estàndard PRINT *, 'Introdueix el teu nom:' READ *, name PRINT *, 'Introdueix la teva edat:' READ *, age ! Escriure el nom i l'edat a la sortida estàndard PRINT *, 'Nom:', name PRINT *, 'Edat:', age END PROGRAM BasicIOExercise
Exercici 2: Gestió de Fitxers
Escriu un programa que llegeixi 10 números enters des d'un fitxer anomenat input.txt
i escrigui aquests números a un fitxer anomenat output.txt
.
Solució
PROGRAM FileIOExercise IMPLICIT NONE INTEGER :: unit_in, unit_out, i INTEGER :: numbers(10) ! Assignar unitats de fitxer unit_in = 10 unit_out = 20 ! Obrir el fitxer d'entrada per llegir OPEN(unit=unit_in, file='input.txt', status='old') ! Llegir números del fitxer d'entrada DO i = 1, 10 READ(unit_in, *) numbers(i) END DO ! Tancar el fitxer d'entrada CLOSE(unit_in) ! Obrir el fitxer de sortida per escriure OPEN(unit=unit_out, file='output.txt', status='unknown') ! Escriure números al fitxer de sortida DO i = 1, 10 WRITE(unit_out, *) numbers(i) END DO ! Tancar el fitxer de sortida CLOSE(unit_out) END PROGRAM FileIOExercise
Resum
En aquesta secció, hem après els conceptes bàsics de la gestió d'entrada i sortida en Fortran, incloent les instruccions READ
i WRITE
, la gestió de fitxers amb OPEN
i CLOSE
, i com especificar formats per a l'I/O. També hem vist exemples pràctics i exercicis per reforçar aquests conceptes. En el següent tema, explorarem les estructures de control, començant per les sentències IF
.
Curs de Programació en Fortran
Mòdul 1: Introducció a Fortran
- Introducció a Fortran
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Escrivint el teu Primer Programa en Fortran
Mòdul 2: Conceptes Bàsics
- Variables i Tipus de Dades
- Operadors i Expressions
- Entrada i Sortida
- Estructures de Control: Sentències If
- Estructures de Control: Bucles
Mòdul 3: Arrays i Cadenes
Mòdul 4: Procediments i Funcions
Mòdul 5: Estructures de Dades Avançades
Mòdul 6: Gestió de Fitxers
Mòdul 7: Temes Avançats
Mòdul 8: Millors Pràctiques i Optimització
- Tècniques d'Optimització de Codi
- Depuració i Perfilat
- Escrivint Codi Mantenible
- Estàndards i Portabilitat de Fortran