Pascal/Turbo Pascal - Vectores

 
Vista:

Vectores

Publicado por José Tirado (5 intervenciones) el 22/11/2007 16:04:24
Hola como estan necesito hacer una consulta sobre el tma de los vectores en turbo pascal.
la pregunta es:
Como haria para que el limite de un vector sea limtado por el usuario?

por ejemplo

Vector:array[ 1..7] of integer;

/en este vector solo se tienen 7 valores y son determinados por el progrmador/

lo que yo quisiera es que primero le preguntara al usuario cunatos valores quiere y en ves de poner el numero 7 ubicaria una variable, la cual seria el limite de los vectores a usar.

agradeceria su pronta respuesta.

Jos{e Tirado Verbel
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Vectores

Publicado por Mariano (57 intervenciones) el 22/11/2007 16:29:47
Hola!, Vos podes poner que el usuario determine una cantidad, pero vos previamente tuviste q haber puesto una cantidad maxima, ya que los vectores son estructuras estaticas cuyo espacio se define en tiempo de compilacion, por lo tanto no se puede asignar el espacio en tiempo de ejecucion :)!

Un abrazoo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Vectores

Publicado por yolmer.rosalles (10 intervenciones) el 22/11/2007 18:16:06
hola como te dijo mariano eso podría ser una solucion sobredimensiona el array P.Ej [1..1000] of dato luego el trabajalo solo hasta el número que te de el usuario, no es muy elegante pero funciona, aún así debes indicarle al usuario cual es el límite.
la solucion más decente es utilizar variables dinámicas si no tienes ni idea prueba primero leer algunos tutoriales en la web hay muchiiiiiiiiiiiiiisimos y muy buenos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Vectores

Publicado por Jose Eduardo (5 intervenciones) el 22/11/2007 21:54:14
Ok grax por las respuestas asi lo hare
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Vectores

Publicado por mary (5 intervenciones) el 22/11/2007 21:54:55
hello.......
bueno puedes utilizar una const de 7 elementos
y luego en el main principal le dipes al usuario que introduzca
asi que tu vector que daria algo asi

const
n=7;
vector:array[ 1..n] of integer;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Vectores

Publicado por M@rceloL (25 intervenciones) el 23/11/2007 01:12:45
En el pascal de Turbo Pascal no existen los arreglos dinámicos, que si están presentes en Delphi o FreePascal (hasta donde sé).

Pero se puede hacer algo como esto:

type ptrInt=^Integer;

procedure SetValor(const Arreglo:ptrInt; Indice,Valor:integer);
var Aux: ptrInt;
begin
  Aux := Arreglo;
  Inc( Aux, (Indice-1) );
  Aux^ := Valor;
end;

function GetValor(const Arreglo:ptrInt; Indice:integer):integer;
var Aux: ptrInt;
begin
  Aux := Arreglo;
  Inc( Aux, (Indice-1) );
  GetValor := Aux^;
end;

var ArrInt: ptrInt;
      Tamanio: integer;

begin
  write( 'Ingrese un máximo para el arreglo: ' );
  ReadLn( Tamanio );
  GetMem( ArrInt, Tamanio * SizeOf( Integer ) );
  SetValor( ArrInt, 10, 345);
  write( GetValor( ArrInt, 10 ) );
  FreeMem( ArrInt, Tamanio * SizeOf( Integer ) );
end.

Nuestro arreglo es en realidad un puntero a integer.

Pedimos el tamaño al usuario y lo guardamos en "Tamanio".

Después inicializamos pidiendo memoria con GetMem.

GetMem crea x cantidad de bytes. Por eso a la cantidad de integers que nosotros necesitamos (la variable "Tamanio) la multiplicamos por SizeOf(Integer), para que GetMem reserve la cantidad de bytes necesaria para alamacenar "Tamanio" integers.

SizeOf nos devuelve el tamaño en bytes de un tipo de dato o variable.

Acceder a los valores es, por supuesto, mucho más engorroso (e ineficiente) que con un arreglo normal.

Lo que hacemos para acceder a una determinada posición es tomar la primera de las direcciones (la que tiene la variable ArrInt) e incrementarla en Indice-1 ( el -1 es porque el arreglo empieza en 1, pero en memoria estamos empezando en 0).

Así:

Aux := Arreglo; {Aux apunta al mismo lugar que Arreglo}
Inc (Aux, Indice-1); {Auxiliar apunta a la dirección Indice-1 ésima}

Posición: 0 1 2 3 4 5
Arreglo: [ ] [ ] [ ] [ ] [ ] [ ]

Si indice=3 y hacemos Inc(Aux,Indice) vamos a terminar accediendo a la cuarta posición y no a la tercera, de ahí el Indice-1.

¿Se entiende lo que estoy diciendo? Es un poco complicado al principio.

Inc() nos incremeta el puntero teniendo en cuenta que estamos accediendo integers, por eso no es necesario multiplicar el incremento por el tamaño de un integer.

Espero te sirva. Saludongos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Vectores

Publicado por Andres Villanueva (13 intervenciones) el 26/11/2007 16:21:01
Hola Jose, bueno te digo al igual que tu no sabia como hacer que el usuario declarar la longitud de un vector, pero despues de leer y leer lo consegui,

Es muy sencillo, solo declaras el arreglo de la siguiente manera
Vector= Array [ 1..N] of integer;

en dodne N es un numero infinito, y declaras otra variable que sera el numero que ingrese el usuario., algo como

Long:Integer;

Y solamente colocarias en el FOR I:=1 to Long do,
Aqui el usuario estaria estableciendo la longitud del vector.

Cabe destacar que tuve mi prueba de vectores hace 2 semanas, y se me presento el mismo inconveniente,

Espero que te sea util,
Saludos
Andres VIllanueva
Venezuela - Anzoategui
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar