ARRAYS UNIDIMENSIONALES
-Consiste en una lista de un número finito de datos del mismo tipo que
se referencian por un identificador común y un número de orden que son
consecutivos.
-Las variables que representan los arrays se denominan variables de
sub¡ndice. El tama¤o de un vector es el número de elementos que
componen el vector. Una variable de sub¡ndice tiene el formato:
-Variable (Sub¡ndice).
-La variable puede ser un array de los siguientes tipos:
-Num‚rico.
-Cadena.
-Lógico.
-Complejo.
-El sub¡ndice puede ser:
-Constante num‚rica.
-Variable.
-Expresión matem tica.
-Para saber una determinada posición de un elemento se deben cumplir las
siguientes caracter¡sticas:
-Todos los elementos del array son del mismo tipo.
-El vector tiene un nombre único y los elementos est n ordenados
por el sub¡ndice.
DECLARACION DE UN ARRAY. SENTENCIA "DIMENSION"
-Hay dos formas de definir un vector o matriz, utilizando la forma
común a todas las versiones cuyo formato ser :
-DIMENSION Identificador1 (M¡nimo:M ximo), ..., Identificadorn
(M¡nimo:M ximo).
-El número de elementos que obtendremos vendr dado por la fórmula
M ximo-M¡nimo+1, sabiendo que m ximo deber ser mayor o igual que el
valor de m¡nimo.
-El identificador es una variable con las mismas reglas. Opcionalmente
se puede colocar despu‚s del Identificador un alias o ALLOCATE que se
usar cuando estemos en tiempo de ejecución. Como ejemplos:
-ALLOCATE Array (Valor).
-DIMENSION Array (11:25).
-DIMENSION (14).
-Array (:).
-Lo que indica la opción ALLOCATE es que el valor de sus sub¡ndices se
va a dimensionar durante la fase de ejecución.
-El sub¡ndice izquierdo puede tomar los valores cero, negativo o
positivo al igual que el sub¡ndice derecho, pero ‚ste último debe ser
igual o mayor que el sub¡ndice izquierdo.
-No se puede modificar la dimensión una vez definida, y es necesario
colocar corchetes para definir un array en tiempo de ejecución.
-En el ejemplo siguiente se declara un array de una dimensión que se
dimensionar posteriormente:
-DIMENSION Array ALLOCATE (:).
-Para desasignar el array y liberar la memoria se utilizar la opción
DEALLOCATE como sigue:
-DEALLOCATE Array (Valor).
-Las dimensiones se separan por comas y se pueden definir como m ximo
siete dimensiones, aunque pueden ser m s dependiendo de la memoria
del ordenador.
-Si el l¡mite es uno se puede omitir el valor de m¡nimo, quedando la
sintaxis siguiente:
-DIMENSION Identificador1 (M ximo), ..., Identificadorn (M ximo).
-La segunda forma de definir vectores es con la especificación de tipos
de sintaxis:
-Tipo Identificador (M¡nimo:M ximo).
-Tipo es cualquiera de los tipos definidos en Fortran. Mediante esta
forma se asocia el tipo de dato al identificador y definirlo como un
array con tantos elementos como haya.
-Los l¡mites inferiores y superiores son expresiones enteras siempre
con constantes nunca variables.
-Otros atributos que podemos colocar despu‚s del identificador son:
-REFERENCE.
-C.
-PASCAL.
-VALUE.
-Se usar n estas opciones cuando se va a pasar el array por par metro a
otros lenguajes, por lo que habr que normalizar el lenguaje.
-Los arrays se almacenan en la memoria de una forma distinta que en
otros lenguajes, ya que se almacenan columnas a columnas unas a
continuación de otras.
-Se almacenan en orden creciente de sus sub¡ndices a partir de una
posición determinada. Para sacar los elementos por filas se usar el
DO impl¡cito.
OPERACIONES CON ARRAYS Y ELEMENTOS DE UN ARRAY.
-Hay dos tipos de operaciones b sicas, con los elementos que ser n las
mismas que permiten los tipos de datos o con estructuras como el
recorrido de un array.
-Para hacer el recorrido de un array se usar una estructura del tipo
FOR como:
-DO Etiqueta VarA=Izquierdo, Derecho
acción1
acción2
.......
acciónn
Etiqueta CONTINUE
ENDDO
Se puede leer o escribir un array completo con sólo poner el
Identificador del array en la sentencia de E/S.
-Se puede inicializar un array completo con sólo poner su identificador
y los valores que se inicializan en la sentencia DATA.
-Consiste en obtener datos de un dispositivo externo y almacenarlos en
un vector o escribir en un dispositivo los datos de un array.
-La E/S puede realizarse con el identificador del array y por tanto
se procesa en total o elemento a elemento con un DO impl¡cito o
expl¡cito.
ENTRADA Y SALIDA DE ARRAYS CON DO "IMPLICITO".
-Se utiliza en vez de la estructura de tipo FOR. Esta estructura est
ya definida y hace sencilla la manipulación de los arrays en la lectura
y escritura.
-Con este tipo de DO se ejecuta una sóla vez la sentencia READ de modo
que se lee un sólo registro f¡sico. Su sintaxis es:
-READ (*, *) (Identificador (VarA), VarA=Inicio, Final,
Incremento).
-Cuando el incremento es uno se puede omitir. Tambi‚n puede emplearse
para acceder a los elementos de un array de m s de una dimensión para
leer o escribir e inicializar.
-El DO impl¡cito se puede anidar con tantos niveles como sea necesario
o tantos niveles como dimensiones tenga el array.
Un ejemplo del uso del DO impl¡cito ser¡a:
-READ (*, *) (Array (VarA), VarA=1, 20).
-El ejemplo anterior lee veinte variables estableci‚ndose un bucle. Otro
ejemplo:
-READ (*, *) (Array (VarA), VarA=Izdo, Dcho, Paso).
-En el ejemplo anterior Paso indica que la variable toma el valor de
izdo y sus sucesivos valores repitiendo el proceso hasta que dcho
tiene mayor valor que izdo.
-Pero si paso es negativo entonces dcho ha de ser menor forzosamente. El
siguiente ejemplo tendr¡a como representación con DO la siguiente:
-READ (*, 100) (Array (VarA), VarB=1)
READ (*, *) ((Array (VarA, VarB), VarB=1, VarC), VarA=1, VarD)
-DO VarA=1, VarD
DO VarB=1, VarC
READ (*, *) (Array (VarA, VarB))
ENDDO
ENDDO
PASO DE ARRAYS POR PARAMETRO.
-El paso de un array se realiza por referencia y cuando un array es
pasado, en realidad se pasa la dirección en memoria del primer elemento
ahorr ndose memoria y espacio.
-Un ejemplo de ello es el siguiente:
-REAL Array (100, 200), VarA, VarB
CALL Lista (Array, VarA, VarB)
SUBROUTINE Lista (Arrayauxiliar, VarC, VarD)
-En la definición de los argumentos ficticios para los arrays en las
Subrutinas o Funciones, no es necesario que sean iguales los l¡mites
superior e inferior de cada dimensión con los l¡mites del argumento
actual del array transmitido.
-Siempre se exige que una variable sea dimensionada por lo que dentro
de la Subrutina se colocar la siguiente declaración:
-REAL Arrayauxiliar (100, 200).
-En esta Subrutina no se crea la variable arrayauxiliar sino que se
define dicha variable. El array en esa declaración se puede ajustar
siempre que la dimensión sea menor que la declarada anteriormente.
-En todo caso el tama¤o del argumento ficticio para el array no puede
ser mayor que el del argumento actual.
-Se puede poner un asterisco que es la opción por defecto y que indica
que toma el valor de la dimensión iniciada en el programa principal.
ARRAYS DE TAMAÑO AJUSTABLE Y TAMAÑO ASUMIDO.
-El argumento ficticio array en la Función M ximo su tama¤o se ajusta
a N elementos que es un dato transmitido, y por tanto la definición
de arrays ajustables.
-La definición de un argumento ficticio array de tama¤o ajustable en
una Función o en una Subrutina es la única situación en la que una
definición de array puede incluir una variable en la especificación del
rango de cada dimensión.
-Para definir un argumento ficticio array como asumido se especifica el
l¡mite superior de la última dimensión del array con un asterisco. El
número de elementos del array ficticio es el mismo que el array pasado
por par metro.
-Sólo se puede especificar el l¡mite superior de la última dimensión
con un asterisco, aunque para los caracteres tambi‚n es v lido.
-Para las Funciones car cter externas usaremos la siguiente sintaxis:
-CHARACTER * (*) FUNCTION Identificador (Lista de par metros).