Upload
dandyeleleusis
View
77
Download
25
Embed Size (px)
DESCRIPTION
Aprender a programar en Fortram se hace fácil y sencillo
Citation preview
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 1 -
Presentacin .................................................................................................................. 5
1.0 Programacin bsica con FORTRAN ...................................................................... 6
1.1 Etapas para la preparacin de un programa .......................................................... 6
1.2 Programa fuente .................................................................................................. 6
1.2.1 Formatos para cdigo fuente y lmites del programa ..................................... 6
1.2.2 Esquema bsico de un programa tpico en Fortran ........................................ 7
1.2.3 Caracteres indicadores .................................................................................. 7
1.2.4 Variables y expresiones matemticas ............................................................ 8
1.2.5 Formatos numricos y alfanumricos ............................................................ 9
1.3 Declaraciones bsicas .......................................................................................... 9
1.3.1 OPEN ........................................................................................................... 9
1.3.2 CLOSE ....................................................................................................... 10
1.3.3 READ - WRITE ......................................................................................... 11
1.3.4 IF................................................................................................................ 11
1.3.5 DO ............................................................................................................. 12
1.3.6 DO WHILE ................................................................................................ 12
1.3.7 SELECT CASE .......................................................................................... 12
1.3.8 WHERE ..................................................................................................... 13
1.4 Funciones implcitas .......................................................................................... 13
2.0 Vectores y Matrices............................................................................................... 13
2.1 Declaracin y disposiciones de memoria ........................................................... 14
2.1.1 Vectores ..................................................................................................... 14
2.1.2 Matrices...................................................................................................... 16
2.2 Dimensionamiento dinmico ............................................................................. 20
2.2.1 Punteros...................................................................................................... 20
2.2.2 Alojamiento de memoria............................................................................. 22
2.2.3 Arreglos Automticos ................................................................................. 23
2.2.4 Ejercicios de aplicacin .............................................................................. 23
2.3 Almacenamiento por defecto en FORTRAN...................................................... 24
3.0 Tipos derivados de datos ....................................................................................... 25
3.1 Generalidades .................................................................................................... 25
3.2 Ejemplos ........................................................................................................... 26
4.0 El ambiente de trabajo Developer Studio ........................................................... 28
4.1 Iniciando un proyecto ........................................................................................ 29
4.2 Ejemplos ........................................................................................................... 31
5.0 Subprogramas, creacin y usos .............................................................................. 34
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 2 -
5.1 Subrutinas ......................................................................................................... 34
5.1.1 Definicin................................................................................................... 34
5.1.2 Ejemplo ...................................................................................................... 34
5.2 Mdulos ............................................................................................................ 35
5.2.1 Definicin................................................................................................... 35
5.2.2 Ejemplo ...................................................................................................... 36
5.3 Funciones .......................................................................................................... 38
5.3.1 Definicin................................................................................................... 38
5.3.2 Ejemplo ...................................................................................................... 38
5.4 Interfaces........................................................................................................... 39
5.4.1 Definicin................................................................................................... 39
6.0 Libreras, creacin y usos ...................................................................................... 40
6.1 Libreras Estticas (Static Libraries) .................................................................. 40
6.1.1 Definiciones ............................................................................................... 40
6.1.2 Forma de usar ............................................................................................. 40
6.2 Libreras dinmicas (Dynamic Link Libraries)................................................... 41
6.2.1 Definiciones ............................................................................................... 41
6.2.2 Forma de usar ............................................................................................. 41
6.2.3 Ejemplo ...................................................................................................... 42
7.0 Personalizacin de programas ............................................................................... 44
7.1 Generalidades .................................................................................................... 44
7.2 Propiedades de la ventana .................................................................................. 44
7.3 Creacin de mltiples ventanas.......................................................................... 44
7.4 Graficacin y escritura en la pantalla ................................................................. 45
7.5 Insertando imgenes .......................................................................................... 47
7.6 Mensajes de aviso ............................................................................................. 47
7.7 Personalizar el men de opciones ...................................................................... 48
7.8 Iconos de programas .......................................................................................... 50
7.9 Eventos del ratn ............................................................................................... 51
7.9.1 Funciones basadas en eventos ..................................................................... 51
7.9.2 Ejemplo ...................................................................................................... 52
7.9.3 Funciones de bloqueo de ejecucin ............................................................. 53
7.9.4 Ejemplo ...................................................................................................... 53
7.10 Cuadros de dilogo personalizados .................................................................. 54
7.10.1 Agregar controles al cuadro de dilogo: .................................................... 55
8.0 Grficos en Visual Fortran .................................................................................... 62
8.1 Array Visualizer ................................................................................................ 62
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 3 -
8.1.1 Generalidades ............................................................................................. 62
8.1.2 Descripcin ................................................................................................ 62
8.1.3 Sintaxis....................................................................................................... 63
8.1.4 Ejemplo ...................................................................................................... 64
8.2 Librera Plot88 .................................................................................................. 65
8.2.1 Generalidades ............................................................................................. 65
8.2.2 Etapas del proceso de graficacin ............................................................... 66
8.2.3 Sintaxis de cada subrutina ........................................................................... 66
8.2.4 Ejemplo ...................................................................................................... 68
8.3 CVFGraf ........................................................................................................... 70
8.3.1 Generalidades ............................................................................................. 70
8.3.2 Codificacin y subrutinas ........................................................................... 71
8.3.3 Ejemplo ...................................................................................................... 72
8.4 DXFortran ......................................................................................................... 73
8.4.1 Generalidades ............................................................................................. 73
8.4.2 Forma de uso .............................................................................................. 74
8.4.3 Descripcin de subrutinas ........................................................................... 74
8.4.4 Ejemplo ...................................................................................................... 76
9.0 Libreras IMSL en Fortran ..................................................................................... 78
9.1 Generalidades .................................................................................................... 78
9.2 Uso de la Librera desde Visual Fortran ............................................................. 78
9.3 Ejemplo ............................................................................................................. 78
10.0 Aplicaciones Utiles ............................................................................................. 80
10.1 Creacin de archivos de ayuda......................................................................... 80
10.2 Abrir y guardar un archivo desde el men ........................................................ 81
10.3 Presentacin de una tabla ................................................................................. 83
10.3 Rutina de intercambio CVFDif ........................................................................ 86
10.5 Ventanas virtuales amplias .............................................................................. 91
10.6 Resolucin de sistemas de ecuaciones lineales ................................................. 92
10.6.1 Resolucin Numrica ................................................................................ 92
10.6.2 Mtodos de resolucin .............................................................................. 93
10.6.3 Ejercicio de aplicacin .............................................................................. 98
11.0 Normas Europeas para escribir y documentar cdigos fuente en Fortran 90 ....... 100
11.1 Documentacin ............................................................................................. 100
11.1.1 Documentacin Externa .......................................................................... 100
11.1.2 Documentacin Interna ........................................................................... 100
11.2 Obsolescencias de otras versiones.................................................................. 101
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 4 -
11.3 Reglas bsicas de codificacin ....................................................................... 101
11.4 Encabezados para programas y subprogramas................................................ 102
11.4.1 Programas principales ............................................................................. 102
11.4.2 Subrutinas ............................................................................................... 103
11.4.3 Funciones ............................................................................................... 104
11.4.4 Mdulos ................................................................................................. 105
12.0 Ejercicios Propuestos ........................................................................................ 107
Referencias ............................................................................................................... 117
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 5 -
Presentacin El presente texto gua, resume algunos aspectos fundamentales de la programacin con
Fortran 90, de manera que el estudiante estar en capacidad de implementar
herramientas numricas eficientes para resolver problemas de ingeniera. La
organizacin del texto es la misma estructura del programa de la materia aprobado por
el consejo de facultad para el ao 2005, y abarca desde nociones generales hasta la
creacin de programas usando herramientas de Visual y libreras estadsticas y
matemticas (IMSL).
El compilador Visual Fortran, se encuentra disponible en la facultad, en su versin 6.0,
actualmente se encuentra en el mercado la versin 9.1; la actualizacin de la versin
disponible a 6.5A puede ser obtenida de internet, en el sitio web de Compaq Co.
http://www.compaq.com/fortran. La versin disponible es del antiguo propietario de los
derechos del compilador, Digital Co., http://www.digital.com/fortran que los vendi a
Compaq Co., se hace esta aclaracin porque seguramente encontrar dentro de las
opciones de instalacin las siglas DVF (Digital Visual Fortran), y si obtiene
informacin de internet o baja alguna librera o actualizacin, encontrar las siglas CVF
(Compaq Visual Fortran), desde el ao 1999. Desde la versin 8.0 a partir del ao
2004, los derechos del compilador fueron comprados por el fabricante de
microprocesadores Intel, por lo que se encontraran referencias con las siglas IVF (Intel
Visual Fortran), http://www.intel.com
Es necesario mencionar que las versiones ms avanzadas de un compilador no son ms
que optimizadores respecto la anterior. Lo que quiere decir que su trabajo ser ms
eficiente y talvez ms amigable en el entorno de programacin.
FORTRAN tiene una ventaja realmente importante sobre otros lenguajes y es que se
pueden generar algoritmos matemticos altamente eficientes con l, es un lenguaje para
desarrolladores y no para usuarios comerciales, el compilador genera programas tiles
para cualquier plataforma. Lo que lo ubica entre los programas compilados y no
evaluados (Visual Basic de aplicaciones, MatLab, etc.) La desventaja son los sistemas
de graficacin, sin embargo, existen interfaces amigables que hacen ms fcil el manejo
de grficos y su exportacin a formatos ms conocidos, como BMP, JPG y DXF.
Espero que disfruten aprendiendo de estas notas, como yo lo hice escribindolas.
Juan Fernando Moreno Garca
Ingeniero Naval
Mayo-Julio de 2006
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 6 -
1.0 Programacin bsica con FORTRAN
1.1 Etapas para la preparacin de un programa
Fortran es un lenguaje compilado, es decir, se obtiene un archivo ejecutable, extensin
.EXE, que puede trabajar en cualquier plataforma o sistema operativo. Existen
lenguajes de programacin que son evaluados como Turbo Pascal, Visual Basic para
aplicaciones, Basic y otros, estos programas necesitan tener instalado en la mquina el
compilador, para poder ejecutarse ya que van ejecutando lnea por lnea, si existe un
error detienen la ejecucin en esa lnea. Los programas compilados no tienen esta
opcin, es decir, trabajan o no trabajan.
Fortran, cumple tres etapas en la preparacin de un programa:
1. Codificacin del programa fuente.- hecho por el programador en un editor de texto. El archivo final debe tener las extensiones de FORTRAN *.for, *.f90, *.f
*.fpp
2. Compilacin del programa fuente.- el producto de esta operacin genera un archivo objeto, *.obj, que es del tipo intermedio, es decir transforma el cdigo
fuente en lenguaje de mquina.
3. Concatenacin o enlace.- el programa objeto se enlaza con las libreras matemticas o grficas, segn sea el caso, y generan el programa ejecutable,
*.exe.
1.2 Programa fuente
Est conformado por una unidad de programa, que es una secuencia de comandos que
definen el ambiente de datos y los pasos necesarios para optimizar clculos entre ellos,
toda unidad de programa concluye con la declaracin END. Las unidades de programas
pueden ser: un programa principal, un subprograma externo o subrutina, un mdulo
(contiene definiciones de datos y tipos, definen un procedimiento o funcin, e incluye
interfases), y un bloque de datos (valores para objetos de datos).
Las lneas de programa son de dos clases
1. Ejecutables: definen una accin 2. No ejecutables: definen un atributo.
1.2.1 Formatos para cdigo fuente y lmites del programa
El Compilador Visual Fortran, soporta dos formatos de edicin del cdigo fuente,
formato fijo y formato libre.
1. El formato fijo.- Fortran Fixed Format Source File, que es rgido y una herencia del Fortran 77, admite solo 72 columnas por lnea y tiene una columna fija, la
sexta, debiendo empezar la escritura en la sptima, las cinco primeras se las usa
para numerar las lneas. El Compilador DVF 6.0, disponible en la facultad
admite archivos fuente codificados en F77, a pesar que para la versin F90 este
tipo de formato es considerada obsoleto.
2. El formato libre.- Fortran Free Format Source File, es ms flexible en cuanto a la ubicacin de comandos, admite 132 columnas por lnea.
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 7 -
Los lmites del tamao y complejidad de una unidad de programa o declaracin
contenida en l se detallan en la tabla No. 1.[1]
Elementos del lenguaje Lmite
Nmero de llamadas a subrutina Sin lmite
Argumentos para una subrutina Sin lmite
Dimensiones de matrices 7
Nmero de elementos por dimensin 9*1018
Lneas de continuacin total 511
Anidar DO e IF combinadas 128
Grupos de COMMON 250
Anidar con parntesis 40
Nmero de caracteres del nombre 63
Tabla No. 1.- Lmites del programa
1.2.2 Esquema bsico de un programa tpico en Fortran
El esquema que se presenta en la figura No.1, es solo referencial y hace nfasis en los
tipos de elementos de programas que se usarn en el curso, para obtener el cuadro
completo, vase la referencia [2].
Figura No. 1.- Esquema bsico de un programa tpico
1.2.3 Caracteres indicadores
En la tabla No. 2, se describen los indicadores comnmente usados en programacin
con FORTRAN, se hace una comparacin de los usados en el formato fijo y en el libre,
hay que aclarar que el uso de stos de manera indistinta genera errores en la
compilacin del programa fuente, por lo que debe respetarse la sintaxis en el tipo de
formato que se est usando.
PROGRAM, FUNCTION, MODULE SUBROUTINE, BLOCK DATA
USE declaraciones
Declaracin de variables
Declaracin ejecutables
END
FO
RM
AT
OS
CO
ME
NT
AR
IOS
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 8 -
Descripcin Smbolo Formatos Observaciones
Comentario Todos En cualquier parte
Lnea de comentario
C,c,*
Libre
Fijo Al inicio de la lnea
Continuacin
& Libre Al final y al inicio mximo 39
lneas seguidas
Menos 0 Fijo En la 6. Columna mximo 19
lneas seguidas
Separador de
declaraciones ; Todos
Separa declaraciones en la misma
lnea
Nmero de lnea 5 dgitos Libre Al inicio de la lnea
Fijo De la columna 1 a 5
Separador de lnea / Todos Al final de la lnea
Tabla No. 2.- Caracteres Indicadores
1.2.4 Variables y expresiones matemticas
Los tipos de variables admitidos en FORTRAN son los descritos en la tabla 3, el valor
que se encuentra entre parntesis es el valor que asume el compilador por defecto. La
tabla 4 muestra los operadores admitidos.
Variable Sintaxis Observaciones
Enteros INTEGER(N) N = 1,2,4,8 (4)
Real REAL(N) N = 4,8,16 (4)
Complejos COMPLEX(N) N = 8,16 (8)
Complejo doble precisin DOUBLE COMPLEX(N) N = 8,16 (8)
Lgica LOGICAL(N) N = 1,2,4,8 (4)
Alfanumricos CHARACTER Mximo 256
Matrices DIMENSION Mximo 7 dimensiones
Tabla No. 3.- Tipos de Variables principales
Descripcin Smbolo Tipo Resultado
Suma y resta +,-
Aritmtico Valor numrico Multiplicacin *
Divisin /
Potencia **
Menor que .LT., <
Comparacin
.TRUE.
.FALSE.
Mayor que .GT., >
Igual .EQ., ==
Mayor o igual .GE.,>=
Menor o igual .LE.,
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 9 -
1.2.5 Formatos numricos y alfanumricos
Los descritos en la tabla No. 5 son los formatos numricos para escritura o lectura de
variables admitidos por el lenguaje.
Variable Formato Ejemplo Observaciones
Enteros In I3 : 125 n nmero de cifras
Lgica Ln L1 : Y n nmero de caracteres
Binarios Bn B4 : 1001 (9) n nmero de cifras
Hexadecimales Zn Z3 : A94 n nmero de cifras
Reales decimales Fn.m F4.2 : 3.45
n nmero de cifras, m nmero de decimales
Cientfica En.m E6.1 : .2E+02
n nmero de cifras, m nmero de decimales
Dn.m D8.2 : 0.53D+01 Cientfica de doble densidad
Complejos
Fn.m,Fn.m
2Fn.m
En.m,En.m
(F5.2,F5.1) :
(23.56,125.7)
n nmero de cifras, m nmero de decimales
Alfanumricos An A5 : varia n nmero de caracteres
Tabla No. 5.- Formatos usados en Fortran
Los formatos por defecto en el programa, a menos que sean definidos previamente son
los que se detallan en la tabla No. 6.
Variable Formato
Enteros I12
Lgica L2
Reales (1 a 107) F15.6
Reales (1 a -107) E15.6
Complejos F23.15,F23.15, 2F23.15
Alfanumricos A1
Tabla No. 6.- Formatos por defecto
1.3 Declaraciones bsicas
1.3.1 OPEN
Descripcin
Sirve para abrir un archivo o una variable para posteriormente leer o escribir en ella
informacin producto de una ejecucin o de una asignacin directa de valores.
Sintaxis
iostat,nmeroerr,estadostatus,nombrefile,unidadOPEN
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 10 -
1. Unidad: es un nmero entero que se asigna al elemento con el que se realizar el trabajo.
2. File: el nombre de la variable o del archivo, si se utiliza directamente el nombre del archivo ste debe ser colocado entre comillas.
3. Status: Evala el estado del archivo al ser abierto y toma los siguientes valores: a. new: el archivo es nuevo, el programa lo crea y su estado pasa a ser
old, si ya existe se produce un error y la ejecucin se detiene. b. old: es un archivo ya existente. c. scratch: se trata de un archivo nuevo que no ha sido nombrado, cuando
se lo cierra o termina la ejecucin del programa, este archivo se borra.
d. replace: el archivo que se crea reemplaza a uno ya existente, si lleva el mismo nombre, borra el anterior y se actualiza.
e. unknown: el archivo puede o no existir, si no existe se crea uno nuevo y su estado pasa a ser old. Este estado se aplica por omisin.
4. Err: cuando se produce un error en la ejecucin del comando, el programa pasa a la lnea que se especifica, si se omite err, la ejecucin del programa se detiene.
5. Iostat: es una variable entera, que toma el valor de 1 se existe error, y 0 si no lo hay.
1.3.2 CLOSE
Descripcin
Sirve para cerrar un archivo o una variable que ha sido previamente abierta usando la
declaracin OPEN.
Sintaxis
IOSTAT,nmeroERR,"estado"STATUS,unidadCLOSE
1. Unidad: es el nmero asignado en la apertura del documento, tiene que ser un entero.
2. Status: Evala el estado del archivo al ser cerrado y toma los siguientes valores: a. Keep o Save: guarda el archivo despus de cerrarlo. b. Delete: borra el archivo despus de cerrarlo c. Submit: separa un proceso para ejecutar el archivo. d. Submit/delete: separa un proceso para ejecutar el archivo, entonces
borra el archivo una vez concluda la ejecucin.
3. Err: cuando se produce un error en la ejecucin del comando, el programa pasa a la lnea que se especifica, si se omite err, la ejecucin del programa se detiene.
4. Iostat: es una variable entera, que toma el valor de 1 se existe error, y 0 si no lo hay.
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 11 -
1.3.3 READ - WRITE
Descripcin
Sirve para leer/escribir desde/en un archivo o una variable valores numricos o
alfanumricos.
Sintaxis
varformat,unidadREAD
varformat,unidadWRITE
1. Unidad: es el nmero asignado en la apertura del documento, tiene que ser un entero.
2. Format: formato de lectura, este formato se asigna a la variable que va a ser asignada para los datos ledos. Si no existe un formato especificado se coloca
*, para escribir en pantalla la unidad es *. 3. var: nombre de la variable donde se ejecuta la accin.
1.3.4 IF
Descripcin
Existen de tres tipos:
1. El IF aritmtico: este comando ejecuta tres acciones definidas por la lnea que se designe de acuerdo al valor que toma la variable: negativa, cero o positiva.
2. El IF lgico: este comando ejecuta una declaracin si el valor de la variable es verdadero, caso contrario la ignora
3. El IF condicional: esta declaracin condiciona la ejecucin de un conjunto de acciones a una pregunta lgica: si la respuesta es verdadera entonces ejecuta la
accin despus del comando THEN, caso contrario ejecuta la accin colocada
despus del comando ELSE. Siempre se cierra con la declaracin ENDIF.
Puede obviarse la declaracin ELSE, pero no el ENDIF.
Sintaxis
IF (aritmtico)
IF(expr)label1,label2,label3
1. expr: es una expresin numrica del tipo entero o real, encerrado en parntesis. 2. Label1: es una lnea del programa, la ejecucin pasa a esta lnea si la expresin
es menor que cero.
3. Label2: es una lnea del programa, la ejecucin pasa a esta lnea si la expresin es igual a cero.
4. Label3: es una lnea de programa, la ejecucin pasa a esta lnea si la expresin es mayor que cero.
IF (lgico)
IF (expr)stmt
1. Expr: es una expresin lgica, entre parntesis.
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 12 -
2. Stmt: es una declaracin ejecutable, cuando IF es ejecutado, la expresin lgica es evaluada primero, si su resultado es verdadero, se ejecuta, caso contrario no.
IF (condicional)
IF (expr) THEN
Bloque de ejecucin
ELSE
Bloque de ejecucin
ENDIF
1.3.5 DO
Descripcin
Ejecuta una accin definida controlando el nmero de veces que se ejecuta un bloque.
Sintaxis
DO [Variable = (valor entero)]
Bloque de ejecucin
ENDDO
1.3.6 DO WHILE
Descripcin
Ejecuta una accin definida si la declaracin entre el parntesis es verdadera, caso
contrario la ignora
Sintaxis
DO [WHILE] (expr)
Bloque de ejecucin
ENDDO
1.3.7 SELECT CASE
Descripcin
Selecciona dentro de varias opciones las acciones a seguir de acuerdo al valor que toma
una variable entera, lgica o alfanumrica. Esta declaracin reemplaza al GOTO de
Fortran 77.
Sintxis
[nombre] SELECT CASE (variable)
CASE (valor)
Bloque de ejecucin
CASE (valor)
Bloque de ejecucin.. CASE DEFAULT
Bloque de ejecucin
END SELECT [nombre]
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 13 -
1.3.8 WHERE
Descripcin
Realiza una prueba lgica a los elementos de un arreglo o matriz, o a una matriz
completa, ocasionalmente se le asigna un nombre, que debe ser conservado. Lo que se
encuentra entre los signos de agrupacin [] es opcional en la construccin del bloque.
Sintaxis
[nombre] WHERE (expr 1)
Bloque de ejecucin
[ELSEWHERE (expr2) [nombre]
[Bloque de ejecucin] ...]
[ELSEWHERE [nombre]
[Bloque de ejecucin] ...]
END WHERE [nombre]
1.4 Funciones implcitas
Fortran tiene incluidas funciones matemticas que pueden ser usadas en cualquier lugar
del bloque de ejecucin, siempre tienen la siguiente sintaxis general.
Var = FUNCION(argumento)
En la tabla No. 7 se citan algunas funciones ntese el tipo de argumento que tiene cada
funcin y el tipo de variable que resulta de su ejecucin.
Nombre Definicin Tipo de Argumento Tipo de Funcin
ABS Valor absoluto Entero, real, complejo Entero, real, complejo
ACOS Arco Coseno Real Real
LOG Logaritmo natural Real Real
LOG10 Logaritmo base 10 Real Real
CHAR Convierte a caracter Entero Alfanumrico
CMPLX Convierte a complejo Entero, real, complejo Complejo
EXP Exponencial Real Real
FLOAT Convierte en real Entero Real
LEN Longitud de cadenas Alfanumrico Entero
SQRT Raz cuadrada Real o complejo Real o complejo
Tabla No. 7.- Ejemplo de funciones matemticas
2.0 Vectores y Matrices En FORTRAN existen dos tipos de datos no escalares conocidos como arreglos (ARRAYS), de los cuales existen dos tipos los vectores y las matrices, siendo el vector
una matriz de dimensin uno. En general los arreglos estn formados por conjuntos de
valores que son los elementos del conjunto, por ejemplo cuando nos referimos al
elemento A5, nos referimos al quinto elemento contenido en el vector A, de igual
manera cuando operamos matrices el elemento A2,5, se refiere al elemento de la fila 2,
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 14 -
columna 5 de la matriz A. En FORTRAN la nomenclatura es A(5) y A(2,5)
respectivamente.
Todo elemento de un arreglo, es decir, una variable con sus subndices en FORTRAN
recibe el nombre de variable subindicada.
La estructura de un arreglo en FORTRAN, queda definida con los siguientes
parmetros:
1. Rango: total de dimensiones del arreglo, el mximo 7. 2. Extensin: Componentes que posee un arreglo en cada una de sus dimensiones,
mximo 9*1018
.
3. Tamao: total de elementos de un arreglo 4. Perfil: vector cuyos elementos son las respectivas extensiones de cada
dimensin.
5. Conformidad: igualdad de perfil, entre dos o ms arreglos. 6. SubArreglo: arreglo formado por slo algunos elementos de un arreglo dado.
2.1 Declaracin y disposiciones de memoria
2.1.1 Vectores
Son arreglos de una sola dimensin, que permiten almacenar informacin del tipo real,
entera, compleja y alfanumrica.
Forma de declarar vectores
Se los puede definir de las siguientes maneras:
Tipo, DIMENSION (n) :: lista de vectores
Donde tipo puede ser REAL, INTEGER, COMPLEX, CHARACTER, n corresponde al nmero de elementos que contiene el arreglo, y la lista de vectores son
las variables que se han asignado a cada vector.
Tipo :: variable(i:s), variable2(i:s),
Tipo :: variable(i:s:p), variable2(i:s:p)
Donde el tipo es el mismo del anterior esquema y la lista de arreglos se la hace
determinando su tamao entre parntesis. El primer nmero entero i indica la posicin menor del arreglo y s la posicin mayor del arreglo. Si la posicin menor es 1, se la puede omitir.
Cuando se hacen declaraciones con triple especificacin, el ltimo elemento indica las
posiciones: inferior, inferior + paso, inferior + 2*paso, etc. Sin sobrepasar el lmite
superior si el paso es mayor que cero y si el paso es menor que cero sin llegar a valores
bajo el lmite superior. Si i es omitido se toma el valor de 1, s no puede ser omitido y si el paso es omitido se asume el valor de 1.
Tipo, DIMENSION (:), ALLOCATABLE :: lista de arreglos
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 15 -
En esta forma se ha usado la declaracin ALLOCATABLE, que nos permite
determinar el tamao del arreglo durante la ejecucin, una forma alterna de este mtodo
es el siguiente:
Tipo, DIMENSION (:) :: lista de arreglos
ALLOCATABLE :: lista de arreglos
Luego cuando se conoce el tamao del arreglo se hace la siguiente declaracin:
ALLOCATE(lista de arreglos, STAT = variable entera)
ALLOCATE(lista de arreglos)
Donde la lista de arreglos se definen como VAR(N) y la funcin STAT indica si la
asignacin ha sido realizada con xito. Por lo que se debe colocar a continuacin, un IF
para verificar el paso y evitar errores de ejecucin.
IF (Variable entera /= 0) STOP No hay memoria suficiente
Para liberar la memoria se usa la sentencia DEALLOCATE ( lista).
Otra forma de asignar valores al vector de manera constante y desde el programa fuente
es escribiendo los valores directamente en el vector previamente definido y declarado
como tal.
A = (/valor 1, valor 2, valor 3, .. , valor n/)
A = (/(declaracin, i=1,n)/)
A = (/valor 1, valor 2, (i, i=3,n,m), valor n+1/)
Usando la funcin WHERE tambin se puede asignar valores a los vectores, conocido
los elementos de otro.
Ejemplos
Declaraciones de vectores COMPLEX, DIMENSION (10) :: A,B,C
COMPLEX :: A(10), B(10), C(10)
COMPLEX, DIMENSION (0:9) :: A,B,C
COMPLEX, DIMENSION (0:18:2) :: A,B,C
COMPLEX A(0:9), B(2:18:2), C(::), D(:20:)
Declaraciones de vectores con tamao desconocido REAL, DIMENSION (:), ALLOCATABLE :: A,B,C
Otra forma: REAL, DIMENSION (:) :: A,B,C
ALLOCATABLE :: A,B,C
Luego de un bloque de ejecucin se obtiene n
ALLOCATE(A(n),B(n),C(n), STAT = StatusValor)
IF (statusValor /= 0) STOP No hay memoria suficiente
Asignacin de valores a un vector mediante elementos conocidos. A = (/-2.2, 5.14, 4.0, 2.58/)
A = (/(1.25*I,i=1,10)/)
A = (/7, 1, (i, i=3,18,3), 4/)
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 16 -
Funciones para operar vectores
ALLOCATED (A) Devuelve verdadero si se ha dimensionado el vector DOT_PRODUCT (A,B) Producto punto entre A y B MAXVAL(A) Mximo valor en el arreglo MAXLOC(A) Posicin del primer mximo valor MINVAL(A) Mnimo valor del arreglo MINLOC(A) Posicin del primer mnimo valor PRODUCT(A) Producto de los elementos del arreglo SIZE(A) Nmero de elementos del arreglo SUM(A) Suma de los elementos del arreglo
Ejercicios de aplicacin
1. Declarar un vector de cantidades enteras con las siguientes caractersticas: a. La sucesin de ndices comienza en el -1 y finaliza en el 9, con un
escaln, entre subndices de 2 unidades
2. Se desea asignar al vector Z de nmeros enteros los valores pares comprendidos entre 2 y 12. Usando una funcin para definir los elementos.
3. Haciendo uso de un lazo DO implcito asignar al vector compuesto por 100 nmeros enteros, los siguientes valores: -4 y 8 para el primero y el ltimo
elemento y 0 para los 98 restantes.
4. Escribir un programa que tome una lista de nmeros y los ordene. El usuario deber introducir primero cuantos nmeros quiere ordenar y a continuacin la
lista de nmeros. El programa devolver por pantalla la lista ordenada.
5. Realizar un programa usando FORALL, que convierta todos los caracteres de una frase introducida por teclado en maysculas.
2.1.2 Matrices
Son arreglos de datos con ms de una dimensin, Fortran soporta hasta 7 dimensiones.
Igual que los vectores son del tipo ENTERO, REAL, COMPLEJO o
ALFANUMERICO.
Forma de declarar matrices
Se los puede definir de las siguientes maneras:
Tipo, DIMENSION (n,n2,n3, ., nn) :: lista de matrices
Donde tipo puede ser REAL, INTEGER, COMPLEX, CHARACTER, n corresponde al nmero de elementos que contiene el arreglo, y la lista de matrices son
las variables que se han asignado a cada una.
Tipo :: var1(i:s,i:s,i:s,), var2(i:s,i:s,i:s,),
Tipo :: var1(i:s:p,i:s:p,), var2(i:s:p,i:s:p,)
Donde el tipo es el mismo del anterior esquema y la lista de arreglos se la hace
determinando su tamao entre parntesis. El primer nmero entero i indica la posicin menor del arreglo y s la posicin mayor del arreglo. Si la posicin menor es 1, se la puede omitir.
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 17 -
Cuando se hacen declaraciones con triple especificacin, el ltimo elemento indica las
posiciones: inferior, inferior + paso, inferior + 2*paso, etc. Sin sobrepasar el lmite
superior si el paso es mayor que cero, si el paso es menor que cero sin llegar a valores
bajo el lmite superior. Si i es omitido se toma el lmite inferior del arreglo, si s es omitido se toma el lmite superior del arreglo, y, si el paso es omitido se asume el valor
de 1.
Tipo, DIMENSION (:,:,:,), ALLOCATABLE :: lista de arreglos
La declaracin ALLOCATABLE, nos permite determinar el tamao del arreglo
durante la ejecucin, una forma alterna de este mtodo es el siguiente:
Tipo, DIMENSION (:,:,:,) :: lista de arreglos
ALLOCATABLE :: lista de arreglos
Luego cuando se conoce el tamao del arreglo se hace la siguiente declaracin:
ALLOCATE(lista de arreglos, STAT = variable entera)
ALLOCATE(lista de arreglos)
Donde la lista de arreglos se definen como VAR(n1,n2,) y la funcin STAT indica si la asignacin ha sido realizada con xito, por lo que se debe colocar a continuacin, un
IF para verificar el paso y evitar errores de ejecucin.
IF (Variable entera /= 0) STOP No hay memoria suficiente
Para liberar la memoria se usa la sentencia DEALLOCATE ( lista).
Asignacin de valores
1. Lectura usando DO implcito: READ *,((TABLA(FILA,COL), COL = a,b), FILA = c,d)
READ *,(TABLA(I,J,K), I = a,b), J = c,d), K = e,f)
2. Sub arreglos de una matriz. Sea una matriz A declarada como: INTEGER, DIMENSION (2,3) :: A
Con valores:
665544
332211A
El subarreglo definido por: A(1:2:1, 2:3:1) o simplemente A(:, 2:3) es una
matriz de 2x2 que contiene las dos ltimas columnas de la matriz A.
6655
3322A
El valor del subarreglo definido como A(2, 1:3:1) o simplemente A(2,:) es
un vector que contiene la ltima fila de la matriz
665544A
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 18 -
El valor del subarreglo definido por. A((/2,1/), 2:3), en el cual el primer
trmino est definido por el vector (/2,1/), el que indica que la segunda fila se
considerar primero y luego la primera, es decir indica el orden de asignacin de
las filas, y el segundo trmino est definido por la declaracin (2:3), con paso
de 1, el resultado es un arreglo 2x2
3322
6655A
3. Asignacin de un arreglo a otro. Sean dos matrices declaradas como: INTEGER, DIMENSION (2,3) :: A
INTEGER, DIMENSION (3,2) :: B
Se asigna a la matriz A el valor de 0, el resultado es una matriz 2x3 conteniendo
como elementos ceros. A = 0
000
000A
La declaracin: B = RESHAPE (A, (/3,2/)), asigna a la matriz B el contenido
de A
00
00
00
B
Tambin se pueden asignar valores a manera de subarreglos dentro de una
matriz, por ejemplo en la matriz original A con elementos igual a cero, la
declaracin:
A(:, 2:3) = RESHAPE((/I**2, I = 1,4)/), (/2,3/))
Cambia los valores de A:
1640
910A
4. Asignacin mediante la sentencia WHERE Sean dos matrices A y B declaradas como:
REAL, DIMENSION (2,3) :: A, B
Donde la matriz A tiene los valores:
0.50.100.0
0.00.20.1A
La sentencia WHERE usada como:
WHERE ( A /= 0.)
B = 1.0/REAL(A)
ELSEWHERE
B = 0.0
END WHERE
Los valores asignados a B son:
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 19 -
2.01.00.0
0.05.00.1B
Ejemplos
Declaraciones de matrices COMPLEX, DIMENSION (10,20,10) :: A,B,C
COMPLEX :: A(10,10), B(10,5), C(10,30)
COMPLEX, DIMENSION (0:9,1:4) :: A,B,C
COMPLEX, DIMENSION (0:18:2,1:12:4,0:9:1) :: A,B,C
COMPLEX A(0:9,:13:,1:6), B(2:18:2,12)
Declaraciones de matrices con tamao desconocido REAL, DIMENSION (:,:,:), ALLOCATABLE :: A,B,C
Otra forma: REAL, DIMENSION (:,:,:) :: A,B,C
ALLOCATABLE :: A,B,C
Luego de un bloque de ejecucin se obtiene n y m
ALLOCATE(A(n,m),B(n,m),C(n,m), STAT = StatusValor)
IF (statusValor /= 0) STOP No hay memoria suficiente
Funciones para operar matrices
MATMUL(A,B) Producto de matriz A por B MAXVAL(A,D) Arreglo con los mximos valores de A en la dimensin D, si se
omite D un valor mximo de todo el arreglo MAXLOC(A) Vector con la posicin del primer mximo valor MINVAL(A,D) Arreglo con el mnimo valor de A en la dimensin D, si D se
omite, un mnimo valor de todo el arreglo MINLOC(A,D) Vector con la posicin del primer mnimo valor PRODUCT(A,D) Arreglo de una dimensin menor que contiene el producto de A
con los elementos de la dimensin D RESHAPE(A,S,P,Q) Arreglo que contiene los valores de A con la forma S, seguidos
por elementos del arreglo P y un vector Q especificando el orden
en que los subscriptores se varan cuando se llena la matriz. P y
Q son opcionales. SHAPE(A) Vector con las extensiones del arreglo A SUM(A,D) Arreglo con la suma de los elementos de A en la dimensin D, si
D se omite suma los elementos de toda la matriz SPREAD(A,D,N) Arreglo de dimensin mayor que A obtenida por proyectar A, n
veces a lo largo de la dimensin D TRANSPOSE(A) Transpuesta de A
Ejercicios de aplicacin
1. Declarar una matriz de nmeros enteros, de dos filas y tres columnas. Rellenarla en sus primeros elementos con los valores 11, 12, 13, 14 y los dos restantes con
0, rellenarlas por filas e indicar la matriz obtenida.
2. En un programa se declara una matriz mediante la sentencia: REAL, DIMENSION (-4:0:1,1:7:1):: A
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 20 -
En el mismo programa se escriben las asignaciones vector conteniendo los
subndices que se indican: u = (/-4,-2,-3/) y v = (/2,1,1,3/)
Contestar las siguientes preguntas:
a. Total de filas y columnas que posee la matriz declarada b. Subarreglos obtenidos, respectivamente, con el uso de las variables
A = (-2,v), A(u,2) y A(u,v)
c. Subarreglo obtenido con: A(0,(/1,3,5/)).
3. Escribir un programa que use una matriz de rango 2, donde las extensiones de cada dimensin son variables. El programa leer las extensiones por teclado,
dimensionar la matriz en memoria en funcin de los valores ledos y por ltimo
llenar de valores e imprimir su contenido.
4. Escribir un programa que lea por teclado el listado de notas de hasta 100 alumnos, para cinco ejercicios. Se debern introducir todas las notas para el
primer ejercicio, a continuacin las del segundo, y as sucesivamente hasta
completar los cinco ejercicios. Si la nota introducida es 999, el programa
considerar que ya no hay ms alumnos en dicho ejercicio y pasar al siguiente
ejercicio. El programa deber resolver el nmero de alumnos presentados a cada
ejercicio, la nota media para dicho ejercicio y el listado de notas con la
desviacin con respecto a la media.
5. Escribir un programa que transponga la matriz de dimensin 3x3 de valores reales de doble densidad, leda por teclado. Se emplear la construccin
FORALL sin hacer uso de matrices auxiliares.
2.2 Dimensionamiento dinmico
Los datos pueden ser estticos o dinmicos, en el caso de datos estticos el valor de
memoria asignada a la variable se mantiene constante durante toda la ejecucin del
programa y nicamente se libera cuando termina la ejecucin. En este tipo de datos es
previamente definido el tamao de memoria que se reserva. Cuando un dato es
dinmico la cantidad de memoria puede ser creada, alterada o liberada conforme avanza
la ejecucin del programa y de acuerdo a las necesidades del usuario. En FORTRAN
90/95 existen 3 tipos de dimensionamiento dinmico: punteros (POINTERS), arreglos
alojados (ALLOCATE) y arreglos automticos.
2.2.1 Punteros
El objetivo de su uso es el de almacenar los arreglos consecutivamente dejando
posiciones de memoria sin uso al final del espacio reservado. Considrese la siguiente
declaracin de matrices y vectores:
PARAMETER (NA_MAX = 100)
REAL(KIND = 8), DIMENSION (NA_MAX, NA_MAX) :: A
REAL(KIND = 8), DIMENSION (NA_MAX) :: V, W
Se observa claramente que para no tener que compilar y enlazar el programa cada vez
que se desea trabajar con matrices de tamaos de distintos tamaos se ha definido un
parmetro, este parmetro indica el mximo tamao admisible sin necesidad de
modificar el programa. En este caso se suponen que no existirn matrices de orden
mayor a 100, por lo que se reserva espacio suficiente para matrices 100x100
coeficientes reales de doble densidad, luego un vector de 100 espacios y luego otro
vector de 100 posiciones. Una vez asignado el espacio el programa mediante una
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 21 -
sentencia de lectura o escritura obtiene el orden real de la matriz con la que se va a
trabajar. Por ejemplo:
WRITE (*,*) INGRESE EL ORDEN DE LA MATRIZ
READ(*,*)NDIM
Si por ejemplo se ingresa para NDIM el valor de 4, el programa solo usa las primeras 16
posiciones de memoria para la matriz A, el vector V de 4 elementos se encuentra
almacenado detrs de la matriz A, es decir, hay 1002-16 nmeros reales de doble
densidad que no van a ser usados.
Figura No.- 1 Dimensionamiento no consecutivo
Para el mismo ejemplo se reservarn espacios consecutivos de memoria, pero en un
nico vector denominado DD, que debe contener la matriz A y los vectores V y W, la
matriz A ocupar las primeras NDIMxNDIM posiciones del vector DD, el vector V las
siguientes NDIM posiciones y el vector W las siguientes NDIM, quedan libres por
tanto, las ltimas NA_MAX NDIM2- NDIM NDIM posiciones del vector DD, si NDIM es 4 quedan libres 10177 posiciones consecutivas al final del vector DD, con
esto se ha conseguido que toda la informacin se encuentre prxima independiente de la
dimensin de las matrices.
Queda por lo tanto nicamente indicar al programa donde inicia y donde termina la
matriz y los vectores en el vector DD, a esta instruccin se denomina definicin de
punteros, para lo cual se definen las siguientes instrucciones:
NA = 1 Matriz A
NV = NA + NDIM*NDIM Vector V despus de A
NW = NV + NDIM Vector W despus de V
NEND = NW + NDIM Fin del espacio ocupado
Seguidamente se verifica si el espacio reservado es suficiente
IF (NEND > NA_MAX) THEN
WRITE(*,*) ERROR, Dimensionamiento insuficiente
WRITE(*,*) SE REQUIEREN, NEND, POSICIONES
STOP
ENDIF
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 22 -
Cuando se hace la asignacin en una subrutina simplemente en reemplazo del nombre
del vector o matriz se pasa la posicin del puntero, en el mismo orden.
Figura No.- 2 Reserva consecutiva de memoria
Por ejemplo para el caso visto anteriormente, supongamos que debemos enviar la
informacin de la matriz A y los vectores V y W en una subrutina1, la secuencia
convencional sera:
CALL SUBRUTINA1(NDIM, A, V, W)
Usando los punteros definidos, la asignacin sera:
CALL SUBRUTINA1(NDIM, DD(NA), DD(NV), DD(NW))
En la subrutina se mantiene la sintaxis convencional.
2.2.2 Alojamiento de memoria
Los lmites y la forma de un arreglo no son conocidos sino hasta que se ha ejecutado el
programa, mediante el ingreso o determinacin de la dimensin. Estos arreglos se los
declara como sigue: Tipo, DIMENSION (:,:,:,), ALLOCATABLE :: lista de arreglos
O su equivalente
Tipo, DIMENSION (:,:,:,) :: lista de arreglos
ALLOCATABLE :: lista de arreglos
Una vez conocido el valor de la dimensin que se define se asigna la dimensin usando
la sentencia:
ALLOCATE(lista de arreglos, STAT = variable entera)
ALLOCATE(lista de arreglos)
Donde la lista de arreglos se definen como VAR(n1,n2,) y la funcin STAT indica si la asignacin a sido realizada con xito. Por lo que se debe colocar a continuacin, un IF
para verificar el paso y evitar errores de ejecucin, este paso es opcional, pero cuando se
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 23 -
encuentra ejecutando varios programas a la vez en el computador, se debe considerar la
verificacin de memoria virtual, evidentemente esto no es necesario si estamos seguros
de trabajar con matrices relativamente pequeas y memoria RAM relativamente alta.
IF (Variable entera /= 0) STOP No hay memoria suficiente
Para liberar la memoria se usa la sentencia.
DEALLOCATE (lista de arreglos)
Siempre que sea necesario reasignar valores al arreglo es necesario liberar la memoria,
de igual forma antes de finalizar la ejecucin se recomienda liberar la memoria.
2.2.3 Arreglos Automticos
Este tipo de dimensionamiento se encuentra aplicado nicamente a los subprogramas,
ya que en ellos se define un parmetro de dimensin N y la asignacin se la hace
conocido este parmetro. Por ejemplo considrese el siguiente cdigo fuente:
FUNCTION SUMA(A, M, N)
REAL, DIMENSION (M,N) :: A
SUMX = 0.0
DO J = 1, N
DO I = 1, M
SUMX = SUMX + A(I, J)
END DO
END DO
SUMA = SUMX
END FUNCTION
En el ejemplo propuesto la matriz A tiene dimensin MxN que no se conoce y sin
embargo son argumentos de la funcin, una vez conocidos se puede conocer la
dimensin de la matriz.
2.2.4 Ejercicios de aplicacin
1. Escribir un programa que cree un vector dinmico y lo vaya rellenando con los valores enteros proporcionados por el usuario, el vector comenzar
dimensionado a uno y duplicar su capacidad cada vez que se llene
completamente. El proceso se detiene cuando el usuario ingresa el nmero -987.
2. Escribir un programa que lea dos valores N y M y ubique dinmicamente en memoria una matriz A(n,m) y dos vectores B(m) y C(n) y a continuacin lea por
teclado los valores de cada elemento de la matriz A y el vector B, obtenga el
producto matriz por vector usando la funcin MATMUL. Mostrar la matriz y los
vectores en pantalla.
3. Escribir un programa que genere una matriz de Vandermonde, la definicin de los trminos de la matriz Vandermonde es:
njixaj
iji ,...1,1
,
Donde xi,,xn son nmeros reales distintos entre s, en particular considere: a. Tomar xi = 10
-i+1, con i = 1,,n y presentar los resultados para n = 4
b. Tomar xi = i, con i = 1,,n y presentar los resultados para n = 4
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 24 -
Generar un vector que se define como la suma de las columnas y realice el
producto matriz vector, calcule el mdulo del vector y presente en pantalla la
matriz de entrada, el vector de entrada, el vector producto y el mdulo del vector
producto.
2.3 Almacenamiento por defecto en FORTRAN
En FORTRAN las variables con 2 subndices se almacenan por columnas, por ejemplo,
considere la matriz:
333231
232221
131211
aaa
aaa
aaa
A
Se almacenan los coeficientes siguiendo el orden que imponen las columnas, es decir:
332313322212312111 aaaaaaaaa
En caso de que la variable tenga ms subndices la filosofa se mantiene.
La importancia de conocer la forma de almacenamiento radica en la eficiencia de los
algoritmos, para ilustrar esto vamos a analizar un ejemplo clsico de resolucin de
sistemas lineales con matrices triangulares.
44434241
333231
2221
11
0
00
000
llll
lll
ll
l
L
Por consiguiente para esta matriz el computador la almacena como:
44433342322241312111 000000 llllllllll
Para este ejemplo se ha seleccionado una matriz triangular inferior de dimensin N = 4,
se declaran previamente la matriz A donde se almacenan los coeficientes de la variable,
y el vector B que contiene los trminos independientes, el vector X contiene la solucin
del sistema.
El siguiente cdigo muestra el acceso a los elementos de la matriz de manera natural,
filas y luego columnas.
X(1) = B(1)/A(1,1)
DO I = 1, N
X(I) = B(I)
DO J = 1, I-1
X(I) = X(I) A(I,J)*X(J)
END DO
X(I) = X(I)/A(I,I)
END DO
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 25 -
En este algoritmo la secuencia de acceso a los datos es la siguiente:
44433342322241312111 000000
10 9 6 8537421
llllllllll
Evidentemente el acceso es en desorden y no se accede de forma secuencial, este efecto
de saltar entre posiciones lejanas de memoria se va acentuando a medida que el orden
de la matriz crece.
El cdigo que sigue muestra el acceso a los elementos de la matriz primero por
columnas y luego por filas.
DO I = 1,N
X(I) = B(I)
END DO
DO J = 1, N-1
X(J) = X(J)/A(J,J)
DO I = J+1, N
X(I) = X(I) A(I,J)*X(J)
END DO
END DO
X(N) = X(N)/A(N,N)
En este algoritmo la secuencia de acceso a los elementos de la matriz es la siguiente:
44433342322241312111 000000
10 9 8 7654321
llllllllll
Evidentemente la segunda forma es la ms eficiente para acceder a la informacin. A
pesar que el almacenamiento de ceros sigue siendo un despilfarro de memoria.
3.0 Tipos derivados de datos
3.1 Generalidades
Se puede declarar con una serie de sentencias agrupadas en una declaracin TYPE,
tienen la sintaxis siguiente: TYPE nombre_tipo
Declaracin
Declaracin
END TYPE nombre_tipo
En esta definicin pueden incluirse tantas sentencias como se quiera, el identificador
nombre_tipo es un nombre vlido y ser la denominacin adjudicada al tipo derivado.
Luego stas se las usa en un programa principal usando la siguientes sintaxis
TYPE (nombre_tipo) :: estructura1, estructura2, .
Tambin es posible declarar un arreglo usando la siguiente sintaxis
TYPE (nombre_tipo), DIMENSION (A,B,) :: estructura1, estructura2, .
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 26 -
Cuando se adjudica valores se escribe una serie de constantes, valores lista
componentes del mismo tipo y en el mismo orden que las componentes del tipo
derivado de datos, en forma general se escribe:
nombre_tipo (valores de lista componentes)
Esta forma de definir un valor constante para un tipo derivado de datos, se conoce con
el nombre de constructor de estructura, adems es posible referirse directamente a una
determinada componente de una estructura escribiendo el nombre de esa estructura
seguido del smbolo % y del nombre de la componente:
Nombre_estructura%nombre_componente
Con los tipos derivados de datos as como con sus componentes pueden hacerse ciertas
operaciones.
1. Encapsular un tipo dentro de otro tipo: en la definicin de tipo derivado se puede usar a
su vez otro.
2. Asignar valores a las variables de un tipo derivado: dado que cada componente de una estructura posee cierto tipo declarado, tal componente se puede utilizar de la misma
forma que se hace con cualquier otro dato del mismo tipo.
3. Entrada y salida de componentes de un tipo derivado. READ *, elemento%nombre
PRINT *, elemento%nombre
En cuanto a la entrada o salida de una estructura, sta debe hacerse leyendo o
visualizando elemento a elemento, es decir el valor de cada una de las componentes de forma individual.
3.2 Ejemplos 1. Escribir un programa que lee las coordenadas de dos puntos en el plano, p1(x1,y1),
p2(x2,y2) y calcule los tres coeficientes a,b,c de la recta que los une, sabiendo que esa
ecuacin tiene la forma: ax + by +c = 0, los tres coeficientes de la recta, en funcin de
las coordenadas de los dos puntos son: a = y2 y1, b = x1 x2, c = y1.x2 y2.x1
2. La distancia entre dos puntos de coordenadas (x1,y1) y (x2,y2) est dada por
La pendiente de la ecuacin de la recta m se define como:
Donde b es la interseccin de la recta en el eje y, usando la pendiente b puede calcularse como
Si x1 = x2 entonces no existe interseccin de la recta con el eje y y la pendiente no est definida y la recta que pasa por estos dos puntos es una vertical de
ecuacin
Escriba un programa que calcule la distancia entre dos puntos dados y determine
la ecuacin de la recta que pasa por ellos.
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 27 -
3. Leer de un archivo de datos la informacin de los usuarios de una red siguiendo el
formato que sigue: apellido, nombre, Nmero id, contrasea, total de recursos asignados
y total de recursos empleados, la primera cantidad est en dlares tres cifras enteras y
dos decimales, sin embargo debe ser procesado como nmero real. Organizando esta
informacin en estructura de tipos derivados de datos. Se ingresa el identificador y el
programa busca de la lista y se detiene, extrae toda la informacin pertinente y la
imprime en pantalla, de ser necesario el programa debe poder ingresar informacin
adicional en el archivo de datos.
Un ejemplo de ingreso de informacin es el que sigue:
ESCOBAR PAUL 10101ADA 75038081
MEZA PABLO 10102APLIC 65059884
YUNGAN GEOVANNY 10103CALC 25019374
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 28 -
4.0 El ambiente de trabajo Developer Studio La ruta de acceso al ambiente es: Inicio/Programas/Visual Fortran 6.0/Developer
Studio. Esta ruta ejecuta el escritorio de trabajo de Visual, ste a su vez muestra una
pantalla dividida en cuatro partes, la superior es la seccin de comandos y mens, que
pueden ser personalizadas desde la opcin CUSTOMIZE, del men TOOLS; a la
izquierda aparece la seccin del espacio de trabajo, la mayor parte de la pantalla la
ocupa el escritorio, editor de texto; en la parte inferior se encuentra la pantalla de salida,
donde se indican las observaciones durante la ejecucin o compilacin del programa.
Vase la figura No. 2
Figura No. 2.- Pantalla inicial
En este ambiente, los programas se organizan de la siguiente forma:
1. Cada archivo que contiene un cdigo fuente debe corresponder a un proyecto de trabajo; varios archivos con cdigo fuente pueden ser parte de un proyecto de
trabajo, pero solo uno puede tener el ttulo de PROGRAM.
2. Los proyectos se almacenan en espacios de trabajo, luego varios proyectos pueden estar contenidos en un espacio de trabajo.
3. Cada Espacio de trabajo se guarda en una carpeta independiente del mismo nombre del espacio de trabajo. El archivo que resulta de la compilacin del
programa lleva el nombre del Proyecto de trabajo.
Explorador
del espacio
de trabajo
Escritorio de trabajo
Resultado de los procesos
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 29 -
4. Dentro de la carpeta que contiene el espacio de trabajo se crea una carpeta de nombre DEBUG, que puede ser personalizada y cambiada de nombre desde la
opcin SETTINGS del men PROJECT. En dicha carpeta se almacenan los
archivos intermedios y el ejecutable producto de la compilacin.
4.1 Iniciando un proyecto
El procedimiento para iniciar un proyecto se lo hace siguiendo la ruta: FILE/NEW; se
abre un cuadro de dilogo con varias pestaas, pero por haber optado la opcin de
nuevo, aparece la pestaa de PROJECT, por defecto. Visual Fortran reconoce cinco tipos de proyectos y dos tipos de herramientas de construccin. Los proyectos van
relacionados con la aplicacin final de la compilacin y enlace. Las herramientas con
accesorios extras para facilitar la construccin de programas. Vase la figura No. 3.
Figura No.3.- Tipos de proyectos
Los cinco tipos de proyectos que soporta Visual Fortran son:
1. Fortran Console Aplication: Genera un programa con extensin *.EXE, este tipo de proyecto no requiere pantalla grfica para mostrar sus datos de salida; luce
parecida a un programa corriendo bajo UNIX o a una Terminal conectada a un
servidor. Opera con una sola ventana y la interaccin se resume a leer y escribir,
es mejor usarla cuando el problema requiere salidas numricas y no grficas, es
el proyecto ms fcil de hacer correr en otras plataformas.
2. Fortran Standard Graphics o QuickWin Aplication: Genera un programa con extensin *.EXE. Existen dos tipos de este proyecto: el que contiene una sola
ventana y el que contiene mltiples ventanas, el primero luce igual que una
aplicacin basada en DOS, en ambas es posible usar opciones grficas o
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 30 -
representar grficos como salida de la informacin. El tamao de la ventana
virtual puede ser seleccionada. En este tipo de proyecto se pueden usar rutinas
QUICKWIN, con varias opciones para hacer de las aplicaciones ms amigables,
el mdulo DFLIB trabaja con este tipo de proyectos.
3. Fortran Windows Aplication: Genera un programa con extensin *.EXE, son proyectos que pueden usar todas las opciones API, dando a la aplicacin mucha
ms interactividad con el usuario. Tambin se pueden llamar a funciones de
otras aplicaciones como las de C++. El mdulo DFWIN contiene todas estas
opciones.
4. Fortran Dynamic Link Libraries: Genera un archivo con extensin *.DLL, es un conjunto de cdigo fuente compilada, que contiene solo subprogramas con
funciones o utilidades que son usadas desde el programa principal, se caracteriza
por ser independientes de ste, pero deben encontrarse en el mismo directorio de
la aplicacin principal para que pueda ser usada.
5. Fortran Static Library: Genera un archivo con extensin *.LIB, es un conjunto de cdigo fuente compilado, que contiene subprogramas que sern usados por la
aplicacin principal y necesariamente son vinculados o enlazados en el
programa principal para que puedan ser usados.
Una vez seleccionado y definido el tipo de proyecto que se quiere realizar, se crean los
archivos de cdigo fuente, usando la misma ruta de comandos FILE/NEW, pero esta
vez como ya est definido el proyecto se abre la pestaa de FILE. Vase la figura No. 4.
Figura No. 4.- Tipos de archivos
Note que para ahorrarnos un paso posterior debemos verificar que la casilla ADD TO PROJECT est marcada, de esta forma el archivo que se crea queda almacenado como parte del proyecto. Como inicialmente se va a comenzar con un archivo de cdigo
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 31 -
fuente, se selecciona entre el tipo de archivo FORTRAN FIXED FORMAT o el
FORTRAN FREE FORMAT, de acuerdo a nuestras exigencias. Los nombres que se
den a los archivos deben ser solo letras y nmeros, sin espacios ni caracteres especiales,
salvo la barra baja ( _ ).
Creado el archivo, ste se guarda en la carpeta denominada SOURCE, del proyecto
activo. Cuando un proyecto es definido se crean por defecto 3 carpetas:
1. Source Files: donde se almacenan los programas fuente, con extensin *.FOR o *.F90.
2. Header Files: donde se almacenan los archivos de interface con extensin *.FD o *.FI, entre el programa fuente y los recursos de visual.
3. Resource Files: donde se almacenan los recursos de visual (cuadros de dilogo, conos, men, etc.), archivos con extensin *.RC.
Figura No. 5.- Carpetas del proyecto
4.2 Ejemplos
1. Escriba un programa que permita realizar operaciones con nmeros complejos, es necesario ingresar la informacin desde pantalla y el resultado debe mostrarse
en la pantalla.
Solucin
De acuerdo al esquema mostrado en la figura No. 1, la codificacin de este
programa en formato libre es la siguiente:
! Iniciamos con el titulo del programa
program complejos
! Se evita que el programa adopte la variables por defecto
implicit none
! Definicin de variables
complex a,b,c
integer n
! Bloque de ejecucin
! Ingresa el primer nmero complejo
write(*,*)'Ingrese un nmero complejo, como par ordenado'
read(*,*)a
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 32 -
! Ingresa y se lee desde pantalla el segundo nmero complejo
write(*,*)'Ingrese un nmero complejo, como par ordenado'
read(*,*)b
! Pregunta que tipo de operacin desea
! note que se usa formato de escritura
write(*,10)
read(*,*)n
! Ejecucin de las operaciones
select case(n)
case(1)
c=a+b
case(2)
c=a-b
case(3)
c=a*b
case(4)
c=a/b
case(5)
c=a**b
end select
! Presentacin de resultados en pantalla
write(*,20)c
! Presenta las opciones para operar con complejos
10 format(/' Seleccione la operacin que desea realizar',/,&
&' 1 Suma',/,' 2 Resta',/,' 3 Producto',/,' 4 Cociente',/,' 5 Potencia')
20 format(' El resultado de la operacin es: ','('f10.4,',',f10.4,')')
End
Figura No. 6.- Ejecucin del programa
2. Escriba un programa que permita guardar la informacin del ejemplo anterior en un archivo con nombre proporcionado por el usuario.
Solucin
Al cdigo fuente anterior, antes de la declaracin end podemos adicionar las siguientes lneas:
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 33 -
! Impresin en un archivo de toda esta informacin
write(*,*)'Ingrese el nombre del archivo'
read(*,*)archivo
! Abrimos el archivo y le asignamos un nmero y un status
! Note la condicin 'err=100' para evitar que el programa
! termine de manera inesperada, en caso de que el archivo
! no sea nuevo, la ejecucin del programa pasa a la lnea 100
open(1,file=archivo,status='new',err=100)
! Se escribe la informacin en el archivo, usando formatos
write(1,30)
write(1,40)a,b
write(1,50)texto,c
! Cerramos el archivo
close (1,status='keep')
write(*,*)' Se ha generado un archivo de resultados'
! Definimos los formatos de escritura
30 format(/,' ARCHIVO DE RESULTADOS',/,' Calculadora de complejos')
40 format(' Los nmeros imaginarios ingresados son: ',/,'(',f6.3,',',f6.3,')',/,&
&' (',f6.3,',',f6.3,')')
50 format(' El resultado de la operacin ',a8,' es:', '(',f6.3,',',f6.3,')')
100 end
Previamente deben haberse definido dos variables del tipo alfanumricas,
archivo, para almacenar el nombre del archivo de resultados y texto, para nombrar el tipo de operacin que se realiz con los nmeros. El archivo de
resultados se mostrara como se indica en la figura No. 7.
Figura No. 7.- Archivo de resultados.
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 34 -
5.0 Subprogramas, creacin y usos Son codificaciones que definen acciones y no tienen las caractersticas de un programa
principal; de acuerdo a su uso pueden ser:
1. Subrutinas 2. Mdulos 3. Funciones 4. Interfaces 5. Bloques de datos
5.1 Subrutinas
5.1.1 Definicin
Son subprogramas con igual estructura que un programa, salvo por su ttulo, inicia con
la lnea especificando la expresin SUBROUTINE y depende del tipo de subrutina los
argumentos necesarios. Una subrutina se invoca con la declaracin CALL desde el
programa principal y retorna un valor o varios de la ejecucin de la misma.
Existen 3 tipos de subrutinas:
1. Recursiva: permite incidencia de lo ocurrido sobre s misma 2. Pura: los procedimientos que se ejecuten no pueden incidir sobre s misma 3. Elemental: los procedimientos estn restringidos al hecho de que no se pueden
usar los arreglos de manera simultnea.
La sintaxis de la lnea inicial es la siguiente
[prefijo] SUBROUTINE nombre (lista de argumentos)
El prefijo es opcional y tiene que ver con el tipo de subrutina descrito en el prrafo
anterior: RECURSIVE, PURE, ELEMENTAL, por omisin es pura (PURE). El nombre
de la subrutina sigue las mismas reglas que el de un programa principal, es decir, es una
cadena alfanumrica que inicia con una letra y no puede contener caracteres especiales,
salvo barra baja. La lista de argumentos es opcional, si es que los tiene van separados
por comas.
Las reglas de su uso:
1. Los argumentos de llamada, si los hay, deben ser del mismo tipo que los usados en la ejecucin de la subrutina.
2. La ejecucin de la subrutina empieza con la primera lnea despus del ttulo SUBROUTINE, y retorna el control al programa principal cuando se ha
invocado la declaracin END o RETURN.
3. Una subrutina no puede contener declaraciones de otros subprogramas.
5.1.2 Ejemplo
El siguiente cdigo muestra el llamado a una subrutina PURE, con y sin argumentos
para ilustrar su uso. El resultado de la ejecucin se muestra en la figura No. 8.
program ejemplo
implicit none
! Definicin de variables
real x,y,z
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 35 -
! Bloque de ejecucin
! Llamado a subrutina
call caratula
call calculos(x,y,z)
call impresion(x)
! fin de llamado a subrutinas
end
! Subrutina Cartula, para la pantalla
! inicial de presentacin
subroutine caratula
implicit none
write(*,10)
10 format(/,' PROGRAMA QUE SUMA DOS NUMEROS REALES',/,&
&' Dados Y y Z, obtiene la operacin X = Y+Z',/)
end subroutine
! Subrutina calculos, solicita la informacion por
! pantalla y calcula el valor
subroutine calculos (x,y,z)
implicit none
real x,y,z
write(*,*)' Ingrese el valor de Y'
read(*,*)y
write(*,*)' Ingrese el valor de Z'
read(*,*)z
! realiza el clculo
x=y+z
end subroutine
! Subrutina impresion
subroutine impresion(x)
implicit none
real x
write(*,10)x
10 format(/,' El resultado es: ',e10.4)
End subroutine
Figura No. 8.- Resultado de la ejecucin
5.2 Mdulos
5.2.1 Definicin
Es un subprograma que contiene especificaciones y definiciones que pueden ser usadas
por otros subprogramas o por un programa principal. El nombre del mdulo es
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 36 -
considerado global y nico, no puede repetirse en ningn subprograma, funcin o
procedimiento del programa al que pertenece.
El mdulo no puede hacer referencia a s mismo y sus subprogramas son
independientes entre s, toda accin ejecutable debe especificarse en stos.
La sintaxis usada para definir un mdulo es la siguiente:
MODULE nombre
[especificaciones]
[CONTAINS
subprograma
[subprograma] ...]
END [MODULE [nombre]]
El nombre del mdulo debe cumplir las mismas reglas de asignacin de nombres que se
usan para subrutinas, en la seccin de especificaciones se pueden definir variables o
definir tipos de informacin que va a contener, si se usa esta parte de especificaciones es
mandatario colocar al final la declaracin CONTAINS y luego describir todos los
subprogramas que contiene el mdulo, sean stos: subrutinas, funciones, bloques de
datos, etc. El mdulo finaliza con la declaracin END.
Para usar un mdulo en el programa principal, la declaracin USE despus del ttulo del
programa es colocada y a continuacin el nombre del mdulo, el mdulo debe
compilarse previamente al archivo que contiene el programa principal. El producto de
la compilacin de un mdulo es un archivo con extensin *.MOD que se aloja en la
carpeta DEBUG (por defecto) es decir, en el mismo lugar donde se crear el ejecutable.
Si no queremos compilar en futuras ocasiones el mdulo y lo necesitamos en otro
programa, basta con llevar este archivo *.mod, copiado a la carpeta DEBUG del nuevo
proyecto.
5.2.2 Ejemplo
El ejemplo muestra el uso de mdulos para definir variables que sern usadas en el
programa principal y las subrutinas que son llamadas desde ste, aunque el programa es
sencillo y realiza operacin entre complejos, la aplicacin en problemas ms elaborados
es similar.
El cdigo del programa principal es el siguiente:
program usomodulo
! Declaracin para usar el mdulo
use ejemplo
use variables
! Bloque de ejecucin
write(*,10)
! Llamada a subrutinas del mdulo
call primera(a,b)
call segunda(a,b,c)
call tercera(c)
! Definicin de formatos
10 format(/,'PROGRAMA USANDO MODULOS',/)
! Fin del programa principal
end
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 37 -
El cdigo del mdulo Variables, que hace la declaracin de variables usadas en el
programa principal, es:
module variables
real a
complex b,c
end module variables
El cdigo fuente para el mdulo de ejecucin de las subrutinas, llamado ejemplo en el
programa principal es el siguiente:
module ejemplo
implicit none
contains
subroutine primera(x,y)
real x
complex y
write(*,*)'Ingrese un real'
read(*,*)x
write(*,*)'Ingrese un complejo como par ordenado'
read(*,*)y
end subroutine
subroutine segunda(x,y,z)
real x
complex y,z
z=y*x
end subroutine
subroutine tercera(z)
complex z
write(*,*)' La respuesta es'
write(*,*)z
end subroutine
end module ejemplo
El resultado de la ejecucin se muestra en la figura No. 9.
Figura No. 9.- Resultado de la ejecucin
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 38 -
5.3 Funciones
5.3.1 Definicin
Es un subprograma que evala una expresin y retorna un valor, que se almacena en la
variable que se usa. Dentro de su bloque de ejecucin no puede tener ningn otro tipo
de subprograma o hacer referencia a ellos.
La sintaxis que usa una funcin es la siguiente:
[prefijo] FUNCTION nombre ([lista de argumentos]) [RESULT (variable)]
Bloque que ejecucin
END FUNCTION [nombre]
El prefijo es el mismo que se usa para las subrutinas o define el tipo de funcin que es:
entera, real, alfanumrica o compleja; el nombre cumple con las mismas reglas para
nombrar subprogramas, la lista de argumentos son las variables de entrada y si es el
caso se especifica la variable de salida que resultar de la ejecucin de la funcin.
Cuando la funcin es invocada desde el programa principal simplemente se lo hace con
el nombre de la funcin y el listado de argumentos, de la misma manera que se llama
una funcin implcita del lenguaje.
5.3.2 Ejemplo
El siguiente ejemplo ilustra el uso de funciones en un programa principal, la funcin es
del tipo real y obtiene la semisuma de dos nmeros complejos, al final el resultado es
mostrado por pantalla.
El cdigo fuente del programa principal es el que sigue:
program usofuncion
implicit none
! Definicin de variables
complex x,y,z,semisuma
! bloque de ejecucin
! Ingreso de la informacin
write(*,*)'Ingrese un complejo como par ordenado'
read(*,*)x
write(*,*)'Ingrese un complejo como par ordenado'
read(*,*)y
! Clculo de la funcin
z=semisuma(x,y)
! Escritura de resultados
write(*,*)'el resultado es: '
write(*,*)z
! fin del bloque de ejecucin
end
La funcin SEMISUMA, se define de la siguiente manera
complex function semisuma(x,y)
complex x,y
semisuma=(x+y)/2.0
end function semisuma
El resultado de la ejecucin del programa se muestra en la figura No. 10.
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 39 -
Figura No. 10.- Ejecucin del programa
5.4 Interfaces
5.4.1 Definicin
Es un subprograma que define interfaces explcitas para subprogramas externos o
procedimientos. Tambin pueden ser usados para definir un nombre genrico para
procedimientos, un nuevo operador para funciones o una nueva asignacin para
subrutinas. Puede contener subrutinas o funciones.
Una interface va ubicada en el cuerpo del programa y no puede contener la declaracin
FORMAT, pero si puede hacer referencia a mdulos usando la declaracin USE.
La sintaxis de las interfaces es la siguiente:
INTERFACE [ nombre o especificacin ]
[declaraciones] ...
[ MODULE PROCEDURE nombres o lista de nombres ] ...
END INTERFACE [ nombre o especificacin ]
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 40 -
6.0 Libreras, creacin y usos
6.1 Libreras Estticas (Static Libraries)
6.1.1 Definiciones
Son bloques de codificacin compilados que se mantienen separados del programa
principal, y corresponden a uno de los tipos de proyecto del Estudio de desarrollo
(Developer Studio).
Las libreras estticas ofrecen ventajas de organizacin de programas grandes y para
compartir rutinas entre varios programas; estas libreras contienen solo subprogramas y
el resultado de su compilacin es un archivo con extensin *.LIB. Cuando asociamos
estas libreras al programa, solamente las rutinas necesarias son enlazadas para la
obtencin del programa ejecutable, optimizando de esta manera el tamao de la
aplicacin. Normalmente estos archivos *.LIB se mantienen en sus propios directorios.
6.1.2 Forma de usar
Para crear una Librera Esttica, se elije como tipo de proyecto el denominado:
FORTRAN STATIC LIBRARY, del cuadro de dilogo, posteriormente se codifica
cualquier tipo de subprograma, se compila y obtenemos el archivo .LIB. Cuando
queramos usarlo en otro programa o hacer referencia a los subprogramas que contiene,
desde otro proyecto, simplemente lo adicionamos al proyecto desde el men
PROJECT/ADD TO PROJECT/FILES, se busca la localizacin del archivo y se adjunta
el archivo. Una vez adicionada en el panel de vistas, localizado a la izquierda del editor
debe aparecer a continuacin de las carpetas creadas por defecto, con el nombre y la
extensin, como muestra la figura No. 11.
Figura No. 11.- Librera adicionada al proyecto
Luego se modifica la configuracin de enlace usando el cuadro de dilogo
SETTINGS/LINK, del men PROJECT. En este cuadro de dilogo, en el casillero
final PROJECT OPTIONS, se escribe la siguiente lnea: /nodefaultlib: libc.lib para evitar conflictos con las libreras que se asociaron a nuestro archivo LIB, durante su
compilacin, como se muestra en la figura No. 12.
Una vez realizados estos pasos, se compila y construye el ejecutable del proyecto que
estamos realizando.
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 41 -
Figura No. 12.- Configuracin para adicionar archivos LIB
6.2 Libreras dinmicas (Dynamic Link Libraries)
6.2.1 Definiciones
Son bloques de codificacin compilados que se mantienen separados del programa
principal, enlazados independientemente de la aplicacin que las usa, y corresponde a
uno de los tipos de proyecto del Estudio de desarrollo (Developer Studio). No puede
contener un programa principal, solo subprogramas.
Una DLL ofrece ventajas de organizacin de proyectos superiores a las de una librera
esttica, generando un ejecutable de menor tamao, la codificacin no est incluida en
el programa pero est asociada a l mientras se ejecuta, otra ventaja es que varios
programas pueden usar la misma DLL sin que se hayan compilado con ella.
En Visual Fortran se pueden generar DLL de dos formas:
1. Eligiendo como tipo de proyecto un DLL, con rutinas propias e independientes. 2. Construir aplicaciones con la opcin RUN-TIME LIBRARY almacenada en un
lugar dentro del proyecto del programa principal, siguiendo estos pasos:
a. En el men PROJECT seleccionar SETTINGS. b. En la pestaa FORTRAN seleccionar la categora LIBRARY. c. En el cuadro USE FORTRAN RUN-TIME LIBRARIES, seleccionar
DLL.
6.2.2 Forma de usar
1. Codificacin de un archivo DLL: se requiere incluir en las directivas de compilacin: cDEC$ ATTRIBUTES DLLIMPORT o DLLEXPORT, las
variables deben ser declaradas en el programa principal y en la DLL.
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 42 -
2. Si e