Concepto
Los arrays multidimensionales son una
estructura de datos que almacenan los valores en más de una dimensión. Los
arrays que hemos visto hasta ahora almacenan valores en una dimensión, por eso
para acceder a las posiciones utilizamos tan solo un índice. Los arrays de 2
dimensiones guardan sus valores, por decirlo de alguna manera, en filas y
columnas y por ello necesitaremos dos índices para acceder a cada una de sus
posiciones.
Dicho de otro modo, un array multidimensional es como un contenedor que guardara más valores para cada posición, es decir, como si los elementos del array fueran a su vez otros arrays.
La declaración de los arreglos bidimensionales, caso
particular de los arreglos multidimensionales, se hace como en el siguiente
ejemplo:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxfdikt4tXuM0CU7XTlUI2o2yu14y9rWkRj891r3G9zZXYM63-CkQROv-jArluUzNhVhL5NKwRYjs2WASTKk5OxubkGYzzYpBExfahpjHgNPgNU4NNdne2Uw8gEIWsjVQJkBZbgddcz9Q/s200/1.jpg)
En la primera línea se reserva espacio
para 3 × 4 = 12 elementos doble precisión. El primer subíndice varía entre 0 y
2, y el segundo varía entre 0 y 3. Usualmente, de manera análoga a las
matrices, se dice que el primer subíndice indica la fila y el segundo subíndice
indica la columna.
Ejemplos de arreglos multidimensional
Ejemplo#1
“Este programa imprimirá las fila y las columna del
vector multidimensional 3x4”
Ejemplo #2
En el siguiente ejemplo, el programa sirve para leer
matrices, escribirlas y calcular el producto. Lo hace mediante la utilización
de funciones que tienen como parámetros arreglos bidimensionales:
#include
<math.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
<conio.h>
void lect_ao(double a[][40], int m, int n, char c );
void escra_ao(double a[][40], int m, int n );
int prodAB0(double a[][40], int m, int n, double b[][40],
int p, int q, double c[][40]);
main()
{
double a[50][40], b[20][40], c[60][40];
int m, n, p, q;
printf("\n
Producto de dos matrices.\n");
printf(" num. de
filas de A : ");
scanf( "%d", &m);
printf(" num. de
columnas de A : ");
scanf( "%d", &n);
// Es necesario controlar que m, n no son muy grandes
// Ni negativos
printf(" num. de
filas de B : ");
scanf( "%d", &p);
printf(" num. de
columnas de B : ");
scanf( "%d", &q);
if( n != p ){
printf("
Producto imposible\n");
exit(1);
// En el lenguaje C para terminar una aplicación desde la
función main
}
Lect_ao(a, m, n, 'A');
printf(" A :
\n");
escr_ao(a, m, n);
lect_ao(b, n, q, 'B');
printf(" B :
\n");
escr_ao(b, n, q);
if( prodAB0(a,m,n, b,p,q, c) )
{
printf(" C :
\n");
escrA0(c, m, q);
}
else printf("\
ERROR\n");
return 0;
//------------------------------------------------
void lect_ao(double a[][40], int m, int n, char c )
{
// lectura de los elementos de una matriz.
int i, j;
for( i = 0; i < m; i++){
for( j=0; j < n; j++){
printf("
%c[%d][%d] = ", c, i+1, j+1);
scanf("%lf", &a[i][j] );
}
}
}
//------------------------------------------------
void escr_ao(double a[][40], int m, int n )
{
// escritura de los elementos de una matriz
int i, j;
int nEltosLin = 5; // numero de elementos por linea
for( i = 0; i < m; i++){
for( j = 0; j < n; j++){
printf("%15.8lf", a[i][j]);
if((j+1)%nEltosLin == 0 || j==n-1)printf("\n");
}
}
}
//------------------------------------------------
int prodAB0(double a[][40], int m, int n, double b[][40],int p, int q, double c[][40])
{
// producto de dos matrices, a mxn, b pxq
// devuelve 1 si se puede hacer el producto
// devuelve 0 si no se puede
int i, j, k;
double s;
if(m<0||n<0||p<0||q<0 || n!= p ) return 0;
for( i=0; i < m; i++){
for( j=0; j < q; j++){
s = 0.0;
for( k=0; k<n; k++) s += a[i][k]*b[k][j];
c[i][j] = s;
}
}
return 1;
En el ejemplo, en la función lect_ao, antes de la
lectura del elemento a[i][j], el programa escribe los valores i+1 y j+1,
entonces para el usuario el primer subíndice empieza en 1 y acaba en m; el
segundo empieza en 1 y acaba en n.