En aquest tema, explorarem dos conceptes fonamentals en la programació: l'abast (scope) i la durada (lifetime) de les variables. Aquests conceptes determinen on i quan es poden utilitzar les variables en un programa Fortran.

  1. Abast de les Variables

L'abast d'una variable es refereix a la regió del codi on la variable és accessible. En Fortran, l'abast de les variables es pot dividir en dos tipus principals:

1.1. Abast Local

Les variables locals són aquelles que es declaren dins d'un bloc de codi, com ara una subrutina, una funció o un bloc DO. Aquestes variables només són accessibles dins del bloc on es declaren.

Exemple:

program main
    implicit none
    call exampleSubroutine()
contains
    subroutine exampleSubroutine()
        integer :: localVar
        localVar = 10
        print *, "Valor de localVar dins de la subrutina: ", localVar
    end subroutine exampleSubroutine
end program main

En aquest exemple, localVar és una variable local de la subrutina exampleSubroutine i no és accessible fora d'aquesta subrutina.

1.2. Abast Global

Les variables globals són aquelles que es declaren fora de qualsevol subrutina o funció, normalment al començament del programa o en un mòdul. Aquestes variables són accessibles des de qualsevol part del programa.

Exemple:

module globalModule
    implicit none
    integer :: globalVar
end module globalModule

program main
    use globalModule
    implicit none
    globalVar = 20
    call exampleSubroutine()
    print *, "Valor de globalVar en el programa principal: ", globalVar
contains
    subroutine exampleSubroutine()
        use globalModule
        print *, "Valor de globalVar dins de la subrutina: ", globalVar
    end subroutine exampleSubroutine
end program main

En aquest exemple, globalVar és una variable global declarada en el mòdul globalModule i és accessible tant des del programa principal com des de la subrutina exampleSubroutine.

  1. Durada de les Variables

La durada d'una variable es refereix al temps durant el qual la variable existeix en la memòria durant l'execució del programa. En Fortran, la durada de les variables es pot dividir en dos tipus principals:

2.1. Durada Automàtica

Les variables automàtiques són aquelles que es creen quan s'entra en el bloc de codi on es declaren i es destrueixen quan se surt d'aquest bloc. Aquest és el comportament per defecte de les variables locals.

Exemple:

program main
    implicit none
    call exampleSubroutine()
contains
    subroutine exampleSubroutine()
        integer :: localVar
        localVar = 10
        print *, "Valor de localVar dins de la subrutina: ", localVar
    end subroutine exampleSubroutine
end program main

En aquest exemple, localVar es crea quan s'entra en la subrutina exampleSubroutine i es destrueix quan se surt d'aquesta subrutina.

2.2. Durada Estàtica

Les variables estàtiques són aquelles que es mantenen en la memòria durant tota l'execució del programa. Aquestes variables es poden declarar utilitzant l'atribut save.

Exemple:

program main
    implicit none
    call exampleSubroutine()
    call exampleSubroutine()
contains
    subroutine exampleSubroutine()
        integer, save :: staticVar = 0
        staticVar = staticVar + 1
        print *, "Valor de staticVar dins de la subrutina: ", staticVar
    end subroutine exampleSubroutine
end program main

En aquest exemple, staticVar és una variable estàtica que conserva el seu valor entre les crides a la subrutina exampleSubroutine.

Exercicis Pràctics

Exercici 1: Variables Locals i Globals

  1. Declara una variable global globalCounter en un mòdul.
  2. Escriu una subrutina que incrementi globalCounter i imprimeixi el seu valor.
  3. Crida la subrutina diverses vegades des del programa principal i observa el valor de globalCounter.

Solució:

module counterModule
    implicit none
    integer :: globalCounter = 0
end module counterModule

program main
    use counterModule
    implicit none
    call incrementCounter()
    call incrementCounter()
    call incrementCounter()
contains
    subroutine incrementCounter()
        use counterModule
        globalCounter = globalCounter + 1
        print *, "Valor de globalCounter: ", globalCounter
    end subroutine incrementCounter
end program main

Exercici 2: Variables Estàtiques

  1. Escriu una subrutina que utilitzi una variable estàtica per comptar el nombre de vegades que s'ha cridat.
  2. Crida la subrutina diverses vegades des del programa principal i imprimeix el nombre de crides.

Solució:

program main
    implicit none
    call countCalls()
    call countCalls()
    call countCalls()
contains
    subroutine countCalls()
        integer, save :: callCount = 0
        callCount = callCount + 1
        print *, "Nombre de crides a la subrutina: ", callCount
    end subroutine countCalls
end program main

Conclusió

En aquesta secció, hem après sobre l'abast i la durada de les variables en Fortran. Hem vist com les variables locals i globals tenen diferents àmbits d'aplicació i com les variables automàtiques i estàtiques tenen diferents durades de vida. Aquests conceptes són fonamentals per escriure codi Fortran eficient i mantenible. En la propera secció, explorarem les estructures de dades avançades en Fortran.

© Copyright 2024. Tots els drets reservats