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_subrutina
Exemple
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 suma
En 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_suma
Exemple 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_area
Exercicis 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_perimetre
Exercici 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 intercanvia
Conclusió
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