Curso de C El Rincón del C - www.elrincondelc.com

Arrays Multidimensionales

[Anterior] [Siguiente] [Contenido]

Contenido del Capítulo:

¿Qué es un array bidimensional?

Hemos visto en el capítulo anterior lo conveniente que es usar un array cuando tenemos que usar muchas variables del mismo "tipo". Pero cuando avanzamos un poco más en programación podemos encontrarnos que los arrays también se nos quedan cortos. Podemos verlo utilizando el ejemplo del capítulo anterior:

"Supongamos que ahora queremos almacenar las temperaturas de toda la semana. Según lo que aprendimos en el capítulo anterior podríamos usar un array unidimiensional por cada día de la semana. En cada uno de esos arrays podríamos almacenar las temperaturas de cada día."

Una posible solución sería ésta:

#include <stdio.h>

int main()
     {
     int temp_dia1[24];
     int temp_dia2[24];
     int temp_dia3[24];
     ...
     int temp_dia7[24];
     
     float media = 0;
     int hora;

     for( hora=0; hora<24; hora++ ) {
          printf( "Temperatura de las %i el día 1: ", hora );
          scanf( "%i", &temp_dia1[hora] );
          printf( "Temperatura de las %i el día 2: ", hora );
          scanf( "%i", &temp_dia1[hora] );
          printf( "Temperatura de las %i el día 3: ", hora );
          scanf( "%i", &temp_dia1[hora] );
          ...
          printf( "Temperatura de las %i el día 7: ", hora );
          scanf( "%i", &temp_dia1[hora] );                              
          media += temp_dia1[hora] + temp_dia2[hora] + ... + temp_dia3[hora];
     }
     media = media / 24 / 7;

     printf( "\nLa temperatura media de toda la semana es %f\n", media );
     return 0;
}


Fichero: cap10_ejemplo1.c

Nota: os recuerdo que los puntos suspensivos los he puesto para ahorrar espacio, no pueden usarse en un programa.

Creo que está claro que nuevamente queda claro que el programa sería un engorro, sobre todo si queremos almacenar las temperaturas de, por ejemplo, un mes.

Para declarar un array bidimensional usaremos el siguiente formato:

 tipo_de_dato nombre_del_array[ filas ] [ columnas ];

Como se puede apreciar, la declaración es igual que la de un array unidimensional al que le añadimos una nueva dimensión.

El programa anterior quedaría ahora así:

#include <stdio.h>
#define DIAS    7
#define HORAS   24

int main()
     {
     int temp[DIAS][HORAS];
     
     float media = 0;
     int hora, dia;

     for( dia=0 ; dia<DIAS ; dia++ ) {
          for( hora=0 ; hora<HORAS ; hora++ ) {
             printf( "Temperatura de las %d el día %d: ", hora, dia );
             scanf( "%i", &temp[dia][hora] );                            
             media += temp[dia][hora];
          }
     }
     media = media / HORAS / DIAS;

     printf( "\nLa temperatura media de toda la semana es %f\n", media );
     return 0;
}

Fichero: cap10_ejemplo2.c

No tenemos por qué limitarnos a arrays bidimensionales, podemos usar cuantas dimensiones queramos. Para un array de tres dimensiones podríamos hacer:

int temp[MESES][DIAS][HORAS];

[Arriba]

Inicializar un array multidimiensional

Vimos en el anterior capítulo que a los arrays unidimensionales se les podían dar valores iniciales:

int temperaturas[24] = { 15, 18, 20, 23, 22, 24, 22, 25, 26, 25, 24, 22,
21, 20, 18, 17, 16, 17, 15, 14, 14, 14, 13, 12 };

Con los array multidimensionales también se puede, pero hay que agrupar entre {} cada fila. Por ejemplo:

int temperaturas[3][5] = {
               { 15, 17, 20, 25, 10 },
               { 18, 20, 21, 23, 18 },
               { 12, 17, 23, 29, 16 } };

El formato a utilizar sería el siguiente:

int variable[ filas ][ columnas ] = {
            { columnas de la fila 1 },
            { columnas de la fila 2 },
            ... ,
            { columnas de la última fila },
            };

No debemos olvidar el ';' al final.

[Arriba]

Ejercicios

Ejercicio 1:

Solución:

[Arriba]

[Anterior] [Siguiente] [Contenido]

© Gorka Urrutia, 1999-2004
cursoc@elrincondelc.com
www.elrincondelc.com