Вы находитесь на странице: 1из 34

Apuntes de Fortran

R. Moreira
8 de diciembre de 2008

Indice
1. Introduccin 2. Instrucciones Bsicas 2.1. Elementos bsicos de un programa en Fortran . 2.2. Compilacin y ejecucin en Fortran . . . . . . . 2.3. Subprograma principal . . . . . . . . . . . . . . 2.4. Constantes, variables y tipos de datos . . . . . 2.4.1. Tipos de datos . . . . . . . . . . . . . . 2.4.2. Declaracin de variables . . . . . . . . . 2.4.3. Operaciones elementales en FORTRAN 2.4.4. Conversin entre tipos . . . . . . . . . . 2.4.5. Operaciones de comparacin . . . . . . . 2.4.6. Operaciones lgicas . . . . . . . . . . . . 2.5. Funciones intrnsecas . . . . . . . . . . . . . . . 1 2 2 3 4 5 5 7 10 11 12 13 14 17 17 18 20 22 23 24 27 27 29 31

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

3. Control de ujo del programa 3.0.1. Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.0.2. IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.0.3. Control lgico de loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. Entrada y salida de datos bsico(input/output) 4.0.4. Unidades de entrada y salida . . . . . . . . . . . . . . . . . . . . . . . . . 4.0.5. Formato de entrada y salida . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Subprogramas 5.1. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Subrutinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3. Mdulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Captulo 1

Introduccin
En estos apuntes se presenta una breve introduccin a FORTRAN 90, el lenguaje de programacin de ms amplio uso en el cmputo cientco. El nombre FORTRAN proviene de FORmula TRANslator (traductor de frmulas), y fue desarrollado originalmente por IBM en 1954, con el objetivo de poder escribir programas de cmputo cientco en un lenguaje de alto nivel en vez de tener que recurrir a lenguaje de mquina o ensamblador. En 1958 se present una segunda versin y varias compaas comenzaron a desarrollar compiladores independientes a IBM para usar el lenguaje en otras mquinas. El primer estandard de FORTRAN se introdujo en 1962 y se llam FORTRAN IV. En 1966 se present el primer estandard ANSI (American National Standards Institute), que se conoci como FORTRAN 66. El segundo estandard ANSI, con muchas mejoras, se introdujo en 1977 (FORTRAN 77), y se convirti en el estndard utilizado por la comunidad cientca por muchos aos. Incluso a la fecha es comn encontrar muchos programas escritos en FORTRAN 77. FORTRAN 77 tena una serie de desventajas. Entre ellas una estructura muy rgida adaptada al uso de tarjetas perforadas (forma ja), que requera que ciertas columnas tuvieran usos especcos. Adems, no permita un uso dinmico de la memoria y no permita realizar operaciones entre arreglos de nmeros. Para mejorar esta situacin, en 1990 se present un tercer estndard ANSI conocido como FORTRAN 90, que contena muchas nuevas caractersticas y permita una programacin ms estructurada. Una serie de cambios menores se presentaron en 1995 (FORTRAN 95), y actualmente se trabaja en un nuevo estndard ANSI (FORTRAN 2003). El da de hoy la mayor parte de los programas en FORTRAN siguen el estndard de FORTRAN 90, pero an existe un nmero importante de aplicaciones de FORTRAN 77. FORTRAN esta especcamente diseado para el cmputo cientco, y no es particularmente bueno para otro tipo de aplicaciones (control, administracin, manejo de documentos, etc). Para estas aplicaciones otros lenguajes somo C, JAVA o PERL son ms adecuados. En la actualidad, la mayor parte del cmputo cientco de alto rendimiento a nivel internacional se lleva a cabo en FORTRAN (FORTRAN esta muy lejos de ser obsoleto), aunque los lenguajes C, C++, y JAVA han ganando cierta popularidad recientemente.

Captulo 2

Instrucciones Bsicas
2.1. Elementos bsicos de un programa en Fortran

Un programa en FORTRAN tiene los siguientes elementos bsicos: Nombre del programa. El nombre del programa es en realidad opcional, pero es muy buena idea tenerlo. Declaraciones de variables utilizadas en el programa. Cuerpo del programa. Comandos a ejecutar en el cdigo. Los comandos se ejecutan en orden de aparicin. El programa siempre debe terminar con el comando end. Subprogramas. El cuerpo del programa puede llamar a subprogramas que realicen tareas especcas. Es buena prctica de programacin separar un programa en bloques y poner cada bloque en diferentes subprogramas. De hecho, para programas largos es buena idea tener cada subprograma en archivos separados. La estructura de un comando en FORTRAN 90 tiene las siguientes propiedades: Los comandos se escriben en lneas de a lo ms 132 caracteres (aunque algunos compiladores aceptan lneas ms largas). Espacios en blanco al principio de una lnea se ignoran. Esto ayuda a mejorar visualmente la estructura del programa. Hay que recordar que no solo la mquina va a leer el programa, sino tambin seres humanos (por lo menos el autor), por lo que una estructura visualmente clara en importante. Un signo & al nal de una lnea indica que el comando continua en la lnea siguiente. Todo lo que siga de un signo ! se considera un comentario y es ignorado por el compilador. Los comentarios son para las personas, no para la mquina. Hacen ms fcil de entender el programa para personas que no lo escribieron, y sirven incluso para que el autor sepa lo que hace el programa si lo vuelve a ver tiempo despus.

CAPTULO 2. INSTRUCCIONES BSICAS Es posible poner varios comandos en una lnea separndolos con punto y coma ;.

Importante: FORTRAN no distingue entre maysculas y minsculas en un programa, tambin ignora ms de un espacio en blanco y lneas en blanco. Que se use es cuestin de estilo personal.

2.2.

Compilacin y ejecucin en Fortran

Los programas en FORTRAN se escriben en un editor de texto cualquiera (vi, emacs, etctera). Normalmente, el nombre del archivo debe llevar como sujo .f, o .f90. A este archivo se le llama el cdigo fuente". Una vez escrito el programa, este debe compilarse, es decir, debe ser ledo por un programa llamado compilador"que lo traduce a lenguaje de mquina y produce un nuevo archivo con el programa ejecutable. Algunos lenguajes de programacin no usan un compilador, sino un intrprete (por ejemplo BASIC y PERL). La diferencia es que un interprete traduce y ejecuta lnea por lnea, sin nunca crear un archivo ejecutable. Un interprete es ms transparente de usar, pero mucho ms lento. FORTRAN funciona siempre con un compilador. Hay muchos compiladores diferentes, con diversas opciones al compilar (por ejemplo, algunos preeren el sujo .f y otros el sujo .f90). Existe un compilador gratuito de FORTRAN 90 para Linux de producido por INTEL que puede bajarse de la red. La manera estandard de compilar un programa en FORTRAN es abrir una terminal, ir al directorio que contiene el programa, y escribir: > gfortran nombre1.f90 donde nombre1.f90 es el nombre del programa. Es importante notar que el comando gfotran puede variar de nombre, por ejemplo el compilador de INTEL usa el comando ifc o ifortran. Pero siempre es posible hacer un alias (ln gfortran NuevoNombre). Al compilar el programa se obtiene un ejecutable que tiene por default el nombre a.out. Esto puede cambiarse haciendo: > gfortran nombre1.f90 -o nombre2 La opcin -o le dice al compilador que el ejecutable debe llamarse nombre2. Para correr el programa se escribe simplemente > ./nombre2 donde se usa ./ para indicar a Linux que debe buscar el ejecutable en el directorio actual. Para programas que estn contenidos en varios archivos, hay una etapa ms. El compilador primero genera archivos objeto" con sujo .o que contienen la traduccin a lenguaje de mquina de cada archivo individual. Despus se hace una liga (link) entre los diversos archivos objeto para construir el ejecutable.

CAPTULO 2. INSTRUCCIONES BSICAS

2.3.

Subprograma principal

Para identicar y delimitar un subprograma principal se deben utilizar el par de instrucciones program y end program.
1 2 3 4 5 6 7 8 9 10 11

program <NombreDelPrograma> ! I n s t r u c c i o n e s no e j e c u t a b l e s . . . ! Instrucciones ejecutables . . . end program <NombreDelPrograma> donde <NombreDelPrograma> es una cadena de caracteres alfanumricos, includo _, de uno a 23 caracteres, sin espacios, que comienza con una letra. Ejemplo Disee un programa en cdigo fuente Fortran que escriba en pantalla Hola Mundo. Solucin Para el diseo, compilacin, y ejecucin del programa se debe seguir los pasos: Diseo, el primer paso a realizar es elegir un directorio especco (para ordenar nuestros archivos) y escribir el cdigo fuente en un editor de texto, como por ejemplo emacs, de la siguiente manera: >emacs prog1.f90 & Luego escribimos el cdigo en el archivo prog1.f90:
1 2 3 4 5 6 7 8

program Hola_mundo ! El t e x t o d e s p u s d e l s i g n o de admiracin ( ! ) e s un c o m e t a r i o ! I n s t r u c c i o n e s no e j e c u t a b l e s

! Instruciones ejecutables print , Hola Mundo ! Aqui e s donde saludamos end program Hola_mundo Compilacin, el segundo paso a realizar es traducir el programa a un lenguaje que el computador pueda entenderlo (lenguaje mquina), de la siguiente manera:

CAPTULO 2. INSTRUCCIONES BSICAS >gfortran prog1.f90 -o prog1.eje La opcin -o le dice al compilador que el ejecutable se llame: prog1.eje.

Ejecucin, el tercer y ltimo paso es correr el programa con la ejecucin del archivo ejecutable: >./prog1.eje La opcin ./ indica a Linux que debe buscar el ejecutable en el directorio actual. Finalmente en pantalla de debe observarse la instruccin ejecutada por el computador: Hola Mundo

2.4.

Constantes, variables y tipos de datos

Los programas en Fortran manejan datos de dos tipos: constantes y variables. Las constantes tienen un valor jo, mientras que las variables se identican con nombres y pueden cambiar de valor durante al ejecucin del programa. Constantes y variables deben tener tipos especcos que indican al programa como almacenarlas y manejarlas.

2.4.1.

Tipos de datos

Los tipos de datos permitidos son los siguientes: logical Las variables lgicas solo pueden tener dos valores: .true. (verdadero) y .false. (falso). integer Nmeros enteros, que pueden tomar todos los valores positivos o negativos entre lmites que dependen del computador y el compilador. Se indican como nmeros sin punto decimal: 1, 2, -3, 25, etc. character Cadena de uno o varios caracteres. Por ejemplo: fortran, Hola como estas, Marias pencil. real Nmeros reales que pueden tomar valores positivos o negativos entre lmites que dependen de la computadora y el compilador. Por ejemplo: 1.23e-6, 1.1234, etc. complex Nmeros complejos compuesto de una parte real y una parte imaginaria, ambas partes de tipo real. Por ejemplo: (1.2, 2.3e03), (1.12, 23.5), etc.

CAPTULO 2. INSTRUCCIONES BSICAS Lmites de representacin entero y real Los lmites de representacin de los tipos entero y real son los siguientes: Enteros: 2, 147, 483, 648 i 2, 147, 483, 647 valores enteros guardados en 4 bytes. Reales Simple Precisin: 1, 2 1038 |x| 3, 4 1038 valores reales guardados en 4 bytes y con 8 cifras signicativas. Reales Doble Precisin: 2, 2 10308 |x| 1, 8 10308 valores reales de doble precisin guardados en 8 bytes y con 16 cifras signicativascon.

Reales quadruple Precisin: Valores reales de cudruple precisin guardados en 16 bytes y con 32 cifras signicativas. Los tipos implcitos Si en un codigo aparecen nombres que no han sido denidos por instrucciones de especicacin, el tipo de la variable depende de su primera letra; as: i, j, k, l, m, n representan variables de tipo entero. Las otras letras variables de tipo real simple precision. El carcter implcito de las variables de las variables puede ser modicado, a travs de la instruccin implicit cuya sintaxis es la siguiente: implicit <tipo> (<lista_1>,<lista_2>,...,<lista_k>) donde lista j es un caracter c1 o un intervalo de caracteres c1 c2 , instruccin que se coloca antes de las instrucciones declarativas de variables. Ejemplo Se desea que todas las variables que comienzan con la letra l, las letras entre la u y w, as como la letra z, sean de tipo logical. La instruccin ser:

CAPTULO 2. INSTRUCCIONES BSICAS Solucin Para el diseo, compilacin, y ejecucin del programa se debe seguir los pasos: Diseo: >emacs prog2.f90 & Luego escribimos el cdigo en el archivo prog2.f90:
1 2 3 4 5 6 7 8

program prueba i m p l i c i t l o g i c a l ( l , uw, z ) : i n s t r u c c i o n e s no e j e c u t a b l e s : instrucciones ejecutables : end program prueba Compilacin: >gfortran prog2.f90 -o prog2.eje La opcin -o le dice al compilador que el ejecutable se llame: prog2.eje. Ejecucin: >./prog2.eje La utilizacin de tipos implcitos puede dar lugar a errores no detectados por el compilador y que son diciles de detectarlos. Por consiguiente, mejor es evitar, en lo posible, la regla de la denicin implcita y denir explcitamente todas las variables a ser utilizadas, colocando la instruccin de especicacin implicit none antes de especicar y declarar cada una de las variables del programa, con lo que cualquier variable que no haya sido declarada ser detectada y dar error en la compilacin del cdigo fuente.

2.4.2.

Declaracin de variables

Toda variable debe ser declarada de manera obligatoria, cuando no corresponda a un tipo implcito o bien cuando se haya recurrido a la instruccin implicit none. En general la declaracin de una variable o ms variables del mismo tipo se hace siguiendo la instruccin de especicacin, bajo la siguiente sintaxis

CAPTULO 2. INSTRUCCIONES BSICAS <tipo> [,<atributo(s)>] [::] <variable(s)> [=<valor>]

Si en la instruccin de especicacin aparece <atributo(s)>, o =<valor>, el uso de :: es obligatorio. Los atributos posibles son: parameter, save, intent, pointer, target, allocatable, dimension, public, private, external, intrinsic, optional. Declaracin de constantes Cuando se quiere o requiere que una variable tome nicamente un valor durante la ejecucin del programa y no pueda ser suceptible de cambio alguno, se utiliza el atributo parameter y la o las variables especicadas con el valor asignado. Por ejemplo integer, parameter :: nmax=100, imax=3*nmax Viendo el ejemplo, la segunda variable imax ha sido declarada en funcin de la primera variable nmax. Esto es posible, siempre y cuando las variables que denan una variable con atributo parameter, deben tener el atributo parameter, estar denidas y las operaciones, que intervienen en la expresin de denicin, ser elementales, por ejemplo aritmticas. La especicacin de una variable constante es aconsejada si: la variable no cambia de valor durante la ejecucin del programa, para hacer ms lisible el cdigo (por ejemplo dos_pi y sobre todo para poder modicar ms facilmente el cdigo fuente. Declaracin de cadena de caracteres La declaracin de una variable de tipo character se la realiza siguiendo la siguiente sintaxis character [(len=<longitud>)] [, <atributo(s)>] [::] <variable(s)> [=<valor>]

donde <longitud> representa el nmero de caracteres de la cadena, incluyendo espacios. Ejemplos 1. Si no se especica la longitud, la cadena tiene un solo caracter. character inicial 2. Si no se conoce la longitud de la cadena de caracteres, se puede utilizar el comodn *, para que la longitud sea autoajustable. character(len=*), parameter::ciudad=Cochabamba, pueblo=Sacaba Observamos que la cadena ciudad tiene 10 caracteres, mientras que la cadena pueblo tiene 6 caracteres.

CAPTULO 2. INSTRUCCIONES BSICAS Tipos de reales

La mayora de los compiladores Fortran trabajan con dos tipos de real: el primero, simple precisin y el segundo tipo, doble precisin. Existen algunos compiladores, como ifort, que trabajan con cuadruple precisin. La sintaxis para denir el tipo de real es la siguiente: real(kind=<np>) [, <atributo(s)>] [::] <variable(s)> [=<valor>] donde <np> es un entero, que toma los siguientes valores: np = 4 para simple precisin, np = 8 para doble precisin, np = 16 para cuadruple precisin. Si no se explicita la clase de real, el defecto es simple precisin. De esta manera, las siguientes declaraciones son correctas: real(kind=4)::x=1.e0 real(kind=8)::y=-2.d-5 real(kind=16)::qx=-3.q-100 Como puede observarse la letra e es el identicador de notacin cientca para simple precisin, d para doble precisin y q para cuadruple precisin. Declaracin de enteros integer [, <atributo(s)>] [::] <variable(s)> [=<valor>] Por ejemplo la declaracin de una variable de tipo entero. integer :: i=1, j=0 Tipos de complejo Complex es un tipo derivado del tipo real; consiguientemente hay complex simple precisin, complex doble precisin y algunos compiladores acceptan complex cuadruple precisin. Las declaraciones, utilizando kind, sern por lo tanto: integer, parameter:: np=8 complex(kind=4)::c=(1.e0,0.) complex(kind=8)::z=(-2.d-5,1.d0) complex(kind=16)::qz=(-3.q100,-1.q-10) complex(kind=np)::z_np=(1._np,-1._np) Por lo tanto, las observaciones, hechas para real, son vlidas para complex.

CAPTULO 2. INSTRUCCIONES BSICAS Ejemplo Con algunos ejemplos de la declaracin de tipos de varables, se tiene el siguiente ejemplo.
1 2 3 4 5 6 7 8 9 10 11 12 13

10

program v a l o r e s i m p l i c i t none integer , parameter : : nmax=100 , imax=3nmax character i n i c i a l character ( len = ) , parameter : : c i u d a d =Cochabamba , p u e b l o = Sacaba r e a l ( kind = 4 ) : : x=1. e0 r e a l ( kind = 8 ) : : y=2.d5 integer : : i =1, j =0 complex ( 4 ) : : c =(1. e0 , 0 . ) complex ( 8 ) : : z =( 2.d 5, 1 . d0 )

end program v a l o r e s

2.4.3.

Operaciones elementales en FORTRAN

Las operaciones aritmticas en FORTRAN involucran los siguientes operadores: = Asignacin. Es muy importante recalcar que este operador NO signica igualdad. En FORTRAN, tiene sentido escribir lneas que algebraicamente son absurdas como por ejemplo: a = a + 1. Esto signica tomar la variable a, sumarle 1, y asignar el resultado de nuevo a la variable a. (a a+1) + Suma (2,0 + 3,0 5,0). Resta (2,0 3,0 1,0). Multiplicacin (2,0 3,0 6,0). / Divisin (2,0/3,0 0,66666667). Exponenciacin (2,0 3,0 8,0). Las operaciones se realizan en el siguiente orden: 1. Trminos entre parntesis, comenzando por los de mas adentro. 2. Exponenciacin. 3. Multiplicacin y divisin de izquierda a derecha. 4. Los cambio de signo.

CAPTULO 2. INSTRUCCIONES BSICAS 5. Sumas y restas de izquierda a derecha.

11

IMPORTANTE: Igual que cuando uno hace operaciones a mano, es mucho ms difcil dividir que multiplicar, por lo que resulta mucho ms lento. A FORTRAN le toma mucho ms tiempo calcular 5.0/2.0 que calcular 5.0*0.5. Siempre que sea posible se deben evitar las divisiones para tener un cdigo ms eciente.

2.4.4.

Conversin entre tipos

En FORTRAN es muy importante declarar las variables correctamente. Muchos errores comunes estn relacionados con utilizar tipos equivocados de variables. Por ejemplo, en operaciones entre nmeros reales debe evitarse el utilizar variables enteras ya que fcilmente se obtendrn valores equivocados. Supongamos que se han declarado las variables i y j como enteras, y la variable x como real, y queremos calcular: x = i/j Si tenemos i=10 y j=4 el resultado ser 2 y no 2.5 como uno podra esperar. Esto se debe a que la divisin entre nmeros enteros siempre se considera un entero. Para evitar este tipo de errores es importante convertir un tipo de variables a otras. Esto puede lograrse con los comandos: int(), nint(), real(), dble(). Los comandos real() y dble() convierten la cantidad entre parntesis a una variable real o de doble precisin, respectivamente. Los comandos int() y nint() convierten la cantidad entre parntesis a un nmero entero, la diferencia est en que int() simplemente trunca el nmero, mientras que nint() lo reduce al entero ms cercano. Ejemplo Programa convertir.f90.
1 2 3 4 5 6 7 8 9 10 11 12 13

program c o n v e r t i r print , print , print , print , print , print , print , print , print , 10/4 10.0/4.0 real (10)/ real (4) real (10/4) dble (10)/ dble (4) int (10.7) nint (10.7) i n t ( 3.7) n i n t ( 3.7)

end program c o n v e r t i r

CAPTULO 2. INSTRUCCIONES BSICAS

12

En caso de operaciones aritmticas entre objetos de tipo o clases de tipo diferentes, la computadora convierte los operandos a valores del mismo tipo y misma clase de tipo, siguiendo las siguientes reglas: Los enteros son convertidos en reales o complejos. Los reales son convertidos en complejos. Los reales o complejos son convertidos en la clase (kind) ms alto. En la asignacin de valores (=), la parte derecha es evaluada en el tipo y clase que corresponde, luego es convertida al tipo y clase de la variable del lado izquierdo. As, por ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

program a n a l i z a r _ r e s u l t a d o i m p l i c i t none integer : : n=2, r r e a l : : a =1.2 , b ! r e a l ( k i n d = 4 ) : : a =1.2 r e a l ( kind = 4 ) : : x =3.4 complex : : c = ( 1 . , 2 . ) complex ( kind = 8 ) : : z = ( 3 . , 4 . ) ! complex ( 8 ) : : z = (3. , 4 . )

r =(x ( c n ) ) / z b=n+z print , print , print , print , end program r n c x ( n c ) ( x ( n c ) ) / z analizar_resultado

Para asignar un valor a la variable r, siguiendo el orden establecido por los parntesis, la computadora convierte n en tipo complex, evalua (n**c) en complex; luego convierte x en complex, evalua x*(c**n) en complex; despus convierte x*(c**n) en complex(kind=8) y evalua (x*(n**c))/z en complex(kind=8); por ltimo, para asignar el valor a la variable a, convierte (x*(n**c))/z en real. Dejamos como ejercicio, el ujo de conversin para la expresin b=n+z.

2.4.5.

Operaciones de comparacin

La sintaxis de la instruccin de comparacin es la siguiente: <expresin 1> <operador de comparacin> <expresin 2>

CAPTULO 2. INSTRUCCIONES BSICAS Formato f90 == /= > >= < <= Formato f77 .eq. .ne. .gt. .ge. .lt. .le. Descripcin es igual a no es igual a es estrictamente mayor a es mayor o igual a es estrictamente menor a es menor o igual a

13

Donde la <expresin 1> y <expresin 2> son expresiones de tipo numrico (integer, real, complex) y tienen como resultado un valor de tipo lgico (.true., o .false.). Para expresiones de tipo complex como operandos, solamente son vlidos los operadores de comparacin == y /=. Las operaciones de comparacin se evaluan despus de evaluar las expresiones aritmticas o numricas. Ejemplo Programa comparar.f90.
1 2 3 4 5 6 7 8 9 10

program comparar i m p l i c i t none logical : : l r e a l : : a =1.2 , b =2.0 , c =0.5 integer : : n=2, m=3

l=n m <a+b c end program comparar Las instrucciones listadas, tienen como ujo de conversin y orden de operaciones: la computdora evalua la expresin n**m, la convierte en tipo real, evalua la expresin a+b**c que es de tipo real, luego aplica el operador de comparacin <, cuyo resultado es de tipo logical.

2.4.6.

Operaciones lgicas

La sintxis es: <expresin 1> <operador de comparacin> <expresin 2> donde <expresin 1> y <expresin 2> son de tipo logical y el resultado tiene como valor, un valor de tipo logical.

CAPTULO 2. INSTRUCCIONES BSICAS Operador .not. .and. .or. .eqv. .neqv. Ejemplo Programa silogismo.f90.
1 2 3 4 5 6 7

14

Signicado No (operador unario, un solo operando) y o equivalente no equivalente

program s i l o i m p l i c i t none l o g i c a l : : p1 , p2 , q , p , r

r =(. not . ( p1 . o r . p2 ) ) . eqv . ( ( . not . p ) and ( . not . q ) ) end program s i l o

2.5.

Funciones intrnsecas

Fortran cuenta con una serie de funciones matemticas pre-denidas llamadas "funciones intrnsecas". Una lista de algunas de ellas (no todas) es:

CAPTULO 2. INSTRUCCIONES BSICAS Fortran 90 sqrt(x ) abs(x ) sin(x ) cos(x ) tan(x ) asin(x ) acos(x ) atan(x ) exp(x ) log(x ) log10(x ) max(x,y ) min(x,y ) int(x ) fraccion(x ) real(z ) aimag(z ) conjg(z ) cmplx(x,y ) mod(x,y ) Operaciones con caracteres Comenzamos con la instruccin de asignacin, para el tipo de caracter, se tiene: <variable>=<expresin> Descripcin Raz cuadrada de x Valor absoluto de x Seno de x Coseno x Tangente de x Arco-seno de x Arco-coseno de x Arco-tangente de x Exponencial de x (ex ) Logaritmo natural de x Logaritmo en base 10 de x Mximo entre x y y Mnimo entre x y y Parte entera de un real x Parte fraccional de un real x Parte real del complejo z Parte imaginaria del complejo z Conjugado del complejo z Convierte dos reales x, y a complejo Resto o residuo de la divisin de x con y

15

donde <variable> es de tipo character[len=n] y <expresin> es de tipo character de longitud len=m, con n y m enteros positivos. La asignacin se la realiza de la siguiente manera: Si n m, se asigna a la <variable> los n primeros caracteres, includos espacios, de la <expresin>, de izquierda a derecha, eleiminando o truncando los m n caracteres restantes de la expresin. Si n > m, se asigna a la <variable> de izquierda a derecha la cadena de caracteres de la <expresin>, completando los ltimos n m caracteres de la derecha con espacios. Operadores binarios Para la cadena de caracteres existe los siguientes operadores binarios: Concatenacin Dado por el operador //. Por ejemplo, la expresin Cochabamba// es una linda ciudad.. Da la cadena de caracteres Cochabamba es una linda ciudad.. Comparacin Dados los operadores == y /=, cuyo uso es similar al caso de las expresiones numricas.

CAPTULO 2. INSTRUCCIONES BSICAS Partes de cadenas de caracteres

16

Si la <expresin> representa una cadena de caracteres c1 ...ck ...cl ...cn de n caracteres, con 1 k l n, las instrucciones siguientes dan: <expresin>(k,l) ! ck ...cl <expresin>(:,l) ! c1 ...ck ...cl <expresin>(k,:) ! ck ...cl ...cn Asi, por ejemplo.
1 2 3 4 5 6 7 8 9

program p a r t e s _ c h a r a c t e r i m p l i c i t none character ( len = 1 0 ) : : c i u d a d =Cochabamba character ( len = 5 ) : : c i t y , town

town=Cochabamba ( 6 , : ) ! town=bamba c i t y=c i u d a d ( : , 5 ) ! c i t y =Cocha end program p a r t e s _ c h a r a c t e r

Otras operaciones sobre cademas de caracteres Aparte de los operadores binarios de concatenacin y comparacin, y asignacin de partes de cadenas de caracteres, Fortran tiene a disposicin algunas instrucciones o funciones tiles para expresiones de tipo character cuya sintaxis es la siguiente: <instruccin>=<expresin> donde <expresin> es una expresin cuyo valor es de tipo character e <instruccin> corresponde a una de las instrucciones de la tabla: Instruccin len trim adjustl Resultado integer character character Descripcin Da la longitud de la cadena de caracteres. Suprime los espacios del nal de la cadena. Si hay espacios al inicio de la cadena, los suprime desplazando el resto de la cadena a la izquierda

Captulo 3

Control de ujo del programa


En general, un programa FORTRAN ejecuta las comandos en el orden en el que se escribieron, uno a la vez. Sin embargo, frecuentemente hay situaciones en las que esto es demasiado simple para lo que uno quiere hacer. A veces es necesario repetir una misma operacin muchas veces con ligeras variaciones, y otras veces hay operaciones que solo deben realizarse si se cumple alguna condicin. Para este tipo de situaciones existen los llamados comandos de control del programa y que caen en dos tipos bsicos: loops y condicionales.

3.0.1.

Loops

Un loop es un conjunto de instrucciones que deben realizarse muchas veces y tiene la forma estandard:
7 8 9 10 11 12

do i=i n i c i o , f i n , i n c r e m e n t o comando 1 comando 2 comando 3 ... end do Todos los comandos que estn contenidos entre la linea do i=... y la linea end do se repiten varias veces, dependiendo de los valores de inicio, fin, incremento que deben ser enteros. La primera vez, la variable i toma el valor inicio. Al terminar, el valor de i se incrementa en incremento, si el valor nal es mayor que fin el loop ya no se ejecuta de nuevo y el programa continua en el comando que siga despus de end do, de lo contrario se vuelven a ejecutar los comandos dentro del loop hasta que se obtenga i>fin. Nota: El indentar los comandos dentro del loop no es necesario (FORTRAN ignora los espacios extra), pero es una buena idea pues hace ms fcil identicar visualmente donde comienza y termina el loop. Ejemplo Programa bonacci.f90.

17

CAPTULO 3. CONTROL DE FLUJO DEL PROGRAMA

18

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

program f i b o n a c c i ! E s t e programa c a l c u l a l o s numeros de l a s e r i e ! de f i b o n a c c i h a s t a nmax . i m p l i c i t none i n t e g e r i , nmax integer jnew , j o l d , aux ! Poner un l i m i t e . nmax = 10 ! I n i c i a l i z a r ( jnew , j o l d ) . jnew = 1 ; j o l d = 1 ! Iniciar loop . print do i =1,nmax , 1 ! Imprimir e l e m e n t o i de l a s e r i e . print , Elemento , i , de l a s e r i e de F i b o n a c c i : print ! C a l c u l a r nuevo e l e m e n t o de l a s e r i e . aux = jnew jnew = jnew + j o l d j o l d = aux end do end program f i b o n a c c i

, jnew

3.0.2.

IF

En ocasiones uno desea que una parte del programa solo sea ejecutada si cierta condicin especca se satisface. Esto se logra utilizando los condicionales, que en FORTRAN se controlan con el comando IF. La estructura de este comando es la siguiente:
7 8 9 10 11 12 13 14 15

i f ( e x p r e s i n l g i c a ) then comando 1 comando 2 ... else comando A comando B ... end i f Al ejecutar esto, el programa verica si la expresin lgica entre parntesis despus del if es verdadera. De serlo, se ejecutan los comandos siguientes. De ser falsa, se ejecutan los comandos despus del else (ntese que el [else] es opcional). La expresin lgica puede utilizar cualquiera

CAPTULO 3. CONTROL DE FLUJO DEL PROGRAMA de los operadores lgicos, por ejemplo: Formato f90 == /= > >= < <= .not. .or. .and. Formato f77 .eq. .ne. .gt. .ge. .lt. .le. .not. .or. .and.

19

if(i==3) then if(i/=3) then if(i>3) then if(i>=3) then if(i<3) then if(i<=3) then if(.not.q) then if((i==3).or.(i==5)) then if((i==3).and.(j==5)) then

El comando if puede simplicarse si solo hay un comando en su interior: if (i==3) comando Este comando indica que si se cumple la condicin el comando indicado debe ejecutarse. Tambin es posible tener muchas alternativas en un condicional:
1 2 3 4 5 6 7 8 9

i f ( e x p r e s i n l g i c a 1 ) then comando 1 e l s e i f ( e x p r e s i n l g i c a 2 ) then comando 2 e l s e i f ( e x p r e s i n l g i c a 3 ) then comando 3 else comando 4 end i f

Ejemplo Programa condicional.f90.


1 2 3 4 5 6 7 8 9 10 11 12

program c o n d i c i o n a l i m p l i c i t none ! Declaramos una v a r i a b l e l o g i c a y una e n t e r a . logical : : q integer : : i ! Dejar un e s p a c i o para que s e vea menos f e o . print ! Contar de 1 a 2 0 . do i =1, 2 0 , 1

CAPTULO 3. CONTROL DE FLUJO DEL PROGRAMA


13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

20

! Estamos a b a j o de 10? i f ( i <=9) then print , No hemos l l e g a d o a l 1 0 , vamos en , i ! Estamos j u s t o en 10? e l s e i f ( i ==10) then print , Vamos j u s t o en 1 0 ! Estamos a b a j o de 16? e l s e i f ( i <16) then print , Ya nos pasamos d e l 1 0 , vamos en , i ! Nada de l o a n t e r i o r . e l s e print , Ya pasamos d e l 1 5 , vamos en , i end i f ! En c a s o de e s t a r en 13 a v i s a r . i f ( i ==13) print , Por c i e r t o , ahora vamos en 1 3 ! D e f i n i r l a v a r i a b l e l o g i c a q . Sera v e r d a d e r a ! s i no estamos en 1 9 . q = ( i /= 1 9 ) ! Ahora a v i s a r s i e m p r e que q s e a f a l s a . i f ( . not . f l a g ) print , Y ahora estamos en 1 9 ! Ya terminamos de c o n t a r end do ! Adios end program c o n d i c i o n a l

3.0.3.

Control lgico de loops

Es posible utilizar condiciones lgicas para controlar un loop. Esto se logra utilizando el comando do while():
7 8 9 10 11

do while ( e x p r e s i n l g i c a ) comando 1 comando 2 ... end do

CAPTULO 3. CONTROL DE FLUJO DEL PROGRAMA

21

En este caso no se cuenta con una variable entera como en el caso estndard, sino que el loop se ejecuta una y otra vez mientras la expresin lgica sea verdadera. El loop se detiene una vez que dicha expresin es falsa. Por ejemplo, el siguiente cdigo acta de la misma forma que un loop estndard de 1 a 20:
7 8 9 10

i = 1 do while ( i <=20) i = i + 1 end do CUIDADO: Con este tipo de loops se corre el riesgo de caer en un ciclo eterno, donde la condicin lgica nunca deja de satisfacerse y la mquina sigue ejecutando el loop para siempre. Cuando se trabaja en una terminal uno nota esto fcilmente si el cdigo continua mucho tiempo ms del que esperbamos sin hacer aparentemente nada. En ese caso siempre se puede detener al cdigo tecleando [CTRL C]. Pero cuando uno esta corriendo en una cola en una super-computadora se corre el riesgo de terminarse la cuota que debera haber durado un ao de una sola vez, y peor an, los encargados del sistema pueden decidir retirar los privilegios de trabajar en esa mquina ante semejante desperdicio de recursos de cmputo y falta de cuidado.

Captulo 4

Entrada y salida de datos bsico(input/output)


En la mayora de los cdigos cientcos es necesario dar datos desde fuera y sacar datos hacia afuera. Por defecto, la entrada de datos es desde el teclado y la salida es a la pantalla. La entrada y salida de datos se manejan con los comandos: read(,) write(,) Ambos comandos tienen dos argumentos, el primero de los cuales indica la unida de entrada o salida, y el segundo el formato en el que estn los datos. La versin mas simple es: read(*,*) write(*,*) Aqu, el primer asterisco indica entrada o salida estndard (teclado y pantalla respectivamente), y el segundo formato libre. El comando write(*,*) puede substituirse por la forma equivalente print* seguido de una coma. Ejemplo Programa Hola_nombre.f90.
1 2 3 4 5 6 7 8 9 10 11 12

program h o l a ! Declarar v a r i a b l e s . i m p l i c i t none character ( 2 0 ) : : nombre ! P r e g u n t a r como t e l l a m a s . print write ( , ) Como t e l l a m a s ? print ! Leer r e s p u e s t a d e s d e e l t e c l a d o . read ( , ) nombre 22

CAPTULO 4. ENTRADA Y SALIDA DE DATOS BSICO(INPUT/OUTPUT)


13 14 15 16 17 18 19

23

! Saludar . print write ( , ) Hola , nombre print end program h o l a

4.0.4.

Unidades de entrada y salida

Adems de utilizar el teclado y la pantalla, los datos tambin pueden leerse o enviarse a un archivo. Para ello debe primero abrirse el archivo con el open que debe tener al menos dos argumentos (puede tener varios ms). El primer argumento es la unidad a la que se asigna la salida o entrada de datos, que debe ser un numero entero (comnmente se usa 10). El segundo argumento es el nombre del archivo entre comillas (con su PATH completo si no esta en el mismo directorio que el ejecutable). Al terminar de leer o escribir se debe cerrar el archivo con el comando close cuyo nico argumento es el nmero de la unidad. Ejemplo Programa archivo.f90. Para este ejemplo es necesario crear primero un archivo de datos llamado entrada.dat que contenga solo una linea con: juan,25,masculino.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

program a r c h i v o i m p l i c i t none integer edad character ( 2 0 ) : : nombre , s e x o ! A b r i r e l a r c h i v o de e n t r a d a open ( 1 0 , f i l e = e n t r a d a . dat ) ! Leer d a t o s read ( 1 0 , ) nombre , edad , s e x o ! Cerrar a r c h i v o de e n t r a d a close (10)

write ( , ) Me l l a m o , nombre write ( 1 1 , ) Me l l a m o , nombre

! A b r i r a r c h i v o de s a l i d a open ( 1 2 , f i l e = f e r c h o . rbd )

CAPTULO 4. ENTRADA Y SALIDA DE DATOS BSICO(INPUT/OUTPUT)


22 23 24 25 26 27 28 29 30

24

! Escribir datos write ( 1 2 , ) Me l l a m o , nombre write ( 1 2 , ) Tengo , edad , aos write ( 1 2 , ) Mi s e x o e s , s e x o ! Cerrar a r c h i v o s a l i d a close (12) end program a r c h i v o

4.0.5.

Formato de entrada y salida

En ocasiones se requiere que los datos de entrada o salida estn en un formato muy especco. El control del formato se lleva a cabo en el segundo argumento del los comandos read y write. Existen dos posibilidades: Para formatos sencillos, el formato se coloca simplemente el formato entre comillas y parntesis dentro del segundo argumento, mientras que para formatos ms complicados se coloca un nmero entero que identica la linea donde est el formato. Por ejemplo, las dos opciones siguientes son equivalentes: read ( 1 0 , ( i 4 ) ) m read ( 1 0 , 1 0 0 ) m 100 format ( i 4 ) En ambos casos se indica al cdigo que debe leer un nmero entero de a lo ms 4 dgitos de longitud i4. La ventaja del segundo mtodo es que se puede usar el mismo formato en ms de un comando: read ( 1 0 , 1 0 0 ) i read ( 1 0 , 1 0 0 ) j read ( 1 0 , 1 0 0 ) k 100 format ( i 4 ) Los diferentes opciones de formato son:

CAPTULO 4. ENTRADA Y SALIDA DE DATOS BSICO(INPUT/OUTPUT) Tipo integer Sintaix nIw Descripcin n es el nmero de enteros por leer y w el nmero total de caracteres contando con el signo n es el nmero de variables por leer, w el nmero total de caracteres contando con el signo y punto decimal, y d es el nmero de cifras despus del punto n es el nmero de palabras por leer y w el nmero de caracteres n es el nmero total de espacios en blanco por leer Ejemplo 2i4 Datos 1234, -12

25

real

nFw.d

2f8.3

1234.678, -234.678

character espacios

nAw nX

2a6 2x

abcdef, qwerty

Ejemplo Programa seno.f90.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

program s e n o ! Declarar v a r i a b l e s . i m p l i c i t none integer i real x , s , pi ! Calcular pi . p i = a c o s ( 1.0) ! c o s ( p i )=1 ! A b r i r a r c h i v o de s a l i d a . open ( 1 0 , f i l e = s e n o . dat ) ! Loop d e s d e 0 h a s t a 2 p i en 100 p a s o s . do i =0 ,100 , 1 ! C a l c u l a r x e n t r e 0 y 2 pi , y su seno . x = 2.0 pi real ( i )/100.0 s = sin (x) ! Escribir al archivo . write ( 1 0 , ( 2 f 1 0 . 4 ) ) x , s end do ! Cerrar a r c h i v o . close (10)

CAPTULO 4. ENTRADA Y SALIDA DE DATOS BSICO(INPUT/OUTPUT)


27

26

end program s e n o Ahora el archivo de salida seno.dat podemos gracar con gnuplot, desde un archivo de texto, editandolo desde nuestro editor de texto favorito. Para este n tenemos que crear un archivo llamado por ejemplo script1.gp.

1 2 3 4 5 6 7 8

reset set t i t l e Seno ( x ) set xlabel x set ylabel s e n o ( x ) set grid plot s e n o . dat pause 3 exit Ahora vamos a cargarlo en gnuplot. gnuplot> load script1.gp estando fuera de gnuplot con: > gnuplot script1.gp

Figura 4.1: Salida seno.dat

Captulo 5

Subprogramas
En muchas ocasiones existen tareas que se deben realizar muchas veces durante la ejecucin de un cdigo, por lo que resulta conveniente que sean subprogramas en si mismos. La existencia de subprogramas tambin hace que un cdigo sea ms modular, y permite que diferentes personas programen diferentes partes de un mismo cdigo. Los diversos subprogramas pueden ser parte de un mismo archivo, o estar en archivos separados que se unen durante el proceso de compilacin. Si estn en un mismo archivo, deben aparecer despus de la linea que termina el programa principal. En FORTRAN 90 hay tres tipos bsicos de subprogramas: funciones, subrutinas y mdulos. Consideraremos cada uno de ellos por separado.

5.1.

Funciones

As como existen funciones intrnsecas en FORTRAN (sin, cos, etc.), tambin es posible denir funciones nuevas de una o ms variables. El objetivo de una funcin es obtener un nmero a partir de los argumentos. Al igual que el programa principal, una funcin comienza por su nombre function nombre. Al nal de la funcin deben aparecer los comandos return seguido de end function nombre, esto regresa el control al programa principal. La funcin es una unidad autnoma, por lo que debe declarar todas las variables que utiliza, incluyendo el nombre de la funcin y los argumentos. Es muy importante que los argumentos de la funcin sean del mismo tipo cuando se llama la funcin y en la funcin misma, de otra forma habr errores al ejecutar el cdigo. El nombre de la funcin debe declarase en el programa principal y cualquier subprograma que la llame. Ejemplo Programa pitagoras.f90.
1 2 3 4 5 6 7

program p i t a ! Declarar v a r i a b l e s . i m p l i c i t none real : : a , b , c , hipo write ( , ) I n g r e s e a y b : read ( , ) a , b 27

CAPTULO 5. SUBPROGRAMAS
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

28

! Calculamos l a h i p o t e n u s a con l a f u n c i n h i p o c=h i p o ( a , b ) write ( , ) c end program p i t a ! Creamos l a f u n c i n h i p o function h i p o ( x , y ) i m p l i c i t none real : : x , y , hipo ! Calculamos l a h i p o t e n u s a h i p o=s q r t ( x 2+y 2 ) ! Retornamos e l c o n t r o l a l programa p r i n c i p a l return end function h i p o Ejemplo Programa distancia.f90.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

! Programa p r i n c i p a l . program d i s t a n c i a ! Declarar v a r i a b l e s . i m p l i c i t none integer i , j real x , y , r real radio ! A b r i r a r c h i v o de s a l i d a . open ( 1 0 , f i l e = r a d i o . dat ) ! Loop en dos d i m e n s i o n e s . do i =1, 1 0 , 1 do j =1 ,10 ! Coordenadas en e l p l a n o . x = real ( i ) y = real ( j ) ! Calcular d i s t a n c i a a l origen llamado a funcion radio r = radio (x , y) ! Escribir a archivo . write ( 1 0 , ( 3 f 1 0 . 3 ) ) x , y , r end do

CAPTULO 5. SUBPROGRAMAS
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

29

end do ! Cerrar a r c h i v o . close (10) end program d i s t a n c i a ! Funcion r a d i o . function r a d i o ( x , y ) ! Declarar v a r i a b l e s . i m p l i c i t none real radio , x , y ! Calcular distancia al origen . r a d i o = s q r t ( x 2 + y 2 ) ! Terminar f u n c i o n . return end function r a d i o

5.2.

Subrutinas

Una subrutina es similar a una funcin, pero ms complicada, de la que no solo se espera un nmero, sino toda una secuencia de operaciones que pueden requerir regresar muchos nmeros al programa principal (o ninguno). Las subrutinas se llaman usando el comando call nombre. Igual que las funciones, las subrutinas comienzan por su nombre subroutine nombre y terminar con los comandos return y end subroutine nombre. Tambin son unidades autnomas que deben declarar todas las variables que utilizan, incluyendo a sus argumentos. A diferencia de las funciones, el nombre de una subrutina no tiene un tipo (el nombre de las funciones si tiene un tipo pues corresponde al valor de regreso). Una caracterstica importante de las subrutinas es que cuando se pasa un arreglo como uno de sus argumentos, no es necesario dar el tamao. Se puede pasar el tamao como un argumento, digamos N, y simplemente declarar el arreglo como real, dimension(N) :: nombre. Algo similar sucede con los variable de tipo character que se pueden declarar con dimensin indeterminada usando * cuando son parte de los argumentos de la subrutina, de manera que heredan el tamao que tenan el en programa que llamo a la subrutina. Ejemplo Programa rutina1.f90.
1 2 3 4 5 6 7

! Programa r u t i n a s program r u t i n a s ! Declarar v a r i a b l e s . i m p l i c i t none integer i , j , N real radio real , dimension ( 1 0 , 1 0 ) : : r , x , y

CAPTULO 5. SUBPROGRAMAS
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

30

! A b r i r a r c h i v o de s a l i d a . open ( 1 0 , f i l e = r a d i o . dat ) ! Loop en dos d i m e n s i o n e s . N = 10 do i =1, N, 1 do j =1, N ! Coordenadas en e l p l a n o . x ( i , j ) = real ( i ) y ( i , j ) = real ( j ) ! Calcular d i s t a n c i a a l origen llamado a funcion radio . r ( i , j ) = radio (x( i , j ) , y( i , j )) end do end do ! Llamar s u b r u t i n a e s c r i b i r . c a l l e s c r i b i r (N, r , x , y ) ! Cerrar a r c h i v o . close (10) end program r u t i n a s ! Funcion r a d i o . function r a d i o ( x , y ) ! Declarar v a r i a b l e s . i m p l i c i t none real radio , x , y ! Calcular distancia al origen . r a d i o = s q r t ( x 2 + y 2 ) ! Terminar f u n c i o n . return end function r a d i o ! Subrutina e s c r i b i r . subroutine e s c r i b i r (N, r , x , y ) ! Declarar v a r i a b l e s y a r r e g l o s . i m p l i c i t none integer i , j ,N real , dimension (N,N) : : r , x , y ! Abrir archivo .

CAPTULO 5. SUBPROGRAMAS
52 53 54 55 56 57 58 59 60 61 62 63 64 65

31

open ( 1 0 , f i l e = d i s t a n c i a 2 . dat ) ! Loop de dos d i m e n s i o n e s para e s c r i b i r a a r c h i v o . do i =1,N do j =1,N write ( 1 0 , ( 3 f 1 0 . 3 ) ) x( i , j ) ,y( i , j ) , r ( i , j ) end do end do ! Cerrar a r c h i v o . close (10) ! Terminar s u b r u t i n a . return end subroutine e s c r i b i r

5.3.

Mdulos

El ltimo tipo de subprogramas son los mdulos que solo existen a partir de FORTRAN 90. Los mdulos sirven bsicamente para declarar variables que se usan en muchos subprogramas, o para agrupar muchos subprogramas en una sola unidad. Los mdulos comienzan por su nombre module nombre y terminan con end module nombre (en los mdulos no se utiliza el comando return). A diferencia de las funciones y subrutinas, si el mdulo est en el mismo archivo que el programa principal, debe estar antes que este. Cualquier subprograma que haga uso del mdulo debe hacerlo mediante el comando use nombre inmediatamente despus del nombre del subprograma. El uso ms comn de los mdulos es para declarar variables que van a ser utilizadas por muchos subprogramas. Ejemplo Programa modulo1.f90.
1 2 3 4 5 6 7 8 9 10 11 12 13

! Modulo c o n s t a n t e s . module c o n s t a n t e s ! D e c l a r a r p a r a m e tr os . i m p l i c i t none real , parameter : : p i =3.141592 , e e =2.71828 ! Termina modulo . end module c o n s t a n t e s ! Programa p r i n c i p a l program usamodulos ! Usar modulo c o n s t a n t e s . use c o n s t a n t e s

CAPTULO 5. SUBPROGRAMAS
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

32

! Declarar v a r i a b l e s . i m p l i c i t none real radio , area real ee2 ! D e f i n i r r a d i o y c a l c u l a r area y ee2 . radio = 10.0 a r e a = p i r a d i o 2 e e 2 = e e 2 ! Escribir resultados a pantalla . print print , El a r e a de un c i r c u l o de r a d i o , r a d i o , e s , a r e a print print , El cuadrado e l numero de E u l e r e s , e e 2 print ! Termina programa . end program usamodulos

Вам также может понравиться