Introducció
En aquest tema, explorarem els estàndards de Fortran i com assegurar la portabilitat del codi. La portabilitat és crucial per garantir que el codi escrit en Fortran pugui ser executat en diferents plataformes i compiladors sense necessitat de modificacions significatives.
Estàndards de Fortran
Fortran ha evolucionat significativament des de la seva creació, amb diverses versions estandarditzades. A continuació, es presenten els principals estàndards de Fortran:
- Fortran 66 (ANSI X3.9-1966): La primera versió estandarditzada de Fortran.
- Fortran 77 (ANSI X3.9-1978): Introducció de noves estructures de control i millores en la gestió de cadenes.
- Fortran 90 (ISO/IEC 1539:1991): Introducció de programació modular, arrays dinàmics, i altres característiques modernes.
- Fortran 95 (ISO/IEC 1539-1:1997): Millores en la programació paral·lela i altres refinaments.
- Fortran 2003 (ISO/IEC 1539-1:2004): Suport per a programació orientada a objectes i interoperabilitat amb C.
- Fortran 2008 (ISO/IEC 1539-1:2010): Millores en la programació paral·lela amb coarrays.
- Fortran 2018 (ISO/IEC 1539-1:2018): Millores addicionals en la programació paral·lela i altres característiques.
Taula de Comparació d'Estàndards
Estàndard | Any | Característiques Clau |
---|---|---|
Fortran 66 | 1966 | Primera versió estandarditzada |
Fortran 77 | 1978 | Estructures de control, millores en cadenes |
Fortran 90 | 1991 | Programació modular, arrays dinàmics |
Fortran 95 | 1997 | Millores en programació paral·lela |
Fortran 2003 | 2004 | Programació orientada a objectes, interoperabilitat amb C |
Fortran 2008 | 2010 | Programació paral·lela amb coarrays |
Fortran 2018 | 2018 | Millores en programació paral·lela i altres característiques |
Portabilitat del Codi
Bones Pràctiques per a la Portabilitat
- Adherir-se als Estàndards: Utilitza característiques estandarditzades de Fortran per assegurar la compatibilitat entre diferents compiladors.
- Evitar Extensions del Compilador: Les extensions específiques del compilador poden no ser compatibles amb altres compiladors.
- Proves en Diversos Compiladors: Prova el teu codi en diversos compiladors per assegurar la seva portabilitat.
- Documentació Clara: Documenta clarament el codi, incloent les dependències i les versions de Fortran utilitzades.
- Utilitzar Mòduls: Els mòduls ajuden a organitzar el codi i milloren la seva portabilitat.
Exemple Pràctic
A continuació, es presenta un exemple de codi que segueix les bones pràctiques per a la portabilitat:
module math_operations implicit none contains function add(a, b) real, intent(in) :: a, b real :: add add = a + b end function add function subtract(a, b) real, intent(in) :: a, b real :: subtract subtract = a - b end function subtract end module math_operations program main use math_operations implicit none real :: x, y, result x = 5.0 y = 3.0 result = add(x, y) print *, 'Sum: ', result result = subtract(x, y) print *, 'Difference: ', result end program main
Explicació del Codi
- Mòdul
math_operations
: Defineix un mòdul que conté dues funcions,add
isubtract
, per sumar i restar dos nombres reals. - Funcions
add
isubtract
: Cada funció pren dos arguments reals i retorna el resultat de l'operació. - Programa Principal
main
: Utilitza el mòdulmath_operations
per realitzar operacions de suma i resta, i imprimeix els resultats.
Exercicis Pràctics
Exercici 1: Crear un Mòdul de Multiplicació i Divisió
- Crea un mòdul anomenat
advanced_math
que contingui funcions per multiplicar i dividir dos nombres reals. - Escriu un programa principal que utilitzi aquest mòdul per realitzar operacions de multiplicació i divisió.
Solució
module advanced_math implicit none contains function multiply(a, b) real, intent(in) :: a, b real :: multiply multiply = a * b end function multiply function divide(a, b) real, intent(in) :: a, b real :: divide if (b /= 0.0) then divide = a / b else print *, 'Error: Division by zero' divide = 0.0 end if end function divide end module advanced_math program main use advanced_math implicit none real :: x, y, result x = 6.0 y = 2.0 result = multiply(x, y) print *, 'Product: ', result result = divide(x, y) print *, 'Quotient: ', result end program main
Exercici 2: Provar el Codi en Diversos Compiladors
- Prova el codi de l'exercici anterior en almenys dos compiladors diferents (per exemple, gfortran i ifort).
- Documenta qualsevol problema de compatibilitat i com es va resoldre.
Conclusió
En aquesta secció, hem explorat els estàndards de Fortran i com assegurar la portabilitat del codi. Seguint les bones pràctiques i utilitzant característiques estandarditzades, podem escriure codi que sigui compatible amb diversos compiladors i plataformes. La portabilitat és essencial per al desenvolupament de programari robust i mantenible.
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