Escolar Documentos
Profissional Documentos
Cultura Documentos
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
-1 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
-2 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
-3 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
-4 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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).
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.
-5 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
-6 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
USE declaraciones
COMENTARIOS
Declaracin de variables
FORMATOS
Declaracin ejecutables
END
-7 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
-8 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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
7
Reales (1 a 10 ) F15.6
Reales (1 a -107) E15.6
Complejos F23.15,F23.15, 2F23.15
Alfanumricos A1
Tabla No. 6.- Formatos por defecto
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
OPEN unidad , file nombre, status estado, err nmero, iostat
-9 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
1.3.2 CLOSE
Descripcin
Sirve para cerrar un archivo o una variable que ha sido previamente abierta usando la
declaracin OPEN.
Sintaxis
CLOSE unidad , STATUS " estado", ERR nmero, IOSTAT
- 10 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Descripcin
Sirve para leer/escribir desde/en un archivo o una variable valores numricos o
alfanumricos.
Sintaxis
READ unidad , format var
WRITE unidad , format var
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
- 11 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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
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]
- 12 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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]
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.
- 13 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Todo elemento de un arreglo, es decir, una variable con sus subndices en FORTRAN
recibe el nombre de variable subindicada.
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.
- 14 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
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:)
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
- 15 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
- 16 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
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:
11 22 33
A
44 55 66
22 33
A
55 66
A 44 55 66
- 17 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
55 66
A
22 33
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
0 0 0
A
0 0 0
La declaracin: B = RESHAPE (A, (/3,2/)), asigna a la matriz B el contenido
de A
0 0
B 0 0
0 0
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:
0 1 9
A
0 4 16
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:
WHERE ( A /= 0.)
B = 1.0/REAL(A)
ELSEWHERE
B = 0.0
END WHERE
- 18 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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)
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
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
- 19 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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:
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
- 20 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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 100 2-16 nmeros reales de doble
densidad que no van a ser usados.
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
- 21 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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)
O su equivalente
Una vez conocido el valor de la dimensin que se define se asigna la dimensin usando
la sentencia:
- 22 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
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
j 1
ai , j xi i, j 1,...n
- 23 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Se almacenan los coeficientes siguiendo el orden que imponen las columnas, es decir:
l11 0 0 0
l21 l22 0 0
L
l31 l32 l33 0
l41 l42 l43 l44
Por consiguiente para esta matriz el computador la almacena como:
l11 l21 l31 l41 0 l22 l32 l42 0 0 l33 l43 0 0 0 l44
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
- 24 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
1 2 4 7 3 5 8 6 9 10
l11 l21 l31 l41 0 l22 l32 l42 0 0 l33 l43 0 0 0 l44
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)
1 2 3 4 5 6 7 8 9 10
l11 l21 l31 l41 0 l22 l32 l42 0 0 l33 l43 0 0 0 l44
- 25 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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
Escriba un programa que calcule la distancia entre dos puntos dados y determine
la ecuacin de la recta que pasa por ellos.
- 26 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 27 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 28 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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
- 29 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
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
- 30 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
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
- 31 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Solucin
Al cdigo fuente anterior, antes de la declaracin end podemos adicionar las
siguientes lneas:
- 32 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
100 end
- 33 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
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.
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
- 34 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
! Bloque de ejecucin
! Llamado a subrutina
call caratula
call calculos(x,y,z)
call impresion(x)
! fin de llamado a subrutinas
end
! Subrutina impresion
subroutine impresion(x)
implicit none
real x
write(*,10)x
10 format(/,' El resultado es: ',e10.4)
End subroutine
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
- 35 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
- 36 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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
- 37 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
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.
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.
- 38 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
- 39 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Una vez realizados estos pasos, se compila y construye el ejecutable del proyecto que
estamos realizando.
- 40 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
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.
- 41 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
6.2.3 Ejemplo
Se va a realizar la codificacin del proyecto DLL y luego la del programa principal,
para ilustrar el uso de las libreras DLL.
Se crearn 4 subrutinas divididas en 2 archivos DLL, uno para realizar sumas y restas y
otro para divisin y multiplicacin. Las variantes que se hacen es que en el de sumas y
restas se generan un archivo para cada subrutina, contenidos en el mismo proyecto. Y
para el caso de producto en el mismo archivo se generan las dos subrutinas.
program main
!DEC$ ATTRIBUTES DLLIMPORT::LIBRERIAS
!DEC$ ATTRIBUTES DLLEXPORT::PRODUCTOS
!DEC$ ATTRIBUTES DLLEXPORT::CASOS
!DEC$ ATTRIBUTES DLLEXPORT::COCIENTES
implicit none
real :: x,y,z
write(*,*)'Ingrese x'
read(*,*)x
write(*,*)'Ingrese Y'
read(*,*)y
call librerias(x,y,z)
write(*,*)'la suma es: ',z
call casos(x,y,z)
write(*,*)'La resta es: ',z
call productos(x,y,z)
write(*,*)'El producto es: ',z
call cocientes(x,y,z)
write(*,*)'El cociente es: ',z
end
- 42 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
En este cdigo podemos observar que la declaracin de atributos se hace para cada
subrutina, no para cada archivo, las cuatro lneas se pueden simplificar usando comas
para separar el nombre de las subrutinas.
Las subrutinas del para sumar y restar son las siguientes, una en cada archivo.
! LIBRERIAS.f90
! FUNCTIONS/SUBROUTINES exportadas desde LIBRERIAS.dll:
! LIBRERIAS - subroutine
!
subroutine LIBRERIAS(X,Y,Z)
!DEC$ ATTRIBUTES DLLEXPORT::LIBRERIAS
implicit none
real :: x,y,z
z = x+y
end subroutine LIBRERIAS
! Fin del archivo
! LIBRERIAS.f90
! FUNCTIONS/SUBROUTINES exportadas desde LIBRERIAS.dll:
! LIBRERIAS - subroutine
!
subroutine CASOS(X,Y,Z)
!DEC$ ATTRIBUTES DLLEXPORT::CASOS
implicit none
real :: x,y,z
z = x-y
end subroutine CASOS
! Fin del archivo
! PRODUCTOS.f90
! FUNCTIONS/SUBROUTINES exported from PRODUCTOS.dll:
! PRODUCTOS - subroutine
!
subroutine PRODUCTOS(x,y,z)
!DEC$ ATTRIBUTES DLLEXPORT::PRODUCTOS
implicit none
real :: x,y,z
z = x*y
end subroutine PRODUCTOS
!----------------------------------------------------
! PRODUCTOS.f90
! FUNCTIONS/SUBROUTINES exported from PRODUCTOS.dll:
! PRODUCTOS - subroutine
!
subroutine cocientes(x,y,z)
!DEC$ ATTRIBUTES DLLEXPORT::COCIENTES
implicit none
real :: x,y,z
z = x/y
end subroutine cocientes
! Fin del archivo
- 43 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
TYPE windowconfig
INTEGER(2) numxpixels ! Nmero de pixels eje X
INTEGER(2) numypixels ! Nmero de pixels eje Y
INTEGER(2) numtextcols ! Nmero de columnas para texto
INTEGER(2) numtextrows ! Number de filas de texto
INTEGER(2) numcolors ! Indice del color
INTEGER(4) fontsize ! Tamao de la fuente.
CHARACTER(80) title ! Ttulo de la ventana (caracteres)
INTEGER(2) bitsperpixel ! Nmeros de bits por pixel.
! Este valor
! es calculado por el sistema y es
! parmetro de salida.
END TYPE windowconfig
USE DFLIB
TYPE (windowconfig) wc
LOGICAL status
! Configura x & y pixels a 800X600 y el tamao de la fuente en 8x12.
wc.numxpixels = 800
wc.numypixels = -1
wc.numtextcols = -1
wc.numtextrows = 302
wc.numcolors = -1
wc.title = " "C
wc.fontsize = #0008000C
status = SETWINDOWCONFIG(wc)
- 44 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Para que esta ventana sea activa debe recibir salidas de texto o grficos pero no por eso
al estar abierta con otras ventanas sta es la superior o la primera que se presenta, para
que esto ocurra se debe usar la sentencia IOFOCUS, en las opciones de la sentencia
OPEN o como una funcin INQFOCUSQQ del tipo entero.
USE DFLIB
INTEGER(4) status, focusunit
OPEN(UNIT = 10, FILE = 'USER', TITLE = 'Child Window 1')
OPEN(UNIT = 11, FILE = 'USER', TITLE = 'Child Window 2')
! Convierte en ventana active a la ventana 2
WRITE (11, *) 'Giving focus to Child 2.'
! Convierte en ventana activa a la 1 con la funcin FOCUSQQ
status = FOCUSQQ(10)
...
! Determina que ventana est activa y la almacena en la variable
status = INQFOCUSQQ(focusunit)
USE DFLIB
INTEGER(4) status
TYPE (QWINFO) winfo
OPEN (4, FILE='USER')
winfo.H = 30
winfo.W = 80
winfo.TYPE = QWIN$SET
status = SETWSIZEQQ(4, winfo)
I = SETBKCOLOR (14)
call clearscreen($gclearscreen)
- 45 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
TYPE (xycoord)xy
CALL MOVETO(INT2(x), INT2(y), XY)
Para escribir texto en pantalla se debe definir primero el color del texto y luego otras
configuraciones usando la subrutina OUTGTEXT y el texto que debe mostrarse, las
lneas de cdigo para hacerlo son:
Para dibujar figuras, la secuencia es la misma solo que en lugar de llamar a la subrutina
OUTGTEXT, se usa la funcin de la figura que se desea dibujar. Esta funcin es del
tipo entera, las funciones que soporta FORTRAN son lneas, rectngulos, elipses y
polgonos. Adems de relleno de estas figuras y opciones de estilo de lnea, siempre
usando como coordenadas los pxeles.
! Dibuja un rectngulo/elipse, el parmetro control puede tener dos
valores: ! $GFILLINTERIOR que indica que el rectngulo ser coloreado
totalmente y no se podr definir la lnea de contorno, y $GBORDER
dibuja el contorno del rectngulo/elipse y el interior transparente.
x1,y1,x2,y2 son las coordenadas en pixeles de la esquina superior
izquierda y la esquina inferior derecha.
i = RECTANGLE (control, x1, y1, x2, y2)
i = ELLIPSE(control, x1,y1,x2,y2)
- 46 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
I4 = messageboxqq(mensajeC,tituloC,objeto.or.objeto.or.objeto)
El resultado de esta funcin es un entero del tipo que se presenta cuando el botn
respectivo ha sido presionado:
1. MB$IDABORT.
- 47 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
2. MB$IDCANCEL.
3. MB$IDIGNORE
4. MB$IDNO.
5. MB$IDOK.
6. MB$IDRETRY
7. MB$IDYES
Para evaluar las opciones se puede usar SELECT CASE y especificar las acciones para
cada botn que se presione.
- 48 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Del cdigo anterior se observa que la funcin que controla las variaciones del men es
la funcin lgica APPENDMENUQQ que tiene 4 argumentos: el nmero de secuencia
en la que se crear el men, el primer men y sus submens tienen el nmero 1, el
segundo 2 y as en adelante, FLAGS corresponde a las opciones que se listan a
continuacin; TEXT el texto que aparecer en el men o submen: ROUTINE, es la
rutina que se ejecuta cuando se selecciona este men, puede ser una rutina por defecto
del sistema o rutinas creadas por el usuario.
Si queremos activar una tecla de acceso rpido para usar un men o submen con
ALT+LETRA, se coloca un & delante de la letra del nombre que aparecer como men
o submen que queremos activar y sta aparecer en la ventana de ejecucin del
programa subrayada. El parmetro ROUTINE corresponde al paso del comando a una
subrutina, propia de FORTRAN o una creada por el usuario, en caso de que el usuario
las haya creado se usa la sentencia EXTERNAL luego de USE DFLIB, para declarar
estas subrutinas. Las rutinas de FORTRAN son:
- 49 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
i = CLICKMENUQQ (item)
- 50 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
I = REGISTERMOUSEEVENT (UNIT,EVENTO,RUTINA)
I = UNREGISTERMOUSEEVENT (UNIT,EVENTO)
Estas subrutinas cuando se las codifica deben constar en su lnea inicial con los
siguientes argumentos enteros:
SUBROUTINE RUTINA(UNIT,EVENTO,ESTADO,X,Y)
ESTADO DESCRIPCION
MOUSE$KS_LBUTTON Click en el botn izquierdo durante el evento
MOUSE$KS_RBUTTON Click en el botn derecho durante el evento
MOUSE$KS_SHIFT La tecla SHIFT aplastada durante el evento
MOUSE$KS_CONTROL La tecla CONTROL aplastada durante el evento
Tabla No. 11.- Estado de los eventos del ratn
- 51 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
7.9.2 Ejemplo
El siguiente cdigo ejemplariza el uso de las funciones basadas en eventos; las acciones
de escribir en pantalla algo especfico pueden ser reemplazados por cualquier accin. En
este caso se ha escrito la accin realizada y la posicin en pixeles dentro de la pantalla
adems dibuja una lnea gris con el botn izquierdo y coloca un punto amarillo con el
derecho, en la posicin X,Y.
program principal
use dflib
external rutina, rutina2
integer :: i
open(1,file='user', title='Ventana 1')
write(1,*)'Eventos del Ratn'
i = registermouseevent(1,mouse$lbuttondown,rutina)
i = registermouseevent(1,mouse$rbuttondown,rutina2)
do while(.true.)
enddo
end
subroutine rutina(unidad,evento,estado,x,y)
use dflib
integer :: i,evento,estado,x,y,unidad
write(unidad,*)'click izquierdo'
write(unidad,*)x,y
i = setcolor(8)
i = lineto(x,y)
end
subroutine rutina2(unidad,evento,estado,x,y)
use dflib
integer :: i,evento,estado,x,y,unidad
write(unidad,*)'click derecho'
write(unidad,*)x,y
i = setcolor(14)
i = RECTANGLE($GBORDER, x, y, x+2, y+2 )
end
- 52 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
I = WAITONMOUSEEVENT (EVENTO,ESTADO,X,Y)
Donde EVENTO son los mismos descritos en la tabla No. 10, ESTADO son los
enunciados en la tabla No. 11, y, X y Y es la posicin en pixeles de la ventana donde
ocurre el evento.
Como la funcin bloquea la ejecucin del programa, debe primero definirse un evento
para esperar su ejecucin. El esquema general de codificacin de esta funcin se ilustra
en el siguiente ejemplo:
event=mouse$lbuttondown
event=ior(event,mouse$move)
i=registermouseevent(unit,event,rutina)
do while (.true.)
i=waitonmouseevent(mouse$move,estado,x,y)
enddo
7.9.4 Ejemplo
El siguiente ejemplo ilustra como se codifica una aplicacin para dibujar a mano alzada,
con el botn derecho con lneas color verde y con el botn izquierdo con rectngulos
blancos de aspecto slido.
program subrutina
use dflib
external boceto
integer i,event,unit,estado,x,y
unit=0
event=mouse$lbuttondown
event=ior(event,mouse$move)
i=registermouseevent(unit,event,boceto)
do while (.true.)
i=waitonmouseevent(mouse$move,estado,x,y)
enddo
end
subroutine boceto(unit,event,estado,x,y)
use dflib
integer i,x,y,event,estado,unit
type(xycoord)xys
selectcase(estado)
case(mouse$ks_lbutton)
i = SETCOLOR(15)
I = rectangle($gfillinterior,x-2,y-2,x+2,y+2)
case(mouse$ks_rbutton)
I = SETCOLOR(10)
i = lineto(x,y)
case default
I = SETCOLOR(0)
i = lineto(x,y)
- 53 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
endselect
end subroutine
- 54 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
program introduccion
! Definicin de mdulos
use dflib
use dflogm
use dfnls
! Definicin de subrutinas que ejecutarn la accin
external adquirir
! Definicin de de variables
logical l4,l,
integer i
type(dialog)dlg
include 'resource.fd'
! Inicializacin del cuadro de dilogos
l = dlginit(idd_dialog1,dlg)
l4 = dlgsetsub(dlg,idok, adquirir)
i = dlgmodal(dlg)
end
- 55 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
La variable que define la funcin dlgget (adquirir) es del tipo lgica; dlg, es la
definicin del tipo de cuadro, IDC_INT es el identificador del cuadro de texto en el
cuadro de dilogo, texto es una variable del tipo alfanumrica, xint es una variable
del tipo real o la que se haya definido.
log = dlgget(dlg,IDC_INT,texto)
read(texto,*)xint
log = dlgget(dlg,IDC_INT,texto)
read(texto,(f6.8))xint
Write(texto,*)xint
Log = dlgset(dlg,IDC_RES,texto).
log = dlgget(dlg,id_control,Variable_logica)
La funcin para asignar el valor lgico a la variable de cada control es DLGSET con
iguales argumentos que el caso anterior.
Se puede cambiar en cualquier momento la lista o los valores de la lista, el nuevo tem,
simplemente se define en una lnea de cdigo como sigue:
- 56 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Para leer desde un LIST BOX, se usa la funcin lgica DLGGET. Hay que aclarar que
solamente se leen caracteres, por lo que si existe un valor numrico en la lista, es
necesario hacer una reasignacin de variables, como se detall en la seccin de los
EDIT BOX. La sintaxis empleada es la siguiente:
Ejemplo
El siguiente cdigo adiciona elementos a un cuadro de dilogo, el resultado de la
ejecucin se presenta en la figura No. 20.
- 57 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
integer(4) i4
logical result
type (qwinfo) winfo
winfo%TYPE = QWIN$MAX
! Maximiza la ventana principal
result = SETWSIZEQQ(QWIN$FRAMEWINDOW, winfo)
! Maximiza la ventana hija
result = SETWSIZEQQ(0, winfo)
write(*,*)' '
do while (.true.)
enddo
end
logical log
integer i4
- 58 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
log = DlgInit(IDD_DIALOG1,dlg)
end subroutine
logical log,retlog1,retlog2
integer i4
real x,y
character*25 texto,numero,texty
- 59 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
numero='0.0'
endif
end subroutine
- 60 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
use dflogm
logical l4,retlog
integer i4
type(dialog)dlg
include 'resource.fd'
l = dlginit(IDD_ACERCA,dlg)
i4 = dlgmodal(dlg)
call dlgexit(dlg)
end subroutine
- 61 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Las subrutinas de trabajo son las denominadas rutinas FAGLXXX, y mediante stas se
pueden crear interfaces para incorporar esta herramienta en aplicaciones personalizadas.
Existen otras rutinas como las denominadas FAVXXX, que controlan la configuracin
del programa, pero en la versin 1.0, que se dispone, no se tiene estas subrutinas.
El mdulo que contiene estas subrutinas es AVDEF, por lo que es importante hacer la
declaracin con la sentencia USE AVDEF, antes de usarlas.
8.1.2 Descripcin
El mdulo contiene 10 subrutinas.
1. FAGLCLOSE
2. FAGLENDWATCH
3. FAGLGETSHARENAME
4. FAGLHIDE
5. FAGLLBOUND
6. FAGLNAME
7. FAGLSAVEASFILE
8. FAGLSHOW
9. FAGLSTARTWATCH
10. FAGLUPDATE
- 62 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
8.1.3 Sintaxis
A continuacin se describen las principales rutinas del programa Array Visualizer,
describiendo sus argumentos y sintaxis.
- 63 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Status Variable entera de uso interno del programa, toma el valor de 0 cuando se
ha ejecutado correctamente la rutina y el valor de 1 cuando no lo ha
hecho.
CALL FAGLUPDATE (array,,status)
Array nombre del arreglo que contiene la informacin a ser presentada es del
tipo real, dimension NxMxP
Status Variable entera de uso interno del programa, toma el valor de 0 cuando se
ha ejecutado correctamente la rutina y el valor de 1 cuando no lo ha
hecho.
CALL FAGLSAVEASFILE (array,filename,status)
Array nombre del arreglo que contiene la informacin a ser presentada es del
tipo real, dimension NxMxP
Filename Variable alfanumrica con el nombre del archivo incluyendo la extensin
*.AGL.
Status Variable entera de uso interno del programa, toma el valor de 0 cuando se
ha ejecutado correctamente la rutina, y, el valor de 1 cuando no lo ha
hecho.
CALL FAGLENDWATCH (array,,status)
Array nombre del arreglo que ha sido usado en la rutina FaglStartWatch
Status Variable entera de uso interno del programa, toma el valor de 0 cuando se
ha ejecutado correctamente la rutina, y, el valor de 1 cuando no lo ha
hecho.
CALL FAGLHIDE (array,,status)
Array nombre del arreglo que ha sido usado en la rutina FaglStartWatch
Status Variable entera de uso interno del programa, toma el valor de 0 cuando se
ha ejecutado correctamente la rutina y el valor de 1 cuando no lo ha
hecho.
8.1.4 Ejemplo
La siguiente codificacin produce la curva de la funcin coseno. El resultado de la
ejecucin del programa se observa en la figura No. 21.
program array
use avdef
do i=0,360
angulo = float(i)*pi/180.
x(i) = cos(angulo)
write(*,*)angulo,x(i),y(i)
enddo
- 64 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
end
- 65 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 66 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 67 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
8.2.4 Ejemplo
La siguiente codificacin produce el ejemplo clsico de Plot88, la curva Gaussiana.
Correspondiente al ejemplo EXA 42; ntese el orden en el que se hacen las llamadas a
subrutinas.
PROGRAM EXA42
CHARACTER*1 TITC(20),NAM1(20),NAM2(20)
CHARACTER*20 TITLE,NAME1,NAME2
CHARACTER*27 FILENAME
REAL XDATA(202),YDATA(202)
INTEGER*2 IC
CHARACTER*1 ANS
EQUIVALENCE (TITC(1),TITLE),(NAM1(1),NAME1),(NAM2(1),NAME2)
DATA IC/0/
open(4,file="exa42.inp")
- 68 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 69 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
CALL PLOT(1.00,1.00,-3)
CALL SCALE(XDATA,6.00,LENG,1)
CALL SCALE(YDATA,3.00,LENG,1)
CALL STAXIS(.25,.25,.111,.112,1)
CALL AXIS(0.,0.,NAME2,-N2,6.00,00.,XDATA(LENG+1),XDATA(LENG+2))
CALL AXIS(0.,0.,NAME1, N1,3.00,90.,YDATA(LENG+1),YDATA(LENG+2))
WRITE(0,*) 'Begin drawing output.'
CALL PLOT(0.0,0.0,999)
60 FORMAT(A27)
61 FORMAT(A20)
1000 FORMAT(A)
END
8.3 CVFGraf
8.3.1 Generalidades
Esta rutina de graficacin fue creada entre abril de 2002 y Junio de 2004, cuando se
hizo la ltima correccin a la presente versin, no por esto quiere decir que no habr
versiones posteriores mejoradas que con la ayuda de retroalimentacin que
proporcionarn ustedes los usuarios de esta rutina. La rutina est escrita en Fortran 90,
formato libre y para ser usada en un proyecto del tipo FORTRAN STANDARD
GRAPHICS. No tiene la estructura de mdulo as que bastar con adicionar al proyecto
el archivo que la contiene y llamar a sus subrutinas desde el programa principal. No
soporta graficacin en tres dimensiones, ni funciones cuyo resultado sean valores
- 70 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
infinitos, los arreglos no tienen lmites, estn declarados con 500 valores pero el usuario
puede cambiarlos a voluntad.
Est compuesta de dos subrutinas una grafica los ejes y otra plotea los puntos en un
plano cartesiano. Si se desea graficar ms de un grupo de pares ordenados en el plano se
llama a la subrutina de PLOTEO tantas veces como se requiera, sin embargo para
definir los ejes es necesario escoger el grupo de pares que puedan contener a los dems
para que se puedan apreciar todos los puntos en el grfico resultante
1. CVFaxis ( )
1.1 Descripcin: Esta subrutina define los ejes de coordenadas del grfico,
requiere de los siguientes parmetros
1.2 Sintaxis
CVFAXIS(x,y,n,titulo,titx,tity,escalas,grilla,fondo,scalx,scaly)
1.3 Argumentos:
1.3.1 X: es el arreglo que desea graficarse en el eje de las abcisas; debe
declararse como un vector de nmeros reales
1.3.2 Y: es el arreglo que desea graficarse en el eje de las ordenadas; debe
declararse como un vector de nmeros reales
1.3.3 N: es el nmero de puntos que van a graficarse, definido por un entero
1.3.4 Titulo: es el ttulo del grfico, que se colocar como ttulo de la
ventana que contiene el grfico. Se la define como carcter, si no ingresa
como variable a la rutina debe colocarse apstrofes con el nombre.
1.3.5 Titx: es el ttulo del eje X, que se colocar a la derecha del eje de
abcisas
1.3.6 Tity: es el ttulo del eje Y, que se colocar sobre el eje de las ordenadas
1.3.7 Escalas: es un nmero entero que puede tomar dos valores CERO (0)
para que cada eje tenga escalas independientes, y, UNO (1) para que los
ejes tengan la misma escala, cualquier otro valor resulta en error.
1.3.8 Grilla: es un nmero entero que puede tomar dos valores CERO(0)
para no graficar una grilla en el plano cartesiano, y, UNO (1) para
graficar una grilla en el plano, cualquier otro valor resulta en error.
1.3.9 Fondo: es un nmero entero que puede tomar tres valores CERO (0)
coloca el fondo negro ejes y textos en blanco, UNO (1) fondo gris, ejes y
textos en negro, DOS (2) fondo blanco, ejes y textos en negro, y, TRES
(3) no grafica ejes pero el fondo siempre ser negro. Las curvas
ploteadas no se ven afectadas en el color.
1.3.10 ScalX: es el valor de la escala para graficar el eje X, resultado que se
obtiene de la subrutina, sirve para ingresar a la subrutina
CVFGRAFICA.
1.3.11 ScalY: es el valor de la escala para graficar el eje Y, resultado que se
obtiene de la subrutina, sirve para ingresar a la subrutina
CVFGRAFICA.
- 71 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
2. CVFGrafica ()
2.1 Descripcin: Esta subrutina plotea los puntos en el plano previa graficacin de
los ejes, si no se ha llamado previamente a la subrutina CVFAXIS no es posible
graficar los puntos.
2.2 Sintxis: CALL CVFGRAFICA(x,y,n,marca,color,scalx,scaly)
2.3 Argumentos: Requiere de los siguientes argumentos de entrada:
2..3.1 X: es el arreglo que desea graficarse en el eje de las abcisas debe
declararse como un vector de nmeros reales
2.3.2 Y: es el arreglo que desea graficarse en el eje de las ordenadas, debe declararse
como un vector de nmeros reales
2.3.3 N: es el nmero de puntos que van a graficarse, definido por un entero.
2.3.4 Marca: es un nmero entero, dibuja una marca para indicar la posicin del par
graficado y toma los siguientes valores:
0 Dibuja una lnea sin marcas
1 Dibuja una lnea con marcas cuadradas
2 Dibuja marcas redondas sin lnea
3 Dibuja marcas cuadradas sin lnea
4 Dibuja una lnea con marcas redondas
5 Dibuja sercha cbica sin marcas
6 Dibuja sercha cbica con marca cuadrada
7 Dibuja sercha cbica con marca redonda
Cualquier otro valor el resultado es error
2.3.5 Color: es un nmero entero que define el color de la curva, y toma los
siguientes valores:
1 rojo
2 blanco
3 verde
4 amarillo
5 azul
6 magneta
7 turquesa
8 gris
2.3.6 ScalX y ScalY: son el resultado de la subrutina anterior.
8.3.3 Ejemplo
La codificacin siguiente genera la curva de las funciones Seno y Coseno.
program principal
real, dimension(500) :: x,y,z
integer i,n,color,marca,escalas,grilla
character(25) titulo,titx,tity
titulo='Funciones Seno y Coseno'
titx='Grados'
tity='Seno/Coseno'
pi=3.14159
do i=0,360
angulo=float(i)*pi/180
y(i)=cos(angulo) x(i)=float(i)
z(i)=sin(angulo)
write(*,*)angulo,y(i),x(i)
enddo
escalas=0 ! usar escalas independientes
- 72 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
8.4 DXFortran
8.4.1 Generalidades
El proyecto DXFortran, fue desarrollado por los profesores Carlos Otero y Davide
Santos de la Universidad de Algarve de Lisboa, Portugal, y tiene por objeto el
desarrollo de una Librera Vectorial de Graficacin en formato DXF (Drawing
Interchange Format) para Fortran 90. El autor de estas notas, adapt esta librera para
ser usada como herramienta de ploteo de coordenadas en un plano y el espacio, de tal
forma que este nuevo arreglo sea usado directamente sin necesidad de conocer a fondo
las rutinas principales del proyecto. Las subrutinas adapatadas fueron adicionadas al
mdulo del proyecto, para evitar errores y est constituido por dos secciones:
- 73 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
1. dfGraph2D ( )
1.1 Descripcin: realiza el ploteo de una funcin matemtica o de un arreglo de
pares ordenados en dos dimensiones, define 3 capas denominadas Ejes
(rojo), Textos (azul) y Grafico (blanco), y todas con el tipo de lnea continua.
El ploteo lo realiza uniendo los pares de coordenadas con un segmento recto.
La longitud de los ejes se define en la subrutina buscando el mximo valor
del arreglo en cada eje y el tamao de los textos son definidos en base a una
fraccin del mnimo de los mximos valores de los arreglos para de esta
forma guardar proporcionalidad entre los textos y el grfico.
1.2 Sintxis: CALL dfGraph2D (Archdxf,Texto,TextX,TextY,x,y,n,L)
1.3 Argumentos:
1.3.1 Archdxf: nombre del archivo con extensin DXF, argumento
alfanumrico
1.3.2 Texto: ttulo del grfico, argumento alfanumrico
1.3.3 TextX: ttulo del eje X, argumento alfanumrico
1.3.4 TextY: Ttulo del eje Y, argumento alfanumrco
1.3.5 x: arreglo que contiene los datos de las abcisas, argumento real
- 74 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
1.3.6 y: arreglo que contiene los datos de las ordenadas, argumento real
1.3.7 n: nmero de puntos en los arreglos, la subrutina soporta hasta 999
puntos, argumento Entero
1.3.8 L: Parmetro Entero que indica si se desea graficar una marca que
indique la posicin de los pares ordenados, los valores que puede
tomar son:
0 Dibuja lneas y no las marcas
1 Dibuja lneas y marcas
2 Dibuja marcas y no lneas
2. dfGraph3D ( )
2.1 Descripcin: realiza el ploteo de una funcin matemtica o de un arreglo de
pares ordenados en tres dimensiones, define 3 capas denominadas Ejes
(rojo), Textos (azul) y Grfico (blanco), y todas con el tipo de lnea continua.
El ploteo lo realiza uniendo los pares de coordenadas con una lnea recta. La
longitud de los ejes se define en la subrutina buscando el mximo valor del
arreglo en cada eje y el tamao de los textos son definidos en base a una
fraccin del mnimo de los mximos valores de los arreglos para de esta
forma guardar proporcionalidad entre los textos y el grfico.
2.2 Sintaxis: CALL dfGraph3D (Archdxf,Texto,TextX,TextY,x,y,z,n,L)
2.3 Argumentos:
2.3.1 Archdxf: nombre del archivo con extensin DXF, argumento
alfanumrico
2.3.2 Texto: ttulo del grfico, argumento alfanumrico.
2.3.3 TextX: ttulo del eje X, argumento alfanumrico.
2.3.4 TextY: Ttulo del eje Y, argumento alfanumrico.
2.3.5 x: arreglo que contiene los datos de las abcisas, argumento real.
2.3.6 y: arreglo que contiene los datos de las ordenadas, argumento real.
2.3.7 z: arreglo que contiene los datos de los valores de Z, argumento real.
2.3.8 n: nmero de puntos en los arreglos, la subrutina soporta hasta 999
puntos. Argumento Entero.
2.3.9 L: Parmetro Entero que indica si se desea graficar una marca que
indique la posicin de los pares ordenados, los valores que puede tomar
son:
0 Dibuja lneas y no las marcas
1 Dibuja lneas y marcas
2 Dibuja marcas y no lneas
La segunda seccin nos permite realizar varios ploteos en el mismo dibujo, para lo cual
es necesario seguir la siguiente secuencia: todo dibujo se inicia con el llamado a dfStart
y los argumentos respectivos, luego si se desea graficar ejes se invoca a la subrutina
dfAxis, la parte del ploteo la realiza la subrutina dfGraph, que puede ser invocada las
veces que sean necesarias para realizar todas los ploteos que se deseen, finalmente debe
terminarse el ploteo con dfEnded (de la primera seccin).
3. dfStart ()
3.1 Descripcin: Inicia el dibujo para ploteo y define 3 capas denominadas
Ejes (rojo), Textos (azul) y Grafico (blanco), y todas con el tipo de lnea
continua.
3.2 Sintaxis: CALL dfStart (archdxf,FileNum)
3.3 Argumentos:
- 75 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
8.4.4 Ejemplo
El siguiente cdigo grafica las curvas de las funciones Seno y Coseno en un archivo
DXF.
program grafico
use dflib
integer i4,j4
character(25) archdata, texto,ARCHDXF
real, dimension (500)::x,y,z,w
pi=3.14159
do i=0,360,1
x(i+1)=pi*float(i)/180.
y(i+1)=sin(pi*float(i)/180.)
- 76 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
z(i+1)=cos(pi*float(i)/180.)
w(i+1)=0.0
enddo
archdxf='grafico.dxf'
CALL dfStart (archdxf,i4)
CALL dfAxis ('SENO Y COSENO','ANGULO','F(X)',x,y,W,360)
CALL dfGraph (x,y,W,360,0)
CALL dfGraph (x,Z,W,360,0)
CALL dfEnded (i4)
end
- 77 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
9.3 Ejemplo
Se us la rutina BCONG, que minimiza una funcin de N variables, sujeta a lmites de
las variables, usando el mtodo de Newton y una gradiente proporcionada por el
usuario.
program LibreriasIMSL
use numerical_libraries
INTEGER N
PARAMETER (N=2)
- 78 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
EXTERNAL ROSBRK
- 79 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
i = winexec(Explorer.exe ayuda.htmC,sw_maximize)
i = winexec(winhlp32.exe ayuda.htmC,sw_maximize)
i = winexec(winhelp.exe ayuda.htmC,sw_maximize)
- 80 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
I = getopenfilename(ofn)
Las especificaciones que deben definirse obligatoriamente para el objeto TYPE son las
siguientes:
1. Presenta el cuadro de dilogo cuando se lo llama: ofn%lStructSize =
SIZEOF(ofn)
2. Define las extenciones que debe presentar: ofn%lpstrFilter = loc(filter_spec)
3. Define el tamao, el nombre y la ubicacin del archivo que se escoge:
ofn%lpstrFile = loc(file_spec)
ofn%nMaxFile = sizeof(file_spec)
ofn%nMaxFileTitle = 0
4. Coloca el ttulo en el cuadro de dilogos: ofn%lpstrTitle = loc("Archivo de
datos"C)
5. Verifica la existencia de la ruta: ofn%Flags = OFN_PATHMUSTEXIST
6. Coloca la extensin por defecto que debe presentarse: ofn%lpstrDefExt =
loc("txt"C)
implicit none
- 81 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
select case(status)
case(0)
i4 = messageboxqq('El archivo no ha sido encontradoC,AbrirC,mb$ok)
return
case(1)
ilen = INDEX(file_spec,CHAR(0))
- 82 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
CALL TABLA(array,titulo,ncols,nfilas,fmt,excel)
El cdigo abajo expuesto dar como resultado una tabla como la presentada en la figura
30.
program main
use dflib
real, dimension(1000,1000)::array
CHARACTER(6) TITULO(1000)
character(25)fmt
NROWS=10
NCOLS=2
do i=1,nrows
array(1,i)=0.2*i
enddo
do i=1,nrows
array(2,i)=30.*9.*array(1,i)*0.65/1.025
enddo
titulo(1)='H'
titulo(2)='DESP'
CALL TABLA(array,titulo,ncols,nrows,fmt,i4)
end
- 83 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
subroutine tabla(array,titulo,NCOLS,NROWS,FMT,EXCEL)
USE DFLIB
REAL,DIMENSION(1000,1000)::array
CHARACTER(6) TITULO(1000)
TYPE (windowconfig) wc
TYPE (xycoord)xy
TYPE (qwinfo)winfo
LOGICAL status
CHARACTER(25) Texto,fmt
INTEGER(2) dummy, x1, y1, x2, y2,result,style
INTEGER(2) fx(1000),fy(1000),tx(1000),ty(1000)
INTEGER(4) i4,EXCEL
IXPIXEL=50*(NCOLS+1)
IYPIXEL=20*(NROWS+1)+20
open(25,file='user')
! Muestra la ventana en la posicion que yo quiero de la ventana
!
wc%numxpixels = IXPIXEL ! pixels en X ancho de la ventana
wc%numypixels = IYPIXEL ! pixels en Y alto de la ventana
wc%numtextcols = -1 ! -1 valores de defecto del sistema
wc%numtextrows = -1
wc%numcolors = -1
wc%title = "PARAMETROS CALCULADOS"C
wc%fontsize = #0008000C ! Rquerido 8x12 pixeles de la fuente
status = SETWINDOWCONFIG(wc)
i4 = SETBKCOLOR(8)
CALL CLEARSCREEN($GCLEARSCREEN)
i4 = clickmenuqq(qwin$tile)
- 84 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
! Fila de ttulos
result = INITIALIZEFONTS()
result = SETFONT('t''Arial''h15w6')
do i=1,NCOLS
call moveto(25+(i-1)*50+7,2,xy)
texto=titulo(i)
call outgtext(texto)
enddo
! Columna de ttulos
do i = 1,NROWS
call moveto(5,20*i+2,xy)
itexto = i
write(texto,'(i3)')itexto
call outgtext(texto)
enddo
- 85 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
result = INITIALIZEFONTS()
result = SETFONT('t''Arial''h14w5')
! Se escriben los vectores por columnas
do j=1,NCOLS
do i=1,NROWS
call moveto(25+50*(j-1)+5,20*i+2,xy)
! Colocar el formato adecuado
write(texto,fmt)array(j,i)
call outgtext(texto)
enddo
enddo
select case(excel)
case(1)
TEXTO=TITULO(1)
call CVFxlsEsc(TEXTO,NCOLS,NROWS,ARRAY)
case(0)
excel=0
end select
END
Para que la subrutina pueda leer el archivo con formato DIF, debe crearse en MS Excel
una hoja electrnica y guardarse como archivo DIF, sin colocar ttulos en las columnas
y empezando en la casilla A1, la escritura se har manteniendo el mismo esquema, esto
es sin ttulos y empezando en la casilla A1.
La rutina est escrita en Fortran 90, formato libre, para ser usado en un proyecto del tipo
FORTRAN STANDARD GRAPHICS. No tiene la estructura de mdulo as que
bastar con adicionar al proyecto el archivo que la contiene y llamar a sus subrutinas
desde el programa principal.
- 86 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
aunque al igual que la subrutina anterior esta dimensin puede variar de acuerdo a las
necesidades del usuario.
1. CVFxlsEsc ()
1.1 Descripcin: Esta subrutina escribe un archivo de datos en formato DIF, capaz
de ser ledo por MS Excel, con la informacin almacenada en un arreglo
x(fila,columna)
1.2 Sintaxis: CALL CVFxlsEsc (archdata,col,n,x)
1.3 Argumentos:
1.3.1 Archdata: es una variable alfanumrica que contiene el nombre del
archivo en el que se escribir la informacin, el programa coloca la
extensin DIF, si el nombre no la tiene y cambia cualquier extensin que
se ingrese a la de DIF.
1.3.2 Col: es el nmero de columnas del arreglo
1.3.3 N: es el nmero de filas del arreglo
1.3.4 X: es el arreglo donde se almacena la informacin que desea escribirse
en el archivo, tiene dimensin (n,col)
2. CVFxlsLee()
2.1 Descripcin: Esta subrutina lee desde un archivo de datos en formato DIF,
informacin numrica y la almacenada en un arreglo x(fila,columna).
2.2 Sintxis: CALL CVFxlsLee (archdata,col,n,x)
2.3 Argumentos: Requiere de los siguientes argumentos de entrada:
2.3.1 Archdata: es una variable alfanumrica que contiene el nombre del
archivo en el que se escribir la informacin, el programa coloca la
extensin DIF, si el nombre no la tiene y cambia cualquier extensin que
se ingrese a la de DIF.
2.3.1 Col: es el nmero de columnas del arreglo, esta variable es el resultado
de llamar a la subrutina.
2.3.1 N: es el nmero de filas del arreglo, variable resultante de llamar a la
subrutina.
2.3.1 X: es el arreglo donde se almacena la informacin que se lee desde el l
archivo, tiene dimensin (n,col).
subroutine CVFxlsEsc(archdat,col,n,x)
! Nota: la declaracin del arreglo x(n,col) debe ser la misma que en
! el arreglo del archivo principal
! la variable con la que se llama a la subrutina debe tener la
! misma dimensin para que sea compatible.
!
! Argumentos
!
! archdat Nombre del archivo de datos, el programa cambia la
! extensin a DIF
! col Nmero de columnas del arreglo de datos, entero
! n Nmero de filas del arreglo de datos, entero
! x Arreglo que contiene la informacin que desea guardarse d
! aunque es mandatorio que debe tener la misma dimensin de
! la variable que llama a la subrutina.
- 87 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
use dflib
use dfwin
integer i,n,col
real, dimension(10,10):: x
character*25 archdat,archdif,arch
character*1 resul(29)
equivalence (resul(1),archdif)
! Escribe el encabezado
write(2,10)n,col
! Fin del encabezado
! Escritura de resultados
do i=1,n
write(2,13)
do j=1,col
write(2,14)x(i,j)
end do
end do
!
! para poder ver el archivo de resultados debe cambiarse el nombre del
! archivo LEE.DIF por el nombre que se uso en el programa
!
- 88 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
if (i4.eq.mb$idyes) then
! Escribe el encabezado
write(2,10)n,col
! Fin del encabezado
! Escritura de resultados
do i=1,n
write(2,13)
do j=1,col
write(2,14)x(i,j)
end do
end do
! Fin de escritura de informacin
10 format('TABLE',/,'0,1',/,'"EXCEL"',/,'VECTORS',/,'0,',I5,/'""',/&
&,'TUPLES',/,'0,',I5,/,'""',/,'DATA',/'0,0',/,'""')
13 format('-1,0',/,'BOT')
14 format('0,',e12.6,/,'v')
15 format('-1,0',/,'EOF')
end subroutine
- 89 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
subroutine CVFxlsLee(archdat,col,n,x)
! Nota: la declaracin del arreglo x(n,col) debe ser la misma que en
! el arreglo del archivo principal, la variable con la que se llama a
! la subrutina debe tener la misma dimensin para que sea compatible.
!
! Argumentos
!
! archdat Nombre del archivo de datos siempre con extensin DIF
! col Nmero de columnas del arreglo de datos, esta variable es
! el resultado de llamar a la subrutina. INTENT (OUT)
! n Nmero de filas del arreglo de datos. INTENT (OUT)
! x Arreglo que resulta de leer la informacin desde un archivo
! de datos DIF, es de dos dimensiones (NxCOL)
use dflib
integer i
integer, intent(out):: n,col
real, intent(out), dimension (200,200):: x
character*25 archdat
character*2 alfa,bravo
return
end subroutine
- 90 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
program VENTANA_SCROLL
use dflib
use dfwin
TYPE (windowconfig) wc
TYPE(qwinfo) wci
TYPE(rccoord) rc
IROW=1
DO I=1,1000
WRITE(6,*)'DATO No. ',I
ENDDO
subroutine tobottom(unit)
use dflib
use dfwin
integer unit, hwnd, res
hwnd = GetHwndQQ(unit)
res = SendMessage(hwnd,WM_VSCROLL,SB_BOTTOM,0)
end subroutine tobottom
subroutine scrolldown(unit,rows)
use dflib
- 91 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
use dfwin
integer unit, hwnd, res, rows, i
hwnd = GetHwndQQ(unit)
do i = 1, rows
res = SendMessage(hwnd,WM_VSCROLL,SB_LINEDOWN,0)
enddo
- 92 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
En trminos generales los mtodos de resolucin se ajustan a los tipos de matrices, los
primeros se resuelven con mtodos directos y los segundos con mtodos iterativos.
Mtodos directos
Los mtodos directos de resolucin son aquellos que permiten obtener la solucin del
sistema despus de un nmero finito de operaciones.
Debido a que las computadoras tienen un nmero finito de cifras decimales, los errores
de redondeo se propagan, de manera que se pretende desarrollar mtodos con un
nmero mnimo de operaciones, la clasificacin de los mtodos directos son:
- 93 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
La solucin se expresa como sustitucin hacia delante o hacia atrs, segn se est
resolviendo un sistema triangular superior o inferior respectivamente. Los algoritmos
para resolver estas matrices son:
El nmero de operaciones que deben realizarse en cada caso es: n2 para ambos casos
Mtodos de eliminacin
1. Mtodo de Gauss, eliminacin simple: este mtodo se basa en transformar la matriz
original A, mediante permutaciones y combinaciones lineales de las ecuaciones en una
matriz triangular superior, este nuevo sistema equivalente se resuelve de manera
inmediata, aplicando el algoritmo del apartado anterior.
- 94 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Mtodos de descomposicin
Los mtodos de factorizacin se fundamentan en el concepto de que toda matriz A
puede descomponerse en matrices triangulares superiores e inferiores o en el producto
- 95 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
A = LLT
- 96 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
El algoritmo para realizar esta transformacin es para el caso del Mtodo de Crout:
- 97 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
- 98 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Nota: Toda la teora, algoritmos y ejemplo han sido extrados del texto de la referencia:
[8]
- 99 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
11.1 Documentacin
La documentacin de una aplicacin puede ser agrupada en dos categoras, la
documentacin externa, es decir la que se genera fuera del cdigo y la interna que viene
incluida dentro del cdigo. Para fines de modificaciones, stas deben hacerse en los dos
tipos de documentacin y en lo posible si el cdigo va a ser colocado en Internet o para
intercambio con otros centros de investigacin deben escribirse en ingls.
- 100 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
!-----------------------------------------------
!
! [Nmero de seccin] [Ttulo de seccin]
!
!-----------------------------------------------------------------------
! [Comentario]
- 101 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
!
!
Program [ProgramName]
! Description:
! [Say what this program does]
!
! Method:
! [Say how it does it: include references to external documentation]
! [If this routine is divided into sections, be brief here,
! and put Method comments at the start of each section]
!
! Input files:
! [Describe these, and say in which routine they are read]
! Output files:
! [Describe these, and say in which routine they are written]
! History:
! Version Date Comment
! ------- ---- -------
! [version] [date] Original code. [Your name]
! Code Description:
! Language: Fortran 90.
! Software Standards: "European Standards for Writing and
! Documenting Exchangeable Fortran 90 Code".
! Declarations:
! Modules used:
! Imported Parameters:
- 102 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
! Imported Routines:
Implicit None
! Include statements
! Declarations must be of the form:
! [type] [VariableName] ! Description/ purpose of variable
! Local parameters:
! Local scalars:
! Local arrays:
11.4.2 Subrutinas
! Description:
! [Say what this routine does]
!
! Method:
! [Say how it does it: include references to external documentation]
! [If this routine is divided into sections, be brief here,
!and put Method comments at the start of each section]
!
! Current Code Owner: [Name of person responsible for this code]
!
! History:
! Version Date Comment
! ------- ---- -------
! [version] [date] Original code. [Your name]
!
! Code Description:
! Language: Fortran 90.
! Software Standards: "European Standards for Writing and
! Documenting Exchangeable Fortran 90 Code".
!
! Declarations:
! Modules used:
! Imported Parameters:
- 103 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
! Imported Routines:
Implicit None
! Include statements:
! Declarations must be of the form:
! [type] [VariableName] ! Description/ purpose of variable
! Subroutine arguments
! Scalar arguments with intent(in):
! Local parameters:
! Local scalars:
! Local arrays:
11.4.3 Funciones
! Description:
! [Say what this function does]
!
! Method:
! [Say how it does it: include references to external documentation]
! [If this routine is divided into sections, be brief here,
! and put Method comments at the start of each section]
!
! Current Code Owner: [Name of person responsible for this code]
!
! History:
! Version Date Comment
- 104 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
! Imported Parameters:
! Imported Routines:
Implicit None
! Include statements:
! Function arguments
! Scalar arguments with intent(in):
! Local parameters:
! Local scalars:
! Local arrays:
11.4.4 Mdulos
!
! Description:
! [Say what this module is for]
!
! Current Code Owner: [Name of person responsible for this code]
!
- 105 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
! History:
!
! Version Date Comment
! ------- ---- -------
! [version] [date] Original code. [Your name]
!
! Code Description:
! Language: Fortran 90.
! Software Standards: "European Standards for Writing and
! Documenting Exchangeable Fortran 90 Code".
!
! Modules used:
!
Use, only : &
! Imported Type Definitions:
! Imported Parameters:
! Imported Routines:
Implicit none
! Global (i.e. public) Declarations:
! Global Type Definitions:
! Global Parameters:
! Global Scalars:
! Global Arrays:
! Local Parameters:
! Local Scalars:
! Local Arrays:
! Operator definitions:
! Define new operators or overload existing ones.
Contains
! Define procedures contained in this module.
- 106 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
5. Escriba un programa que dada una matriz nxm sume filas, columnas y general,
halle promedios entre filas y columnas y general, la matriz se lee desde un
archivo y los resultados deben ser impresos por pantalla y en un archivo.
- 107 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
V 0.5V
CB
3.28 LPP LPP
CB 0.7 0.125ATAN 25 0.23 FN
0.14 LPP 20B
CB
FN 26B
0.23 LPP 20B
CB
3
FN 2 26B
10. Escriba un programa en Fortran que almacene en una matriz de dimensin NxN,
la funcin que se describe, entre los valores de -2.0 y 2.0, para X y Y.
- 108 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
x 2 y2
z e
Esta frmula se refiere a codastes abiertos, sin considerar diferencias entre los
giros de estribor o babor, si el codaste es cerrado, el sexto trmino se reemplaza
el coeficiente de -35.8 por +3.82.
Buques de dos hlices
197Cb 41TRIM 4.65B 188 218APala 25.66ABulbo 1.77V
DG Lpp 0.727
Lpp Lpp Lpp H N 1 Lpp H Lpp
- 109 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
En general IMO requiere que, tras haber metido el timn 10, el buque no
recorra ms de 2.5 veces su eslora cuando su rumbo haya cambiado 10.
- 110 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Relaciones tiles:
n x i2 xi
i 1 i 1
n n
yi xi
i 1 i 1
Frmulas tiles
yA
y (Distancia del eje neutro respecto la lnea base)
A
bh 3
I zz Io Ad 2 Io (Donde b es la base, h la altura)
12
Mc
mx
I zz
ESFUERZO A
MATERIAL
TENSION (Kg/cm2)
Aluminio de aleacin 4200
Hierro colado gris 2100
Magnesio de aleacin 2800
Acero al nquel y carbono 14000
- 111 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
El dgito de control
La utilizacin del dgito de control tiene por objetivo el establecer un mecanismo
que evite errores en el tratamiento automtico de los cdigos EAN. El dgito de
control es la ltima cifra del cdigo EAN de un producto. Su clculo se realiza
automticamente en funcin del valor de las posiciones que le preceden en el
cdigo, mediante un sencillo algoritmo.
1. Multiplicamos por 1 las posiciones impares y por 3 las posiciones pares del
cdigo empezando de derecha a izquierda.
2. Tomemos como ejemplo el siguiente cdigo: 841234567890 sabiendo que el
84 corresponde con el pas, los siguientes 5 dgitos con la empresa y los
ltimos 5 dgitos con el artculo/producto. Sumamos los valores resultantes.
8+12+1+6+3+12+5+18+7+24+9+0 = 105
- 112 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
El juego A tiene un nmero impar de mdulos oscuros. Por esta razn se dice
que el juego de simbolizacin A tiene paridad impar. Los juegos B y C son
juegos de simbolizacin con paridad par (el nmero de mdulos oscuros es par).
- 113 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Los separadores laterales indican principio y fin de las barras del smbolo. El
separador lateral izquierdo se representar con los 3 mdulos laterales ms 11
mdulos claros a la izquierda
Estos mdulos claros deben de existir de tal forma que la omisin de estos, no
garantizara la correcta lectura.
- 114 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
13 12 11 10 9 8 7 6 5 4 3 2 1
0 A A A A A A
1 A A B A B B
2 A A B B A B
3 A A B B B A
4 A B A A B B
C
5 A B B A A B
6 A B B B A A
7 A B A B A B
8 A B A B B A
9 A B B A B A
Tabla No. 1.- Juego de caracteres de simbolizacin EAN-13
- 115 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
15. Escriba un programa en Fortran que permita escoger una figura para graficar
entre la siguientes opciones: rectngulo, polgono de N lados, elipse o crculo, el
usuario debe seleccionar el tipo e ingresar la informacin referente a
dimensiones o nmero de lados, el grfico se lo hace en pantalla y en un archivo.
16. Haga un programa en Fortran para dibujar un boceto a mano alzada sobre la
ventana.
- 116 -
ESCUELA SUPERIOR POLITECNICA DEL LITORAL
FACULTAD DE INGENIERIA MARITIMA Y CIENCIAS DEL MAR
PROGRAMACION APLICADA 1
Referencias
[1] Etzel, M., Dickinson, K. Digital Visual Fortran Programmers Guide, 1999
[2] Digital Equipment Co. Digital Fortran, Language Reference Manual, 1997.
[3] Nyhoff, L., Leestma, S., Fortran 90 for Engineers and Scientists, 1997
[4] Jones, C., Fortran 90 Standards, 2001
[5] PlotWorks, Plot88 Users Manual, 2000.
[6] Moreno, J., CVFGraf Manual de Usuario, 2004
[7] Santos, D., Otero D., DXFortran Gua del Usuario, 2002
[8] Varios, Mtodos Numricos Introduccin, aplicaciones y programacin, 1998.
[9] Varios, Programacin en FORTRAN 95 y Problemas resueltos, 2005.
- 117 -