Les subrutines són blocs de codi reutilitzables que permeten estructurar i modularitzar els programes en Fortran. Aquestes són similars a les funcions en altres llenguatges de programació, però no necessàriament han de retornar un valor. Les subrutines són útils per dividir el codi en parts més petites i manejables, facilitant la seva lectura, manteniment i depuració.
Continguts
Definició de Subrutines
Una subrutina en Fortran es defineix utilitzant les paraules clau subroutine i end subroutine. La sintaxi bàsica és la següent:
subroutine nom_subrutina(arguments)
! Declaracions de variables locals
! Cos de la subrutina
end subroutine nom_subrutinaExemple
Crida a Subrutines
Per cridar una subrutina, simplement utilitzem la paraula clau call seguida del nom de la subrutina i els arguments (si n'hi ha).
Exemple
Passant Arguments a Subrutines
Les subrutines poden rebre arguments que es passen per valor o per referència. Els arguments es defineixen a la llista d'arguments de la subrutina.
Exemple
subroutine suma(a, b, resultat)
integer, intent(in) :: a, b
integer, intent(out) :: resultat
resultat = a + b
end subroutine sumaEn aquest exemple, a i b són arguments d'entrada, mentre que resultat és un argument de sortida.
Crida amb Arguments
program exemple_suma
integer :: x, y, z
x = 5
y = 10
call suma(x, y, z)
print *, "La suma és: ", z
end program exemple_sumaExemple Pràctic
A continuació, es presenta un exemple complet que utilitza una subrutina per calcular l'àrea d'un rectangle.
Codi
program area_rectangle
real :: llargada, amplada, area
! Assignació de valors
llargada = 5.0
amplada = 3.0
! Crida a la subrutina
call calcula_area(llargada, amplada, area)
! Mostra el resultat
print *, "L'àrea del rectangle és: ", area
end program area_rectangle
subroutine calcula_area(l, a, resultat)
real, intent(in) :: l, a
real, intent(out) :: resultat
resultat = l * a
end subroutine calcula_areaExercicis Pràctics
-
Exercici 1: Escriu una subrutina que calculi el perímetre d'un rectangle donada la llargada i l'amplada. Prova la subrutina en un programa principal.
-
Exercici 2: Escriu una subrutina que intercanviï els valors de dues variables. Prova la subrutina en un programa principal.
Solucions
Exercici 1
program perimetre_rectangle
real :: llargada, amplada, perimetre
! Assignació de valors
llargada = 5.0
amplada = 3.0
! Crida a la subrutina
call calcula_perimetre(llargada, amplada, perimetre)
! Mostra el resultat
print *, "El perímetre del rectangle és: ", perimetre
end program perimetre_rectangle
subroutine calcula_perimetre(l, a, resultat)
real, intent(in) :: l, a
real, intent(out) :: resultat
resultat = 2 * (l + a)
end subroutine calcula_perimetreExercici 2
program intercanvi_valors
integer :: x, y
! Assignació de valors
x = 10
y = 20
! Mostra els valors abans de l'intercanvi
print *, "Abans de l'intercanvi: x =", x, ", y =", y
! Crida a la subrutina
call intercanvia(x, y)
! Mostra els valors després de l'intercanvi
print *, "Després de l'intercanvi: x =", x, ", y =", y
end program intercanvi_valors
subroutine intercanvia(a, b)
integer, intent(inout) :: a, b
integer :: temp
temp = a
a = b
b = temp
end subroutine intercanviaConclusió
Les subrutines són una eina poderosa en Fortran per modularitzar i organitzar el codi. Permeten dividir el programa en parts més petites i manejables, facilitant la seva lectura i manteniment. En aquest tema, hem après a definir subrutines, cridar-les i passar arguments. També hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. En el següent tema, explorarem les funcions en Fortran, que són similars a les subrutines però amb algunes diferències clau.
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
