Arreglos.

Clasificación de los arreglos:

Los arreglos se pueden clasificar en 3 tipos distintos, comenzaremos hablando del tipo abstracto de datos arreglos, tanto de una (vectores), dos (matrices) o múltiples dimensiones.

Vectores.

Los vectores, también llamados tablas unidimensionales, son estructuras de datos caracterizadas por:

El formato general para la declaración (ya vista previamente) de una variable de tipo vector es el siguiente:

        Tipo_de_datos nombre_vector [tamaño];
            

Donde:

--- Tipo_de_datos indica el tipo de los datos almacenados por el vector. Recordemos que todos los elementos del vector son forzosamente del mismo tipo. Debe aparecer necesariamente en la declaración, puesto que de ella depende el espacio de memoria que se reservara para almacenar el vector.

--- nombre_vector es un identificador que usaremos para referiremos tanto al vector como un todo, como a cada uno de sus elementos.

--- tamaño es una expresión entera constante que indica el numero de elementos que contendrá el vector. El espacio ocupado por un vector en memoria se obtiene como el producto del número de elementos que lo componen y el tamaño de cada uno de estos.

vector01

Representación Gráfica de un Vector.

En muchas ocasiones, antes de usar un vector (una tabla en general) por primera vez, es necesario dar a sus elementos un valor inicial. La manera más habitual de inicializar un vector en tiempo de ejecución consiste en recorrer secuencialmente todos sus elementos y darles el valor inicial que les corresponda. Veámoslo en el siguiente ejemplo, donde todos los elementos de un vector de números enteros toman el valor 0:

    #define TAM 100 
    int main() 
    { 
    int vector[TAM], i; 
    for (i= 0; i< TAM; i++) 
        vector[i] = 0; 
    return 0; 
    }        
            

Nótese que el bucle recorre los elementos del vector empezando por el elemento 0 (i=0) y hasta el elemento TAM-1 (condición i < TAM).

Aquí podras ver algunos ejemplos de Vector.

Matrices.

Las matrices, también llamadas tablas bidimensionales, no son otra cosa que vectores con dos dimensiones. Por lo que los conceptos de acceso, inicialización, etc. son similares. La declaración de una variable matriz tiene la forma siguiente:

    Tipo_de_datos nombre_matriz [tamaño1] [tamaño2];
            

Donde:

--- [tamaño1] [tamaño2] es una expresión entera constante que indica el numero de filas y columnas respectivamente que contendrá la matriz.

Otro hecho importante es que las matrices en C se almacenan "por filas". Es decir, que los elementos de cada fila se sitúan en memoria de forma contigua. Así pues, en la matriz de la figura anterior, el primer elemento almacenado en memoria es el (0,0), el segundo el (0,1), el tercero el (0,2), . . . , (0,M-1), después (1,0), y así sucesivamente hasta el ´ultimo elemento, es decir (N-1,M-1).

matriz01.jgp

Representación Gráfica de una Matriz.


Podemos declarar matrices muy fácilmente:

int a[10][5];

En este ejemplo, a es una matriz de 10 × 5 enteros.

La inicialización de las matrices necesita bucles anidados para ser ejecutada:

    int main() 
    { 
    int a[10][5]; 
    int i, j; 
    for (i=0; i<10; i++) 
        for (j=0; j<5; j++) 
            a[i][j] = 0; 
    return 0; 
    }
            

También puedes inicializar explícitamente un vector multidimensional:

    int c[3][3] = { {1, 0, 0},
                    {0, 1, 0},
                    {0, 0, 1} };
            

Por claridad, se ha usado identación en los datos, aunque hubiesen podido escribirse todos en una sola línea.

    int c[3][3] = { {1, 0, 0}, {0, 1, 0}, {0, 0, 1} };
            

Ejemplo.

Para ilustrar el manejo de matrices, construiremos ahora un programa que lee de teclado dos matrices de números en coma flotante y muestra por pantalla su suma y su producto. Las matrices leídas serán de 3 × 3 y se denominaran a y b. El resultado de la suma se almacenara en una matriz s y el del producto en otra p.

    #include <stdio.h> 
    #define TALLA 3 
    int main() 
    { 
    float a[TALLA][TALLA], b[TALLA][TALLA]; 
    float s[TALLA][TALLA], p[TALLA][TALLA]; 
    int i, j, k;

    /* Lectura de la matriz a */ 
    for (i=0; i<TALLA; i++) 
    	for (j=0; j<TALLA; j++) { 
    		printf ("Elemento (%d, %d): ", i, j); 
    		scanf ("%f", &a[i][j]); 
    	}

    /* Lectura de la matriz b */
    for (i=0; i<TALLA; i++) 
    	for (j=0; j<TALLA; j++) {
    		printf ("Elemento (%d, %d): ", i, j);
            scanf ("%f", &b[i][j]); 
    	}
        
    /* Calculo de la suma */
    for (i=0; i<TALLA; i++) 
    	for (j=0; j<TALLA; j++) 
    		s[i][j] = a[i][j] + b[i][j]

    /* Calculo del producto */
    for (i=0; i<TALLA; i++) 
    	for (j=0; j<TALLA; j++) { 
    		p[i][j] = 0.0; 
    		for (k=0; k<TALLA; k++) 
    			p[i][j] += a[i][k] * b[k][j]; 
    	}

    /* Impresión del resultado de la suma */
    printf ("Suma\n"); 
    for (i=0; i<TALLA; i++) { 
    	for (j=0; j<TALLA; j++) 
    		printf ("%8.3f", s[i][j]); 
    		printf ("\n"); 
    	}

    /* Impresión del resultado del producto */
    printf ("Producto\n"); 
    for (i=0; i<TALLA; i++) { 
    	for (j=0; j<TALLA; j++) 
    		printf ("%8.3f", p[i][j]); 
    		printf ("\n"); 
    	}
    return 0;
    }
            
Aquí podras ver algunos ejemplos de Matrices.

tablas multidimensionales.

Este tipo de tablas se caracteriza por tener tres o más dimensiones. Al igual que vectores y matrices, todos los elementos almacenados en ellas son del mismo tipo de datos. La declaración de una tabla multidimensional tiene la forma siguiente:

    Tipo_de_datos nombre_tabla [tamaño1]…[tamaño_n];
            

Donde:

---[tamaño1]…[tamaño_n] son expresiones enteras constantes.

tabla_multidimensiona01.jpg

Representación Gráfica de un arreglo multidimensional N x M x 3

Podemos declarar arreglos multidimensionales muy fácilmente:

    int a[10][8][3];
            

En este ejemplo, a es un arreglo de 10 × 8 x 3 enteros

La inicialización de arreglos multidimensionales necesita tantos bucles anidados como dimensiones tengan estos:

    #include <stdio.h>
    int main() 
    { 
    float b[3][2][4]; 
    int i, j, k;

        for (i=0; i<3; i++) 
        for (j=0; j<2; j++) 
            for (k=0; k<4; k++) 
                b[i][j][k] = 0.0; 
    return 0; 
    }
            

Ejemplo

El siguiente ejemplo muestra el empleo de una tabla multidimensional. Concretamente, el programa utiliza una tabla de 3 dimensiones para almacenar 1000 números aleatorios. Para generar números aleatorios se usa la función rand de la librera estándar stdlib.h. También se ha usado la función getchar (stdio.h), que interrumpe el programa y espera a que el usuario presione una tecla.

    #include <stdio.h> 
    #include <stdlib.h> 
    #define DIM 10 
    int main() 
    { 
    int tabla_random [DIM][DIM][DIM], a, b, c; 
        for (a= 0; a< DIM; a++) 
            for (b= 0; b< DIM; b++) 
                for (c= 0; c< DIM; c++) 
                    tabla_random[a][b][c] = rand();

        /* Muestra series de DIM en DIM elementos. */
        for (a= 0; a< DIM; a++) 
            for (b= 0; b < DIM; b++) {
                for (c= 0; c < DIM; c++) {
                    printf("\n tabla[%d][%d][%d] = ", a, b, c ); 
                    printf("%d", tabla random[a][b][c] ); 
                    } 
            printf("\nPulse ENTER para seguir" ); 
            getchar(); 
            } 
    return 0; 
    }
        	
Aquí podras ver algunos ejemplos con tablas multidimensionales.

Seguir a paginadeC en Twitter Foro de Página de C ¡CSS Válido!