En Fortran, los procedimientos (subrutinas y funciones) pueden recibir datos de entrada y devolver resultados a través de argumentos. Este mecanismo es fundamental para escribir programas modulares y reutilizables. En esta sección, aprenderemos cómo pasar argumentos a subrutinas y funciones, y cómo manejar estos argumentos dentro de los procedimientos.

Conceptos Clave

  1. Argumentos de Entrada y Salida: Los argumentos pueden ser utilizados para pasar datos a un procedimiento (entrada) y para recibir datos de un procedimiento (salida).
  2. Tipos de Argumentos: Los argumentos pueden ser de cualquier tipo de datos, incluyendo tipos primitivos (enteros, reales, caracteres) y tipos derivados.
  3. Paso por Valor y Referencia: En Fortran, los argumentos se pasan por referencia de manera predeterminada, lo que significa que el procedimiento puede modificar el valor de los argumentos originales.

Ejemplo Básico: Subrutina con Argumentos

Veamos un ejemplo simple de una subrutina que recibe dos números enteros y devuelve su suma.

program main
    implicit none
    integer :: a, b, result

    ! Asignar valores a las variables
    a = 5
    b = 10

    ! Llamar a la subrutina para sumar los números
    call sum_numbers(a, b, result)

    ! Imprimir el resultado
    print *, "La suma de ", a, " y ", b, " es ", result

contains

    subroutine sum_numbers(x, y, sum)
        integer, intent(in) :: x, y
        integer, intent(out) :: sum

        ! Calcular la suma
        sum = x + y
    end subroutine sum_numbers

end program main

Explicación del Código

  1. Declaración del Programa Principal: El programa principal main declara tres variables enteras a, b y result.
  2. Asignación de Valores: Se asignan valores a a y b.
  3. Llamada a la Subrutina: La subrutina sum_numbers se llama con a, b y result como argumentos.
  4. Definición de la Subrutina: La subrutina sum_numbers se define dentro de la sección contains del programa principal.
    • intent(in): Indica que x y y son argumentos de entrada.
    • intent(out): Indica que sum es un argumento de salida.
  5. Cálculo de la Suma: La subrutina calcula la suma de x y y y asigna el resultado a sum.

Ejemplo Avanzado: Función con Argumentos

Ahora, veamos un ejemplo de una función que calcula el área de un círculo dado su radio.

program main
    implicit none
    real :: radius, area

    ! Asignar valor al radio
    radius = 5.0

    ! Llamar a la función para calcular el área
    area = circle_area(radius)

    ! Imprimir el resultado
    print *, "El área del círculo con radio ", radius, " es ", area

contains

    function circle_area(r) result(area)
        real, intent(in) :: r
        real :: area
        real, parameter :: pi = 3.14159

        ! Calcular el área
        area = pi * r * r
    end function circle_area

end program main

Explicación del Código

  1. Declaración del Programa Principal: El programa principal main declara dos variables reales radius y area.
  2. Asignación de Valor al Radio: Se asigna un valor al radio.
  3. Llamada a la Función: La función circle_area se llama con radius como argumento y su resultado se asigna a area.
  4. Definición de la Función: La función circle_area se define dentro de la sección contains del programa principal.
    • intent(in): Indica que r es un argumento de entrada.
    • result(area): Especifica que el resultado de la función se almacenará en area.
  5. Cálculo del Área: La función calcula el área del círculo usando la fórmula πr².

Ejercicios Prácticos

Ejercicio 1: Producto de Dos Números

Escribe una subrutina que reciba dos números reales y devuelva su producto.

Solución:

program main
    implicit none
    real :: x, y, product

    ! Asignar valores a las variables
    x = 3.0
    y = 4.0

    ! Llamar a la subrutina para calcular el producto
    call multiply_numbers(x, y, product)

    ! Imprimir el resultado
    print *, "El producto de ", x, " y ", y, " es ", product

contains

    subroutine multiply_numbers(a, b, result)
        real, intent(in) :: a, b
        real, intent(out) :: result

        ! Calcular el producto
        result = a * b
    end subroutine multiply_numbers

end program main

Ejercicio 2: Promedio de Tres Números

Escribe una función que reciba tres números reales y devuelva su promedio.

Solución:

program main
    implicit none
    real :: num1, num2, num3, avg

    ! Asignar valores a las variables
    num1 = 5.0
    num2 = 10.0
    num3 = 15.0

    ! Llamar a la función para calcular el promedio
    avg = average(num1, num2, num3)

    ! Imprimir el resultado
    print *, "El promedio de ", num1, ", ", num2, " y ", num3, " es ", avg

contains

    function average(a, b, c) result(avg)
        real, intent(in) :: a, b, c
        real :: avg

        ! Calcular el promedio
        avg = (a + b + c) / 3.0
    end function average

end program main

Resumen

En esta sección, hemos aprendido cómo pasar argumentos a subrutinas y funciones en Fortran. Hemos visto ejemplos prácticos de cómo utilizar argumentos de entrada y salida, y cómo definir y llamar a subrutinas y funciones. Además, hemos practicado con ejercicios para reforzar estos conceptos. En la siguiente sección, exploraremos el alcance y la vida útil de las variables en Fortran.

© Copyright 2024. Todos los derechos reservados