La Web del Programador: Comunidad de Programadores
 
    Pregunta:  55239 - COMO CONSEGUIR EN PASCAL QUE UN ARRAY TENGA TAMAÑO DINÀMICO
Autor:  Diego Alfonsin
Hola a todos, les comento mi problema: tengo que hacer un programa en pascal en donde el usuario tiene que ingresar n numeros, los cuales los quiero guardar en un array o vector, el tema es cuando lo declaro tiene que tener un tamaño fijo, y no se como hacer para que el tamaño del vector sea igual a la cantidad de numeros que ingrese el usuario, osea n. Seria como n array dinámico en cuanto a su tamaño

Desde ya muchas gracias por su atención.

  Respuesta:  joaquin acuña
hola amigo, mira, viendo tu problema , lo que necesitas no es un arreglo, sino que necesitas usar una lista.
Una lista es un tipo de dato dinamico en el cual va aumentado su tamaño dependiendo de la cantidad de datos que van apareciendo. Es como un encadenamiento de datos uno atras de otro, como si fuera un arreglo, nada mas que cuendo se necesita agregar un elementos mas , se pide espacio en memoria, se almacena el dato y se li engancha a la lista.
Si ya viste el temade listas en pascal, esto te va a resultar re papa! ^^J

Saludos

  Respuesta:  Ivan Lira
Hola Diego, pues tu probléma lo contestaste con tu misma pregunta.
Algo que debe quedar muy claro es que los arrays son estructuras que deben estar bien definidas, al tu declarar un arreglo por ejemplo:

var x:array[1..10] of integer

estas indicando al compilador que espacio reservará para dicho array, los compiladores no estan diseñados para que tu pongas [i..N] o algo semejante, los arreglos deben estar bien definidos como dije antes, ¿que tan bien definidos?
Pues mucho, inclusive si declaras una constante por ejemplo llamada TOP y le das el valor de 10, y la declaras despues de declarar el arreglo, hasta con eso te marcaria error, es decir si hicieras esto

var x:array[1..TOP] of integer
const TOP =10;

la declaración de la constante inclusive tendría que ir antes que la del arreglo.

Pero no te desanimes lo que tu necesitas es posible hacerlo y es muy sencillo, solo debes tomar en cuenta las necesidades de tu programa, hacia que va enfocado para saber de que longitud declarar tu array, recuerda, es posible declarar un arreglo de 1000 casillas si asi lo deseas aunque no las utilices todas, no tiene importancia. Por ejemplo si sabes que en tu programa se pueden utilizar unos 20 datos, puedes declarar tu arreglo de 100 y no hay problema :-)
Aqui te voy a dejar un ejemplo en el que capturo un vector de N datos por el usuario, es fácil de entender.

var n,i;
x: array [1..100] of integer;
begin
writeln ('Cuantos datos deseas capturar?');
readln (n);

for i:=1 to n do { aqui se captura el vector, de 1 hasta n (los datos que dio el usuario) }
begin
write ('Captura e dato ',i,' del vector: ');
readln(x[i]);
end;

Observa bien y lo único que se esta haciendo es que tu antes definias un vector de cierto tamaño, y utilizabas ese tamaño definido para trabajar con el vector, aqui es igual la única diferencia es que trabajaras con n (el valor que dio el usuario) como el tamaño del arreglo (de igual forma funcionaria para las matrices).

Si no te quedo del todo claro te recomiendo que consultes el curso que hay en: http://prepavirtual.educaleft.com
por ahi buscas en los Videotutoriales donde dice Curso Intermedio de Pascal,. ahi explican claramente todo esto.
Saludos.