Curso de CEl 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 capitulo anterior lo conveniente que es usar un array cuando tenemos que usar muchas variables del mismo "tipo". Pero cuando avanzamos un poco mas en programacion podemos encontrarnos que los arrays tambien se nos quedan cortos. Podemos verlo utilizando el ejemplo del capitulo anterior:

"Supongamos que ahora queremos almacenar las temperaturas de toda la semana. Segun lo que aprendimos en el capitulo anterior podriamos usar un array unidimiensional por cada dia de la semana. En cada uno de esos arrays podriamos almacenar las temperaturas de cada dia."

Una posible solucion seria esta:

#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 dia 1: ", hora );
          scanf( "%i", &temp_dia1[hora] );
          printf( "Temperatura de las %i el dia 2: ", hora );
          scanf( "%i", &temp_dia1[hora] );
          printf( "Temperatura de las %i el dia 3: ", hora );
          scanf( "%i", &temp_dia1[hora] );
          ...
          printf( "Temperatura de las %i el dia 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 esta claro que nuevamente queda claro que el programa seria 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 declaracion es igual que la de un array unidimensional al que le anadimos una nueva dimension.

El programa anterior quedaria ahora asi:

#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 dia %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 que limitarnos a arrays bidimensionales, podemos usar cuantas dimensiones queramos. Para un array de tres dimensiones podriamos hacer:

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

[Arriba]

Inicializar un array multidimiensional

Vimos en el anterior capitulo que a los arrays unidimensionales se les podian 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 tambien 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 seria 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

www.elrincondelc.com