22 de noviembre de 2018

Arreglos de una dimensión (vectores).

   Los arreglos de una dimensión se denominan comúnmente arreglos o vectores, en este texto se utilizará la primera denominación.

Conceptos, representación y estructura.
   Los arreglos son una estructura de datos lineal de elementos contigüos relacionados por un mismo tipo de datos, un mismo nombre (identificador), y distinguidos por un índice.

(a) Representación de un arreglo (Abstracción).  





(b) Representación de un arreglo en la memoria.

   Las figuras anteriores muestran la representación de un arreglo de tamaño cuatro de nombre arreglo. En (a) se observa la representación abstracta de dicho arreglo, mientras que en (b) se presenta la forma en que dicho arreglo es almacenado en la memoria principal de la computadora. Note que los arreglos se representan de forma lineal directa en la memoria de la computadora.

   Los arreglos en C siempre empiezan en el índice 0 y terminan en tamaño - 1, dónde tamaño se refiere al tamaño, dimensión o longitud del arreglo.

   Un aspecto importante a considerar respecto a la conveniencia en el uso de arreglos es la siguiente: no es lo mismo declarar 100 variables de tipo entero que un arreglo de 100 enteros ¿Puede imaginar lo terriblemente tedioso que sería declarar 100 variables de tipo entero?

   Otra ventaja de utilizar arreglos en lugar de una tediosa declaración masiva de variables, es que el grupo de datos relacionados por el nombre del arreglo están contigüos en la memoria, mientras que no necesariamente sería así para el grupo de variables declaradas individualmente.

   En general, la declaración de un arreglo en el lenguaje de programación C tiene la siguiente estructura general:

tipo_de_dato   nombre_del_arreglo[TAMAÑO];

en donde:
  • tipo_de_dato es cualquier tipo de dato válido en C.
  • nombre_del_arreglo es un identificador válido en C.
  • TAMAÑO es la longitud o tamaño que tendrá el arreglo.

Declaración, inicialización y recorrido.
   El Ejemplo 6.1 muestra la declaración, inicialización y recorrido de un arreglo de enteros.

   En la línea 10 se está declarando un arreglo de nombre arreglo de tamaño N. Observe que el arreglo está siendo inicializado en la declaración o en tiempo de compilación; lo que hace el compilador es asignarle 0 al elemento arreglo[0] y 1 al elemento arreglo[1], todos los demás elementos del arreglo se inicializan por omisión en 0, es decir:

arreglo[ 0 ] = 0
arreglo[ 1 ] = 1
arreglo[ 2 ] = 0
arreglo[ 3 ] = 0 
. . . 

arreglo[N-1] = 0

   Si un arreglo, independientemente de su tipo de dato, se declara pero no se inicializa, el contenido de cada unos de sus elementos no está determinado a un valor concreto o específico, lo cual implica que contendrán lo que en el argot computacional se conoce como basura.

   La línea 13 está realizando un recorrido del arreglo; note que para dicho recorrido, el índice se inicializa en 2, mostrando así que es posible iniciar el recorrido de un arreglo en donde se necesite, y no siempre desde 0.

   Por otro lado, la línea 14 está asignándole valores al arreglo a partir de la posición 2. Observe que el valor i-ésimo del arreglo se define como la suma de los dos valores anteriores, por lo que en realidad lo que hace el ciclo for es inicializar el arreglo con los valores de la serie de Fibonacci que se estudió en la entrada referente a la recursividad.

   Finalmente, las líneas 18 y 19 son lo que se conoce como un recorrido para impresión del arreglo, en el cual se imprime por renglón en la salida estándar, cada uno de los elementos del arreglo arreglo. La salida del Ejemplo 6.1 se  muestra en la siguiente figura:

Salida del Ejemplo 6.1.
 
    Ahora bien, el Ejemplo 6.2 muestra otra variante de inicialización de arreglos y un doble recorrido para un arreglo de tipo float.

   Observe que el arreglo a de la línea 10 no tiene un tamaño explícito. Cuando se declara un arreglo en C, éste debe tener una dimensión o tamaño definidos explícita o implícitamente; para el caso del Ejemplo 6.2 el tamaño está implícito, y es determinado por el número de inicializadores (5), los cuales son calculados por el compilador y no están relacionados con el #define de la línea 7, al menos en cuanto a la definición del tamaño del arreglo se refiere.

   La estructura de repetición for de la línea 15, utiliza dos variables de control para hacer un recorrido ascendente (i) y descendente (j) del arreglo a, con la finalidad de mostrar que no siempre ni necesariamente los arreglos se recorren de manera ascendente. La salida del Ejemplo 6.2 muestra en la siguiente figura:

Salida del Ejemplo 6.2.

No hay comentarios.: