Conceptos, representación y estructura.
Los arreglos bidimensionales son una estructura de datos de dos dimensiones de elementos contigüos, relacionados por un mismo tipo de datos y un mismo nombre, donde los elementos son distinguidos por dos Ćndices.
![]() |
(a) Representación (abstracción) de una matriz. |
![]() |
(b) Representación en memoria de una matriz. |
En general, la declaración de un arreglo bidimensional en el lenguaje de programación C tiene la siguiente estructura:
tipo_de_dato nombre_de_la_matriz[TAMAĆO1][TAMAĆO2];
donde:
- tipo_de_dato es cualquier tipo de dato vƔlido en C.
- nombre_de_la_matriz es un identificador vƔlido en C.
- TAMAĆO1 es el nĆŗmero de renglones que tendrĆ” la matriz.
- TAMAĆO2 es el nĆŗmero de columnas que tendrĆ” la matriz.
Declaración, inicialización, recorrido y uso con funciones.
El Ejemplo 6.7 muestra la declaración, la inicialización, el recorrido, y el uso de matrices con funciones. Las lĆneas 6 y 7 definen dos constantes simbólicas M y N para el nĆŗmero de renglones y columnas de la matriz respectivamente. Estas constantes determinarĆ”n las dimensiones reales o fĆsicas de matriz1, matriz2 y matriz3, declaradas en las lĆneas 14 y 15. Note que estas tres matrices tiene la forma de las figuras anteriores.
Observe también que matriz2 y matriz3 han sido inicializadas en su declaración, esto quiere decir que en tiempo de compilación le son asignados los valores especificados. Los valores asignados estÔn representados en las siguientes figuras:
![]() |
(a) Inicialización de la matriz2. |
![]() |
(b) Inicialización de la matriz3. |
En base a lo anterior, los primeros cinco elementos fĆsicos de matriz2 tendrĆ”n los valores que se muestran en la figura (a). Los elementos que no son inicializados explĆcitamente, son puestos en 0 por omisión.
Por otro lado, la lĆnea 15 muestra una inicialización por renglones para matriz3; este tipo de inicialización se explica mejor con la figura (b) en donde se observa que los tres primeros elementos del renglón 0 estĆ”n inicializados con los valores especificados (lĆnea 15), mientras que el Ćŗltimo de ellos ha sido inicializado por omisión con 0. Antes de continuar, asegĆŗrese de entender lo que sucede con el segundo renglón de inicialización de la matriz3 y su correspondiente representación en la figura (b).
El ciclo do-while de las lĆneas 17-20 valida (la validación sólo considera matrices cuyas dimensiones sean de al menos 2x2 y de a lo mĆ”s MxN. Si bien es cierto que existen matrices de 3x1 o de 1x4 por ejemplo, tambiĆ©n es cierto que tĆ©cnicamente se les puede denominar vectores, por lo que por simplicidad y para motivos de ilustración se ha hecho este tipo de validación) las dimensiones para la matriz1 especĆficamente, debido a que el Ejemplo 6.7 define unas dimensiones fĆsicas (lĆneas 14 y 15), pero controla unas dimensiones lógicas(lĆneas 21 y 24), y dichas dimensiones lógicas estarĆ”n determinadas por las variables m y n(lĆnea 19) para el nĆŗmero de renglones y columnas respectivamente.
Las figuras de inicialización anteriores indican tambiĆ©n las dimensiones lógicas (indicadas con una elipse) para la matriz2 y la matriz3 respectivamente, mientras que las dimensiones fĆsicas estĆ”n representadas por la malla (matriz) de 4x4.
La lĆnea 21 hace el llamado a la función leeMatriz definida en la lĆneas 33-44. El llamado envĆa como argumentos la matriz1, y las dimensiones m y n obtenidas en la lĆnea 19.
Ahora bien, la función leeMatriz define tres parĆ”metros: matriz[ ][N], m y n. Observe que matriz serĆ” el nombre con el que la función harĆ” referencia al arreglo bidimensional que reciba, y que la notación [ ][N] le indica al compilador que lo que recibirĆ” serĆ” precisamente un arreglo bidimensional. Note tambiĆ©n que los primeros corchetes estĆ”n vacĆos mientras que los segundos tienen la dimensión fĆsica N declarada para el arreglo (lĆneas 14 y 15).
En C, los arreglos de mĆ”s de una dimensión deben llevar siempre, con posibilidad de omitir Ćŗnicamente el tamaƱo de la primera dimensión, el tamaƱo fĆsico de cada una de las dimensiones restantes, y esto estĆ” estrechamente relacionado con la representación fĆsica en la memoria de la computadora de los arreglos de n dimensiones.
La especificación del tamaño de la segunda dimensión para las matrices le indica al compilador cuÔntos elementos hay por renglón, para asà poder determinar en dónde empiezan cada unos de los renglones de la matriz.
Continuando con el Ejemplo 6.7, la función leeMatriz se encarga de leer de la entrada estĆ”ndar (lĆnea 40) los elementos que conformarĆ”n la matriz lógica determinada por los parĆ”metros m y n. Note cómo los ciclos for de las lĆneas 36 y 38 estĆ”n en función de dichos parĆ”metros.
Por otro lado, las lĆneas 24, 26 y 28 hacen el llamado a la función imprimeMatriz definida en la lĆneas 33-44. El primer llamado envĆa como argumentos a la matriz1 y a las dimensiones obtenidas en la lĆnea 19; mientras que el segundo y tercer llamado envĆan a la matriz2 y a la matriz3 respectivamente ambas con dimensiones lógicas 2 y 4.
Finalmente, la función imprimeMatriz definida en las lĆneas 46-54 define una lista de parĆ”metros anĆ”loga a la de la función leeMatriz. La función imprimeMatriz realiza un recorrido por renglones de la matriz matriz para su impresión en la salida estĆ”ndar. Una posible salida del Ejemplo 6.7 se muestra en la siguiente figura:
![]() |
No hay comentarios.:
Publicar un comentario