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

  1. 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.
  2. Sintaxis de Subrutina: La estructura básica de una subrutina incluye la declaración, el cuerpo y la terminación.
  3. Llamada a Subrutina: Cómo invocar una subrutina desde el programa principal o desde otras subrutinas.
  4. 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

  1. Programa Principal:

    • Se declaran las variables largo, ancho y area.
    • Se solicita al usuario que ingrese las dimensiones del rectángulo.
    • Se llama a la subrutina calcular_area_rectangulo pasando largo, ancho y area como argumentos.
    • Se imprime el área calculada.
  2. Subrutina calcular_area_rectangulo:

    • Se declaran los argumentos l, a y resultado con sus respectivos modos (INTENT(IN) para entrada y INTENT(OUT) para salida).
    • Se calcula el área multiplicando l por a y se almacena en resultado.

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

  1. No Declarar IMPLICIT NONE: Siempre usa IMPLICIT NONE para evitar errores de tipografía en las variables.
  2. No Especificar INTENT: Especifica siempre INTENT(IN), INTENT(OUT) o INTENT(INOUT) para los argumentos de la subrutina.
  3. 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.

© Copyright 2024. Todos los derechos reservados