[16. Bloques comunes ]  [Tutorial de Fortran]  [18. Estilo de programación ]

17. Datos y bloques de datos

La sentencia data

La sentencia data es otra forma de introducir datos que son conocidos cuando se esta escribiendo el programa. Es similar a la sentencia de asignación. La sintaxis es:
      data lista_de_variables/ lista_de valores/, ...
donde los puntos suspensivos significar que el patrón puede ser repetido. Se muestra a continuación un ejemplo:
      data m/10/, n/20/, x/2.5/, y/2.5/
Se podría haber escrito también como:
      data m,n/10,20/, x,y/2*2.5/
Se podría haber hecho también lo mismo usando asignaciones
      m = 10
      n = 20
      x = 2.5
      y = 2.5
La sentencia data es más compacta y por lo tanto mas conveniente. Observar la forma compacta para la asignación de valores iguales varias veces.

La sentencia data es hecha sólo una vez, exactamente antes de que la ejecución del programa inicie. Por esta razón, la sentencia data es usada principalmente en el programa principal y no en las subrutinas.

La sentencia data puede ser usada también para inicializar arreglos (vectores, matrices). El siguiente ejemplo muestra como se puede asegurar que una matriz este llena de ceros antes de iniciar la ejecución del programa:

      real A(10,20)
      data A/200*0.0/
Algunos compiladores inicializarán automáticamente los arreglos como en el ejemplo, pero no todos, por lo que si se quiere asegurar de los elementos del arreglo son cero, se deberá hacer algo como lo anterior. Por supuesto que los arreglos pueden ser inicializados con otro valor diferente de cero, o aún, inicializar los elementos individualmente, como se muestra a continuación:
      data A(1,1)/ 12.5/, A(2,1)/ -33.3/, A(2,2)/ 1.0/
O se pueden listar todos los elementos para arreglos pequeños como se muestra enseguida:
      integer v(5)
      real B(2,2)
      data v/10,20,30,40,50/, B/1.0,-3.7,4.3,0.0/
Los valores para arreglos bidimensionales serán asignados en el orden de primero columna como se acostumbra.

La sentencia block data

La sentencia data no puede ser usada para contenidas en un common block. Hay una "subrutina" especial para este caso, llamada block data. Esta no es realmente una subrutina, pero es parecida porque se da en una unidad de programa separada. Se muestra el ejemplo:
      block data
      integer nmax
      parameter (nmax=20)
      real v(nmax), alpha, beta
      common /vector/v,alpha,beta
      data v/20*100.0/, alpha/3.14/, beta/2.71/
      end
Tal como en la sentencia data, el block data es ejecutado antes de que la ejecución del programa inicie. La posición de la "subrutina" block data en el código fuente es irrelevante (siempre y cuando no este anidada en el progrma principal o un subprograma).
 [16. Bloques comunes ]  [Tutorial de Fortran]  [18. Estilo de programación ]