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
- 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).
- Tipos de Argumentos: Los argumentos pueden ser de cualquier tipo de datos, incluyendo tipos primitivos (enteros, reales, caracteres) y tipos derivados.
- 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 mainExplicación del Código
- Declaración del Programa Principal: El programa principal
maindeclara tres variables enterasa,byresult. - Asignación de Valores: Se asignan valores a
ayb. - Llamada a la Subrutina: La subrutina
sum_numbersse llama cona,byresultcomo argumentos. - Definición de la Subrutina: La subrutina
sum_numbersse define dentro de la seccióncontainsdel programa principal.intent(in): Indica quexyyson argumentos de entrada.intent(out): Indica quesumes un argumento de salida.
- Cálculo de la Suma: La subrutina calcula la suma de
xyyy asigna el resultado asum.
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 mainExplicación del Código
- Declaración del Programa Principal: El programa principal
maindeclara dos variables realesradiusyarea. - Asignación de Valor al Radio: Se asigna un valor al radio.
- Llamada a la Función: La función
circle_arease llama conradiuscomo argumento y su resultado se asigna aarea. - Definición de la Función: La función
circle_arease define dentro de la seccióncontainsdel programa principal.intent(in): Indica queres un argumento de entrada.result(area): Especifica que el resultado de la función se almacenará enarea.
- 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 mainEjercicio 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 mainResumen
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.
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
