Segundo post y seguimos tratando de hacerle llegar datos sencillos de digerir al principiante . Con ustedes, las matrices.
Enter the Matrix
Imaginemos una matriz como una colección de espacios en memoria, todos contiguos, en donde se almacenan datos, los cuales pueden luego ser accedidos a traves de un índice colocado en esta misma colección.
Los ejemplos en esta publicación van a ser desarrollados en C# a modo de ejemplo.
Pongamos como ejemplo un instituto de enseñanza. Imaginemos una clase de Analisis de Sistemas que tiene 25 alumnos y necesitamos guardar las notas de los examenes para cada uno de ellos. Como el puntaje de dicho examen puede ser del 0 a 100, usaremos el tipo de dato "Byte". Ahora, lo primero que podríamos pensar es en crear una variable por separado para cada alumno de la siguiente manera:
Byte PuntajeAlumno1;
Byte PuntajeAlumno2;
Byte PuntajeAlumno3;
//Todo el resto de alumnos...
Byte PuntajeAlumno25;
Esto no sólo sería engorroso, difícil de leer y manter, sino que le llevaría mucho tiempo. Lo que necesitamos es una manera de acceder a todos esos datos desde un solo punto de entrada. Lo que precisamos es una matriz (ta-taan - música dramática).
Esta matriz va a representar la colección de nuestras variables. Para esto, todas deben tener el mismo tipo de variable. También debemos especificar la capacidad que va a tener esta colección para coleccionar elementos, su tamaño.
Veamos la declaración de nuestra matriz:
Byte [] PuntajeAlumnos;
Ahora, expliquemos lo siguiente:
>> El identificador Byte nos dice que todos los elementos en la coleccion van a ser de tipo byte.
>> Los corchetes indican que no vamos a crear una variable, sino una coleccion de las mismas.
>> PuntajeAlumnos es el nombre que le vamos a dar a la matriz
>> Por último cerramos la sentencia con un punto y coma.
Lo que nos está faltando es indicar el tamaño que va a tener nuestra matriz, es decir, qué cantidad de elementos va a poder alojar. Para esto utilizaremos el operador new, el cual indica al compilador que quiere reservar memoria suficiente para guardar una colección de 25 variables en formato byte.
byte [] PuntajeAlumnos;
PuntajeAlumnos = new byte
;
Repasemos:
New es el constructor que reserva o crea espacio para la matriz.
Byte indica el tipo que van a tener las variables de la matriz.
indica la cantidad de elementos que va a guardar nuestra matriz
Importante: Debemos especificar el tipo de datos a utilizar al emplear el constructor new. No importa si ya se especificó cuando se declaro la matriz.
Si lo escribimos de la siguiente manera:
Byte [] PuntajeAlumnos;
PuntajeAlumnos = new
;
Obtenendremos el siguiente error:
"error CS1031: Se esperaba un tipo"
Esto es porque no hay un tipo de variable que enlace la nueva palabra clave (PuntajeAlumnos) y la definición de su tamaño. Así mismo no hay que confundirse y usar un tipo distinto de dato al indicar el tamaño. Supongamos el siguiente caso:
Byte [] PuntajeAlumnos;
PuntajeAlumnos = new long
;
Este código causaría el siguiente error en compilación:
"error CS0029: No se puede convertir implícitamente el tipo 'long[]' a 'byte[]'"
Este tipo de matrices son conocidas como Matrices Unidimensionales. Estas tienen un factor que determinan su tamaño. En nuestro caso, ese factor está dado por la cantidad de alumnos. Recuerden que para valores enteros, como es nuestro caso, el índice es de 0. Esto quiere decir que el segundo elemento de nuestra matriz se va a alojar en el índice 1 y así hasta el elemento 25, que va a tener el índice 24.

Lo que vamos a aprender a continuación es manipular un elemento individual dentro de nuestra matriz. Para obtener el valor de un elemento dentro de la matriz solo debemos llamarla a través de su nombre y su índice entre corchetes. Miremos el siguiente ejemplo:
byte PrimerPuntaje;
PrimerPuntaje = PuntajeAlumnos[0];
Este ejemplo primero creamos la variable PrimerPuntaje y luego le asignamos como valor el elemento que contiene el índice 0 en la matriz Puntaje alumnos. Sencillo verdad?
Para guardar un valor volvemos a tomar la matriz y el indice en el que queremos guardar dicho valor, pero esta vez le asignamos algo:
PuntajeAlumnos[0] = 100;
En el ejemplo anterior guardamos el valor 100 en el índice 0 de la matriz PuntajeAlumnos. Aprovecho para recordar, cosa que nunca está de sobra, que utilizamos un índice de base 0. Si intentamos acceder a un índice inexistente dentro de la variable obtendremos un error. Ejecutemos el siguiente código:
PuntajeAlumnos
= 99;
El código va a compilar sin problemas, pero al ejecutarse va a producir un error, ya que va a tratar de acceder al elemento 25 de una matriz que solo contiene 24 índices. Cuando la aplicación tenga que ejecutar éste código, el CLR (Entorno de Ejecución Común, por sus siglas en inglés) va a detener la aplicación y nos va a devolver el siguiente mensaje de error:
Exception occurred: System.IndexOutOfRangeException: An exception of type System.IndexOutOfRangeException was thrown.
IndexOutOfRangeException nos dice que la aplicación intentó acceder a un índice que no existe.
Inicializando los valores dentro de la matriz
Imaginemos que necesitamos una matriz de 5 números enteros. Se podría asignar por separado cada valor de la matriz de la siguiente manera:
int [] MiArray;
MiArray = new int
;
MiArray[0] = 0;
MiArray[1] = 1;
MiArray[2] = 2;
MiArray[3] = 3;
MiArray[4] = 4;
Pero esto sería un tanto engorroso y no sería útil si ya conocemos de antemano los valores que queremos cargar en cada índice. Lo ideal es asignar a la matriz todos los valores juntos, separados por comas y agrupados dentro de llaves. Todo esto se coloca en la misma línea en la que se declara la matriz, utilizando por lo tanto una sola línea para todo el código :
int [] MiArray = {0, 1, 2, 3, 4};
De esta manera nos ahorraremos especificar un constructor new y el tamaño de la matriz ya que el compilador de C# calcula la cantidad de los elementos y por ende, el tamaño de la misma matriz.
Eso es todo por el momento. No les pido que me llenen de puntos, solo un comentario para saber que a alguien le interesó

