Transcript
  • 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


Top Related