AnteriorPosterior

9.7. Arrays dinámicos

  Curso: Programación en Pascal (v5), por Nacho Cabanes

9.7. Arrays dinámicos

¿Y no sería maravilloso poder usar un simple array, más sencillo que las listas que hemos visto, pero no estar forzados a conocer su tamaño en tiempo de compilación, y poderlo indicar más adelante, cuando ya sepamos cuántos datos realmente deberá almacenar? ¿Y no sería fantástico poder incluso cambiar su tamaño más adelante?

Esta no es una posibilidad estándar del lenguaje Pascal, pero sí una ampliación que incluyen Free Pascal y Delphi (no Turbo Pascal). En estos compiladores, podemos declarar un array sin indicar su tamaño, así:

var datos : array of byte;

Y en cualquier momento posterior podemos indicar el tamaño que queremos que tenga :

SetLength(datos, 20);

Incluso podríamos volverlo a hacer una segunda vez, con un tamaño distinto, y entonces el array se acortaría o se haría más grande, según corresponda:

SetLength(datos, 30);

El array se empieza a numerar desde 0, y en cualquier momento podríamos saber la cantidad de datos que contiene con "Length". Así, un ejemplo completo sería:

(* DINARRAY.PAS, Ejemplo de arrays dinámico en Pascal *)
(* Parte de CUPAS5, por Nacho Cabanes                 *)
 
program DinArray;
 
uses classes;
 
var
    lista: TStringList;
    dato: string;
    i: integer;
 
begin
    lista := TStringList.Create;
    repeat
        write('Introduce un dato (Intro para acabar): ');
        readLn(dato);
        if dato <> '' then
            lista.Add(dato);
    until dato = '';
 
    for i:= lista.Count-1 downto 0 do
        writeLn(lista[i]);
 
    writeLn('Ordenando alfabéticamente...');
    lista.Sort;
 
    writeLn('Y guardando en "lista.txt"...');
    lista.SaveToFile('lista.txt');
end.
 

Esto, que puede parecer muy útil, tiene una limitación: cada vez que hacemos SetLength, se crea una nueva copia del array y se vuelven a ella todos los elementos que se deben conservar, de modo que es una operación relativamente lenta, especialmente si se trata de un array grande y vamos a añadir datos de uno en uno, redimensionando cada vez.

Ejercicio propuesto 9.7.1: Crea un programa que permita al usuario guardar una lista de números reales. El usuario introducirá tantos datos como desee (usando 99999 para terminar), y en ese momento se le mostrará la media de los valores, después todos los que están por encima de esa media (en una misma línea, separados por espacios en blanco) y finalmente todos los que están por debajo de esa media (en una nueva línea, también separados por espacios en blanco). Debes usar un array dinámico, que comenzará con tamaño 1 y aumentará en una nueva unidad cada vez que se introduzca un dato.
Ejercicio propuesto 9.7.2: Crea una nueva versión del programa 9.7.1, en la que el tamaño inicial del array sea 20, y aumente de 10 en 10 cada vez que sea necesario

Actualizado el: 23-08-2014 13:29

AnteriorPosterior