lenguaje de programación
,
2 MAY. 1975
---- -
/
/c,áco rJ
'�.'
' I
,f�
I {� '
'- ----- /
H/5062
lenguaje de programación
Redactado por el
Instituto da Informática
(<. \.::, :+6c
EDITA: Servicio de Publicaciones del Ministerio de Educación y Ciencia
Imprime: R. García Blanco • Avda. Pedro Diez, 3 . Madrid
Depósito hgol M. 25.594 - 1971 . 2." edición
Estas lecciones de Fortran fueron dadas por los profesores de
Lenguajes del Instituto de Informática durante el curso lectivo 1 9 6 9 -
1 9 7 O, primer curso académico celebrado para Programadores de Ap�
caciones.
El nivel del Lenguaje explicado es, en líneas generales, FOR
TRAN IV Básico adaptable para cualquier tipo de ordenador. Se inclu -
yen, sin embargo, algunas sentencias que no son comunes a todos los
ordenadores, por ser imprescindible su conocimiento ya que su uso es
tá muy generalizado.
La teoría aquí expuesta se complementó con las explicaciones
dadas en clase por los Profesores: Srta. Acedo, Sr. Becerril, Sr. G.
Marcos, Sr. G. Merayo, Srta. G. Mendoza y Sr. Ramiro, y con los
ejercicios, problemas y prácticas que los alumnos realizaron a lo lar
go del curso, utilizando, para llevar a cabo estas Últimas, diferentes
ordenadores.
T E MA 1
DEFI NICION DE UN PROGRAMA FORTRAN. - Un programa FORTRAN
es un conjunto de instrucciones escritas con un orden lógico que se em
plean para resolver un problema.
Este programa escrito en FORTRAN se llama programa fuente .
Existe otro programa llamado COMPILADOR FORTRAN encargado de
traducir o compilar cada una de las instrucciones a un lenguaje inteligi
ble para la máquina. Dicho programa traducido se denomina programa
objeto.
Para que el compilador "pueda" traducir las sentencias FOR -
TRAN necesita que éstas vengan escritas según unas ciertas reglas cuyo
conjunto forma el lenguaje FORTRAN.
Para la escritura de un programa FORTRAN existen unas hojas
especiales de codificación en las que han de tenerse en cuenta las siguieE_
tes reglas.
,,
De la columna 1 a 5 se escribe un cierto numero que identifica-
rá a la sentencia que venga a continuación. No importa el orden ni la se
cuencia y sólo es necesario escribirlo cuando en algún punto del progra
ma tengamos que individualizar o referenc iar dicha sentencia.
De la columna 7 a 72 y empezando siempre en la columna 7 se
escribe la sentencia que puede llegar hasta la 72 como má[Link] la seE_
tencia fuera de mayor longitud se puede continuar en la columna 7 de la
siguiente línea escribiendo en la columna 6, llamada de continuación, un
signo distinto de blanco o de cero.
5
De la columna 7 3 a 80 se puede escribir alguna identificación dt:?l
programa, por ejemplo, secuencia de las fichas, etc. Estas columnas
no influyen para nada en la compilación.
Con objeto de documentar el programa se puede ese ribir una C
en la columna 1; de este modo todo lo escrito en las columnas 2 ,i 80 de
la misma línea no influye tampoco en la compilación saliendo simpleme!:!
te en el listado del programa como comentario o referencia.
EL EMENTOS QUE L O INTEGRAN. - El lenguaje FORTRAN t->stá c:om -
puesto por caracteres alfabéticos, numéricos y especiales. Es t o s se
unen para formar palabrcts y una o más palabras escritas en un CÍ\-rto or
den forman las sentencias o instrucciones.
CONCEPTO DE INSTR UCCION. - Las instrucciones son un conjunto de
palabras, signos, etc., que tienen un sentido específico para el compi
lador si están escritas cumpliendo las regLls que dicho compilador exi
ge.
Las instrucciones se dividen según la función que realizan , en
ejecutivas y no ejecutivas.
INSTRUCCIONES EJECUTIVAS. - Son aquellas que obligan al ordenador
a realizar alguna operación. Pueden ser:
ARl TMETICAS: en ellas el resultado d e realizar los cálculos in
dicados r eemplaza al valor actual de la variable escrita a la izquierda
del signo igual, por ejemplo, A = B + C.
DE CONTROL: controlan el orden de ejecuciÓn de las diferentes
instrucciones del programa proporcionando bifurcaciones, etc.
DE ENTRADA Y SAL IDA: sirven para llevar a cabo la transfo
rencia de datos desde un dispositivo externo a la memoria principal yvi-·
ceversa.
INSTRUCCIONES NO EJECUTIVAS. - Se emplean junto con otras senten
cias y colaboran en su ejecución, especificando o deLniendo variab]t,s ,
funciones, subprogramas.
Se subdividen en:
DE ESPE CIFI CACION: describen, por ejemplo, cómo es el for
mato de los datos en una operación de entrada/salida, definen propieda
des de las variables, etc.
DE FUNCIONES Y SUB PROGRAMAS: sirven para nombrar o de
finir funciones y subprogramas.
CONCEPTO DE DATOS. - Son aquellos valor es alfabéticos,numéricos o
caracteres especiales con los cuales operan las instrucciones del pro
grama. Normalmente no forman parte del programa sino que son leídos
cuando se necesitan mediante las correspondientes instrucciones de en
tradc1.. Los resultados de las operaciones realizadas con las sentendas
son extraídos de la memoria principal al dispositivo deseado mediante
las instrucciones de salida.
TIPOS DE DATOS. - Existen en FORTRAN varios tipos de datos:
Enteros
R eales
Doble precisión
Lógicos
Complejos
Literales o alfabéticos.
Algunos compiladores FORTRAN no admiten todos estos tipos
de datos como sucede con los complejos y los lógicos.
Los tipos de datos más usuales son los tres primeros, es de -
cir, enteros, reales y de doble precisión, los cuales estudiaremos más
profundamente en el tema correspondiente a Constantes y Variables.
7
'
T EMA 2
CONSTANTES. - Las constantes son valores que permanecen fijos a lo
largo de toda la ej ecuciÓn del programa. Existen seis tipos.
ENTERAS. - Llamadas también de coma fija. Son números enteros po -
sitivos, negativos o nulos que la máquina representa en binario. Ocupan
normalmente una palabra de memoria y por lo tanto su valor máximo y
mínimo depende de su longitud.
31
Si dicha palabra es de 32 bits, el valor máximo sería 2 - 1.
El menor será - 2 31
En un ordenador cuya palabra es de 36 bits, dichos límites se
rían 2 35 - 1 y - 2 35, respectivamente.
Nótese que el signo ocupa un bit y que el cero es considerado co
mo positivo.
En FORTRAN las constantes enteras están formadas por una s�
rie de dígitos decimales del O al 9 precedidos o no de signo y ese ritos
sin punto decimal.
Ejemplos:
Constantes válidas:
+68
-32
+O
-O
9
+7 2 8463 2
784
Constantes no válidas:
35.64 contiene punto decimal
7, 8 la coma no es válida
3E4 la E no es válida
9 348765434563148 excede la capacidad permitida
-34f48, 36 contiene dos signos y coma deci -
mal
REALES. - Llamadas también de coma flotante por el modo de represen
tarse en la máquina. Normalmente ocupan una palabra y por tanto esa
longitud condiciona al número. Suelen estar formadas por 7 Ó 9 cifras d�
cimales con punto decimal, con o sin signo, que pueden ir seguidas, op
cionalmente, de la letra E con una o dos cifras decimales con o sin sig
no, constituyendo estas Últimas el exponente de la potencia de diez a que
está elevado el número precedente que recibe el nombre de parte frac -
cionaria o mantisa. Dicho exponente también se denomina característi
ca.
Son constantes reales válidas:
+93.
93.0
93.00
-tO. 93E02 ( +O, 93xlo 2 )
O. 00093E+5 ( O, 00093x 1 o5 )
9300000. o·E-05 ( 9300000, 0 X 10-5)
Nótese que todas representan el mismo valor. Por su formato
la que ocupa el cuarto lugar y debido a la posición del punto se dice que
está normalizada, entendiendo por tal, toda constante real acompañada
de exponente, con punto decimal al principio y de tal forma que la pri -
mera cifra que le sigue es significativa.
Son constantes reales no válidas:
o '
\ no tienen punto decimal
-3!
6. 34E+ 2 56 tiene un exponente de tres cifras·.
l·O
-64392.694385 más cifras de las permitidas
63. E 1e falta exponente.
DE DOBLE PRECISION. - Son análogas a las reales anteriormente estu
diadas pero pueden escribirse con más cifras con lo que se obtendrá una
mayor precisión. Además el exponente va precedido por una D. El nÚ -
mero de cifras puede ser de 16 Ó 17 y depende del tipo de ordenador.
Ejemplos:
Válidas:
O. 3476943856D+ 37
O. ODO
641.D-8
O. 641D+Ol
4681012.D-6
Inválidas:
764D3 no tienen punto decimal.
6. 54E7 sería válida como real de simple
precisión.
O.38. 46D-03 contiene dos puntos.
7,56D+4 contiene coma decinal.
6. 3D+ 3542 el exponente tiene más de dos c1 -
fras.
_!:,OGICAS. - Son constantes que representan una situación verdadera o fal
sa y su forma es:
. TRUE. Verdadero.
. FALSE. No verdadero o falso .
ALFANUME RICAS. - Pueden representar datos que no sean numéricos.
Su longitud depende de la máquina habiendo ordenadores que admiten 256
caracteres y otros sólo 6. También se escriben de diferente manera,bien
poniendo los caracteres entre comillas 'PAMPL�NA ', 'CPNSTANTE AL
FANUMERICA' o bien anteponiéndoles la letra H (Hollerith) y un número
que indica la longitud.
11
Ejemplos: VIAJE
MAL�
BIEN
COMPLEJAS. - Son números complejos que constan de parte real e ima
ginaria.
Van escritos entre paréntesis y tanto la parte real como la ima
ginaria son constantes reales. Ambas partes se separan por una coma.
Ejemplos: ( +6.3,3.E+3)
( -25.,+3.4000E-03
( 64. 3569, 32.00)
( o. ' o. )
El primero de ellos, por ejemplo, significa (6, 3 + 3000i ) .
1·2
T EMA 3
VARIABLES. - Una variable es la representación simbólica de un cierto
valor o valores. Realmente representan la dirección de una cierta posi
ción de memoria.
Han de cumplir las siguientes reglas: (1) Constar de 1 a 6 ca
racteres alfanuméricos, el primero de los cuales tiene que ser forzosa
mente alfabético y (2) el tipo de una variable debe ser el mismo que los
datos que representa. Existen cinco categorías distintas.
ENTERA S. - No necesitan declararse mediante ninguna sentencia espe
cial sino que simplemente se toman como tales aquellas variables c u ya
primera letra está comprendida entre la I y la N, ambas inclusive.
Contienen un valor numérico de coma fija y ocupan normalmen
te una palabra.
Son variables enteras las siguientes:
Jl234
IRADIP
MPNTE
KARGA
Kl2345
I
J
K
13
Existe una instrucción que permite hacer que un nombre, cual
quiera que sea su primera letra, sea tomado como variable entera. La
instrucción es INTEGER.
Así las variables ABDC
RADI9)
PMM
XMOOl
no serían enteras a menos que se escribiese la instrucción:
INTEGER, ABCD, RADIO , PMM, XMOOl
REALES. - Tampoco necesitan declararse con ninguna instrucción es
pecial. Basta con que la primera letra sea distinta a las comprendidas
entre la I y la N. Contienen constantes de coma flotante y ocupan una pa
labra.
Son variables reales: ABCD
RADI9)
PP
Pl
QRSTUV
Ql
Q2
Existe también una instrucción de especificac1Ónque permite h�
cer que un nombre, cualquiera que sea su primera letra, sea tomado co
mo variable REAL. La instrucción es REAL.
Ejemplo: REAL I, J, H, T 1, Kl, hará que dichos nombres re
presenten variables reales.
DE DOBLE PRECISION. - Contienen constantes de doble precisión. Ocu -
pan una doble palabra y necesitan la instrucción D9)UBLE PRECISW>N p�
ra ser declaradas explícitamente.
Ejemplo: D<jUBLE PRECISI<;::,N A, B l, 02, 137, DAT<;::, , Z240
14
LOGICAS. - Contienen una constante lÓgica y ocupan una palabra. Nece
sitan la instrucción de especificación Ly'.)GICAL.
Ejemplo: L<;i'.)GICAL, ARB<;i'.)L, MESA, VERDAD, FALS<;i'.)
COMPLEJAS. - Contienen constantes complejas y ocupan una doble pala
bra. Necesitan la instrucción de especificación C<;i)MPLEX.
Ejemplo: C<;i'.)MPLEX RESIS, ZO, ZR, I
15
I
T EMA 4
CONJUNTOS DE VARIABLES. - En los capítulos anteriores hemos estu
diado las variables que se suelen denominar simples o elementales; sin
embargo, el FORTRAN, como otros muchos lenguajes, permite decla -
rar explícitamente grupos de variables identificadas bajo un mismo nom
bre, pudiéndose referir a cada una de las variables que componen el gr;
-
1 o o conju1 to mediante la utilización de subíndices.
Supongamos un conjunto denominado IRADIP que consta de 5 va
riables cuyos valores son, respectivamente, 200, 300, 400, 500, 600.
IRADIP (1) representa la primera variable del conjunto cuyo valor es
200.
IRADIP (2) la segunda cuyo valor es 300.
IRADIP ( 3) la tercera cuyo valor es 400.
IRADIP (4) la cuarta cuyo valor es 500.
IRADIP ( 5) la quinta cuyo valor es 600.
Así pues, IRADIP representa todo el conjunto, m i e ntr as que
IRADIP (I) es la variable I - ésima del conjunto. El conjunto anterior se
dice que es de una sola di-;:;,_ensiÓn y consta de cinco elementos.
Del mismo modo existen conjuntos de dos, tres, etc., dimen -
sienes, hasta un máximo de siete en los compiladores FORTRAN más p�
tentes.
Supongamos un conjunto de dos dimensiones denominado TABLA.
La primera dimensión, denominada normalmente filas tendrá cuatro ele
mentos y la segunda, que se denomina columnas, tendrá dos·. El total d-;
elementos será 4 x 2 ..., 8. Dichos elementos son:
1'7
Col. 1 Col. 2
Fila 1 TABLA ( 1, 1 ) TABLA ( 1, 2 )
Fila 2 TABLA ( 2, 1 ) TABLA ( 2,2 )
Fila 3 TABLA ( 3, 1 ) TABLA ( 3, 2 )
Fila 4 TABLA ( 4, 1 ) TABLA ( 4, 2 )
Así' el elemento numérico TABLA (I, J) será el elemento del con
junto TABLA cuya fila es I y cuya columna es J.
Análogamente el elemento CO STE ( 3, 2, 8, 5,) serí'a la variable
elemental que ocupa el tercer elemento de la primera dimensión, el se
gundo de la segunda, el octavo de la tercera y el quinto de la cuarta.
Cada uno de los elementos de un conjunto representados de es
ta forma se dice que es una variable suscrita.
DEFINICION DE SUBINDICE. - Un subí'ndice es pues un cierto número
que individualiza un elemento dentro de un conjunto. Este número puede
adoptar diversas formas dependiendo de los tipos de máquinas que se
emplean siendo los más conocidos los que a continuación se exponen.
REGLAS DE FORMACION DE SUBINDICES. - Un sub(ndice puede repre
sentarse en una de las formas siguientes,donde V representa una varia
ble entera sin signo y C y c•
constantes enteras sin signo:
V
c
V+C
V-C
c*v
C*V+C'
c*v- c•
Nótese que no son permitidos sub(ndices de la forma c+V,C-V,
V*C, etc. Han de tenerse en cuenta, además, las tres normas siguien
tes: (1) todo subí'ndice debe estar expresado en modo de coma fija; (2)
cuando existan varios sub:í'ndices, éstos deben ir separados por «;oma...s 1/
(3) un subí'ndice no puede contener, a su vez, otro subí'ndice.
1°8
Ejemplos:
Variables suscritas válidas
MATRIZ ( I, J)
TABLA ( 19)
M ( K-5)
A ( Sxl )
OMEGA ( 4*J-7)
Variables suscritas inválidas
ARRA Y ( -1 ) no está permitido signo
COSTE ( A +-2 ) A es una constante real
MATRlZ ( - 7 xJ ) signo no permitido
MATRIZ ( Jx7 ) estaría permitido escribir MA -
TRIZ (7 * J)
TOTAL ( O ) no se permite el valor cero.
DECLARACION DEL TAMAÑO DE UN CONJUNTO. - Para declarar ex
plícitamente un conjunto debemos dar su nombre, indicar cuantas dimen
siones tiene y expresar el número máximo de elementos dentro de cada
dimensión. Todo esto se logra empleando la sentencia DIMENSiy')N, se
guida del nombre simbólico del conjunto y escribiendo entre paréntesis
su tamaño.
Así la sentencia,
DIMENSiy')N A ( 8 )
reservaría en memoria un conjunto que se denomina A, de una sola di -
. �
mens1on y con 8 elementos.
De igual manera,
DIMENSiy')N TABLA ( 4, 4, 2 )
reservaría un conjunto de nombre TABLA, con tres dimensiones, cada
una de las cuales con 4, 4 y 2 elementos, respectivamente.
Por Último,
DIMENSiy')N COSTE ( 5, � )
haría la reserva para un conjunto llamado Cy')STE que tiene 2 dimensio
nes: la primera dimensión con 5 elementos y la segunda con 3.
19
La sentencia DIMENSiy)N debe preceder, en el programa fuer1 -·
te, a la primera aparicion de la variable a la cual dimensiona.
DISPOS ICION DE LOS CONJUNTOS EN MEMORIA. -Los conjuntos se a 1
macenan normalmente en posiciones de memoria ascendente, y de forrnc:
tal que el valor del primer subíndice se incrementa con mayor rapidez
que el valor del segundo o restantes.
Ejemplos:
El conjunto anterior denominado A, de una dirnensiÓn y 8 t-lt·
mentas, aparecería en memoria de la siguiente manera:
A (1), A (2), A (3), ........... , A (7), A (8)
Análogamente el conjunto declarado con DIMENSiy)N C�STE ( 5, 3) st·
almacenaría del siguiente modo:
C�STE ( 1. 1) C�STE ( 2, 1 Cy)ST E ( 3, 1 ) Cy')STE ( 4, 1)
• cpsTE ( 5, 1 ) C�STE ( 1, 2 CpSTE ( 2, 2 ) C$2)STE ( 3,2)
[ C$2)STE ( 4, 2 cpsTE ( 5, 2 cpsTE ( 1, 3 Cy')ST E ( 2, 3 )
[ C�STE ( 3, 3 ) C$2)STE ( 4, 3 ) Cy)STE ( 5, 3 )
Es decir, que varía más rápidamente el primer subíndice hasta
su valor máximo; luego se incrementa el segundo en una unidad volvien
do a incrementarse el primero hasta su valor máximo y así succ·sivd �
mente hasta que ambos subíndices lleguen a alcanzar los valores mds a 1
tos.
N OTA. - El tamaño de un conjunto (número entre paréntesis) debe indi
carse mediante una constante entera sin signo.
20
T EM A 5
CONCEPTO DE EXPRESION. - Expresión FORTRAN es un conjunto d e
constantes,variables, operadores y funciones, separados por paréntesis
y /o símbolos de operación, escritos en un orden aceptado por el compi
lador y de modo que formen una expresión con significado matemático.
Los símbolos de operación u operadores aritméticos son los si-
guientes:
+ para indicar la SUMA
11 11 11
RESTA
* 11 TI TI
MULTIPLICACION
*- * 11 11 TI
POTENCIACION
/ TI TI TI
DIVISION
REGLAS DE FORMACION DE LAS EXPRESIONES. -
a. Todas las constantes o variables deben estar separadas por
un ope radar.
b. Nunca pueden ir juntos dos operadores; éstos deben separar
se por paréntesis.
c. Debe existir el mismo número de paréntesis de apertura que
de cierre.
d. Las cantidades que formen la expresión no necesitan ser del
mismo tipo, es decir, pueden estar integradas por cantidades reales y
enteras.
21
e. Los exponentes pueden ser, en general, ntlmeros enteros o
reales.
Ejemplos: En FORTRAN las expresiones que siguen se escribi
rán como se indica:
F = m.a F = M* A
A B
y =-+ Y = A/B ..f,B/C
B C
A+B
y = Y = (A-tB) /(C+D)
C+D
V =.irrR3
3
z -V 10(3+H)
I
Son expresiones FORTRAN válidas:
Vq5LTS / AMPERS (expresión real)
FUER ZA*-*2 +3*MA SA (expresión mixta)
A-tB-C* D** E (expresión real)
A + ( B-C) *DK.(3**48 +C) (expresión mixta)
Son expresiones no válidas:
A +O. 32E+27+-34 dos operadores juntos
P-Q, I37 coma ilegal
6-3+(43*-2) dos operadores juntos
A.+( B-C)) -37 falta o sobra un paréntesis.
ORDE N DE CALCULO. PRIORIDAD DE LOS OPERADORES. - Cuando en
una expresión no se emplean paréntesis la prioridad con que se realizan
las operaciones en ella contenidas es la siguiente:
Prioridad o nivel máximo * * Potenciación.
2ª Prioridad * y / Multiplicación y división.
3i;l Prioridad +Y - Suma y resta.
Cuando en la misma expresión se encuentren operadores de la
misma prioridad, el orden de cálculo es de izquierda a derecha, reali
zándose en primer lugar la operación que aparezca primero.
22
Ejemplos: En la t:'XpresiÓn X+Y-Z*'*3*4/6-1Ztl el orden d'e
opt:'raciones es la siguiente:
l° Cálculo de z�� 3, cuyo resultado llamamos A.
¿<> 4. cuyo resultado llamamos B
Y' B/b. cuyo resultado llamamos C
4° Xt Y, cuyo resL1ltado llamamos D
'">'' D C, e uyo resultado llamamos E
t," E-1¿, n1yo resultado llamamos F
7° F � 1, que es la evaluación final de la expresión.
UTlLIZACION DE PARENTESIS. - La utilización de paréntesis dentro de
las expresiones aritm�ticas lleva consigo la alteración del orden del cál
culo en la expresion. Así, cuando existan paréntesis, las operaciones s-;;
t>jecutdrán de tal manera que se realizan en primer lugar las que estén
,r:� r!···- en los paréntesis más internos siguiendo luego hacia el ex
terior y temendo siempre en cuenta las prioridades estudiadas anterior
mente.
Ejemplo: Sea la expresión,
A + B*x ( 3 - C )+ (4 / ( 3** 8 + D))
La primera operación realizada sería el cálculo del paréntesis
rn;i;., intl'rno, esto es, ¼*8-.D cuyo resultado llamaremos Z. A continua
uón se c;_dculari'a 3--C cuyo resultado llamaremos Y. Después se calcu
la ri'd 4 /Z e uyo resultado llamaremos X quedando la expresión.
A+B** Y +Z
Frnalmente se cakulari"a B**y y por Último las sumas que que
dan, empezando por la izquierda.
SENTENCIAS ARITMETICAS. - La forma general de una sentencia arit
mética es
siendo a una variable real o entera, con o sin subíndice y E_ una expre -
s iÓn FORTRAN. El resultado de tal expresión sustituye al valor que ten
ga la variable situada a la izquierda del signo igual.
2·3
Ejemplo:
A = A+B
En esta sentencia aritmética el contenido de la variable A se su
ma al contenido de la variable B y el resultado sustituye al valor ante -
rior de A.
Nótese que las sentencias aritméticas no tienen el carácter de
ecuación matemática sino de sustitución.
Son también sentencias aritméticas las siguientes:
ANS ( I ) = A ( J ) + B ( K )
I=-I-tl
A = I Convierte un número entero en real
A = B Almacena B en A
I = B Convierte un número real en entt:'rO
REGLAS DE CONVERSTON DE LOS TIPOSDE\'ARIABLESDE LAS SEN -
TENCIAS AR I fMETICAS. - Como ya hemos dich¿, en una expresión no
tienen porque ser todas las variables del mismo tipo. Así, pueden venir
mezcladas variables reales, constantes enteras, variables de doble pre
cisión, etc. Entonces el resultado será del tipo de la que tenga un rang-;
o categor:a más elevado. Los rangos o cate�orÍas son de mayor a me -
nor, los siguientes:
DOBLE P RECISION
REAL
ENTERA
La evaluación de las expresiones se hace sit:'mpre por parejas
de operandos, pudiendo construí rse el cuadro siguiente:
Operando 1
E R D
E Entera
E E R D
R Real
Operando 2 R R R D
D Doble preci-
D D D D
. ,,
s1on
24
La conversión se lleva a cabo automáticamente y el resultado es
del tipo de la de mayor rango.
Ejemplos:
I = J*K No hay conversión pues todas las variables son ente
ras. Se dice que la expresión es de modo entero.
I = A+J J se convierte en real se suma con A y él T{· S 11lt�1 do
se asigna él I previa conversión a entero, puesto que
la variable I es de ese tipo.
J-= A+B A se suma con B, la suma se convierte en entero al
macenándose en .J.
A = I + A I se conviertt. en Real, se suma con A y el resultado
se almacena en"·_,_ sin conversión, pues t a mbién es
real.
T EMA 6
SENTENCIAS DE CONTROL. - Normalmente, las sentencias de un pro -
grama FORTRAN se ejecutan en secuencia. Es decir una vez efectuada
una de ellas se realiza la que sigue inmediatamente. Vamos a estudiar
ahora, una serie de sentencias llamadas de CONTROL que se utilizan p�
ra alterar la secuencia normal de la ejecución de las sentencias de un
programa FORTRAN.
Estas sentencias son:
incondicional
condicionado
IF aritmético
SENTENCIA G� T� INCONDICIONAL. - La forma general de esta sen
tencia es:
donde E_ es una constante entera positiva que indica un número de senten
cia. Esta sentencia hace que se transfiera el control a la especificada
por el número n. Cualquier sentencia ejecutable que siga inmediatamen
te a una senten;ia G0 T0 debe llevar un número de sentencia; en caso
contrario nunca podrá ejecutarse.
27
SENTENCIA GgS TQ CONDICIONAD A. - La forma general ele esta sen -
l 3
tencia es:
G\,'l T\,'l (n¡, nz ......
donde:
�' nz, ....... , nn, son constantes enteras positivas que in-
dican nÚ1neros de sentencia. Van separados entre sí por comas y encv
rrados todos ellos entre paréntesis.
I es una variable en coma fija no suscrita, separada del part·n
tesis derecho por una coma.
Esta sentencia hace que se transfiera el control a la sentencia
numerada n l , n2, n3, ........ n n , según que el valor de I sea 1, 2, .. .
. . . N, respectivame11te. La listad.e números de sentencia-entre par�n
tesis puede ser tan larga como se desee y un mismo número puede rept'
tirse tantas veces como sea necesario. Sin embargo, la variable L hd. de
tener un valor no superior al número de sentencias de que conste la lis··
ta. En caso contrario, es decir, si el valor de I está fuera del rango, se
ejecuta la sentenc i.a siguiente.
Ejemplo:
Gy') Ty) (3, 1 O, 7 , 3 , 1 O 1 ) , I
En este caso para I = 1 e I = 4 el control se transfiere él la St'.n
tencia 3; para I = 2 a la sentencia 10; para I = 3 a la sentencia 7 p ,
I ::. S a la. s L' i1, , ·; 1 ( 1,: , , ; ,
Para I 5 el programa sigue en secuencia es decir se efectua-
rÍa la sentencia que sigue inmediatamente a la G<;Z) T<;Z>.
SENTENCIA IF ARITMETICO. - Su forma general es:
donde:
� es una expresión aritmética y n¡, nz, n3 son números de st·n
tencias ejecutables separadas entre sí por comas.
2'8
Esta sentencia hace que se transfiera el control a la sentencia
numerada n l, nz Ó n3 según sea el valor de la expresión (a), inferior,
igual o mayor que cero. Dos números de sentencia que se indican como
opción pueden ser iguales. Por ejemplo con IF (A) 7, 7, 8 se indica al
ordenador que ejecute la sentencia 8 solamente si A es estrictamente po
sitivo, es decir, no negativo y no nulo. En caso contrario se ejecutará];
sentencia 7.
La expresión aritmética a estéÍ sujeta a todas .las reglas de je
rarquÍd. y modo que son aplicables a las expresiones descritas en las sen
tencias aritméticas.
29
TEMA 7
SENTENCIA DQ. - Una de las técnicas más importantes de programa -
ciÓn es el 11 bucle 11 o iteración, es decir, la posibilidad de efectuar varias
veces una serie de sentencias. Para ejecutar dichas iteraciones se em
plea en FORTRAN la sentencia Dy). Su forma general es:
Dy) n i = m1, m2, m3
en donde:
- n es el número de una sentencia ejecutable que aparece des
pues del Dy).
i es una variable entera no suscrita.
- ml, rn2, m3 son o bien constantes enteras sin signo,superio
res a cero, o bien variables enteras no subindicadas, s i n
signo, cuyo valor es superior a cero.
La sentencia Dy) hace que se ejecuten varias veces todas las sen
tencias que le siguen incluida la sentencia cuyo número es E.·
Estas sentencias forman el rango del Dy). i es el Índice del Dy),
es decir, la variable que sirve para contar el nÚme;o de iteraciones. La
primera vez el Índice i tomará el valor de m1, la segunda vez el valor
de .i.. será m1 +m3 y a-;Í sucesivamente hasta que i_ alcance un valor su
perior a mz.
Las variables o constantes rn1, m2, m3 se denominan valor inJ;
cial, límite superior e incremento, respectivamente. El Índice m3, es
31
opcional; si se omite, se supeme que su valor es 1. En este caso la co
ma que precede a m3 debe también omitirse. El número de veces que se
ejecutan las sentencias del rango del D0 viene dado por la expresión:
+ 1
Ejemplo:
D0 2 O K = 3, 7, 2
A(K)=B(K+l)+3.
20 C( K) '- A( K) K 2.
En este caso y para el primer valor de K, K = 3, se ejecutarán
las sentencias A ( 3) ::.: B( 4) + 3. y C( 3 ) = A( 3) -K 2. . La segunda
vez seráK = 3+2 = 5, A( 5) = B( 6) + 3. y C( 5) '- A( 5) :1t2 .
La tercera y Última vez K toma el valorK - 5+ 2 = 7 y se ejecu
tan las sentencias A( 7) = B( 8)+3. y C( 7) = A( 7) * 2. El siguie��
te valor de K sería K = 7+2 = 9 y por ser superior a m2 = 7 no se volve
rá a efectuar el bucle, ejecutándose la sentencia siguiente al rango del
D0.
CONSIDERACIONES SOBRE EL EMPLEO DEL 12.2..: -
m2, --
m1 , --
1) Los parámetros _i_, -- m 3 no pueden ser alterados en
una sentencia dentro del D<;ZÍ.
2) La Última sentencia del rango de un D<;ZÍ (sentencia cuyo nÚmP
ro es n) no puede ser ni una sentencia G<;ZÍ T� , ni una sentencia IF, ni
otra s�ntencia D<;ZÍ.
3) Puede haber otras sentencias D0 dentro del rango de una sen
tencia D<;ZÍ.
4) En cualquier momento puede existir una transferencia fuera
del rango de cualquier bucle D�.
5) Los parámetros í, m1, m2, m3, pueden cambiarse medjan
te sentencias aritméticas fu;�a del rango del Dp Únicamente si no se
vuelve a transferir al rango de la sentencia D� que utiliza estos parám�·
tros.
3 2
En la figura se muestran algunos casos de transferencias váli
dd s e inválidas.
D9) 1
�
Dy) 2 e
D\Z) 3 <·
-é--�
rl.
D)U 4
[__
'\ b
.,
5
Las transferencias 1, 5 y 6 son incorrectas y las 2, 3 y 4 son vá-
1 idas.
Las transferencias 1 y 5 se hacen desde fuera del rango de la
sentencia D\Z> 1 y por lo tanto son inválidas. La transferencia 6 es tam -
bién inválida pues indica una bifurcación desde el D\Z) 1 al D0 4.
3.3
T EMA 8
SENTENCIA Cy')NTINUE. - Su forma general es:
C�NTINUE
La sentencia C�NTINUE es una sentencia ficticia que puede si
tuarse en cualquier parte del programa sin afectar para nada a la secuen
cia de ejecución.
En el caso de que un Dy) deba terminar con una sentencia de bi
furcación (Gy') Ty), IF, etc.) se utiliza como Última sentencia de dicho
Dy) la sentencia C�NTINUE.
SETENCIA PAUSE. - Su forma general es:
en donde� es una constante entera positiva.
Dicha sentencia hace que se efectúe una parada momentánea del
programa el cual reanudará su ejecución con una intervención m a n u a 1
del operador. Después de dicha intervención el programa prosigue con
la sentencia que sigue inmediatamente a la sentencia PAUSE.
35
SENTENCIA S__!2!'. - Su forma general es:
1 ST\;lP n
en donde n es una constante entera positiva.
Esta sentencia produce una parada en la ejecución del progra
ma. La diferencia con la sentencia PAUSE estriba en que aunque exista
una intervención manual del operador el programa no reanudará su eje -
cuciÓn de nuevo.
SENTENCIA END. - Su forma general es:
La función de la sentencia END consiste en poder identificar la
Última sentencia física del programa. Esta sentencia no origina ninguna
instrucción para el ordenador y Únicamente le indica, en tiempo de com
pilación que el programa ha terminado.
36
TEMA 9
SENTENCIAS DE ENTRADA Y SALIDA. - Las sentencias de entrada/sa
lida permiten al programador transferir datos entre la memoria central
y un fichero cualquiera que se encuentra situado en un dispositivo de en
trada /salida.
CONCEPTO DE DISPOSITIVO DE ENTRADA Y SAL1DA. -TTPOS DE DIS
POSITlVOS. - Se denomina dispositivo a la unidad física donde se encuen
tra el fichero de datos. El dispositivo se direcciona por un número ent�
ro sin signo que está asignado por el compilador, en forma de constante
o bien de variable definida con anterioridad a dicha sentencia.
Cuando el programador escribe una sentencia de entrada/sali
da, con la que introducirá los datos procedentes de un cit>rto fichero, in
cluirá en la misma, el número dd dispositivo que lo [Link]í la má
quina sabrá dirigirse al fichero indicado.
Existen varios tipos de dispositivos, que corresponden, gene -
ralrnt:nte, a la organización de los ficheros que soportan. Estos respon
den a dos categorías:
a) Organización de tipo secuencial, en la que los datos entran o
salen de una manl'ra continua, es decir, unos detrás de otros, de mane
ra que si quiere accederse a unos datos que se encuentran en la mitad
del fichero, deberá haberse leído toda la información precedente.
Los datos, dentro de un fichero de este tipo, se agrupan en lo
tes que se llaman bloques o registros físicos.
37
Entonces un bloque será la unidad de información más pequeña
que se transfiere a la memoria central.
Dentro del bloque físico, el programador puede agrupar los da
tos en unidades más pequeñas llamadas registros lógicos.
El manejo de los bloques corre a cuenta·de la unidad física, pe
ro el manejo de los registros lógicos lo lleva.f cabo el programador.
Según esto, los dispositivos de acceso secuencial son:
la lectora de fichas
la perforadora de fichas
la impresora
la cinta magnética.
b) Organización de acceso directo. En este tipo de organización,
la información almacenada es direccionable y por lo tanto, se puede ac
ceder a una parte de ella (registro lógico) sin necesidad de leer la in -
formación precedente, pues se conoce su dirección dentro del fichero.
Esta organización sólo la soportan las unidades de almacena -
miento en disco, tambores magnéticos y tarjetas magnéticas de película
fina.
Ejemplo:
Cuando el programador escribe una sentencia para leer unas
fichas que tienen perforados los datos del problema,
Las fichas constituirán un fichero de entrada.
La lectora es el dispositivo de [Link].
La organización del fichero será secuencial.
El bloque o registro físico será la propia ficha.
El número asociado con el dispositivo podría ser el 1.
La sentencia sería pues:
READ (1, 100) A, B, C, D
siendo A, B, C y D los datos o registros lógicos perforados en la ficha.
La palabra READ da orden de leer al dispositivo (lectora) nu
número de una sentencia de formato que se
mero 1 y el 100 indica el
explicará más adelante.
38
CONCEPTO DE CONJUNTO DE DATOS. - Se llama conjunto de datos a-1
fichero que contiene los datos que van a tratarse, es decir, una colee -
ciÓn organizada de información homogénea.
Esta información estará organizada en bloques para que pueda
ser leída o escrita. Estos bloques físicos de información pueden dividir
se por el programador en registros lógicos que a su vez pueden ser sub:
divididos en unidades más pequeñas, variables, conjuntos, etc.
LISTA DE DATOS. - La transferencia de la información contenida en un
registro hacia la memoria central, se realiza a través de la lista de da
tos. En una operación de entrada, los datos pasan del registro externo
a los lugares de la memoria especificados por los nombres de variables
de la lista.
En una operación de salida, el contenido de las variables que es
pecifica la lista pasará a formar un registro de salida apto para ser es-:
e rito.
En el ejemplo anterior
READ( l,lOO )A, B, C, D
la lista de datos la constituyen los nombres de variables en coma flotan
te A, B, C, D y por lo tanto, se infiere que el programa ha leído un re-:
gistro con cuatro números en coma flotante pertenecientes al conjunto de
datos del dispositivo 1 (lectora) y los ha almacenado en cuatro palabras
llamadas A, B, C, D.
Si en este registro hubiera, por ejemplo, seis números en co
ma flotante los otros dos restantes se perderían, puesto que el progra -
mador sólo ha especificado cuatro en la orden de lectura.
La lista puede contener nombres de variables o nombres de con
juntos ordenados; pero no permite nombres de funciones y expresiones
aritméticas.
Cuando un conjunto ordenado de números aparee e en una lista de
variables de entrada, la tabla entera se almacenará en memoria, sigui [Link]
do el orden de almacenamiento de los conjuntos anteriormente explicado
en el tema 4.
39
CONCEPTO DE FORMA TO. - Se denomina formato interno de máquina
al modo en que se encuentran almacenados los datos en la memoria prin
cipal, es decir, en modo binario. La transmisión de la información des:
de la memoria a un dispositivo periférico, puede realizarse conservan -
do el formato que acaba de describirse o alterándolo. En este Último ca
so es necesario emplear para ello una sentencia o especificación de for
mato.
El uso de la sentencia de formato presupone una conversión de
los datos expresados en un determinado sistema de num eraciÓn (decimal
o hexadecimal) a forma binaria o viceversa.
Si se opera sin especificación de formato, la información se
transfiere de la memoria principal a los dispositivos de entrada/salida o
viceversa en forma binaria, en cuyo caso la longitud de los registros vie
ne determinada por la propia lista de variables a transferir.
40
TEM A 10
SENTENCIAS DE ENTRADA Y SALIDA EN MODALIDAD SECUENCIAL.
Existen cinco sentencias de este tipo: READ, WRITE, END FILE, RE
WIND, y BACKSPACE.
Las sentencias READ y WRITE causan la transferencia de los
registros de un fichero secuencial; la sentencia END FILE define el final
del fichero; las sentencias REWIND y BACKSPACE controlan la posición
de lectura del fichero.
J
SENTENCIA READ. - La forma más general de esta sentencia es:
READ ( a, b, END • e, ERR • d} LISTA
donde:
a es una constante o variable entera, sin signo, que representa
al dispositivo físico o unidad que se emplea.
� es una constante entera que representa el número de una sen
tencia FORMA T. El uso de J?. es opcional.
END = c, siendo;: una constante entera correspondiente al nú
mero de sentencia a que bifurca el programa cuando llegue al final de los
datos. Es opcional.
ERR = d, siendo _i el número de sentencia a la que se bifurca si
se encuentra algún error en la lectura de los datos. Su empleo es opci�
nal.
41
LISTA representa la relación de variables que van a leerse.
Combinando estas posibilidades se obtienen las sentencias bá -
sicas READ siguientes:
a.
READ ( a, b) LISTA
sentencia que lee los datos especificados en LISTA, por la unidad a y
con formato b.
La lista de variables puede ser:
a 1) Variables no subindicadas.
Ejemplos:
READ ( l, 100) A, B, C
READ ( 2, 3 )ALFA, BETA, GAM MA
a2) Variables simplemente subindicadas.
Ejemplo:
READ ( 1, 100)A, B (4), C (7)
que origina la lectura de la variableA, la variable B (4) y
la variable C (7).
a3) Variables con más de un subíndice .
Ejemplo:
READ ( 1,2 O O ) ( (A ( I,J), J = 1, 1 O),I = 1,2 O )
que equivale a los siguientes Dy) explícitos:
Dy) 1 O I = 1,2 O
Dy) 1 O J = 1, 1 O
10 READ ( l,200)A (I,J)
es decir, la sentencia originará la lectura de todos los ele
mentos de la matriz A ( 20, 10) que se almacenará en me -
moria según las reglas que siguen las variables suscritas.
42
a4) Los apartados a1, az y a3 pueden mezclarse entre sí.
Ejemplo:
REA D ( 5. 2 O ) A, B, ( C (I), I = 1, 1 O), D (4)
que originará la lectura de las variables A y B, la lectura
de 10 variables C (1), C (2) ........ C (10) y la lectura de
la variable D (4), del dispositivo de entrada número 5.
b.
READ ( a) LISTA
sentencia con la que se transfieren los datos de LISTA desde el disposi
tivo a a la memoria, en formato binario.
Ejemplo:
REA D ( 9 ) A, B , C, D
transferirá los datos del dispot=·�tivo número 9, codificados en binario ,
directamente a memoria.
SF:NT ENCIA WR I TE. - Su forma general es:
donde:
a es un numero entero asignado al dispositivo que se emplea.
b es una constante entera que designa ¡--l numero de una senten
cia FORMAT. Es opcional.
LISTA es la lista de variables como en el caso de la sentencia
READ.
Ejemplos:
WRI TE ( 3,4 ) A, B, C
causa la escritura en la unidad física de salida 3 de las variables A, B y
C con el formato indicado en la sentencia número 4.
4 3
WRITE ( 3,7 O O ) ( A ( I ), I = 1,1 O O )
que escribe la ordenación unidimensional A ( 100 ) por la impresora (di�
positivo número 3) según el formato especificado en la sentencia de for
mato 700.
Esta sentencia equivaldría al D� explícito.
D� 1 O I =1,100
10 WRITE ( 3,700) A ( I )
De la misma manera podría escribirse la ordenación bidimen -
sionalB( 200, 10 ) con la sentencia
WRITE ( 3,700 ) ((B( I, J ), J =1,10), I = 1, 200 )
También puede combinarse la lista de variables como en la sen
tencia READ.
Ejemplo:
WRITE ( 3,57 ) A, (B( I,3 )1=1,10,2), C, D
origina la escritura por la impresora, dispositivo número 3, de las va
riables que figuran en la lista y que son,
A,B( 1,3 ),B( 3,3 ),B( 5,3 ),B( 7,3 ),B( 9, 3 ), C, D
con el formato especificado por la sentencia número 57.
Como en el caso de la sentencia READ existe la forma
WRITE ( a ) LISTA
Ejemplo:
WRITE ( 9 ) A, C, D ( 4 ), NOMBRE
que transfiere los datos de la memoria central al fichero secuencial que
se encuentra en el dispositivo número 9, en forma binaria.
44
SENTENCIA END FILE. - Su forma general es:
END FILE a
donde:
a es una constante entera que representa el dispositivo o unidad
física del fichero.
Esta sentencia pone una señal de final de fichero en el fichero
asociado al dispositivo �-
SENTENCIA REWIND. - Su forma general es:
REWIND a
donde:
a es una constante entera que representa el numero del dispo -
sitivo o u�idad física del fichero.
Esta sentencia coloca el fichero de datos en disposición de que
pueda ser leído su primer registro.
SENTENCIA BACKSPACE. - Su forma general es:
[:ACKSPACE a
siendo a una constante o variable entera que representa el número de dis
positiv;;- o unidad física del fichero.
Esta sentencia hace retroceder un registro lógico al fichero de
datos.
En general, cuando se manejan ficheros en organización secue�
cial en cinta magnética, después de finalizar 1 as operaciones de lectura
o escritura deben escribirse las sentencias,
45
END FILE a
REWIND a
que dejan el fichero preparado y a punto para una nueva operación de es
critura o lectura.
46
T EM A 11
SENTENCIA DE FORMATO. CODIGOS DE FORMA TO. - Para logra·r que
la información puede transmitirse al ordenador a partir de un medio o
soporte de almacenamiento externo, tal como la ficha perforada, la ban:.;
da de papel o la cinta magnética o al contrario, llegar a estos medios ex
ternos desde el ordenador, es necesario que en todo momento este Últi:
mo tenga la suficiente información relativa a la clase y cantidad de da -
tos que se van a manejar. Para este fin, se emplean sentencias conve -
nientes de formato, las cuales acompañan a cada una de las sentencias
de entrada/salida que existan en el programa.
Toda sentencia de formato tiene dos finalidades: (1) describir la
clase de información que se está utilizando y (2) especificar el tipo de
conversión que ha de llevarse a cabo entre la representación interna de
la información y la notación externa.
Las sentencias de formato no son ejecutables sino Únicamente iE
formativas. Por ello pueden colocarse en cualquier lugar del programa
fuente, aunque es aconsejable que todas ellas estén reunidas bien al pri::;
cipio o al final del programa.
Los códigos que pueden contener las sentencias de formato pa-
. ,.
ra describir y especificar el tipo de convers1on son de dos clases:
Códigos para la conversión de datos numéricos y códigos para
información alfanumérica. Los primeros son I, F, E y los segundos A,
H, X los cuales se estudiarán con todo detalle en los dos próximos te -
mas.
47
U SOS DIVERSOS DE L A S ENTENCIA FOR M A T . - La forma gent-> r,tl
de una sentencia de formato, denominada sentencia F<;z>RMAT, es la s L -
1
guiente:
n FÓRMAT (e¡, ez, ..... , en/el, e;, .... , e�/...
siendo n una constante entera que representa el nÚmt->rO de la senten< id:
las ci y ci códigos de formato cuyo significado se describirá en los µc._;
ximos temas y los / los indicativos del comienzo de un nuevo registro
unitario.
Toda sentencia F<;z>RMA T debe tener un numt-ro de sentencia é:d
que ha de referirse otra de entrada/salida en algún otro lugar del pro -
grama fuente.
Las barras (/) o slash se utilizan para delimitar los registros
unitarios, entendiendo por tales los siguientes conceptos:
a. Una línea de impresorét con un determinado número de po -
siciones de impresiÓn ( 120 Ó 1 32 ).
b. Unc:1, ficha perforada con un máximo de 80 columnas.
c. Un registro de cinta magnética.
Ejemplos:
l. En30 F'2)RMAT (I5,F8.4 ), el nÚmero de sentencia es30
y sirve para un solo registro compuesto de dos datos, pue�
to que se dan dos códigos ( I, F ) separados por comas.
2. La sentencia 80 F<;z>RMAT (F8. 2/ElO.4), tiene 80 como
número de sentencia y es capaz de manejar dos r ,· 51 séros
cada uno de ellos compuesto por un solo dato, siendo los
códigos respectivos F y E.
3. Una sentencia de lectura de fichas perforadas con los datos
A, B y C, que utilizara el formato,
n F<;z>RMAT ( F8.3/ElO.4, F8.2)
leería correctamente los datos dispuestos en fichas distin -
tas del modo siguiente:
48
B e
El O. 4 F8. 2
A
F8. 3
Es posible que en muchas ocasiones deban emp learse c Ó d i g o s
de formato repetidos porque exista un cierto número de variables con
secutivas que pertenezcan al misrno tipo. En tal caso puede escribirse
delante del código correspondiente, I, F o E, un coeficiente o constante
numérica igual al número de variables que existan.
Ejemplos:
1. El empleo del código 3I4 con una sentencia de entrada ,
significa que van a leerse tres datos enteros.
2. La sentencia
READ (5,100 ) I, J, A, B, C, K, L
podría acompañarse de
100 Fy')RMAT ( I4,I4,F8.2, F8.2, F5.3,I2,I2)
o bien de
100 F9)RMAT ( 2I4, 2F8.2, FS. 3, 2I2 )
Puede también suceder que un grupo de códigos diferentes se re
pitan un cierto número de veces. En este caso basta encerrar entre pa-:
réntesis tal grupo, haciéndole preceder de un coeficiente o constante nu
mérica igual al número de veces que va a "' r'epetirse.
Ejemplo:
El grupo de especificaciones I2, El O.4,F8. 2 se repite cua
tro veces. Entonces bastaría con escribir,
4 ( I2,El0.4,F8.2)
Cada sentencia F9)RMAT debe contener tantos códigos de forma
to como datos existan en la correspondiente lista de la sentencia de en
trada/salida.
49
De no coincidir ambos números pueden darse dos casos:
a) El número de datos de la lista de entrada/salida es m e n o r
que el de códigos de formato, e n cuyo caso los códigos sobrantes se ig
noran.
Ejemplo:
Si los datos A y B se transmiten mediante la sentencia de for
mato.
1 O O F0RMAT ( F8 . 2, E1 O. 4 , F8. 3, I 4 )
no se tendrían en cuenta los dos Últimos códigos F8. 3 e 14.
b) El número de datos de la lista de entrada/salida es m ayo r
que el de códigos de formato, en cuyo caso el control de la s e n t e nci a
F0RMAT se transfiere al paréntesis de apertura precedente, empleán
dose de nuevo los mismos códigos de formato para los siguientes datos
de la lista, pero estos leídos o escritos en registros físicos o unitarios
diferentes. Lo dicho se refiere al caso de que en el Fy)RMAT exista un
Único nivel de paréntesis.
Ejemplos:
l. Para leer los datos A, B, C, D, E, F, G perforados en fi
chas y según la sentencia
100 Fy)RMAT ( F8. 3, El0.4 )
deberían perforarse como se indica:
J
F8. 3
/
E, F
F8. 3 El O. 4
/ e ' D
F8. 3 El O. 4
/ A B
F8. 3 El O. 4
50
2. Utilizando para esos mismos datos la sentencia de formato,
1 O O F�RMA T ( F8. 3 / E1 O. 4, F8 . 2)
los datos deberían disponerse así:
( G
F8. 3
E F
El O. 4 F8. 2
D
F8. 3
B e
El O. 4 F8. 2
A
T8. 3
Si en el F�RMAT existe más de un nivel de paréntesis, el pri -
mer registro corresponde a todos los códigos existentes dentro del nivel
más externo y los siguientes se toman desde el nivel más cercano al pa
réntesis de cierrt del nivel primero, hasta el final.
Ejemplos:
1 . Se trata de escribir una serie de datos empleando para ello
la sentencia de Fy)RMATO con dos niveles de paréntesis
1 O O F� RMAT ( F8. 3, ( E1 O . 2, F6. 3)
)
Las líneas impresas tendrían el siguiente formato:
F8.3, El0.2, F6.3
El0.2 F6.3
!_: l_.9 ._? ,_ F_§ . .]
2. Si la sentencia empleada fuera
100 F�RMAT (( F8. 3, El O.2), F6.3)
las líneas se imprimirían así:
F8. 3, El O.2, F6. 3
------
F8.3, El0.2, ---
F6.3
51
3. Al emplear
100 F�RMAT ( I2 / ( I3, F6. 1), F9. 7)
se producirían las siguientes líneas:
I 2
I 3, F6. l, F9. 7
I 3, F6. l ,F9. 7
4. Empleando
100 F�RMAT (( I2, I3), ( IS, F8. 2), F9. 3)
las líneas impresas serían:
I2, I3, IS, F8. 2, F9. 3
IS, F8. 2, F9. 3
IS, F8. 2,_F9. 3
Finalmente, los códigos contenidos en una sentencia de forma -
to deben corresponderse con la clase de los datos a transmitir, es decir,
cuando estos sean enteros deben facilitarse en el F�RMA T c Ó d i g o s de
conversión entera, etc. , todo lo cual se verá con detalle en el tema si
guiente.
5·2
TEM A 12
CODIGOS DE FORMATO NUMERICO. - El uso de la sentencia F�RMAT
está í'ntimamente ligado como ya se ha dicho con la clase de campos o
información que se maneje, según que éstos sean numéricos o alfanumé
ricos. Se estudiará en esta ocasión todo lo relacionado con los datos nu
méricos, mientras que en el próximo tema se revisarán los alfanuméri
cos.
Cuando se usan campos numéricos, el FORTRAN dis p o n e de
tres formas de conversión o códigos utilizables tanto en la entrada de
datos como en la salida de resultados.
a. Por medio del código E puede convertirse en forma externa
de coma flotante con exponente un dato real que estuviera COE_
tenido en memoria o bien puede ingresarse en el ordenador
un dato externo real que viniera acompañado de exponente.
b. Mediante el código F un dato interno real puede convertirse
en información externa también real, pero sin exponente o
bien pueden introducirse en el ordenador las cantidades rea
les que no posean exponente.
c. El código I se utiliza cuando deba ingresarse en el ordena -
dor y en forma entera, un dato externo también entero o en
coma fija.
Lo dicho sirve también para el caso inverso, es decir,
este código se emplea para la obtención de resultados ente
ros contenidos en memoria en forma entera.
53
Téngase presente que los datos contenidos en memoria
y que han sido generados por el lenguaje FORTRAN, Única
mente pueden adoptar estas dos modalidades: en forma ente
ra o en forma real con exponente y normalizada.
Ejemplos:
1. Si el dato que desea ingresarse en el ordenador, con
tenido en un soporte externo cualquiera, es el número
decimal en coma flotante con expon ente 2243. 2E+4, de
berá escogerse el código E. Lo mismo ocurrirÍa para
sacar el número - O. 8324E+03 contenido en memoria.
2. Si se trata de almacenar en memoria el nÚmero 0.325
se utilizaría el código F. Lo mismo para 42. 08 Ó 21.3.
3. Si la cantidad a ingresar fuera el dato en c o m a fija
2343, se emplearía el código I.
FORMATO I. La forma general de este código es:
siendo I el carácter de control o código propiamente dicho y n una cons -
tante entera sin signo que indica la longitud del campo, es de�ir, el nÚ -
mero máximo de dígitos que posee el número, más una posición para el
signo algebraico cuando sea necesario.
Este códi g o puede emplearse en la entrada o salida de cantida -
des enteras de la forma siguiente:
a) Entrada: En este caso se transfieren desde el soporte exter
no a la memoria, � caracteres numéricos, teniendo en cuenta que los
blancos, cualquiera que sea el lugar que ocupen, se consideran como ce
ros.
Ejemplos:
1. Existe un conjunto de fichas cuya información se perfora a
partir de la columna 1 y todas ellas se leen con el formato I4. Entonces
ser1a:
54
Valor externo Valor en memoria
Ficha 1 8235 8235
Ficha 2 4b53 4053
Ficha 3 bb28 0028
Ficha 4 132b 1320
Ficha 5 475384 4753
Ficha 6 b-47 0-47
2. Las dos sentencias siguientes
READ ( 2, 100 ) KIL 1, KIL 2, KIL 3
100 Fy'.)RMA T ( I3, 2I2 )
leerían la ficha perforada según se indica
( b-23b4783b28
del modo siguiente:
KILl = 0.,..2
KIL2 = 30
KIL3 = 47
b) Salida: Se transfieren de memoria al soporte externo tantos
caracteres ;orno indica E_, teniendo en cuenta que si el número de dígi
tos significativos que forman la cantidad junto con el signo ocupan en m�
moría una longitud menor que E_, las posiciones izquierda de salida se
rellenan con blancos. Si por el contrario, esas posiciones totalizan un
número mayor que E_, la salida está formada por tantos aster is e os (u
otros caracteres de control) como indique E.·
Ejemplos:
1. Los valores contenidos en la memoria que se indica a conti -
nuaciÓn se imprimirían con formato I3 según se relaciona:
55
Valor en memoria Valor externo
824 824
o bbO
-5 b-5
1723 ***
2. Supongamos las sentencias,
WRITE (3,100) I, J, K
100 F<;DRMA T (I4, I3, I5)
Si los valores de las respectivas variables J, J, K dentro de lc1
memoria fueran I ;:_ -315, J ·. 23 y K = -217, la línea impresa como re
sultado sería
-· 315b23b -21 7
FORMA TO F. - La forma general de este código es:
Siendo F el carácter de control, E una constante entera sin sig11u que in
dica la longitud total del campo real y d otra constante del mismo tipo
que la anterior que indica el número total de dígitos que siguen al punto
decimal, es decir, que componen la parte fraccionaria del número.
Este código puede emplearse para la entrada o salida de la in
formación del modo siguiente:
a) Entrada: En este caso se transfieren desde el soporte exter
no a la memoria n caracteres de los cuales los d Últimos de la derecha
serán los decimales. No es necesario perforar ;l punto decimal, pero si
existe ha de tenerse en cuenta en la longitud total n y en ese caso ya no
considerará la especificación d. Si se perfora el signo (que debe prece -
der al dato) también su posici6n habrá que tenerla en cuenta en n.
Ejemplos:
1. En el conjunto de fichas que sigue la información se perfora
a p artir de la columna 1 y todas ellas se leen con formato F5. 2. Enton-
ces seria:
56
Valor externo Valor en memoria
Ficha 1 b837b 83. 70
Ficha 2 32b832 320.83
Ficha 3 472. 73 472.7
Ficha 4 0. 2531 8.253
2. Supóngase que la información contenida en las veinte prime
ras columnas de una ficha es bl3834 - 61532bb837419 y ésta se lee me
diante las sentencias
READ (5, 1 O O) A, B , C
100 Fy')RMAT (F6. 2, F6. 1, F8. 4)
Entonces los valores que tomarán las variables en memoria se-
r1an:
A= 138.34
B = -6153. 2
e= 83.7419
b) Salida: Se transfieren de memoria al soporte externo tantos
caracteres como indica n y Únicamente tantos decimales como indica d.
En E_ ha de incluirse una-posición por el punto decimal y otra para el sig
no algebraico, si existe. Si n es menor que las necesidades prescritas
se imprimen astedscos u ot-;o carácter de control; si es mayor el nÚme
ro va precedido por blancos.
Ejemplo:
1. Los valores en memoria se imprimirían como se indica em
pleando el formato F5. 2:
Valor en memoria Valor externo
83.25 83.25
4. 3237 b4. 32
12.8 12.80
121.831
324.00
57
FORMA TO E. - La forma general de este código es:
�
1 �n.o 1
siendo� el carácter de control, E_ una constante entera sin signo que in
dica la longitud total del campo real con exponente y d otra constante del
mismo tipo que la anterior que indica el número totalde dígitos que si
guen al punto decimal.
El empleo de este código es el siguiente:
a) Entrada: Se transfieren a memoria n caracteres. En este nÚ
mero han de incluirse además de las posiciones-ocupadas por la [Link]·�
fraccionaria ( d ) cuatro posiciones para la parte exponencial, otra para
el signo y otra para el punto cuando exjstan, por lo que en todo caso de
berá ser n �d+4.
Los espacios en blanco que existan se tomarán como ceros cual
quiera que sea su posición en la cantidad. Si el punto va indicado y su
posición no coincide con la expresada por d, aquél tiene prioridad sobre
ésta. Para el exponente son equivalentes 1-;;_-s formas siguientes: E;- 02 ,
t02, -t2, E t2, E2.
Ejemplos:
1. Las fichas que siguen se perforan a partir de la primera co
lumna y se leen con formato E lO.3. Entonces sería:
Valor externo Valor en memoria
Ficha 1 bb3. 235+03 3235.0
Ficha 2 bbb4321 +02 432. 1
Ficha 3 3. 8324E+Ol 38.324
Ficha 4 bb-374.1E+3 Especificación insuficiente
Ficha 5 321876E+02 32187.6
2. Para introducir la cantidad 3. 3473E+ 02 debería emplearse la
especificación El O. 4. Si el punto decimal no estuviera explícitamente in
-
dicado bastaría con E9. 4
58
b) Salida: En la salida todas las cantidades reales con exponen
te salen en forma normalizada, es decir, con el primer dígito significa
tivo siguiendo al punto decimal. La cantidap. ocupará en el soporte ex -
terno tantas posiciones como indique� por lo que en esta constante ha
brá de tenerse en cuenta: las posiciones ocupadas por la mantisa y que
están controladas por d; el lugar para el punto decimal; el lugar para el
signo cuando exista y �uatro posiciones para el exponente. Si el número
de dígitos que forman en memoria la mantisa es mayor que el indicado
en d, la parte fraccionaria se trunca por la derecha. Cuando la cantidad
� e; menor que el número de posiciones requeridas se imprimen aste -
riscos u otros caracteres de control. Si n es mayor se dejan blancos a
la izquierda. Téngase en cuenta que al �enos debe ser n � d+6. Con al
gunos ordenadores en� ha de incluirse tari1bién un lugar para un c e r o
que se sitúa delante del punto decimal.
Ejemplos·
1. Los valores contenidos en memoria, con ]la especificación
El 2. 3 se imprimirían como se indica:
Valor en memoria Valor externo
. 35836788E+03 bbbO. 358E+03
. 37000000E+05 bbbO. 370E+05
- . 8247OOOOE+ 00 bb-0. 824E+OO
2. Si el número interno -. 837 4507 SE+ 01 se quisiera perforar
con ES. 2, saldrían asteriscos por dar una especificación insuficiente (la
�).
TEM A 13
CODIGOS ALFANUMERlCOS. - Con el fin de poder manejar datos alfanu
méricos como, por ejemplo, etiquetas o referencias de identificación o
los cabeceros de página, el lenguaje F ORTRAN dispone de códigos ade -
cuados. Estos son los códigos A y H.
CODIGQ_DE FORMATO A. - Este código se emplea pr1 ra poder dar nom
bres de variables a los datos formados por una combinación cualquiera
de números, letras o caracteres [Link],combinaciones que se deno
minan campos alfanuméricos. La forma general de este código es:
siendo E:'.. el número de veces que se repite el formato; A es el código de
especificación y m el número de caracteres alfanuméricos que puede al
bergar una palabra de ordenador. Este Último número dependerá del or
denador que se emplee.
Esta especificación con la que puedt·n leerse o imprimirse da
tos alfanuméricos, hace que los nxm primeros caracteres contenidos en
un soporte determinado sean introducidos en memoria o sean impresos
o perforados desde el almacenamiento.
Ejemplo: las sentencias
READ (3, 100) MENSA
100 Fy)RMAT (A 15)
61
darían lugar a que los quince primeros caracteres contenidos en un so
porte determinado (unidad 3) se leyeran en memoria ocupando un campo
cuyo nombre es MENSA. Se supone que el ordenador hipotético con el
que se trabaja sería capaz de contener en cada palabra quince caracte
res. Si no pudiera albergar nada más que uno se emplearía el F<;i)RMA T
siguiente:
100 F<;i)RMAT (15Al)
Puede suceder que una palabra del ordenador no se llene com -
pletamente; en este caso y como los caracteres van disponiéndose de iz
quierda a derecha, la parte vacía se rellena con blancos. Lo mismo pue
de decir'se· para la salida de resultados.
Ejemplo: supóngase que hemos leído treinta columnas de una fi
cha en treinta palabras distintas de memoria. Entonces habríamos em
pleado la sentencia de formato
F<;i)RMAT (30Al)
Si quisiéramos ahora imprimir estos campos y para ello emplef
semos el formato 30A8, suponiendo que el ordenador admite hasta 8 ca
racteres por palabra, se escribirían los 30 caracteres que ya habi'amos
leído pero cada uno de ellos estaría separado del siguiente por 7 blancos.
CODIGO DE FORMATO H. - Este código se utiliza para la lectura o im
p resión de mensajes constantes, también denominados datos literales .Su
forma general es:
siendo n el número de caracteres del mensaje, contando entre ellos los
blancos que existan, y H el código de la especificación.
Ejemplo: si quisiéramos imprimir el mensaJe LEER NUEVOS
DA TOS podríamos emplear las dos sentencias
WRITE (5,100)
100 F<;i)RMAT (l 7HLEER NUEV<;i)S DAT<;i)S)
Esta especificación puede también emplearse para leer un cier -
to título e imprimirlo más tarde. Para ello es necesario utilizar con las
dos sentencias de entrada/salida la misma sentencia de formato.
62
Ejemplo: deseamos leer las diez primeras columnas de una fi'
cha que contiene un título que más tarde y en otro lugar del programa va
mos a imprimir. Las sentencias [Link]ía ser ( b indica blanc�:
REA D ( 3, 1OO )
WRITE. (5,1 00 )
1 00 F�RMAT ( 20Hbbbbb ...(.2 .0) .... b )
En lugar de emplear el código H, en algunos ordenadores basta
con escribir entre comillas el mensaje que quiera [Link]í, el pri_
mer ejemplo equivaldrí"a a emplear estas sentencias:
WRITE (5, 1 00)
1 00 F�RMA T (' LEER NUEV�S DA T�S ')
Las comillas pueden emplearse tanto para la entrada de carac
teres como para la salida.
CONTROL DE CARRO. - Utilizando ciertos códigos y bajo control del pr�
pio programa puede hacerse que la impresora conectada a la unidad cen
tral pueda ejecutar ciertos movimientos especiales como espaciado en
tre renglones de escritura o cambio de página para comenzar a escribir
en la siguiente. Para ello se emplean normalmente los caracteres b
(blanco), O y 1, acompañados del código H que acaba de estudiarse,den -
tro de la sentencia Fy'.>RMAT correspondiente. El significado de estos ca
racteres es el siguiente:
b escritura a espacio simple entre renglones
O doble espaciado
1 comenzar a escribir en la página siguiente.
Ejemplos:
a) Para escribir el mensaje LEER NUEVOS DA TOS en la hoja
siguiente emplearíamos el formatn
1 00 F�R:MA.1 (lHl, 'LEER NUEVy')S DAT�S')
b) Si hubiésemos utilizado la sentencia
1 00 F�RMAT ( lHO, 'LEER NUEVy')S DATy')S
el mensaje encerrado entre comillas se nos hubiera impreso dejando do.s
líneas en blanco entre su línea y la anterior.
Este carácter de control debe ser lo primero que contenga la
sentencia FPRMA T y puede también 1r encerrado entre comillas, si se
desea y el ordenador lo permite.
El control del carro en cuanto a la forma de imprimir los r t·n -
glones puede también ejercerse mediante el empleo en la sentencia FPR
MA T de signos/, barras o slash, siendo función del número de estos ca
racteres y de su sit11aciÓn en la sentencia, la cantidad de registros igno
rados en la entrada de datos o del número de líneas en blanco en la sali
da de resultados. El siguiente cuadro es un resumen de lo expuesto:
Registros ignorados o líneas
NQ de barras
en blanco en la 1mpres1on
Al principio del FÓRMA T
existen n n
En el centro del FPRMA T
existen n n - 1
Al final del F�RMA T
existen n n
Ejemplos:
a) Sr se emplea la sentencia FpRMA T (15///// F8. 3), entre los
datos indicados por 15 y F8. 3 escritos en líneas diferentes quedarán 4lÍ
neas en blanco.
b) Si· se leyeran los datos enteros perforados en una misma fi -
cha y para ello se empleara la sentencia de formato
FlZ)RMAT ( //// I5, 14)
se leerían esos datos de la quinta ficha.
CODlGO DE FORMA TO X. - Su forma general es:
'Siendo n el número de caracteres que se van a ignorar de un determina·
do sop�te cuando empleamos el código para la entrada de datos, o el n�
mero de blancos que se van a producir cuando se emplea en la salida de
resultados.
Ejemplos:
a) Se tiene una ficha perforada con seis campos de datos ente
ros, cada uno de ellos ocupando 4 columnas. Si se desea ignorar el se -
gundo de ellos podría emplearse el formato siguiente:
F0RMA T ( I4, 4X, 4I4)
b) Si en una línea impresa, entre dos resultados reales se de
sea dejar 5 blancos debería emplearse la sentencia de formato siguien
te:
Fs;6RMA T ( F8. 3, 5X, F8. 4 )
con la que se produciría por ejemplo la línea impresa.
-532.472bbbbb-37.4108
T EMA 14
SENTENCIAS DE ENTRADA/SALJDA EN ACCESO DIRECTO. - Para leer
o esL ribir en un dispositivo de acceso directo se precisan unas senten
cias que permitan acceder directamente a un registro sin ningún otro p�
so intermedio.
Cuando se leía o escribía secuencialmente, Únicamente se ne
cesitaba para ello indicar el fichero de que se trataba. Ahora además se
necesitará indicar qué registro interesa dentro del fichero. El modo más
cómodo de hacer esto, será asociando el registro con un número que se
rá precisamente el número del registro dentro del fichero.
SENTENCIA DEFTNE F �LE .. - Es aquella que define las características
de un fichero al que vamos a acceder mediante sentencias de leer o es
cribir en acceso directo.
Puede colocarse en cualquier lugar del programa con la Única
limitación de que deberá preceder a cualquiera de las sentencias que se
refieran al fichero que nos define. Su forma general es:
[DEFINE FILE a¡ (n¡, t¡, f¡, v¡), ªz (nz, tz, íz, V�
siendo:
ªi: Constante entera sin signo, que indica el fichero de que se
trata.
ni: Constante entera sin signo, que indica el número de regis
tros que tiene el fichero asociado con a.
67
ti: Constante entera sin signo, que indica el tamaño de dicho-s
registros expresado bien en caracteres bien en palabras.
fi: Es una de las siguientes letras y sirve para indicar s1 la
transmisión va a ser con o sin control de formato:
L: Si va a ser con o sin control de formato y entonces el tama
ño del registro debe ir expresado en número de caracteres.
E: Con control de formato y tamaño expresado en caracteres.
U: Sin control de formato y tamaño expresado en palabras de
memoria.
vi: Es una variable entera no suscrita. Terminada una opera -
ciÓn de lectura o escritura (READ o WRITE), indica el nú
mero del registro siguiente al transmitido. Después de una
operación de búsqueda (FIND), indica el número del regis -
tro encontrado.
Ejemplo:
DEFINE FILE 4(50, 100, E, 12), 5( 199, 50, L, U3), 10(100, 7, U, ID)
El primero indicará un fichero que se reconoce por el nÚmero 4,
que tiene 50 registros de 100 caracteres cada uno de longitud y por te -
ner la letra E la transmisión de la información será con control de for -
mato siendo 12 en este caso la variable asociada. El segundo irá con o
sin control de formato, y el tercero sin él y de tal manera que cada re
gistro es de 7 palabras.
SENTENCIA READ. - Permite transmitir los datos, desde un dispositivo
de acceso directo, a la memoria, Su forma general es:
READ (a'r, n) LISTA
siendo:
a: Constante o variable entera sin signo que indica el fichero
asociado. Debe ir seguida de un apóstrofe.
r: Expresión entera que indicará el número del registro den
tro del fichero del que va a leerse la información.
n: Será el número de la sentencia F9)RMA T en caso de que la
transmisión vaya a efectuarse bajo formato. Si se omite se
supone que la transmisión va a ser sin control de formato.
LISTA: En caso de existir indicará el nombre de las variables
o conjuntos en donde se van a almacenar los datos leídos.
68
SENTENCI A WRITE. - Se emplea para transmitir la información desde
la memoria a un dispositivo de acceso directo. Su forma general es:
WRITE (a'r, n) LISTA
donde:
�' E y� tienen el mismo significado que en la sentencia READ.
LISTA: En caso de existir indicará el nombre de las variables o
conjuntos que se desean grabar en el dispositivo de acceso
directo dentro del registro ir1dicado por .E. del fichero!:·
Ejemplo: Sean las sentencias
DEFINE FILE 4( 50, 4, L , I2), 5 ( 1 O, 12, L, KA )
I NTEGER H ( 8 )
KA::2
1 F�RMA T (2I2)
2 REA D (4' 2 O, 1) (h (I), I = 1 , 8)
3 WRITE(5'KA-t, l)X, Y, Z
La sentencia READ 2 hace que desde el fichero asociado con el
número 4 bajo el control de la sentencia 1 Fy)RMA T, se lean ocho parti
das de datos y dado que cada registro sólo contiene dos partidas, se lee
rán cuatro registros comenzando a partir del 20 (20, 21, 22 y 23). La va-
riable asociada I2 valdrá 24 al término de la operación.
La sentencia 3 WRITE hace que se transmitan al fichero asocia
do con el número 5 y sin control de formato tres variables de tipo real:
X, Y, Z.
Como cada registro contiene 12 caracteres se escribirá el re -
gistro número 3 y al final de la transmisión KA tendrá el valor 4.
69
SE NTE NCIA FIND. - Puede, en algunos casos, resultar interesante que
mientras se está efectuando un proceso con unos datos se desee prepa
rar ya en alguna parte del programa los datos siguientes y con ello au -
mentar la velocidad del programa objeto. Esto es precisamente lo que
hace esta sentencia. La forma general es:
FIND ( a I
r )
siendo:
a: Es una constante o variable entera sin signo que indica el nÚ-
mero del fichero al que se refiere.
r: Indi ca el número del registro dentro del fichero a.
Ejemplo:
DE FINE FIL E 7(2000, 1, U, JJJ), 8(1920, 6, E, M)
Iy6M = 320
JJJ ce l
100 Nl4 = 500 + JJJ
IMAX e:. Nl4 + Iy6M
111 WRIT E (8 1 JJJ, l) IMAX
1 F�RMAT (I6)
77 FIND (7 'Nl4)
14 RE AD ( 7 !Nl4)AAA
IF (IMAX - 1200) 100, 100, 15
15 CON TINUE
La sentencia 111 WRIT E hace que se escriba bajo el control de
la sentencia 1 F y6RMAT el valor de IMAX (en la primera pasada 821) en
el registro 1 del fichero 8).
M quedará con el valor 2 .
La sentencia FIND preparará el registro 501 del fichero 7.
La sentencia 14 RE AD, asignará a AAA el registro 501 quedan
do JJJ con el valor 502.
70
En la segunda pasada será Nl4=1002, IMAX= 1322.
111 WRITE escribe en el registro 2 del fichero 8, 1322.
FIND preparará el registro 1002 del fichero 7 continuando
la ejecución a partir de la sentencia número 15.
7·1
T EM A 15
CONCEPTO DE SUBPROGRAMA. - Se denomina subprograma a un con
junto de sentencias que ayudan a resolver una parte de un problema tra
tado en un programa general (principal), y que se encuentra fuera de ese
programa principal. El subprograma es llamado, en bloque, d e s d e el
programa principal.
Hdy dos tipos de aplicaciones fundamentales para los subprogr�
mas: una es la necesidad de repetir unas ciertas operaciones fijas, con
unos datos variables. La otra es la posible necesidad de fragmentar un
programa principal y sus subprogramas forman un bloque de diversas
11 piezas conectadas entre sí.
11
Aun cuando lo mas común es que un subprograma esté conecta
do exclusivamente al programa principal, puede estar también conecta
do con otros subprogramas.
PROGRAMA
-
PRIN�IPAL SUB PROGRAMA
,
- �
'
SUB PROGRAMA
�- --
,, -
SUBPROGRA
MA
·t
'•
- ....
- 1_
75
El uso de subprogramas permite simplificar el programa prin
cipal, trabajar simultáneamente distintos programadores en puntos di
versos de un programa, efectuar cambios y correcciones sin alterar la
estructura fundamental. Facilita también, la localización de errores.
El aumento de tiempo en la ejecución de un programa que tenga
subprogramas frente a uno que tenga las funciones que realizan los sub
programas incluidas en el principal, no es apreciable salvo en casos en
que los subprogramas se deban ejecutar un gran número de veces, sien
do muy cortos ellos mismos. Esto se debe a las operaciones que tiene
que realizar la máquina para llevar y devolver un subprograma a memo
ria.
DENOMINACION DE LOS SUBPROGRAMAS. - Los subprogramas se iden
tifican por caracteres alfanuméricos (en número variable según la má--:=
quina empleada).
El primer carácter debe ser siempre alfabético. El Único cará�
ter especial que puede utilizarse es el blanco, pero no es válido como
separación entre otros caracteres: se le ignora.
El nombre de un subprograma no podrá coincidir nunca con el
de una variable.
TIPOS DE SUBPROGRAMAS. - Se puede distinguir cuatro tipos de sub -
programas: subrutinas, subprogramas FUNCTIPN, subprogramas FUN�
Tiy)N de FORTRAN, y funciones de sentencia.
Se denominan funciones, en FORTRAN, a la expresión en sen
tencias FORTRAN de una cierta relación entre constantes y Vdriables.
Por tanto, para emplear funciones en FORTRAN será necesario poder
las identificar por su nombre, definir el tipo de operación que van a rea
lizar, y definir las constantes y variables que intervienen en ellas.
FUNCIONES DE SENTENCIA. - Si las relaciones que se encuentran en
un programa son lo suficientemente cortas o sencillas como para que
puedan incluirse completas en una sola sentencia, pueden expresarse m _t_::_
<liante una función de sentencia. La definición de dicha función de senten
cia indica las operaciones que se efectúan siempre que aparece el nom
bre de la función de sentencia incluido en alguna otra sentencia del pro -
grama.
74
Si se tiene por ejemplo la función matemática:
Y(t) = 3t - 16, 3Xtt 3
2
°
podrí dmus e�( ribirla en FORTRAN como:
Y(T) -=- 3. °*· T�u!-2-16. 3*X-tTxid
Si este cálculo tuviérdmos que repetirlo para diversos valores
de t y X podríamos definir la función de sentencia
y entonces cada vez que utilizáramos PAR (T, X) con valores cualquiera
de T y X, se realizarÍc1 ese cálculo.
Así si tuviéramos que hacer
Z = L+Y(t)
ese ribirÍamos en FORTRAN
Z = L+PAR(T , X)
La ex pre siÓn escrita a la derecha del signo igual, en la defini
ción de función de sentencic1 no puede tener variables subindicadas ni ha
cer referencia a la propia función. Los argumentos de la función (en el
ejemplo son T y X), no pueden St·r subindicados tc1mpoco.
Los argumentos empleados en la definición de función de sen -
[Link] son variables fictit ic1s. En el ejemplo hubi�rc1mos podido definir
la fun( iÓn de sentencia como:
PAR(P, Q) = -16. 3*Qt3*P.�Hf2+P�Bd
y llamarla en la sentencia con T y X
Z = L+PAR(T X)
realizándose las operaciones con los valores de T y X.
Estas variables se denominan también pseudovariables, y pue
den utilizarse en más de una definición de función de sentencia o bien co
mo variables fuera de dichas definiciones de función de sentencia.
En cambio los argumentos en las sentencias que hacen referen
cia a dicha función deben ser iguales en tipo, orden y número a los fic
ticios. E sto es lógico teniendo en cuenta que los valores de los argumen
tos en sentencias de referencia (sentencia de llamada a función de sen.-
75
tencia} son los valores que adoptan las pseudovariables para efectuar el
cálculo de la func iÓn.
Supongamos, en el mismo ejemplo que
la variable T = 2. O
la variable X = 5. 2
y que se debe calcular el valor de Z en
Z = L + PAR (T, X}
Lo que ocurre es que P toma el valor de T, y Q el de X
P= T=2.0
Q=X =5.2
y se calcula la funciÓn
PAR (2. O, 5. 2)
Los argumentos de la sentencict de referencia podrán ser cual -
quier tipo de constante o variable subindicada o no subindicada.
En la expresión de una sentencia de definición de función se pu�
den utilizar variables diferentes a las que forman los argumentos.
Así por ejemplo el llamar a la función PPER(A, B) definida por
una sentencia
9')PER (A, B} = 2. Z*A-B/5. O+C
la función se calcula con los valores transmitidos de A y B y con el que
tenga e en ese momento.
La definición de función de sentencia clebe anteponerse a la pri
mera sentencia ejecutable del programa en que se encuentre dicha fun -
ciÓn.
SUBPROGRAMAS FUNCTI0N. - Se caracteriza por ser un programa com
pleto por sí mismo, con una sentencia FUNCTiy'.)N, otra RETURN, y otr·¡i
END, por lo menos.
Desde un programa principal se llama a un subprograma FUNC
Tly'.)N con uno o más argumentos que son los valores con los que éste
opera, y devuelve al programa principal el valor de la función.
7·6
Las variables y números de sentencia del subprograma FUNC:...
TIQN son índependiC'ntC's de los de cualquier otro programa.
No t·s neccs;[Link] dar ('n el programa principal información pre
' 1;isobre el subprogrélma F UNCTipN élntes de la sentencia en que se le
lléim,,. si t:ste t'S el tipo implícito.
La primt'ra sentenci;1 del subprograma es la sentencia FUNC -
TJy)N, que puede tt'ner las formas:
FUNCTIOJ\ NNNN (a1, az, a3, .)
REAL FUNCTlOl\ NNl\;f-í (c1l, az, a3, .)
TNTEGER FUNCTIOJ\ NNNN (al, az, a3, .)
tfl doridt· NNNN rt·prt·sl·nt;1 el nombn° de la función, y a¡ sus élrgumen -
11),-.. El nombre d<:> la función no puedl' s,·r utilizddO como variable.
En caso de que se t'mplee alguna de las dos Últimas formas es
IH,ct·sario llldicar en el programa princip2J respectivamente:
REAL NNNN
lNTEC,ER NNNN
En un subprogrélmél FUNCTIQN no ouede aparecer ni una senten
c1a SLLH(SJU l'lNE r1. otra Sl·ntcn ,a FU:\Jl; [ION.
S,· dt·bt' [Link] un v<Jlot· al non1bn de !él función pn algún o al
gunos puntus del subprograma. y¿, St'd vn una sentencia READ, en una
C:\LL. o ,11 Ulld ar:tm,itic¿1 (a la izquierdd del signo igual, como \,aria
bll).
Lu" orgunwntos del subprogramé, FUNCTJ0N SP put'den consi
d1 r·., r· ( orno pst:udo\·d riablt·s. Sl' sustituytn por tanto por los valort>s de
los d r·gurnr ntos de la. SPntencia de llaméldél del [Link] principal Dt·
cwlquit'r forma deben ser del n1ismo tipo, en el mismo ord e n, y en
igual nÚmt'ro que 1 os argumentos de la llamada del programa principal.
Los élrguml·11tos d1: la sentenci a de llc1madé1 ú.l su bpro g r a ma
FUNCTIQN pueden ser cualquiér tipo de constante, cualqui,J r tipo de va
r·idble subindicada o no, cualquier expresión aritmética, cualquier nom
tHt' dt> conjunto. o el nombre de un subprograma FUNCTJQN o SFRR<DU
T J NE. Si es e 1 nombre de un ronjunto, s t' deberá espee i fi cd.r en el sub -
pr·ograma FUNCTl<;í)N la dimensión del conjunto con una st > ntt0 ncia DI -
MENSJ0N apropiadd..
77
El s1il¡progrc11na FUNCTiy)N debe acabar con dos Sl'llknciéls:
RETURI\
END
Ej1c·mplo:
Subprogramas
INTEGER FUNCTJ�N BASE
DIMENSI�N I (45) FUNCTI�N ACUM (S, V) FUNTI(L)N BASE (I)
DIMENSIÓN I ( 4 5)
Ac._ACUM (R, T) RETURN RETURN
END END
B = Q. -BASE (I(R))
SUB PROGRAMA0 FUNCTiy:'.)N DE FORTRAN O FUNc;:_JONES DEL SISTE
MA. - Son subprogran1;ts incluidos en el sistema FORTRAN y ya prdi -
jados. Se dif<·r�'nci;rn dl' los subprogramas FUNCTI�N normalvs c·n quv
el subprog rama ya es'.,¡ hecho, de modo que el prog r,1 mador no n t·c l'S 1 ta
preparar lo.
A continuac 1c;1, se indi e an algunos de estos subprogramas:
Nombr·e V;ilur dt-' retorno Función r(·aliz:ida-·--·-- ---·
-----------·---
SIN (Arg) c�;lcu]o dl'] Sl'l'O 1,, 1·gun1<·11t<> t'll
radianes) Trigonom:.trico
C�S (Arg) CclSl·no (Arg) Coseno Trigonorn(·tr1co
EXP (Arg) eA rg Exponencial de v
1
SOR T (Arg) (Arg)2 Raí'z cuadrada
AL�G (Arg) Logaritmo del argum,'nto
ABS (Arg) Arg Valor absoluto
78
Tanto en las funciones de sentencia, como en los subprograma's
FUNCTI�N como en los subprogramas FUNCTI�N de FORTRAN el nú
mero de argumentos es 1 o más, y el de valores de retorno es solamen
te 1, a diferencia de los subprogramas SUBR�UTINE en los que el nÚ -
mero de valores de retorno es cero o más.
7'9
T E MA 16
SUB PROGRAMAS SUBROU TINE. - Siempre que al utilizar un subprogra
ma sea necesario la existencia de más de un valor de retorno s e ha c e
obligatorio el uso del subprograma SUBRy')UTINE. En esto reside la di
ferencia fundamental entre SUBR0UTINE y FUNCTISZ)N.
Al igual que los subprogramas FUNCTISZ)N, debe tener al menos
una sentencia RETURN, y una Última sentencia END.
En los subprogramas SUBR�UTINE son válidas todas las sen
tencias FORTRAN excepto la FUNCTI�N, las SUBRpUTINE, DEF I N E
FILE u otra en la que el nombre de la SUBRSZ)UTINE aparezca como va
riable.
Del mismo modo que en las FUNCTJ�N, por st·r un programa
indt·pt> ndit'nte en los subprogramas SUBRy)UTJNE si· puede utili½ar cual
quit·r va [Link] e, aunque yd. esté empleada en el programa p r in e i p a 1, y
t:ualquit'r número de sentencia.
Los argumentos que aparect·n t·n una st·ntt•ncia. SUBR�UTINE se
suelen dt'norninc:1.r parimetros. No ha.y mcÍs [Link]<;n en cuanto a su nÚ
mE'ro, qut:' la posibilidad de lÍnt'.aS de conUnu.:tciÓn t:'D Lt hoja dt:' codifica-
. '
ClOil.
Como para las FUNCTISZ)N , los parámetros son pseudovaria -
bles y deben corresponder en orden, número, tipo y dimensión con los
de la llamada del programa principal. No tienen por qué tener el mismo
nombre.
�
Tampoco es obligatorio la existencia de argumentos o parame -
tras.
81
Los parámetros que deban transmitir valores al programa priE_
cipal, no es necesario que todos lo hagan, deben aparecer en el subpro
grama a la izquierda del signo igual en alguna sentencia aritmética, o en
una lista de entrada del subprograma, o como argumento en una CALL o
en una llamada de función.
No es necesario dar en el programa principal información pre
via a la sentencia de llamada a la SUBRy)UTINE a menos que el tipo de
algún argumento no sea implícito, en cuyo caso en el subprograma se de
be definir también el tipo de ese argumento.
Los argumentos pueden ser cualquier tipo de constante, de va
riable (subindicada o no), nombre de conjunto, expresión aritmética, o
nombre de subprograma.
En una sentencia EQUIV ALENCE, dentro de un s u b p r o g rama
SUBRy)UTINE no puede figurar ninguna de las pseudovariables.
La subrutina queda compilada de modo que no asigna nuevas di
recciones de almacenamiento a las variables que aparecen como argu -
mentas, sino que utiliza las mismas direcciones que tienen esos argu -
mentas en el programa principal.
82
T EMA 17
SENTENCIA CALL. - Esta sentencia se emplea como llamada a un sub
programa S UBR0UTINE. Cuando en la ejecución de un programa princi
pal aparece la sentencia CALL el control se transmite a la subrutina lla
mada. La forma general de esta sentencia es:
CALL NNNN (a, b, c, ... )
donde NNNN representa el nombre de la subrutina y�,_!?,!:_, etc., son los
argumentos.
SENTENCIAS RETURN y END. - En el empleo habitual de los subpro
gramas suele interesar el retorno al programa principal para que éste
continúe ejecutándose. Esto se consigue con la sentencia RETURN, que
devuelve el control al programa principal, transmitiendo los argumentos
con los valores que tengan en ese momento. Si no se desea el retorno al
programa principal en lugar de la sentencia RETURN se puede utilizar la
sentencia STy')P.
En un subprograma puede existir más de una sentencia RETURN.
La sentencia END le señala al compilador el final físico del sub
programa. Sólo puede haber una sentencia END.
Seguidamente se exponen diversos casos de utilización de las
sentencias y subprogramas anteriores:
83
Programa principal Subroutines
DIMENSISZ)N B( 30 ) SUBRSZ)UTINE RSZ)TU
WRITE( 3, 7)
FSZ)RMA T(lOX, 20H PRINCIPISZ) CALCULSZ)
CALL RSZ)TU RETURN
END
SUBR�UTINE CANIB ( A, B, C )
DIMENSISZ)N B( 30 )
7 CALL CAMB (A, B, C) A =B(7)t2
IF (A) "i, 7, 5
5 RETURN
7 C =At6
RETURN
END
CALL F IN(DI, IJ) SUBR0UTINE FIN( PL, K )
END
ST0P
END
84
TEMA 18
_§_ENTENCIA CQMMQN. - La finalidad de la sentencia Cy')MMPN es re
St'n:c1.r und cierta área de almacenamiento enla memoria de la máquina,
que puéda st"r compartida por varios programas o subrutinas sin que se
rtlten' la información existente en ese área de [Link] pe2:_
mi te una mayor simplificac iÓn de programas, y un ahorro de volumen de
n1emoria oc upada.
La formé1 de esta St'ntencia es:
CÓMM ÓN a, b, e, ....
dondt" a, b, l , son variables o conjuntos dimensionados o no.
Si en un programa aparecen unas variables cualesquieraA, B,
C, D y empleamos la sentencia CÓMMÓNA, B, C, D la máquina reser
vará una zona de almacenamiento en la memoria para esas variables. Si
en un programa o subprograma conectado con el anterior aparece tam -
bién la sentencia C�MMy)NA, B, C, D la zona que tenían asignada esas
variables no será alterada, y por tanto los valores que tengan al comen
zar eL segundo programa o subprograma será el mismo que tenían al aca
bar t--1 primer programa.
Si en un programa se define
Cy)MMÓNIREV, LDy)C, RMN
y en otro programa o subrutina conectado con el anterior se define
Cy')MMÓN LS, J4, T 19
85
y las tres variables de los dos programas se corresponden mutuamente
en cuanto a tipo, las del segundo C�MM�N tendrán asignadas las mis -
mas posiciones de memori1. que las del primero.
La dirección reservada a las variables que a p a re e e n en el
C0MMPN se hace (de modo ascendente o descendente) de acuerdo con el
orden con que aparecen en el CPMMPN. Si hay más de una sentencia
CpMMpN se asigna según el orden de cada sentencia.
Así, la aparición de:
cpMMPN A, B, e, D
CPMMPN E, F
en un programa, provocará un almacenamiento en el orden
A, B, C, D, E, F
Las redundancias no están permitidas. Por ejemplo:
qz5MM�N IA, L, K, �' B9
Es de gran utilidad este tipo de sentencia para su empleo en
las subrutinas. Se puede eliminar con ella los argumentos en la senten -
cia de llamada y en la subrutina. Así, por ejemplo, si en un programa
tenemos:
cpMMPN A, B, e
CALL ESTRA
y en la subrutina tenemos:
SUBRPUTINE ESTRA
cpMMPN A, B, e
sustituye a:
programa principal:
CALL ESTRA (A, B, C)
subrutina: SUBR{)UTINE ESTRA (A, B, C)
Esto,además de simplificar la programación de las subrutinas
(por número de argumentos, similitud de tipos, etc,), hace que el pro -
grama se ejecute más deprisa.
Si en un programa principal tenemos tres variables A, B, C y
en otro programa relacionado con él solamente utilizamos dos variables
D�B, SECT, iguales a A y C respectivamente, podríamos dar en el pri
mer programa una sentencia:
qZ>MM0N A, B, C
y en el segundo, otra:
CqlMMqlN :[Link], FICT, SECT
en donde FICT es una variable ficticia que no se vuelve a mencionar en
el programa, pero que permite que las direcciones asignadas a las otras
dos parejas de variables sean idénticas.
Cuando se sustituyen los argumentos de una subrutina por va
riables incluidas en un C�MM�N, éstas están sujetas a las mismas nor
mas que los argumentos.
Se ha indicado anteriormente que las variables del C�MMqlN
pueden estar dimensionadas. Hay dos formas de indicarlo. Supongamos
dos variables A ( 20 ) y B ( 30 ) . Podremos poner:
DIMENSI0N A (20), B (30)
CqlMM0N A, B
o bien:
C0MM0N A ( 20 ) , B ( 30 ) que sustituye a
las dos anteriores.
87
Sería también válida la combinación:
DIMENSI�N B ( 30 )
C�MM�N A ( 20 ), B
La dimensión de un conjunto debe indicarse en la primera re
ferencia a dicho conjunto (excepto en el caso de argumentos, en que la
dimensión se da en la: segunda referencia). Así, es válida la forma:
REAL IJK ( 100 )
C�MM�N PQ ( 15 ), IJK
Sup�ngamos que tenemos un programa principal y dos subpro -
gramas y que en el programa principal se utilizan las variables A, B, C;
en el primer subprograma las D, E, F, G; y en el otro p r o g r a m a �las
H, R.
Supongamos también que las A, B y H son de doble precisión,
y el resto de precisión normal. Supongamos también que la doble preci
sión requiere cuatro palabras por variable, y que la precisión n o r m a 1
requiere sólo dos:·
Palabras
Programa
Principal:
A B e
1er subprograma
D E F G
H R
.
2Q subprograma
Si en el programa principal tenemos C�MM�N A, B, C y en
el primer subprograma tenemos C�MM�N D, E, F, G, ninguno de los
valores de A, B, C se podrá transferir correctamente a D, E, F, G a
través del C�MM�N. porque ninguna de las variables de cada grupo es
tá almacenada en las mismas direcciones y con igual longitud que las del
otro grupo. En cambio, si en el 2Q subprograma tenemos C�MM�N H, R,
podremos transferir a través del C�MM�N los valores de la variable A
a la variable H.
88
Del mismo modo los valores de L-i variable F se podrían trans
mitir a la variable R.
Esto indica que a veces puedP ser conveniente la ordenación
< uid;idosd de lci.5 Vdriables en el Cy'.)MM0N (por ejemplo; primerola pre
e i,,.,ión normal, luego las de doble pn•c isiÓn) que permita fácilmente la
tr<1nsferencia de valores entre programc1s y subprogramas.
? El'!_'I.f NC!� EQ._t¿_IVA �_EN C �- - Ya se hd indicado anteriormente que la
'->entt,n( ld C..y)MMQ)N permite un ahorro de men1oria (por ejemplo, en vez
de t<:>ner que definir dos veces un mismo conjunto, con nombres dis tin
tos en un programa y un subprograma, lo incluimos en dos C�MM�N y
Ol upa así el lugar de un solo conjunto. Es decir si A (L) := B (I), C�M -
Mg)N A ( d ) y C<;Z)MMy'.)N B ( d ) sustituyen ci DIMENSI�N A (- d ), B ( d) ).
Existe otra sentencia, la EQUIVALENCE, e uya func iÓn es ex
c l u si \·c1 n1ent e la de ahorrar volumen de memoria.
En general las vdriables y conjuntos de varidbles Sl' dlmace
nan en distintas posiciones de memoria. En caso de que el programa es
te� ese rito de modo que dos ciertas V<lrictbles sP utilicen consecutivamen
tt', pero no alternadas, nada impide el qul' los [Link] �ue toman la va
ridblt-> utilizada en segundo lugar se almacenen en las posiciones que to
mab<l la primera. v;-uiablt>. Esto. que es tambi�n váÍido para el caso de
conjuntos, se consigue con la sentenl ia EQUIVALENCE.
La forma general de esta sentencia es:
[ EQUIVALENCE ( v¡, vz, v3, ... ), (x¡, xz, x3, ... ). ...
donde v 1 y x¡ son nombres de Vdridbles que pueden estar subindicadasSe
puedt->n pr<:>st'ntar tres casos pdra los subi'ndices: a) si la \·driable es una
\'dri<lbJe s1mplementp subindicada (un solo subíndice), t'l subíndice con
qu"' c1pctrece en el EQUIVALENCE indica d lugar que ocupa en <:>l conjun
°
to (dsi una variable V con DIMENSI�N V (30) que apareciera en el EQUJ
VALENCE como V (17), haría referencia a la variable V que ocupa el 1�
gar 17 <:>n el conjunto). b) Si la v¿riable que aparece en el EQUIVALEN
CE es una variable perteneciente a un conjunto no simplemente subindi -
cado (es decir, con dos o tres dimensiones), y el subíndice con que apa
ree t> en el EQUIVALENCE, es uno solo, éste indica el lugar que ocupa
en t-l ( onjunto, (si tenemos DIMENSI�N VD (20, 10, 20) y EQUIVALEN-
89
CE VD ( 3 ), el EQUIVALENCE se refiere a la variable VD que ocupa el
lugar nQ 3 en el conjunto, es decir a la VD (3, 1, 1 ) . c) Si la variable
subindicada tiene más de un subíndice puede aparecer en el EQUIVA -
LENCE con tantos subíndices como tenga. Por ejemplo EQUIVALENCE
A ( 12, 9, 14), B ( 8, 3, 4) significa que están en el EQUIVALENCE,
dos variables, no los dos conjuntos.
La sentencia:
EQUIVALENCE ( v1, vz ... ), ( X 1, Xz, ... )
indica que las variables v1, vz, v3, ... tienen asignada la misma, y Úni
ca, posición de almacenamiento; y lo mismo ocurre con X l , Xz ..
En el uso de la sentencia EQUIVALENCE hay que evitar con -
tradicciones.
No puede incluirse en una sentencia EQUIVALENCE dos varia
bles que ya se encuentren en el Cy)MMy)N.
Conviene tener en cuenta que si las variables que se incluyen
en el EQUIVALENCE pertenecen a un conjunto, éste queda automática -
mente posicionado. Se puede así aumentar el tamaño del C�MM0N, siem
pre que se haga por el límite superior. Por ejemplo, si tenemos:
DIMENSI�N PIL ( 4)
C�MMy)N REA, SPA, DEN
EQUIVALENCE (SPA, PI ( 1 ) )
habremos posicionado del siguiente modo:
Por el q:Z>MM<;Z)N Por el EQUIVALENCE
límite inferior REA
SPA PIL 1
límite superior DEN PIL ( 2 )
PIL ( 3 )
PIL ( 4)
y habremos ampliado el Cy)MM�N.
90
En cambio haciéndolo del modo:
DIMENSI�N PIL ( 4 )
C�MMy:')NREA, SPA, DEN
EQUIVALENCE (SPA, PIL ( 3) )
. . .,
que pos1c1onar1a:
Por el Cy)MMQN Por el EQUIVALENCE
REA PIL (1)
SPA PIL (2 )
DEN PIL ( 3)
PIL ( 4)
es inválido.
Las sentencias:
DIMENSI9)N R ( 7 ), S ( 30, 30), T ( 10, 8, 8 )
EQUIVALENCE (R ( 3 ), S ( 5,2 ), T ( 2, 1.1))
que posicionarían en el mismo lugar las variables R ( 3 ), S ( 5, 2 ) y
T ( 2, 1, 1 ) implican también (en horizontal direcciones iguales):
s ( 30, 1)
s ( 1, 2)
s ( 2, 2)
R ( 1) s ( 3, 2)
R ( 2) s ( 4, 2) T( 1, 1, 1)
R ( 3) ...... s ( 5, 2) ..... T( 2, 1, 1)
R ( 4) s ( 6, 2) T( 3, 1, 1)
Se debe prestar atención a que el alineamiento de fronteras de
las variables (ver sentencia Cy:')MMy:')N) sea el adecuado en el EQUIVA
LENCE. Si las longitudes de variables no se corresponden, se pueden i;?:
cluir variables ficticias de longitud conveniente hasta lograr el ajuste.
91
INDICE
Página
TEMA 1 5
TEMA 2 9
TEMA 3 13
TEMA 4 17
TEMA 5 21
TEMA 6 27
TEMA 7 31
TEMA 8 ... . .. .. .... .. .. . . .. ... .. . . ..... . . . ....... .. .. 35
TEMA 9 . ... .. . . .. .... . . .. . . ... . . ..... . . . . . . . . .. . . .. . . 37
TEMA 10 ....... ........ .. . . ... . . . . . . ... .... . .. . . .. .. . 41
TEMA 11 47
TEMA 12 53
TEMA 13 61
TEMA 14 67
TEMA 15 ............................................. 73
TEMA 16 81
TEMA 17 83
TEMA 18 ............................................ . 85
4
SERVICIO DE PUBLICACIONES DEL MINISTERIO DE EDUCACION Y CIENCIA