Está en la página 1de 16

UNIVERSIDAD AUSTRAL DE CHILE FACULTAD DE CIENCIAS DE LA INGENIERA INSTITUTO DE OBRAS CIVILES ESCUELA DE INGENIERA CIVIL EN OBRAS CIVILES.

Conceptos Introductorios sobre el Lenguaje FORTRAN.


Informativo N1

Estos apuntes son entregados a los alumnos que cursan la asignatura de Computacin para Ingeniera Estructural (IOCC 281), para la Carrera de Ingeniera Civil en Obras Civiles de la Universidad Austral de Chile. Su confeccin se ha hecho con el fin de entregar a los alumnos una gua de comandos bsicos y sencillos ejemplos que les facilite el aprendizaje del lenguaje FORTRAN. Lgicamente la presente gua puede quedar supeditada a limitaciones y errores, los cuales debieran sortearse con informacin complementaria y correcciones, respectivamente, en virtud de la correcta elaboracin de apuntes para fines educativos de vuestra Escuela.

Pablo E. Oyarzn H. Ing. Civil en Obras Civiles Universidad Austral de Chile

1.

Estilo de codificacin para programas en lenguaje FORTRAN.

En la primera columna de la figura, una C o * indican lnea de comentario. Las lneas marcadas con estos smbolos son ignoradas en materia de compilacin. Estas lneas son, sin embargo, necesarias en todo programa bien documentado, y son requeridas en cualquier parte de la unidad de programa debido a la permanente necesidad de incorporar informacin que facilite la comprensin del cdigo. Para indicar lnea de continuacin se utiliza un caracter cualquiera (diferente de cero o espacio en blanco) en la columna 6; podr haber un mximo de 19 lneas consecutivas de continuacin. Para la enumeracin de las lneas de comandos puede usarse cualquier entero positivo, consistiendo en 1 a 5 dgitos, sin necesidad de enumerar en forma ordenada distintas lneas a lo largo del programa. Estos nmeros deben colocarse dentro del campo delimitado por las columnas 1 y 5 (incluyendo la primera columna para comentarios); los ceros a la izquierda de dicho nmero son ignorados para tal efecto. Las columnas 73 a la 80 son ignoradas por el compilador, y por tal motivo podran usarse nicamente para propsito de incluir comentarios. Los espacios en blanco en general son ignorados. No obstante se utilizan frecuentemente para proporcionar suficiente legibilidad al programa.

2.

Constantes.

Se definen como cantidades fijas, invariables. Existen los tipos siguientes: Numricas: Se clasifican en enteras (sin punto decimal) y reales (con punto decimal); como extensin a stas se expresan nmeros reales con formato exponencial, nmeros complejos, entre otros; Tratan con valores lgicos (verdadero-falso); Tratan secuencias de caracteres admitidos por el lenguaje.

Lgicas: Cadenas de caracteres: 3. Variables.

Se definen como entidades que almacenan informacin mediante un determinado nombre (ste debe comenzar por una letra necesariamente). Existen las variables simples que pueden almacenar distintos valores, pero en un instante dado puede atribursele apenas un valor. Por otro lado existen tambin las variables compuestas, tales como vectores y matrices, a las cuales se les asigna un conjunto de valores. Tipos de variables: Existen las variables enteras, reales y lgicas. A cada una de ellas puede asignrsele valores correspondientes a constantes enteras, reales y lgicas respectivamente. Declaracin para variable entera: Declaracin para variable real: Declaracin para variable entera: INTEGER VAR1, VAR2,... REAL VAR1, VAR2,... LOGICAL VAR1, VAR2,...

Nota: Las variables que comiencen con I, J, K, L, M o N son interpretadas por defecto como variables enteras (salvo que sean declaradas segn el tipo correspondiente o que se escriba la sentencia IMPLICIT NONE); las dems son asumidas como variables reales. Por otra parte, la declaracin podr ir acompaada de informacin relativa a la precisin con la que ser almacenada la variable, por ejemplo: REAL*4 VAR1, VAR2,... (Valor real de precisin simple)

4.

Expresiones aritmticas.

Las expresiones aritmticas se construyen utilizando operandos numricos (constantes, variables, funciones aritmticas o expresiones aritmticas entre parntesis) en combinacin con operadores aritmticos, los cuales son Adicin Substraccin Multiplicacin Divisin Exponenciacin + * / **

Nota: No se permiten operadores adyacentes, tales como A*-B. Las expresiones aritmticas obedecen jerrquicamente, de mayor a menor prioridad respectivamente, a los siguientes operadores: Clculo de funciones. Exponenciacin. Multiplicacin y divisin. Adicin y substraccin. 5. Funciones embutidas.

Son funciones de uso frecuente proporcionadas desde ya por el lenguaje de programacin, como los son
Funcin matemtica: SEN(X) COS(X) TG(X) FORTRAN SIN(X) COS(X) TAN(X) SQRT(X) REAL(I) o FLOAT(I) INT(X) o IFIX(X) ABS(X) EXP(X) ALOG(X) ALOG10(X) Tipo de resultado REAL REAL REAL REAL REAL ENTERO REAL REAL REAL REAL

X1/2
ENTERO -> REAL REAL -> ENTERO |X|

eX
Ln(X)

Log10(X)

Nota: tambin puede efectuarse la composicin de funciones, como por ejemplo COS(SQRT(X)). Por otro lado, para aplicar una de estas funciones a la obtencin de un resultado en doble precisin, puede efectuarse lo siguiente:

REAL*8 VAR1, VAR2 VAR2 = DSQRT(VAR1) 6. (Argumento y resultado evaluados en doble precisin)

Tipos de comandos frecuentemente utilizados en lenguaje FORTRAN.

Los comandos de lenguaje que constituyen una unidad de programa pueden clasificarse en dos categoras: Ejecutables: Son aquellos que efectan clculos (funciones), entrada o salida de datos (comandos de identificacin de archivos, lectura e impresin, tales como OPEN, READ, WRITE, PRINT), aquellos que evalan condiciones (como IF, THEN, ELSE, ELSEIF, ENDIF, SELECTCASE, CASE, entre otros) o alteran el flujo de control (a modo de ejemplo: GO TO, CONTINUE, etc); Son aquellos que describen las caractersticas de la unidad de programa, los datos, informacin de edicin, etc., o sea no causan una accin que deba ser tomada por el computador durante la ejecucin del programa.

No ejecutables:

De una forma algo ms especfica, los comandos de FORTRAN pueden agruparse segn lo siguiente: Permiten atribuir o asociar un valor a una variable y corresponde al signo =; Comandos de control: Permiten alterar la secuencia de ejecucin de los comandos de un programa. Por ejemplo DO, ENDDO, IF, THEN, ELSE, ENDIF, GO TO, WHILE, RETURN, EXIT, etc.; Comandos de entrada y salida E/S: Permiten realizar la transferencia de informacin entre el usuario y la mquina. Por ejemplo READ, WRITE; Comandos de programa principal: Este comando atribuye un nombre al programa principal. Corresponde al comando PROGRAM; Comandos de declaracin: Son comandos no ejecutables y apenas identifican variables de acuerdo a su tipo y en algunos casos su valor (como en el caso del comando DATA y PARAMETER). Por ejemplo pueden citarse PARAMETER, IMPLICIT, DATA, DIMENSION, COMPLEX, REAL, INTEGER, etc.; Comandos de subprogramas: Permiten identificar por su nombre a diferentes unidades, de programa tales como funciones y subrutinas. Ejemplos: SUBROUTINE, FUNCTION. Comando de atribucin:

6.1

Declaracin de constantes simblicas; comando de declaracin PARAMETER.

En algunas ocasiones se representa una constante a travs de un nombre, a modo de smbolo, en lugar de un valor. Esto puede llevarse a cabo utilizando el comando de declaracin PARAMETER de la siguiente forma: PARAMETER (Nombre de constante = expresin constante, Nombre de constante = expresin constante, ...)

El nombre (smbolo) de la constante obedece las mismas reglas relativas a nombres de variables. El uso de un nombre simblico para constantes favorece aspectos de legibilidad, documentacin y mantencin de un programa. 7. Estructura general de un programa en lenguaje FORTRAN.

Un programa FORTRAN presenta generalmente la siguiente forma esquemtica simplificada:

El comando END tiene como objeto indicar al compilador el fin fsico de la unidad de programa, por lo que debe ser el ltimo comando de una unidad, y es obligatorio. El comando STOP delimita la ejecucin de la unidad de programa y devuelve el control al sistema operacional indicando el final lgico de la ejecucin del programa. En ausencia de un STOP el compilador asume que el fin lgico de la unidad de programa coincide con su fin fsico. En caso de utilizarse el comando RETURN, en una subrutina por ejemplo, el control retorna a la unidad de programa que efectu la llamada a la subrutina (puede ser el programa principal u otra subrutina), sin necesidad de que el control recorra dicha subrutina hasta encontrar el comando END.

8.

Comandos de entrada y salida de datos.

Los comandos de entrada y salida de datos (E/S) controlan y transfieren informacin entre la unidad de memoria principal y un dispositivo externo de entrada/salida. 8.1. Comandos READ y WRITE. El comando para lectura de datos posee la siguiente forma general: READ ([UNIT=] i , [FMT=] n, IOSTAT= ios, ERR= err, END= s) VAR1, VAR2 donde i: n: Nmero entero que identifica una unidad (nmero entero) para el archivo de entrada. Para leer desde la pantalla se utiliza * en lugar del nmero entero; Nmero de lnea que contiene un determinado comando FORMAT, que identifica formato para lectura de los datos. Un * en lugar de n implica lectura de datos en formato libre (o sea, sin formato predeterminado); Indicador opcional que acusa el estado de la sentencia; caso la lectura sea considerada exitosa arroja el valor 0, caso contrario arroja un valor diferente de cero; Indicador opcional que establece el nmero de lnea de comando al cual saltar la ejecucin del programa en caso que se detecte un error en la lectura; Indicador que contiene un nmero de lnea de comando al cual saltar la ejecucin del programa en caso que se detecte el final del archivo.

ios: err: s:

Observaciones:
Las variables VAR1 y VAR2 sern leidas dentro del archivo de unidad

asociada i, segn el formato de presentacin especificado mediante el comando FORMAT a partir de la lnea n. Los datos sern leidos segn el orden en que aparezcan escritas las mencionadas variables junto al comando READ, de izquierda a derecha, o sea primero VAR1 y luego VAR2; Las unidades asociadas a cada archivo (sea archivo de datos ledos o de resultados impresos) se definen por medio de la instruccin OPEN, que ser vista ms adelante; A modo de observacin, las instrucciones UNIT= y FMT= encerradas en corchetes pueden no escribirse, dejando escritos apenas los indicadores i y n;

El comando para la impresin de resultados corresponde a la instruccin

WRITE, emplendose en forma completamente anloga al comando READ. Una forma simple de incluir este comando, prescindiendo de los indicadores opcionales, consiste en WRITE (i , n) VAR1, VAR2 8.2. Comando OPEN.

Normalmente, tanto para lectura de datos como para la impresin de resultados, se hace necesario contar con diferentes archivos para tales fines; siendo que leer e imprimir todo por pantalla resulta absolutamente insuficiente en programas extensos que involucren muchos datos y clculos. El primer paso, incluso previo a la utilizacin de comandos READ y WRITE, consiste en la apertura de estos archivos, desde los cuales se leern datos o se imprimirn resultados. El comando para llevar a cabo tales efectos es OPEN. Forma general: OPEN ([UNIT=] i, IOSTAT= ios, ERR= err, FILE= nomb_arch, STATUS= sta, ACCESS= acc, FORM= frm, RECL= rl) donde Nmero entero que identifica la unidad que se le asigna al archivo que est siendo abierto; ios: Indicador opcional que acusa el estado de la sentencia; caso el formato sea considerado exitoso arroja el valor 0, caso contrario arroja un valor diferente de cero; err: Indicador opcional que establece el nmero de lnea de comando al cual saltar la ejecucin del programa en caso que se detecte un error en el formato; Nomb_arch: Nombre del archivo a ser abierto, incluida su extensin (por ejemplo entrada.dat); sta: Es una cadena de caracteres que tiene que ser necesariamente NEW, OLD o SCRATCH. Dicha cadena de caracteres muestra el estado del archivo. Un archivo scratch es aquel que es creado y borrado cuando el archivo se cierra, mediante el comando CLOSE, o cuando el programa termina. Un archivo old es aquel que ya existe mientras que new es aquel archivo que se crea en el momento que se ejecuta la sentencia OPEN. Otra alternativa muy utilizada, para esta cadena de caracteres, es UNKNOWN, con lo cual si el archivo no existe lo crea, mientras que si ya existe lo sobrescribe eliminando su antiguo contenido; i:

acc: frm: rl:

Indicador que establece el tipo de acceso al archivo, el cual deber ser SEQUENTIAL o DIRECT (acceso de tipo secuencial o directo)). El valor predefinido es SEQUENTIAL; Indicador que deber ser FORMATTED o UNFORMATTED. El valor predefinido es UNFORMATTED; Indica la longitud de cada registro, en un archivo de acceso directo.

8.3.

Comando FORMAT.

Este comando permite especificar la forma en que los datos sern ledos o imprimidos por los comandos de E/S asociados. Es un comando muy utilizado, principalmente cuando se desea una entrada o salida de datos con presentacin elaborada y mayor claridad. La forma de representar esta instruccin dentro del lenguaje se muestra a continuacin:

expresin en la cual Nmero de lnea que acta como identificador del comando FORMAT. X: Es el carcter de control de carro de impresora o del cursor (se debe utilizar cuando el comando FORMAT est asociado a un comando de salida). Para efectos de simplicidad del curso momentneamente puede obviarse. ESPk: Especificaciones de formato, de las cuales las ms importantes se vern a continuacin. 8.3.1. Especificacin para entero. Se utiliza para definir la extensin o tamao del campo asociado para nmeros enteros: Forma general: en la cual n:

aIw

a: w: Ejemplos:

Constante entera que indica el nmero de veces que esta especificacin debe ser obedecida repetitivamente (es opcional), o sea corresponde al numero de repeticiones del formato I; Es una constante entera no nula que indica la extensin (nmero de espacios) que utiliza el campo del dato.

a) Para imprimir completamente los siguientes valores enteros, el formato mnimo que debe utilizarse es +247 -33 33 -11561

I4 I3 I2 I6

b) El siguiente fragmento de programa:

...
INTEGER VAR1 , VAR2 , VAR3 VAR1 = 51 READ ( * , 10 ) VAR2 , VAR3 FORMAT ( 2I4 ) WRITE ( * , 20 ) VAR1 , VAR2 , VAR3 , VAR1 + VAR3 FORMAT ( # , I2 , 2I4 , I4 )

10 20

...
con los siguientes datos de entrada: -1281024 produce en la impresin: 51-12810241075 Nota: # representa un espacio en blanco. Observaciones:

Si en una impresin de resultados el campo reservado para la variable es insuficiente, aparecern entonces * impresos en todo el campo; En la impresin, si el campo reservado fuese mayor que el necesario, el dato se escribe a la derecha, dejando espacios en blanco a la izquierda;

En la entrada de datos, los espacios en blanco son considerados como ceros, por lo que si el campo fuese mayor que el necesario el programador deber cerciorarse que el valor quede situado a la izquierda de dicho campo.

8.3.2 Especificacin para real bsico sin exponente. Esta especificacin se utiliza para definir la extensin o tamao del campo asociado a los valores reales bsicos, ledos o escritos. Adems define el nmero de casillas reservadas para dgitos decimales. Forma general: en la que a, w: d: Tienen el mismo significado definido anteriormente; Constante entera que indica el nmero de casillas reservadas para dgitos decimales (sin considerar el punto decimal, el cual ocupar una casilla adicional).

aFw.d

Ejemplos: a) Para imprimir correctamente los valores reales siguientes, el formato mnimo a emplearse es 126.85 -2.1 -53.

F6.2 F4.1 F4.0

b) La impresin resultante del siguiente fragmento de programa:

...
10 20 REAL VAR1 , VAR2 READ ( 0 , 10 ) VAR1 , VAR2 FORMAT ( F5.2 , F5.0 ) WRITE ( 0 , 20 ) VAR2 , VAR1 FORMAT ( # , F6.0 , F5.2 )

...
con los siguientes datos de entrada: 23.13-1534

resulta en -1534.23.13 Observaciones: En escritura (refirindose a un comando WRITE);


Si w es mayor que el necesario se escriben espacios en blanco a la izquierda del valor impreso; Si d es mayor que el necesario, se imprimen ceros a la derecha del valor impreso; Si d es menor que el necesario, ocurre truncamiento o redondeo; Si w fuere insuficiente, se imprimen * en todo el campo reservado para el nmero.

Ejemplo: Sea el valor 2.9865 almacenado para una variable, para diferentes formatos su impresin resulta en lo siguiente: Formato F6.4 F8.4 F7.5 F5.2 F5.4 Valor impreso 2.9865 ##2.9865 2.98650 #2.99 *****

Mientras tanto, en la lectura (referido a un comando READ);

Si el punto no es colocado en el dato de entrada, l ser puesto internamente, conforme a lo especificado en el comando FORMAT. En caso que s sea colocado el punto en el dato de entrada, aqul prevalecer, incluso si no concuerda con la posicin del punto especificada en el comando FORMAT.

Ejemplo:

...
30 REAL AR , BETA READ ( * , 30 ) AR , BETA FORMAT ( 2F7.3 )

...

Dado #13106430.0458 despus de la lectura resulta: AR = 131.064 BETA = 30.0458 Observaciones:

En la lectura de datos; si existen ms datos en una lnea (registro) de comando FORMAT comparado al nmero de variables dentro de una lista de variables de un comando READ, solamente es ledo un nmero de variables igual al nmero de variables de la lista, siendo que el resto de los datos en el comando FORMAT es ignorado; En el caso que existan ms variables en la lista que especificaciones en el comando FORMAT correspondiente (vlido para la entrada y la salida de datos), se repiten las especificaciones en orden a partir de la primera; comenzando desde una nueva lnea en el caso de WRITE.

8.3.3. Especificacin para reales con exponente. Esta especificacin de formato se utiliza para definir la extensin o tamao del campo, y el nmero de casillas decimales asociadas a los valores reales con exponente. Forma general: en la que a, w, d: Ejemplo: Para imprimir correctamente los valores reales siguientes, el formato mnimo a utilizarse debe ser 1.26E+03 -5.1E-02 Observaciones:

aEw.d

Tienen el mismo significado definido anteriormente.

E8.2 E8.1

En la entrada de datos; valen las mismas convenciones vistas para el formato Fw.d; en realidad estas dos especificaciones tienen exactamente el mismo efecto en materia de precisin numrica y ocupacin de casillas, salvo en las casillas requeridas para E y el signo del exponente;

En la salida de datos; el dgito ms significativo aparece a la derecha del punto. El nmero de dgitos significativos depende de d. Habiendo espacio en el campo un cero es impreso a la izquierda del punto, y ms a la izquierda el signo - si el nmero es negativo. Si hubiere aun ms espacios disponibles para el nmero, stos se llenan con espacios en blanco (a la izquierda). Por tanto para garantizar la correcta escritura de nmeros con este formato debe cumplirse w d 7

Ejemplo: Para la especificacin de formato E11.3 se tiene: Valor interno 541 -0.003 12903.0 Formatos de edicin. Valor impreso ##0.541E+03 #-0.300E-02 ##0.129E+05

9.

Estas especificaciones de formato se utilizan muchas veces para mejorar la presentacin de los datos ledos o escritos.

Formato nX. Forma general:

nX

en la que n: Ejemplo: a) 10
READ ( * , 10 ) R , C FORMAT ( F5.2 , 3X , F5.2 )

Constante entera positiva que indica el nmero de espacios en blanco.

Dados los siguientes datos, 56.29###14.21 los valores atribuidos a las variables R y C son respectivamente 56.29 y 14.21.

Formato nH o apstrofes. Se utilizan para la impresin de constantes del tipo cadena de caracteres. Forma general:

nH<cadena de caracteres>

en la que n: Constante entera positiva que indica el nmero de caracteres a ser imprimido, los cuales debern ir inmediatamente despus de la especificacin.

Ejemplos: a) 35
WRITE ( * , 35 ) FORMAT ( 1X , 16HFRASE DE EJEMPLO )

Impresin: b) 40

_FRASE DE EJEMPLO

WRITE ( * , 40 ) AMED FORMAT ( 1X , 10H##MEDIA#=#, F5.2 )

Impresin:

###MEDIA#=#XX.XX

(Siendo XX.XX el valor numrico almacenado en la variable AMED) Observaciones:


Este tipo de especificacin en general no puede aparecer asociada a un comando de entrada de datos; Debe aparecer seguida necesariamente de n caracteres.

Los apstrofes propician una forma alternativa al formato nX. Ejemplo: 35


WRITE ( * , 35 ) FORMAT ( 1X , FRASE DE EJEMPLO )

Nota: Si un apstrofe fuere a formar parte de una cadena de caracteres, ste debe aparecer duplicado, por ejemplo:

10

WRITE ( * , 10 ) FORMAT ( 2X , OHIGGINS )

El resultado: ##OHIGGINS

Uso de la barra /.

Indica el fin de un registro o lnea, es decir por cada barra / encontrada en un comando FORMAT, una nueva lnea de entrada o salida de datos comienza. Las comas antes o despus de / son opcionales. Ejemplo: 20
WRITE ( * , 20 ) FORMAT ( 1X , CINDY , / , CRAWFORD )

Impresin:

#CINDY CRAWFORD

También podría gustarte