Sie sind auf Seite 1von 18

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 N2



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. Estructuras de control de ejecucin de los programas.

Estas estructuras permiten alterar el flujo de ejecucin de los programas y,
en relacin a sus roles dentro de la programacin estructurada, stas pueden clasificarse
como estructuras de secuencia, seleccin e iteracin (repeticin).


1.1. Estructuras de seleccin.


Bloque IF.

Forma general:

IF (condicin 1) THEN

[bloque 1]

ELSE IF (condicin 2) THEN

[bloque 2]

ELSE IF (condicin 3) THEN

[bloque 3]

ELSE

[bloque 4]

ENDIF

en la que

(condicin): Se expresa siempre a travs de una expresin lgica, como
las que sern vistas a continuacin.

Observaciones:

Los bloques 1 al 4 pueden estar constituidos por cualquier combinacin de
comandos (inclusive por nuevos bloques IF);
El comando ENDIF es obligatorio para cada IF utilizado;
Las instrucciones ELSE IF, as como sus bloques asociados, son opcionales;
El comando ELSE tambin es opcional y el [bloque 4] se ejecutara
nicamente si no son satisfechas ninguna de las condiciones anteriores (de la
1 a la 3). As, en el caso ms simple la estructura de un bloque IF quedara

IF (condicin 1) THEN

[bloque 1]

END

No se permite la transferencia del control de ejecucin del programa desde
afuera hacia el interior de alguno de los bloques IF.


Bloque SELECTCASE.

La estructura SELECTCASE permite efectuar seleccin de entre varias
alternativas de bloque de la siguiente forma.

Forma general:

SELECTCASE (VAR1)

CASE (condicin 1)

[bloque 1]

CASE (condicin 2)

[bloque 2]

CASE (condicin 3)

[bloque 3]

CASE DEFAULT

[bloque defecto]

ENDSELECT

en la que

(VAR1): Variable que ser testeada para que el compilador
escoja el bloque a ser rodado (ejecutado);
(condicin 1), etc.: Condiciones directamente relacionadas a la variable
VAR1. Por ejemplo si VAR1 cumple con la
condicin condicin 1 entonces [bloque 1] es aquel
que ser rodado durante la ejecucin;
[bloque 1], etc.: Consisten en conjuntos de comandos, de entre los
cuales uno de estos conjuntos ser rodado de acuerdo a
si su condicin asociada es cumplida;
[bloque defecto]: Aquel conjunto de comandos que sern ejecutados en
caso que no se cumpla ninguna de las condiciones
listadas junto a los comandos CASE previos.

Observaciones:

Las condiciones, tales como (condicin 1), caso adoptaren un valor puntual
simplemente se escribe dicho valor, por ejemplo (VAR1=1):

SELECTCASE (VAR1)

CASE (1)

[bloque 1]



Si por acaso la condicin consiste en que VAR1 sea mayor que un
determinado valor, entonces aquello puede implementarse de la siguiente
forma (VAR1 2 > ):

SELECTCASE (VAR1)

CASE (2:)

[bloque 1]




De forma general, para incluir rangos de valores, a modo de condicin, se
procede de la siguiente forma (para -3 VAR 1 s s o 4 VAR 8 s s ):

SELECTCASE (VAR1)

CASE (-3: -1, 4: 8)

[bloque 1]




La variable VAR1 puede ser entera o cadena de caracteres. En este ltimo
caso los valores que pueda adoptar dicha cadena, dentro de cada una de las
condiciones, se escribe entre comillas dobles, o sea

CHARACTER*5 (VAR1)



SELECTCASE (VAR1)

CASE (xyz12)

[bloque 1]



Por otro lado las expresiones lgicas tambin constituyen estructuras
de seleccin por lo que sern vistas en lo que sigue.


1.2. Expresiones lgicas.

Las expresiones lgicas son aquellas que al ser evaluadas resulta un valor
lgico: verdadero o falso. Se constituyen mediante operadores lgicos. Los operandos
lgicos pueden ser constantes lgicas, variables lgicas, funciones lgicas, expresiones
relacionadas o expresiones lgicas entre parntesis. Estos operandos constituyen la forma
bsica para componer expresiones lgicas; cabe mencionar tambin que una expresin
lgica no contiene necesariamente un operador lgico. Algunas entidades que constituyen
una expresin lgica se vern a continuacin.


1.2.1. Constantes lgicas.

Especifican un valor lgico; verdadero o falso:

.TRUE.
.FALSE.

Una constante lgica puede ser atribuida a una variable del tipo lgico.


1.2.2. Expresiones relacionales.

Constituyen una forma particular de expresiones lgicas, y viabilizan el
establecimiento de relaciones entre entidades del programa.

Forma general:

E
1
op E
2

en la que

E
i
: Expresin aritmtica o expresin del tipo cadena de
caracteres.
op : Consiste en un operador relacional.

Operadores relacionales Significado

.EQ. igual
.NE. =
.GT. >
.GE. >
.LT. <
.LE. s

Observaciones:

El valor de la expresin relacional es siempre .TRUE. o .FALSE.;
Las expresiones aritmticas comparadas pueden ser de tipos diferentes (real
o entero);
Slo se pueden comparar dos expresiones aritmticas por vez.

Ejemplos:

A .LT. I
X**2.7 .LE. (5*RA+4)
K .NE. 27.3E+05


1.2.3. Operadores lgicos.

Se utilizan para combinar valores lgicos; el lenguaje FORTRAN dispone
de los siguientes operadores lgicos:

Operadores lgicos Significado Ejemplo

.NOT. negacin .NOT. A
.AND. y lgico A .AND. B
.OR. o lgico A .OR. B
.EQV. equivalencia lgica A .EQV. B
.NEQV. no equivalencia A .NEQV. B

En esta tabla los operadores aparecen descritos de arriba hacia abajo, de
mayor a menor jerarqua (los operadores .EQV. y .NEQV. poseen la misma jerarqua). En
resumen, una forma ms completa de escribir una expresin lgica sera la siguiente.

E
1
op
1
E
2
op
2
E
3
op
3
E
4
...

en la que

E
i
: es un operando lgico.
op
i
: es un operador lgico.

Ejemplos:

(A .GT. R) .AND. (I .GT. F)
(S .EQ. TE) .AND. .NOT. (X1 .LE. PI)
FLAG .OR. ACHOU
A .GT. R
FLAG

En estos ejemplos A, F, PI, R, S, TE Y X1 son variables de tipo real,
mientras que I es una variable de tipo entera y las variables FLAG y ACHOU son de tipo
lgico.

Observaciones:

Una expresin lgica, cuando es evaluada, produce siempre un valor de tipo
lgico (.TRUE. o .FALSE.);
En la ausencia de parntesis, el orden de clculo para las expresiones lgicas
sigue la siguiente regla de precedencia, de mayor a menor prioridad:

J erarqua de operadores lgicos.
Operadores relacionales.
J erarqua de los operadores aritmticos.


1.3. Estructuras de iteracin.


Ciclo DO.

Forma general:

DO n , i =m
1
, m
2
, m
3

[bloque 1]

n CONTINUE

en la cual

n: Nmero de lnea de comando que acota el accionar de la
instruccin DO;
i: Variable de testeo para el ciclo DO (tambin conocido
como contador), y puede ser de tipo real o entero;
m
1
: Valor inicial de i;
m
2
: Valor final de i;
m
3
: Incremento; si se omite se asume igual a 1;
[bloque 1]: Conjunto de comandos a ser ejecutados en forma repetitiva,
para diferentes valores del contador.

Funcionamiento:

Como punto de partida i recibe el valor dado por m
1
; las acciones
especificadas por [bloque 1] se ejecutan repetitivamente mientras se cumpla

1 2 3
si 0 m i m m s s > o
1 2 3
si 0 m i m m > > <

Luego de cada ejecucin del [bloque 1], la variable i es actualizada con el
valor i +m
3
, o sea

3
i i m +

La ejecucin reiterada del [bloque 1] finaliza cuando

2 3
si 0 i m m > > o
2 3
si 0 i m m < <

y se ejecuta apenas una vez en caso que

1 2 3
si 0 m m m > > o
1 2 3
si 0 m m m s <

Observaciones:

La sentencia que finalice la ejecucin del ciclo DO puede ser cualquier
comando ejecutable, (excepto GO TO, IF, END, RETURN o DO).
Preferentemente puede utilizarse el comando CONTINUE, instruccin que
no realiza accin alguna;
El valor de la variable i no puede ser alterado dentro de [bloque 1];
No se permite el salto desde una lnea de comando localizada fuera de un
ciclo DO hacia otra lnea ubicada dentro del mismo;
No puede entrelazarse un ciclo DO con otro, mientras que s puede un
ciclo DO estar completamente comprendido dentro de otro;
Tampoco se permite el cruce de ciclos DO con algn bloque IF.
Cualquiera de estas estructuras puede estar completamente incluida dentro
de otra;
Una forma muy recurrente de representar ciclos DO en la actualidad
consiste en la inclusin del comando ENDDO, omitiendo as la necesidad de
representar el final de dicho ciclo mediante la incorporacin de una lnea
numerada. Asimismo el comando EXIT permite parar la ejecucin del ciclo
y salir de ste. A continuacin se ilustra un ejemplo de fragmento de
programa:

REAL MOD_VAR1(12)



DO i =m
1
, m
2
, m
3

READ (*,*) VAR1(i)

IF (VAR1. LT. 0) THEN

MOD_VAR =- VAR1(i)

ELSE

EXIT

ENDIF

ENDDO

El fragmento anterior lee la i-sima componente de la variable vectorial
VAR1, desde la pantalla, y almacena su valor (en mdulo o valor absoluto) dentro de la
variable MOD_VAR nicamente si el valor almacenado en VAR1(i) es menor que
cero. Apenas detecte una componente mayor a cero, la ejecucin se sale de dicho ciclo
DO mediante uso del comando EXIT.

Ejemplos:

Un fragmento de programa que calcula el factorial de un nmero N:

INTEGER M, N
REAL FACT
.
READ(*,*) N
FACT =1
DO 20 M =N, 2, -1
FACT =FACT * M
20 CONTINUE
WRITE(*,30) N, FACT
30 FORMAT (1X, FACTORIAL DE, I4, =, F5.0)
.

Esta vez se muestra, a continuacin, un fragmento de programa que calcula
1
SUMA
N
i
i
x
=
=

, siendo los x
i
ledos por pantalla. El valor de N (nmero de datos), es el
primer valor que se lee por pantalla.

INTEGER N
REAL SUMA, X
.
READ (*,*) N
SUMA =0
DO 10 I =1, N
READ (*,*) X
SUMA =SUMA +X
10 CONTINUE
WRITE (*,*) SUMA =, SUMA
.


Comando GO TO.

Suele utilizarse acompaado de un bloque IF, y realiza un salto
incondicional hacia la lnea de comandos n:

Forma general:

GO TO n

en la cual

n: Nmero de lnea de comando ejecutable hacia la cual el
control es transferido.

Ejemplos:

Un fragmento de programa que calcula el factorial de un nmero N puede
quedar, en forma alternativa, de la siguiente forma:

INTEGER M, N
REAL FACT
.
READ (*,*) N
FACT =1
M =N
10 IF (M. GE. 2) THEN
C INICIO ESTRUCTURA EN CUANTO... - HAGA...
FACT =FACT * M
M =M 1
GO TO 10
C FIN ESTRUCTURA EN CUANTO... - HAGA...
ENDIF
WRITE (*,*) FACTORIAL DE , N, =, FACT

.

1.4. Otras formas de estructuras de control.

Los compiladores antiguos de lenguaje FORTRAN no incluan estructuras
como los bloque IF, por lo que se utilizaban estructuras similares, aunque ms
rudimentarias, para controlar el flujo de ejecucin de los programas. Algunos de estas
estructuras se sealan dentro de lo que sigue.


IF aritmtico:

Forma general:

IF (<a>) n
1
, n
2
, n
3

en la que

<a>: Es una expresin aritmtica (entera o real);
n
1
, n
2
, n
3
: Son nmeros de lneas de comandos (pueden ser repetidos).

Funcionamiento:

El valor de la expresin <a>es obtenido y as el control es transferido a la
lnea de comandos sealada con el nmero siguiente:

n
1
si <a><0
n
2
si <a>=0
n
3
si <a>>0

Ejemplo:

INTEGER I, J , N
.
15 J =I ** 2
.
.
IF (I N) 15, 15, 30
30 STOP
END

IF lgico:

Forma general:

IF (<a>) <sentencia>

en la que

<a>: Es una expresin lgica;
<sentencia>: Conjunto de comandos excepto DO, IF, END, etc.

Funcionamiento:

La expresin lgica <a>es evaluada y <sentencia>ser ejecutada si <a>es
verdadera; en caso que <a>sea falsa, <sentencia>ser ignorada.

Ejemplo:

INTEGER I, J , N
.
15 J =I ** 2
.
.
IF (I. LE. N) GO TO 15
STOP
END

Este ejemplo es equivalente al anterior.


GO TO computado:

Forma general:

GO TO ( n
1
, n
2
,... , n
k
) , i


en la que

n
k
: Son nmeros de lneas de comandos ejecutables (pueden ser
repetidas);
i: Consiste de una expresin entera; la coma antes de i es
opcional.

Funcionamiento:

La expresin i es evaluada y el control de ejecucin del programa es
transferido hacia la lnea de comando n
m
cuando el valor de i es igual a m; si el valor
de i estuviese fuera del intervalo [ 1 , k ] , el GO TO computado es ignorado.

Ejemplo:

GO TO ( 10 , 20 , 30 , 40 ) j

Significa que para

j =1 desva el control hacia la lnea de comando nmero 10,
j =2 desva el control hacia la lnea de comando nmero 20,
j =3 desva el control hacia la lnea de comando nmero 30,
j =4 desva el control hacia la lnea de comando nmero 40.

Para cualquier otro valor de j el comando GO TO es ignorado.

Ejemplo:

El siguiente programa, dados los nmeros de orden de los das de la semana,
entrega por extenso tales nombres.

INTEGER DIA
.
READ (*,*) DIA
GO TO (10, 20, 30, 40, 50, 60, 70) DIA
GO TO 80
C INICIO CASE
10 WRITE (*,*) LUNES
GO TO 80
20 WRITE (*,*) MARTES
GO TO 80
30 WRITE (*,*) MIERCOLES
GO TO 80
40 WRITE (*,*) JUEVES
GO TO 80
50 WRITE (*,*) VIERNES
GO TO 80
60 WRITE (*,*) SABADO
GO TO 80
70 WRITE (*,*) DOMINGO
GO TO 80
C FIN CASE
80 .

2. Variables compuestas.

Las variables compuestas homogneas (conjuntos de variables del mismo
tipo) permiten la implementacin de estructuras de datos algo ms complejas que aquellas
permitidas por el uso de variables simples, sin embargo se tornan extremadamente tiles,
por ejemplo al representar y realizar operaciones sobre conjuntos de ecuaciones. Tales
conjuntos homogneos son representados por secuencias de variables identificadas
mediante uno o varios ndices.


2.1. Formas de representacin para vectores y matrices; generalidades.

Los vectores corresponden a conjuntos unidimensionales de variables,
mientras que las matrices a conjuntos de ms de una dimensin.

Observaciones:

La dimensin de variables compuestas se representa mediante ndices; as
dichas variables pueden tener hasta 7 ndices;
El ndice de una variable puede asumir valores enteros cualesquiera;
Todos los elementos de un vector deben ser del mismo tipo, el cual es
definido como en el caso de variables simples (INTEGER, REAL,
CHARACTER, LOGICAL, COMPLEX, etc.);
En caso que el tipo de variable no se haya declarado, para la variable
compuesta, se hace obligatoria la declaracin por medio del comando
DIMENSION;
Un determinado elemento de un vector o matriz puede utilizarse como una
variable cualquiera en FORTRAN, por ejemplo

A (I +1) =2 * A (I) +B (I 1)
B (3) =0
A (I +1) =A (I)

Los elementos de un vector son almacenados en posiciones consecutivas de
la memoria del computador.


2.2. Declaracin DIMENSION para vectores.

Forma general:

DIMENSION a
1
(e
11
: e
12
) , a
2
(e
21
: e
22
) , ... , a
k
(e
k1
: e
k2
)

en la cual

a
i
: Nombres de variables de tipo vector;
e
i1
: Lmite inferior del ndice correspondiente (opcional);
e
i2
: Lmite superior del ndice.

Los lmites e
i1
y e
i2
deben ser constantes enteras tal que
2 1 i i
e e > .

Observaciones:

DIMENSION es una declaracin, y debe ir antes del primer comando
ejecutable del programa y despus de las declaraciones de tipo y de
constantes simblicas;
Si no se especifica el lmite inferior e
i1
, se asume igual a 1;
Las declaraciones de tipo de variable pueden substituir completamente la
aparicin de la declaracin DIMENSION, como ser visto a continuacin.

Ejemplos:

a) DIMENSION VECTOR1(100), VECTOR2(50)

Esta declaracin informa al compilador que VECTOR1 y VECTOR2 son
vectores; VECTOR1 est constituido por 100 elementos y VECTOR2 por 50 elementos.
Dichos elementos o componentes quedan identificados a partir de los subndices, los cuales
de 1 a 100 y de 1 a 50, respectivamente.

b) DIMENSION VECTOR3(0:9) , VECTOR4(-3:1)

En este ejemplo los subndices varan de 0 a 9 para VECTOR3 (o sea, se
trata de un vector de 10 componentes), y de -3 a 1 para VECTOR4 (vector de 4
componentes).


2.3. Declaraciones de tipo para vectores.

Forma general:

<Tipo>a
1
(e
11
: e
12
) , a
2
(e
21
: e
22
) , ... , a
k
(e
k1
: e
k2
)

en la que

<Tipo>: INTEGER, REAL, LOGICAL, etc.;
a
i
, e
i1 ,
e
i2
: Tienen el mismo significado antes definido para la
declaracin DIMENSION.


2.4. Declaracin DIMENSION para matrices.

Las matrices corresponden a conjuntos con ms de una dimensin, no
obstante la declaracin DIMENSION se utiliza en forma absolutamente anloga respecto a
los vectores.

Ejemplos:

DIMENSION MATRIZ (3, 4), CUBO (5, 10, 17)
DIMENSION EXOTIC (0:3, -1:1, 2:10)


2.5. Declaracin de tipo para matrices.

Al igual que los vectores, para conjuntos multidimensionales; sus nombres,
cardinalidad y lmites para los subndices pueden especificarse en declaraciones de tipo,
omitiendo as la necesidad de acudir al uso de la declaracin DIMENSION.

Ejemplos:

INTEGER MATRIZ ( 3 , 4 ) , CUBO ( 5 , 10 , 17 )
REAL EXOTIC ( 0 : 3 , -1 : 1 , 2 : 10 )


2.6. Entrada y salida de conjuntos DO implcito.

En FORTRAN existe un recurso muy caracterstico en lo que respecta a la
entrada y salida de datos pertenecientes a variables compuestas, normalmente conocida
como DO implcito. Esta estructura se utiliza, por ejemplo, para leer una secuencia de
componentes de un vector o matriz a lo largo de una sola lnea, dentro de un archivo de
datos.

Forma general:

(<Lista de variables>, i =m
1
, m
2
, m
3
)

en la cual

i , m
1
, m
2
, m
3
tienen el mismo significado ya visto para la utilizacin del
comando DO.
El DO implcito debe ir siempre asociado a un comando de entrada o salida
de datos, y su funcionamiento es similar al del comando DO.

Ejemplos:

Este ejemplo imprime las diez componentes del vector X a lo largo de una
misma lnea:

WRITE (*, 20) (X(I), I =1, 10)
20 FORMAT (1X, 10F5.2)

Este otro ejemplo escribe cinco componentes del vector A cada valor en una
lnea:

WRITE (*, 20) (A(J ), J =1, 5)
20 FORMAT (1X, F5.2)

Este ltimo ejemplo lee consecutivamente en una lnea los valores de
A(1) , B(1) , A(2) , B(2) , A(3) , B(3):

READ (*, 20) (A(K), B(K), K =1, 3)
20 FORMAT (6F5.2)

Das könnte Ihnen auch gefallen