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_subrutinaEjemplo 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_rectanguloExplicación del Código
-
Programa Principal:
- Se declaran las variables
largo,anchoyarea. - Se solicita al usuario que ingrese las dimensiones del rectángulo.
- Se llama a la subrutina
calcular_area_rectangulopasandolargo,anchoyareacomo argumentos. - Se imprime el área calculada.
- Se declaran las variables
-
Subrutina
calcular_area_rectangulo:- Se declaran los argumentos
l,ayresultadocon sus respectivos modos (INTENT(IN)para entrada yINTENT(OUT)para salida). - Se calcula el área multiplicando
lporay 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_rectanguloEjercicio 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_fahrenheitErrores Comunes y Consejos
- No Declarar
IMPLICIT NONE: Siempre usaIMPLICIT NONEpara 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
