Breaking

Post Top Ad

Your Ad Spot

jueves, 20 de diciembre de 2018

Arreglos de dos dimensiones (matrices).

 Los arreglos de dos dimensiones tambiĆ©n reciben el nombre de arreglos bidimensionales o simplemente matrices.

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.
   Las figuras anteriores muestran en (a), la representación de una matriz m de cuatro renglones y cuatro columnas (cuadrada). Los renglones y columnas de una matriz en C siempre empiezan en el Ć­ndice 0, y terminan en el Ć­ndice tamaƱo - 1 (3), dónde tamaƱo se refiere al tamaƱo, dimensión o longitud del renglón o columna de la matriz respectivamente. Por otro lado, la figura (b) muestra la representación fĆ­sica de la matriz m en la memoria principal de la computadora. Observe que la memoria de la computadora es una estructura lineal y no una estructura cuadrada (bidimensional), por lo que los elementos de la matriz son almacenados linealmente, de tal forma que el elemento m[1][0] es el inmediato posterior del elemento m[0][3], y que el elemento m[2][0] es el inmediato posterior del elemento m[1][3], y asĆ­ sucesivamente.

   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 matriz1matriz2 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.
   Ahora bien, la lĆ­nea 14 muestra un tipo de inicialización en secuencia, la cual es posible debido a la forma en que se representa la matriz en la memoria de la computadora.

   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

Post Top Ad

Your Ad Spot

PƔginas