viernes, 26 de junio de 2015

PROGRAMAR EN C#: Matrices

Muchos programas se pueden hacer solo con los tipos que hemos mostrado en el artículo anterior, pero hay casos que no es suficiente con las variables para resolver algunos problemas con datos.

Por ejemplo, si queremos representar una lista de 100 números necesitaríamos 100 variables para representarlos, pero esto sería muy complicado de manejar, si quisieras añadir 1000 números más necesitarías 1000 variables más (mira todo esto en http://joscarmartom.blogspot.com.es/2015/06/variables-tercera-parte-arrays.html).

Por esto se recurre a una representación matemática muy usada las matrices o Arrays. Esto va a dar una gran potencia a nuestros programas ya que solo tenemos que aumentar el número de 100 a 1100 y tentemos todo el espacio que necesitamos.





La matriz más básica es unidimensional, y en matemáticas a éstas se les llama vectores, un vector es una colección de elementos dispuestos uno al lado de otro.

Estas matrices unidimensionales nos valen por ejemplo para modelar el ejemplo anterior en C#:

int [] mimatriznumerica= new int [100];

Con esto hemos reservado 100 espacios int en memoria a nombre de mimatiznumerica, y si quisiéramos ahora 1000:

int [] mimatriznumerica= new int [1000];

Ahora que tenemos el espacio reservado podemos empezar a darles valor a cada uno de ellos:

mimatriznumerica[0]=100;
mimatriznumerica[1]=10;
...

Es decir, se coloca el nombre de la matriz, se pone el indice entre corchetes y después del igual se coloca el valor que queremos asignar:

nombrematriz [indice] = valor;

Esto puede resultar muy difícil de entender, pero es lo mismo que cuando asignamos un valor a una variable.

Como podéis entender introducir los 100 o los 1000 campos de esta forma puede resultar muy tedioso y para solucionar esto veremos en próximos capítulos las iteraciones y los bucles que nos permitirán repetir una cosa una y otra vez.

Tenéis que comprender otra cosa importante, estos arrays se pueden declarar de cualquier tipo incluidas matrices, o tipos más complejos, de esta manera se puede reservar espacio para diferentes clases de cosas.

La declaración será siempre igual:

tipo [] nombrematriz = new tipo [dimensión];

Si queremos recuperar el valor de alguna posición lo único que tenemos que hacer es llamar al indice que queramos:
 
  mimatriznumerica[2]=100;
  Console.WriteLine(mimatriznumérica[2]);


Esto mostraría en pantalla el valor 100.


Es importante que os fijéis que la colocación de los valores es desde cero, es decir, el primer indice no es el 1 sino el cero, de manera que el objeto que ocupa la posición 3 en una matriz tiene el valor de indice 2, es decir, es en base al cero y no al uno como funciona esto:


Veamos ahora algunos ejemplos:

Ejemplo 1:

            byte[] matrizbyte;
            matrizbyte = new byte[] { 2, 3 };

En este caso hemos definido una matriz sin decir el tamaño pero al asignar los valores {2,3} le decimos al compilador que la matriz será de una dimensión (vector) y tendrá dos valores.

Esta forma de inicializar valores será muy útil si tenemos una gran lista:

int [] mimatriz=new int[]{1,2,3,4,5,6,7};

Ejemplo 2:


            int[,] matrizdosdimensiones = new int[,] { { 1, 2 }, { 1, 2 } };


Este ejemplo declara una matriz de 2 por 2 y le asigna los valores 1,2 a cada fila:

1 2
1 2

Y recuperar un valor sería de la siguiente forma:

            Console.WriteLine(matrizdosdimensiones[0, 1]);

Mostraría el valor 2 en pantalla.

Ejemplo 3:


Y este es para nota, ya que definimos una matriz que contiene dos matrices de rango 1. Primero le damos unos valores y luego cambiamos algunos de ellos:

   int[][,] matrizdematrices = new int[][,] {new int[,]{{1,1},{2,2}}};

            matrizdematrices[1][1, 2] = 100;
            matrizdematrices[0][1, 2] = 100;


Espero que os haya gustado, iré añadiendo más ejemplos más adelante, cuando vemos los bucles...


No hay comentarios:

Publicar un comentario