Blog
En los tutoriales anteriores de arrays, cubrimos, qué son las matrices y cómo funcionan. Pero lenguaje C es capaz de hacer otro tipo de matrices; los llamados matrices o arrays multidimensionales (Matrices multidimensionales). Aquí te muestro la forma general de una declaración de matriz multidimensional:
type name[size1][size2]...[sizeN];
Por ejemplo, aquí hay uno básico para que veas una muestra de su sintaxis básica:
int foo[1][2][3];
o tal vez este –
char vowels[1][5] = { {'a', 'e', 'i', 'o', 'u'} }
Arrays o matrices bidimensionales
La forma más simple de una matriz multidimensional es la matriz bidimensional. Una matriz bidimensional es prácticamente, una lista sencilla de matrices unidimensionales. Para declarar una matriz de enteros bidimensional de tamaño [x] [y], se escribiría algo como esto en código de lenguaje C:
type arrayName [x][y];
Donde tipo puede ser cualquier tipo de datos en C (int, char, long, long long, double, entre otros) y arrayName será un identificador de C válido, o variable. Una matriz bidimensional se puede considerar como una tabla que tendrá [x] número de filas y [y] número de columnas. Una matriz bidimensional a, que contiene tres filas y cuatro columnas, se puede mostrar y pensar así:
En este sentido, cada elemento de la matriz a se identifica con un nombre de elemento de la forma a [i] [j] , donde ‘a’ es el nombre de la matriz, e ‘i’ y ‘j’ son los índices de los espacios de la matriz de carácter único, o mostrar, cada elemento en ‘a’.
Y, sinceramente, realmente no tienes que poner un valor de [x] en realidad, porque si hicieras algo como esto:
char vowels[][5] = { {'A', 'E', 'I', 'O', 'U'} {'a', 'e', 'i', 'o', 'u'} }
El compilador ya sabría que hay dos “dimensiones” que podría decir, ¡pero necesita de un valor de [y]! El compilador puede ser inteligente, pero no sabrá cuántos enteros, caracteres, flotantes, o lo que sea que esté usando, tiene dimensiones. Mantenlo en mente.
Cómo inicializar matrices bidimensionales
Las matrices multidimensionales se pueden usar especificando valores entre corchetes [] para cada fila. Debajo hay una matriz con 3 filas y cada fila tiene 4 columnas. Para hacerlo más fácil, puedes olvidar el 3 y mantenerlo en blanco, aún así funcionará.
int a[3][4] = { 0,1,2,3}, /* inicializadores para filas indexadas por 0 */ 4,5,6,7}, /* inicializadores para filas indexadas por 1 */ {8,9,10,11} /* inicializadores para filas indexadas por 2 */ };
Las llaves internas, que indican la fila deseada, son opcionales. La siguiente inicialización es la misma que en el ejemplo anterior:
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
Como tener acceso a los elementos contenidos en una matriz bidimensional
Se puede acceder a cualquier elemento almacenado en una matriz bidimensional utilizando los subíndices, es decir, el índice de fila y el índice de columna de la matriz. Por ejemplo –
int val = a[2][3];
La instrucción anterior tomará el cuarto elemento de la tercera fila de la matriz.
Ejercicio
Intentemos averiguar las calificaciones promedio de un grupo de cinco estudiantes para dos asignaturas, Matemáticas y Física. Para hacer esto, usamos una matriz bidimensional llamada grados. Las marcas correspondientes a Matemáticas se almacenarían en la primera fila ( ), mientras que las correspondientes a Física se almacenarían en la segunda fila ( ). Complete los siguientes pasos para que pueda ejecutar este programa.grados[0]grados[1]
- Declara a grados como una matriz bidimensional de enteros
- Completa los bucles for especificando sus condiciones de terminación
- Calcula las calificaciones promedio obtenidas en cada asignatura
#include <stdio.h> int main () { /* declara las leyes de la matriz 2D aquí */ float promedio; int i; int j; grados[0][0] = 80; grados[0][1] = 70; grados[0][2] = 65; grados[0][3] = 89; grados[0][4] = 90; grados[1][0] = 85; grados[1][1] = 80; grados[1][2] = 80; grados[1][3] = 82; grados[1][4] = 87; /* completa el bucle for con las condiciones de terminación apropiadas */ for (i = 0; i &lt; x ; i++) {) {) promedio = 0; for (j = 0; j &lt; x ; j++) {) { promedio += grados[i][j][j]; } /* calcula el promedio de las notas del sujeto i */ printf ("El promedio de notas de la asignatura %d es: %. 2f\n", i, promedio); } return 0; }
Solución
#include <stdio.h> int main () { int grados[2][5]; float promedio; int i; int j; grados[0][0] = 80; grados[0][1] = 70; grados[0][2] = 65; grados[0][3] = 89; grados[0][4] = 90; grados[1][0] = 85; grados[1][1] = 80; grados[1][2] = 80; grados[1][3] = 82; grados[1][4] = 87; for (i = 0; i &lt; 2; i++) {) {) promedio = 0; for (j = 0; j &lt; 5; j++) {) { promedio += grados[i][j][j]; } promedio /= 5.0; printf ("El promedio de notas de la asignatura %d es: %. 2f\n", i, media); } return 0; }
Salida en pantalla
El promedio de notas de la asignatura 0 es: 78.80 El promedio de notas de la asignatura 1 es: 82,80
Si has llegado hasta aquí enhorabuena ? pasa a la siguiente lección:
➡Strings o cadenas (AprenderC curso principiante)
[…] ➡Matrices multidimensionales (AprenderC curso principiante) […]