Las subrutinas en Fortran son bloques de código reutilizables que permiten organizar y modularizar programas complejos. Las subrutinas pueden recibir argumentos, realizar operaciones y devolver resultados. Este enfoque facilita la lectura, el mantenimiento y la depuración del código.
Conceptos Clave
- Definición de Subrutina: Una subrutina es un bloque de código que realiza una tarea específica y puede ser llamado desde cualquier parte del programa.
- Sintaxis de Subrutina: La estructura básica de una subrutina incluye la declaración, el cuerpo y la terminación.
- Llamada a Subrutina: Cómo invocar una subrutina desde el programa principal o desde otras subrutinas.
- Argumentos de Subrutina: Cómo pasar datos a una subrutina y cómo recibir resultados.
Sintaxis de una Subrutina
La sintaxis básica para definir una subrutina en Fortran es la siguiente:
SUBROUTINE nombre_subrutina(argumentos) ! Declaraciones de variables locales ! Cuerpo de la subrutina END SUBROUTINE nombre_subrutina
Ejemplo Práctico
Vamos a crear una subrutina simple que calcule el área de un rectángulo.
PROGRAM calcular_area IMPLICIT NONE REAL :: largo, ancho, area ! Solicitar al usuario las dimensiones del rectángulo PRINT *, 'Ingrese el largo del rectángulo:' READ *, largo PRINT *, 'Ingrese el ancho del rectángulo:' READ *, ancho ! Llamar a la subrutina para calcular el área CALL calcular_area_rectangulo(largo, ancho, area) ! Mostrar el resultado PRINT *, 'El área del rectángulo es:', area END PROGRAM calcular_area SUBROUTINE calcular_area_rectangulo(l, a, resultado) IMPLICIT NONE REAL, INTENT(IN) :: l, a REAL, INTENT(OUT) :: resultado ! Calcular el área resultado = l * a END SUBROUTINE calcular_area_rectangulo
Explicación del Código
-
Programa Principal:
- Se declaran las variables
largo
,ancho
yarea
. - Se solicita al usuario que ingrese las dimensiones del rectángulo.
- Se llama a la subrutina
calcular_area_rectangulo
pasandolargo
,ancho
yarea
como argumentos. - Se imprime el área calculada.
- Se declaran las variables
-
Subrutina
calcular_area_rectangulo
:- Se declaran los argumentos
l
,a
yresultado
con sus respectivos modos (INTENT(IN)
para entrada yINTENT(OUT)
para salida). - Se calcula el área multiplicando
l
pora
y se almacena enresultado
.
- Se declaran los argumentos
Ejercicios Prácticos
Ejercicio 1: Subrutina para Calcular el Perímetro de un Rectángulo
Escribe una subrutina que calcule el perímetro de un rectángulo. El programa principal debe solicitar al usuario las dimensiones del rectángulo y luego llamar a la subrutina para calcular el perímetro.
Solución
PROGRAM calcular_perimetro IMPLICIT NONE REAL :: largo, ancho, perimetro ! Solicitar al usuario las dimensiones del rectángulo PRINT *, 'Ingrese el largo del rectángulo:' READ *, largo PRINT *, 'Ingrese el ancho del rectángulo:' READ *, ancho ! Llamar a la subrutina para calcular el perímetro CALL calcular_perimetro_rectangulo(largo, ancho, perimetro) ! Mostrar el resultado PRINT *, 'El perímetro del rectángulo es:', perimetro END PROGRAM calcular_perimetro SUBROUTINE calcular_perimetro_rectangulo(l, a, resultado) IMPLICIT NONE REAL, INTENT(IN) :: l, a REAL, INTENT(OUT) :: resultado ! Calcular el perímetro resultado = 2 * (l + a) END SUBROUTINE calcular_perimetro_rectangulo
Ejercicio 2: Subrutina para Convertir Temperaturas
Escribe una subrutina que convierta una temperatura de grados Celsius a Fahrenheit. El programa principal debe solicitar al usuario la temperatura en grados Celsius y luego llamar a la subrutina para realizar la conversión.
Solución
PROGRAM convertir_temperatura IMPLICIT NONE REAL :: celsius, fahrenheit ! Solicitar al usuario la temperatura en grados Celsius PRINT *, 'Ingrese la temperatura en grados Celsius:' READ *, celsius ! Llamar a la subrutina para convertir a Fahrenheit CALL celsius_a_fahrenheit(celsius, fahrenheit) ! Mostrar el resultado PRINT *, 'La temperatura en grados Fahrenheit es:', fahrenheit END PROGRAM convertir_temperatura SUBROUTINE celsius_a_fahrenheit(c, f) IMPLICIT NONE REAL, INTENT(IN) :: c REAL, INTENT(OUT) :: f ! Convertir a Fahrenheit f = (c * 9.0 / 5.0) + 32.0 END SUBROUTINE celsius_a_fahrenheit
Errores Comunes y Consejos
- No Declarar
IMPLICIT NONE
: Siempre usaIMPLICIT NONE
para evitar errores de tipografía en las variables. - No Especificar
INTENT
: Especifica siempreINTENT(IN)
,INTENT(OUT)
oINTENT(INOUT)
para los argumentos de la subrutina. - No Inicializar Variables: Asegúrate de inicializar las variables antes de usarlas en cálculos.
Conclusión
Las subrutinas son una herramienta poderosa en Fortran para organizar y modularizar el código. Permiten la reutilización de código y facilitan la lectura y el mantenimiento del programa. En este módulo, hemos aprendido a definir, llamar y utilizar subrutinas con ejemplos prácticos y ejercicios. En el siguiente tema, exploraremos las funciones en Fortran, que son similares a las subrutinas pero están diseñadas para devolver un valor.
Curso de Programación en Fortran
Módulo 1: Introducción a Fortran
- Introducción a Fortran
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Escribiendo tu Primer Programa en Fortran
Módulo 2: Conceptos Básicos
- Variables y Tipos de Datos
- Operadores y Expresiones
- Entrada y Salida
- Estructuras de Control: Sentencias If
- Estructuras de Control: Bucles
Módulo 3: Arreglos y Cadenas
- Introducción a los Arreglos
- Arreglos Multidimensionales
- Manejo de Cadenas
- Operaciones con Arreglos y Cadenas
Módulo 4: Procedimientos y Funciones
Módulo 5: Estructuras de Datos Avanzadas
Módulo 6: Manejo de Archivos
- Lectura de Archivos
- Escritura de Archivos
- Posicionamiento de Archivos
- Operaciones con Archivos Binarios
Módulo 7: Temas Avanzados
Módulo 8: Mejores Prácticas y Optimización
- Técnicas de Optimización de Código
- Depuración y Perfilado
- Escribiendo Código Mantenible
- Estándares y Portabilidad de Fortran