Learning machine #17 - Programando en Pascal - Arreglos, arreglos dinámicos y arreglos multidimensionales.

 Hola de nuevo a todos, el dia de hoy vamos a continuar con un poco mas de programación en Pascal. EN alguno de los post anteriores, vimos cómo usar arreglos, arreglos de punteros,  pero nos falto ver cómo usar arreglos dinámicos y arreglos de dimensiones múltiples. Si bien ya los usamos en los arreglos de punteros, no hemos visto aun cómo son la reglas para usarlos.


Arreglos de una sola dimensión.

A manera de repaso veamos cómo es que se crea un arreglo de una sola dimensión en Pascal. En Pascal, para poder crear un arreglo, se debe de hacer lo siguiente.
type
	MiArr = array [0..9] of integer;
var
    Lista : MiArr;
Primero, debemos de crear un nuevo tipo, en el ejemplo anterior es "MiArr", seguido de la palabra reservada "array[]", dentro de los corchetes, se debe de establecer el rango para los valores de los índices. Normalmente se establece de cero a n pero se pueden crear arreglos que no sean de base cero (que no empiece el primer índice en cero). Incluso para valores que NO sean del tipo "real", se pueden usar valores negativos. Después de los corchetes debe de ir la palabra reservada "of" y finalmente el tipo del que serán los elementos contenidos en el arreglo.

Para inicializar los valores del arreglo, simplemente se les asigna un valor (normalmente usando un "for") y para poder usar los valores, bastara con llamar a la variable seguida de un corchete dentro del cual ira el valor del índice que queremos leer. Para ver con más claridad, retomemos un ejemplo que ya habíamos visto.
program Arreglos;

type
ArregloDeNumeros = array[0..99] of integer;

var
MisNumeros : ArregloDeNumeros;
i : integer;

begin

    for i := 0 to 99 do
    begin 
        MisNumeros[i] := i * 2;
    end;
    
    for i := 1 to 99 do
    begin 
        writeln(MisNumeros[i]);
    end;
    
end.
Cómo podrás ver, para asignar valores a todos los elementos del arreglo, simplemente usamos un ciclo "for" y para leer los valores usamos otro, pero si queremos leer solo uno en particular, solo bastaría con algo cómo "MisNúmeros[3]" que serviría para retornar el valor del elemento con índice tres.

Arreglos multidimensionales.

Para declarar un arreglo de dimensión múltiple, se sigue mas o menos los pasos anteriores, es decir: creamos un tipo, asignamos a una variable el nuevo tipo  y lo usamos. Pero el cambio viene al momento de definir el tamaño del arreglo. Primero veamos el siguiente ejemplo.

type
	MiArr = array [0..9 , 0..9] of integer;
var
    Lista : MiArr;

Cömo podrás observar, simplemente se definen las dimensiones de cada uno de los arreglos, por lo que en ejemplo anterior, habremos creado un arreglo de dos dimensiones con un tamaño de 10x10. Para agregar una dimensión mas, bastará con agregar otra coma seguida del rango.

Ahora miremos el siguiente ejemplo:
program ArreglosMulti;

type
ArregloDeNumeros = array[0..9 , 0..9] of integer;

var
MisNumeros : ArregloDeNumeros;
i , j : integer;

begin

    for i := 0 to 9 do
    begin 
    for j := 0 to 9 do
        MisNumeros[i,j] := i + j * 2;
    end;
    
    for i := 1 to 9 do
    begin 
        for j := 0 to 9 do
        write(' ',MisNumeros[i,j]);
        writeln();
    end;
	
end.
Si miramos bien ahora los arreglos se accesan mediante un sistema coordenado. para acceder al tercer elemento de la segunda fila, bastaría con tener algo cómo "MisNumeros[2,3]". Finalmente y de manera meramente ilustrativa, veamos el ejemplo de un array de 10x10x10 elementos.
program ArreglosMulti;

type
ArregloDeNumeros = array[0..9 , 0..9, 0..9] of integer;

var
MisNumeros : ArregloDeNumeros;
i , j , k : integer;

begin

    for i := 0 to 9 do
    begin 
        for j := 0 to 9 do
        begin
            for k := 0 to 9 do
                MisNumeros[i , j , k] := i + j + k * 2;
        end;
    end;
    
    for i := 1 to 9 do
    begin 
        for j := 0 to 9 do
        begin
            for k := 0 to 9 do
            write(' ',MisNumeros[i,j,k]);
            
        writeln();
        end;
        writeln();
    end;

end.
Y de manera similar, para acceder a un elemento seria "MisNumeros[1,2,3]".
Al momento de crear arreglos de varias dimensiones, no es necesario que estos sean "cuadrados", en los ejemplos, son arreglos de 10x10, pero pueden ser de valores diferentes cómo de 3x4x10 y para definir su tamaño solamente debemos de establecerlos al momento de crear el tipo "array[0..3,0..4,0..10]", solamente debemos de tener cuidado a la hora de acceder a los valores y que el indice al que queremos acceder, este dentro del intervalo.

Arreglos dinámicos.

Los arreglos dinámicos se distinguen de los otros por no tener un tamaño fijo y que a la hora de inicializarlos, tienen tamaño cero. Son especialmente útiles a la hora de ejecución, ya que nos permite cambiar el tamaño del arreglo en función a lo que el programa requiera y así en lugar de crear un arreglo de longitud 1000 para cubrir todas las posibles necesidades, solamente se crean los necesarios a cómo se vaya necesitando.

Para crear un arreglo dinámico, se siguen los mismo pasos que antes, es decir; se crea un tipo  nuevo y cuando le indicamos que va  a ser un arreglo no establecemos la longitud. Para apreciar mejor cómo se hace, veamos el siguiente ejemplo:
program ArreglosDina;

type
ArregloDeNumeros = array of integer;

var
MisNumeros : ArregloDeNumeros;
i , Items : integer;

begin

    Items := 10;
    setlength(MisNumeros , Items);
    
    for i := 0 to (Items - 1) do
            MisNumeros[i] := i * 2;

    for i := 0 to (Items - 1) do
            writeln(' ',MisNumeros[i]);

end.
Cómo podrás ver, al momento de crear el tipo "ArregloDeNumeros" seguido de la palabra reservada array, no se establece el tamaño pero simplemente se establece el tipo. Para ajustar el tamaño del arreglo, antes de usarlo, debemos de usar la función "setlength()". La función "setlength()".recibe dos o mas parámetros, el primero es el nombre de la variable del cual va a ajustar el tamaño, en el ejemplo anterior fue "MisNumeros", seguido del tamaño a asignar (que en el ejemplo fue la variable "Items" con un valor de 10). Para acceder al valor de cada elemento se hace igual que con los arreglos tradicionales.

Y bien, por ahora es todo. Aun quedan muchas cosas pendientes en el lenguaje Pascal, pero creo que solo un post mas dedicado a los arreglos estará bien (antes de olvidarme de la serie "programando en Pascal" por dos años). Cómo de costumbre puedes copiar y pegar los códigos para probarlos.

Los leo luego.


No hay comentarios.