Comprender e implementar tipos de datos de matriz en Delphi

Las matrices nos permiten referirnos a una serie de variables con el mismo nombre y usar un número (un índice) para llamar elementos individuales en esa serie. Las matrices tienen límites superiores e inferiores y los elementos de la matriz son contiguos dentro de esos límites.

Los elementos de la matriz son valores que son todos del mismo tipo (cadena, entero, registro, objeto personalizado).

En Delphi, hay dos tipos de matrices: una matriz de tamaño fijo que siempre permanece del mismo tamaño, una matriz estática, y una matriz dinámica cuyo tamaño puede cambiar en tiempo de ejecución.

Matrices estáticas

Supongamos que estamos escribiendo un programa que permite al usuario ingresar algunos valores (por ejemplo, el número de citas) al comienzo de cada día. Elegiríamos almacenar la información en una lista. Podríamos llamar a esta lista Equipo, y cada número puede almacenarse como Citas [1], Citas [2], etc.

Para usar la lista, primero debemos declararla. Por ejemplo:

 Var Citas: matriz [0..6] de Integer; 
instagram viewer

declara una variable llamada Citas que contiene una matriz unidimensional (vector) de 7 valores enteros. Dada esta declaración, Citas [3] denota el cuarto valor entero en Citas. El número entre paréntesis se llama índice.

Si creamos un matriz estática pero no asigne valores a todos sus elementos, los elementos no utilizados contienen datos aleatorios; son como variables no inicializadas. El siguiente código se puede utilizar para establecer todos los elementos en la matriz de citas a 0.

 para k: = 0 a 6 hacer Citas [k]: = 0; 

A veces necesitamos hacer un seguimiento de la información relacionada en una matriz. Por ejemplo, para realizar un seguimiento de cada píxel en la pantalla de su computadora, debe consultar sus coordenadas X e Y utilizando un multidimensional matriz para almacenar los valores.

Con Delphi, podemos declarar matrices de múltiples dimensiones. Por ejemplo, la siguiente declaración declara una matriz bidimensional de 7 por 24:

 var DayHour: matriz [1..7, 1..24] de Real; 

Para calcular el número de elementos en una matriz multidimensional, multiplique el número de elementos en cada índice. La variable DayHour, declarada anteriormente, reserva 168 elementos (7 * 24), en 7 filas y 24 columnas. Para recuperar el valor de la celda en la tercera fila y la séptima columna, usaríamos: DayHour [3,7] o DayHour [3] [7]. El siguiente código se puede usar para establecer todos los elementos de la matriz DayHour en 0.

 para i: = 1 a 7 do
para j: = 1 a 24 do
DayHour [i, j]: = 0;

Matrices Dinámicas

Es posible que no sepa exactamente qué tan grande hacer una matriz. Es posible que desee tener la capacidad de cambiar el tamaño de la matriz en tiempo de ejecución. Una matriz dinámica declara su tipo, pero no su tamaño. El tamaño real de una matriz dinámica se puede cambiar en tiempo de ejecución mediante el uso de SetLength procedimiento.

 var Students: conjunto de cadenas; 

crea una matriz dinámica unidimensional de cadenas. La declaración no asigna memoria para estudiantes. Para crear la matriz en la memoria, llamamos al procedimiento SetLength. Por ejemplo, dada la declaración anterior,

 SetLength (Estudiantes, 14); 

asigna una matriz de 14 cadenas, indexadas de 0 a 13. Las matrices dinámicas siempre están indexadas por enteros, siempre comenzando de 0 a uno menos que su tamaño en elementos.

Para crear una matriz dinámica bidimensional, use el siguiente código:

 var Matrix: matriz de matriz de Double;
empezar
SetLength (Matriz, 10, 20)
final;

que asigna espacio para una matriz bidimensional de 10 por 20 de valores de punto flotante doble.

Para eliminar el espacio de memoria de una matriz dinámica, asigne nil a la variable de matriz, como:

 Matriz: = nulo; 

Muy a menudo, su programa no sabe en tiempo de compilación cuántos elementos se necesitarán; ese número no se conocerá hasta el tiempo de ejecución. Con las matrices dinámicas, puede asignar solo la cantidad de almacenamiento necesaria en un momento dado. En otras palabras, el tamaño de las matrices dinámicas se puede cambiar en tiempo de ejecución, que es una de las ventajas clave de las matrices dinámicas.

El siguiente ejemplo crea una matriz de valores enteros y luego llama a la función Copiar para cambiar el tamaño de la matriz.

 var
Vector: conjunto de enteros;
k: entero;
empezar
SetLength (Vector, 10);
para k: = Bajo (Vector) a Alto (Vector) hacer
Vector [k]: = i * 10;
...
// ahora necesitamos más espacio
SetLength (Vector, 20);
// aquí, la matriz de vectores puede contener hasta 20 elementos // (ya tiene 10 de ellos) end;

La función SetLength crea una matriz más grande (o más pequeña) y copia los valores existentes en nueva matriz. Las funciones Baja y Alta aseguran que acceda a todos los elementos de la matriz sin tener que buscar en su código los valores correctos de índice inferior y superior.

instagram story viewer