Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


9. Variables dinámicas

9.1. ¿Por qué usar variables dinámicas?

En Pascal estándar, tal y como hemos visto hasta ahora, tenemos una serie de variables que declaramos al principio del programa o de cada módulo (función o procedimiento, unidad, etc). Estas variables, que reciben el nombre de estáticas, tienen un tamaño asignado desde el momento en que se crea el programa.

Esto hace que la ejecución sea muy rápida y que sea fácil detectar errores, pero sólo cuando vamos a manejar estructuras de datos que no cambien. Si, por el contrario, necesitamos almacenar un cantidad variable de datos, una estructura estática como un "array" puedo no ser útil o, como poco, resultar poco eficiente.

Pensemos en el caso de una agenda, que deba contener una serie de fichas de personas. Si creemos que necesitaremos guardar fichas para 20 personas, y reservamos espacio exactamente para esas 20, no podremos llegar a añadir 21 si nuestras necesidades cambian. Si "sobredimensionamos", reservando espacio para 100, en un caso normal estaremos desperdiciando el espacio de 80 datos no utilizados, lo que tampoco es una buena solución.

Una alternativa sería trabajar siempre en disco: conservar sólo una ficha en memoria y descargar un nuevo dato cada vez que lo necesitemos. Así no tendremos límite en cuanto a número de fichas, pero el funcionamiento será muchísimo más lento.

Lo ideal sería aprovechar mejor la memoria que tenemos en el ordenador, para guardar en ella todas las fichas o al menos todas aquellas que quepan en memoria.

Todas estas limitaciones se solucionan con el uso de variables dinámicas, para las cuales se reserva espacio en el momento de ejecución del programa, sólo en la cantidad necesaria, se pueden añadir elementos después, y se puede aprovechar toda la memoria libre de nuestro equipo.

Ejercicio propuesto 9.1.1: Como primera aproximación al uso de memoria dinámica, crea un programa que pida al usuario una cantidad indeterminada de números, y tras cada número muestre la suma de todos los números que se han introducido hasta ese momento. Terminará cuando se introduzca "fin" en vez de un número. (Pista: ¿necesitas almacenar todos esos números?)
Ejercicio propuesto 9.1.2: Como segunda aproximación al uso de memoria dinámica, crea un programa que pida al usuario una cantidad indeterminada de números, y tras cada número muestre todos los que se han introducido hasta ese momento, en orden inverso, en una misma línea. Terminará cuando se introduzca "fin" en vez de un número. (Pista: ¿necesitas almacenar todos esos números? Reserva espacio para 10 números, ¿qué ocurre cuando intentas guardar más?)
Ejercicio propuesto 9.1.3: Como tercera aproximación al uso de memoria dinámica, crea un programa que permita guardar (hasta) 10 strings. Se mostrará al usuario un menú que le permita añadir un nuevo string (a continuación de los ya existentes), ver todos los datos existentes o salir. Cuando el espacio para (10) datos esté lleno, se deberá avisar al usuario, en vez de intentar añadir nuevos datos e interrumpir la ejecución.