Almacenamiento de datos.
Suponga que ha desarrollado un juego de computadora llamado "Usuario hostil" en el que los jugadores compiten contra intrincados y hostiles interfaz de la computadora Ahora necesita escribir un programa que rastree las ventas mensuales de este juego durante un período de cinco años. O supongamos que necesita hacer un inventario de los cromos de Hacker Hero.
Muy pronto llegará a la conclusión de que necesita más que simples tipos de datos básicos para almacenar y procesar información.
Matrices. Introducción.
Para facilitar el trabajo con grandes cantidades de datos, a un grupo de celdas se le asigna un nombre. Este grupo de celdas se denomina matriz.
Array – es un grupo de celdas de memoria del mismo tipo, ubicadas una al lado de la otra y que tienen un nombre común. Cada celda del grupo tiene un número único.
Hay tres cosas que debe aprender cuando trabaje con arreglos:
X asignar memoria del tamaño requerido para la matriz;
X escribir datos en la celda deseada;
X leer datos de una celda.
Cree una matriz. tu >
Al crear una matriz, se asigna espacio en la memoria (una determinada cantidad de celdas). intervalo>
1) Las matrices se pueden crear simplemente enumerando elementos:
int [] nums = < código>nuevo int[] { 1, 2, 3, 5 };
int significa que todos los objetos en la matriz son enteros. En lugar de int puede haber cualquier otro tipo de datos. Por ejemplo,
string[] nombres = ["Vasya", "Peter", "Fedya"];
2) No podemos especificar inmediatamente los valores de la matriz, sino simplemente crear una matriz de la longitud que necesitamos.
int [] números = nuevo int [4];
3) Una matriz siempre "sabe" tu talla. El tamaño de la matriz a se puede encontrar así:
a.Longitud;
A menudo, el tamaño de la matriz se almacena en una variable separada para que el programa se pueda cambiar fácilmente para que funcione con un tamaño de matriz diferente. Ejemplo:
int N = 10; // almacena el tamaño de la matriz en la variable N
int[] numeros = new int[4]; // crea una matriz de tamaño N
Consola.Escribir(números.Longitud); // mostrar el tamaño de la matriz
El tamaño de la matriz se puede configurar desde el teclado.
|
Hacer referencia a un elemento de matriz.
La mayor parte de la utilidad de las matrices proviene del hecho de que se puede acceder a sus elementos individualmente.
La forma de hacerlo es usar un índice para numerar los elementos.
Índice es un valor que apunta a un elemento de matriz en particular.
Recuerde: La numeración de matrices de C# comienza en cero.< br />
Ejemplos de acceso a la matriz A:
int x = (A[3] + 5) * A[1] / / leer valores A[3] y A[1]
A[0] = x + 6 // escribe un nuevo valor en A[0]
Analicemos el programa para trabajar con elementos de matriz.
int i = 1;
int[] A = nuevo int[5]; //crear una matriz de 5 elementos
A[0] = 23; // a cada uno de los 5 elementos de la matriz (índices de 0 a 4)
A[1] = 12; // escribir un valor específico
A[2] = 7;
A[3] = 43;
A[4] = 51;
A[2] = A[i] + 2*A[i-1] + A[2*i]; // cambia el valor del elemento con índice 2 al resultado de la expresión
// porque i=1, entonces reemplazando el valor de la variable i en la expresión obtenemos
// siguiente expresión A[2] = A[1] + 2*A[0] + A[2];
Consola.Escribir((A[2] + A[4]));
Como resultado de ejecutar este programa, el valor de la suma de los elementos de la matriz con En pantalla aparecerá el índice 2 y con índice 4, igual a 116. Como se puede ver en el ejemplo, podemos acceder a cualquier elemento del arreglo. Y también calcule el número de elemento requerido usando varias fórmulas (por ejemplo, como en el programa A[i-1] o A[2*i] , en estos casos, los índices de los elementos se calcularán y dependerán del valor de i).
Analicemos un programa de ejemplo.
int N = 5;
int[] A = nuevo int[N];
entero x = 1;
A[x + 4] = A[x] + A[2 * (x + 1)]; // después de sustituir x en expresiones y cálculos
// obtener la siguiente línea A[5] = A[1] + A[4]
// A[5] no existe tal elemento
// error - matriz fuera de límites
La matriz se declara con 5 elementos, lo que significa que los elementos estarán numerados de 0 a 4. Vemos que el programa en la línea 6 se refiere a un elemento inexistente: A[5] .
Resulta que el programa ha ido más allá de los límites de la matriz.
Una saturación de matriz es un acceso a un elemento en un índice que no existe en la matriz.
En tales casos, el programa generalmente falla con un error de tiempo de ejecución.
|
Al trabajar con arreglos, generalmente tiene que trabajar con todos los elementos del arreglo a la vez.
Iterar sobre elementos: miramos a través de todos los elementos de la matriz y, si es necesario, realizamos alguna operación con cada uno de ellos.
Para ello, se suele utilizar un bucle con una variable, que cambia de 0 a N-1, donde N es el número de elementos de matriz.
Bajo N consideraremos el tamaño actual de la matriz, es decir,
N = A.Longitud;
...
para (int i = 0; i < N; i++)
{
// aquí trabajamos con A[i]
}
En el ciclo especificado, la variable i tomará los valores 0, 1, 2, ..., N-1. Así, en cada paso del ciclo, accedemos a un elemento específico del arreglo con el número i.
Es decir, basta con describir lo que se debe hacer con un elemento de la matriz A[i] y colocar estas acciones dentro de dicho bucle.
Escribamos un programa que llene la matriz con los primeros N números naturales, es decir, al final del programa, los elementos de la matriz deben volverse iguales
A[0] = 1
A[1] = 2
A[2] = 3
...
A[N - 1] = N
Es fácil ver el patrón: el valor de un elemento de matriz debe ser mayor en 1 que el índice del elemento.
El bucle se verá así
for (int i = 0; i < N; i++) { A[ yo] = yo + 1; }
|
Formas adicionales de trabajar con elementos de matriz
Excepto por el para , también puede usar foreach : itera sobre todos los elementos de la matriz, sin usar índices. A veces puede ser conveniente, por ejemplo, mostrar una matriz en la pantalla.
foreach(int i en A)
{
Console.Write(i + " ");
}
Y así es como puedes leer una matriz, cuyos elementos están escritos en una línea y separados por un espacio, desde el teclado.
utilizando System.Linq; // necesita escribir esta directiva para usar funciones relacionadas con el trabajo con arreglos
...
cadena de texto = Console.ReadLine();
int[] array = text.Split(' ').Select(int.Parse).ToArray();
// Split() divide la cadena en objetos separados (en este caso, división espacial)
// Select(int.Parse) convierte cada objeto (cadena) en un int
// ToArray() escribe todos los objetos recibidos en la matriz
|