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

  1. 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.
  2. Unitats de Fitxer:

    • Les unitats de fitxer són identificadors numèrics que Fortran utilitza per referir-se a fitxers oberts.
  3. 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.

© Copyright 2024. Tots els drets reservats