Matrices
Tenemos otra estructura, fuertemente basada en la idea matemática de matriz, y que tiene el mismo nombre: matriz (o "array", para quien le guste más el inglés). Una matriz representa la idea de "tabla": una disposición de la información en forma de filas y columnas. Por ejemplo:
[ 3 -4.5 0.1 ]
[ 4.1 2 -1 ]
En este ejemplo tenemos una matriz formada por dos filas y tres columnas. El elemento de la posición (2,3) (fila 2, columna 3) es el -1.
Podemos entender las matrices como vectores cuyas componentes son
vectores. De hecho, en casi todos los lenguajes de programación, esto es así.
Según este punto de vista, la matriz del primer ejemplo es un vector de dos
elementos: el primero, el vector [ 3 -4.5 0.1 ],
y el segundo, el vector [ 4.1 2 -1 ].
Para declarar una variable de tipo matriz escribiremos:
m: Array[1..N,1..M] de Tipo;
siendo N el número de filas que tendrá la matriz, y M el número de columnas. Para referirnos a la posición (i,j), usaremos la nomeclatura m[i,j]. Por ejemplo:
m: Array[1..3,1..5] de Entero;
m[2,3] <- 4;
m[1,5] <- -2;
No perder de vista la declaración de una matriz: puede contener elementos de cualquier tipo. Enteros, reales, cadenas de caracteres, o tipos definidos por el usuario (estos los estudiamos en el capítulo siguiente).
Recorrer los elementos de una matriz requiere de un bucle dentro de otro bucle. ¿Por qué? Pues porque, para cada fila que recorramos, tendremos que recorrer cada elemento de las columnas. Así, empezaremos entrando en la fila 1, y dentro de la fila 1 recorreremos los elementos 1 a M de que constan las columnas. Hecho esto, pasamos a la fila 2, y dentro de la fila 2 volvemos a recorrer los elementos 1 a M de las columnas. Siguiendo este proceso, acabaremos recorriendo todos los elementos de la matriz.
Por ejemplo, para sumar dos matrices (en el sentido matemático, teniendo en cuenta que entonces serán de tipo numérico), tendremos que ir elemento a elemento sumando los valores que se encuentren en las posiciones (i,j). Es obvio que la suma de dos matrices sólo tiene sentido cuando las matrices a sumar tienen el mismo número de filas y de columnas.
Una algoritmo sencillo para sumar dos matrices, almacenando su suma en una tercera, sería:
desde i <- 1 hasta i = N hacer
desde j <- 1 hasta j = M hacer
C[i,j] <- A[i,j] + B[i,j];
fin desde
fin desde
Análogamente realizaríamos la resta.
Tenemos una clara aplicación de las matrices en el mundo de la programación gráfica. Las transformaciones de los puntos pueden representarse en términos de unas ciertas matrices, y obtener la transformación de un punto (una rotación, una traslación o un cambio de escala) consiste sencillamente en multiplicar las coordenadas del punto por la matriz correspondiente.