JugadorXL es un usuario que postea muy buenos Vectores.-
Aclaro que es muy larga la explicacion pero aca va....
Introducción
Un vector (insisto con el nombre en nuestro idioma, que para eso lo tiene) es una estructura de datos que almacena elementos, y que permite acceder a ellos a través de un índice. Representan una secuencia de cosas: de colores, de números, de objetos... Son útiles porque se pueden recorrer por completo en un bucle, se pueden añadir más elementos, etc.
No son un conjunto, porque en un conjunto no importa el orden y no se pueden repetir elementos. En un vector, en cambio, puedes tener el mismo elemento repetido tantas veces quieras, y no es el mismo el elemento 3º que el 4º.
Veamos algunos ejemplos de vectores:
["Carlos", "de", "la", "Orden"] es un vector de cuatro cadenas de texto.
[245, 2, 567, 28000, 0, 0, 22] es un vector que contiene números enteros.
El elemento 2º del primer vector es "de", y el elemento 7º del segundo vector es 22.
En la gran mayoría de lenguajes de programación, incluidos VBScript y Javascript, los vectores se denominan arrays, y la forma de acceder a un elemento cualquiera es a través de un índice que comienza en 0 (cero). Así, para acceder al primer elemento, se utiliza vector(0).
Si ya has programado en cualquier otro lenguaje de programación, estarás harto de utilizar vectores para casi todo. Si no es así, sigue adelante, vamos a ver los vectores en Visual Basic Script.
Manejar vectores
En VBScript, se puede declarar un vector de varias formas. Principalmente hay una diferencia: que sea un vector con un número fijo de elementos o que sea un vector de longitud variable.
En los vectores de longitud fija, hay que especificar el índice mayor entre paréntesis. Ahora bien, como hemos dicho que el primer índice es cero, tenemos que dar la longitud que queramos menos 1, así:
Dim vector_fijo(4)
Este vector tiene 5 elementos, desde el elemento 0 hasta el elemento 4.
Si en cambio, queremos un vector cuya longitud pueda variar, lo declaramos sin ningún índice entre paréntesis, pero sí con los paréntesis, porque si no sería una variable normal y corriente. Después, antes de utilizarlo, tendremos que emplear Redim... Pero eso viene más abajo.
Dim vector_din ¡Mal!
Dim vector_din()
Este vector no tiene ningún elemento pero es un vector. :-)
Vamos a ver cómo cargar un vector. La sintaxis es muy sencilla: tanto para guardar un valor como para recuperarlo, utilizamos nombre(índice), así:
<%
Dim vector(2) 'Un vector de 3 elementos
vector(0) = "¡Hola"
vector(1) = "mundo!"
'Mostramos el vector
Response.Write ( vector(0) & " " & vector(1) )
%>
Sí, imprimiría ¡Hola mundo! en la página. Si estás pensando que tengo muy poca imaginación para los ejemplos, estoy contigo... ;-)
¿Y los vectores de longitud variable (vectores dinámicos)? Pues se meten y recuperan valores de igual forma. Si hemos dicho que es de longitud variable, habrá que ver cómo cambiar su longitud ¿no? La clave es la instrucción de Visual Basic Script Redim.
Hay que resaltar que declarar Dim vector() significa que tenemos un vector de longitud variable, pero aún no tenemos ninguna longitud especificada. Así que antes de guardar datos, tenemos que utilizar Redim(índice).
Vamos a crear un vector de 3 elementos, metemos elementos, y luego hacemos que en el vector quepan 5 elementos:
<%
Dim vector()
'Metemos 3 palabras en el vector
Redim vector(2)
vector(0)="Esta"
vector(1)="vez"
vector(2)="no"
'Ahora necesitamos más hueco: cambiamos el tamaño
Redim vector(4)
'Metemos dos palabras más
vector(3)="lo"
vector(4)="digo"
'Mostramos el vector
Response.Write( vector(0) & " " & vector(1) & " " & vector(2) & " " & vector(3) & " " & vector(4) )
%>
¡Hey! ¿Qué ha pasado? Nos ha sacado esto:
lo digo
Este error me viene de perlas para explicaros que Redim redimensiona el vector, pero no guarda los datos que hubiera en él a menos que utilicemos la palabra clave Preserve. Así que modificamos nuestro ejemplo anterior, y cambiamos esta línea:
...
'Ahora necesitamos más hueco: cambiamos el tamaño
'y preservamos los datos antiguos
Redim Preserve vector(4)
'Metemos dos palabras más
...
Ahora si. Cargamos la página en el navegador y tenemos:
Esta vez no lo digo
LBound y UBound
Bien, ya sabemos cómo introducir datos y recuperarlos... Ahora bien ¿no es un poco tedioso la forma en que hemos impreso los valores del vector? Hay formas mucho mejores, y para ello necesitamos de dos funciones de VBScript: LBound y UBound. Estas funciones nos devuelven respectivamente el menor y mayor índice disponible en un vector. Así, en nuestro ejemplo anterior, LBound(vector) devuelve 0 y UBound(vector) nos devuelve 4. Podemos imprimir la frase anterior así:
for I=LBound(vector) to UBound(vector)
Response.Write ( vector(I) & " " )
next
Este bucle sencillo va recorriendo el vector, empezando en 0 y terminando, en este caso, en 4. Así, nuestro Response.Write va imprimiendo el valor de cada elemento del vector.
Además, como hemos dicho que la longitud de un vector es el número máximo de índice + 1, UBound(vector)+1 nos devuelve exactamente la longitud del vector (el número de elementos que contiene, vacíos o no).
Podemos escribir esta función sencilla que nos devuelve la longitud de cualquier vector:
Function LongitudV ( vector )
LongitudV = UBound(vector) + 1
End Function
La función Array()
Otra forma de cargar un vector, sin declararlo como tal, es mediante la función Array(). Esta función recibe una lista de elementos separada por comas, y devuelve un vector formado por estos elementos, así:
MiVector = Array (1, 2, 3, 4, 5, 6, 7, 8, 9)
Con lo que MiVector guardaría como elementos los números del 0 al 9.
Esta forma no funciona si declaramos nuestro vector con Dim vector(2)o Dim vector(), pero sí si lo hacemos con Dim vector. Es decir, declaramos una variable normal, y la función Array se encarga de convertirla en un vector.
Borrar elementos
Borrar elementos de un vector es algo complicado en los lenguajes de script (en un lenguaje de programación normal, utilizaríamos punteros), porque tenemos que hacerlo manualmente. Imaginaos una cola de personas esperando para entrar al cine, por ejemplo. La cola es nuestro vector. Si una persona decide que no quiere ir al cine y abandona la cola, las personas se mueven una posición hacia delante, y además la cola tendrá una persona menos.
Esto es lo que tenemos que hacer para borrar un elemento: encontrar su posición, y a partir de la siguiente, ir copiando los elementos a la posición anterior hasta el final. Por último, utilizamos Redim Preserve para hacer que el vector tenga 1 elemento menos.
Os he preparado una función para que os facilite las cosas. Por supuesto, sólo podemos borrar elementos de un vector dinámico, no de un vector declarado como Dim vector(3). Intentar hacer Redim sobre este vector nos devuelve el error "la matriz está bloqueada de manera fija o temporal". Necesitamos, o bien declarar un vector dinámico con Dim vector() y asignarle después un tamaño con Redim vector (tamaño) antes de guardar datos en él, o bien utilizar la función Array explicada arriba y declarar una variable corriente.
Este es el código del procedimiento:
Sub BorrarElto (vector, elemento)
Dim pos, i
pos = 0
do until (vector(pos) = elemento) or (pos=Ubound(vector))
pos = pos + 1
loop
if vector(pos) = elemento then
'tengo la posición, lo borro
for i = pos to UBound(vector)-1
vector(i) = vector(i+1)
next
Redim Preserve vector (Ubound(vector)-1)
end if
End Sub
Para utilizarlo, hay que pasarlo como argumentos el vector del que queremos borrar, y el elemento a borrar. Acordáos de hacerlo sin paréntesis, puesto que es un Sub:
Dim vector
vector = Array("a", "b", "c", "d"

BorrarElto vector, "c"
Con lo que vector se quedaría con los elementos ["a", "b", "d"].
Con un vector dinámico:
Dim vector()
Redim vector(3)
vector(0) = "a"
vector(1) = "b"
vector(2) = "c"
vector(3) = "d"
BorrarElto vector, "c"
Vectores con más de una dimensión
Hasta ahora, los ejemplos que hemos visto utilizaban vectores de una dimensión, que son como una secuencia de valores (números, cadenas, etc.). Es posible, sin embargo, emplear vectores de 2 o más dimensiones. Un vector de 2 dimensiones es un matriz. Podéis haceros una idea mental de la hoja de un cuaderno (¡cuadriculado!): las filas de la hoja son la primera dimensión, y las columnas la segunda. Si tenéis paciencia y contamos todos los cuadraditos de la hoja, podríamos escribir un vector de 2 dimensiones que represente la hoja por completo.
Para declarar un vector de 2 o más dimensiones, escribimos los índices de cada dimensión separados por comas:
Dim vector2d (2, 2)
Si almacenamos números en este vector, lo haríamos utilizando también los dos índices. Como es una matriz, utilizamos M para la variable.
Dim M(1,1) 'Matemáticos: una matriz cuadrada de orden 2! ;-)
M(0,0) = 1
M(0,1) = 0
M(1,0) = 0
M(1,1) = 1
El primer número dentro del paréntesis corresponde a la primera dimensión y el segundo a la segunda dimensión. En lugar de acceder ahora al elemento i con vector(i), accedemos al elemento (i,j) con vector(i,j).
¿Y cómo utilizamos LBound y UBound ahora? Pues pasando como argumentos, además del nombre del vector, la dimensión de la cual queremos obtener los datos. longitud_primera_dimesion = UBound(M,1)+1
longitud_segunda_dimension = UBound(M,2)+1
Podemos recorrer totalmente nuestro vector de 2 dimensiones así:
For i=LBound(M, 1) to UBound(M, 1)
For j=LBound(M, 2) to UBound(M, 2)
Response.Write( M(i,j) & " " )
Next
Next
Que produciría: 1 0 0 1 .
También podemos redimensionar un vector multidimensional, pero en este caso, la instrucción Redim Preserve sólo mantiene los datos de la última dimensión.
Como no quiero liar más la cosa, os pongo un pequeño ejemplo de uso de vectores. Vamos a hacer un vector de 2 dimensiones, que guarda el nombre de un color y su valor en hexadecimal. Primero lo mostramos recorriendo sólo una dimensión, y después escribimos una tabla mediante dos bucles For anidados.
<%
Dim Colores(2,1)
Colores(0,0)="Rojo"
Colores(0,1)="#FF0000"
Colores(1,0)="Verde"
Colores(1,1)="#00FF00"
Colores(2,0)="Azul"
Colores(2,1)="#0000FF"
'Imprimo en forma de lista ordenada
for I=LBound(Colores,1) to UBound(Colores, 1)
Response.Write("<LI>Color:" & Colores(I, 0) & " / Hex: " & Colores(I,1) )
next
'Y ahora formo una tabla
%>
<TABLE BORDER="8" ALIGN="center">
<TR>
<TD><B>Color</B></TD>
<TD><B>Hexadecimal</B></TD>
</TR>
<%
for I=LBound(Colores,1) to UBound(Colores, 1)
Response.Write("<TR>" & vbTab & vbCrlf)
for J=LBound(Colores, 2) to UBound(Colores, 2)
Response.Write(vbTab & "<TD>" & Colores(I,J) & "</TD>" & vbCrlf)
next
Response.Write("</TR>"

next
%>
</TABLE>
%>
Como sé que no vais a copiar el texto y cargar la página, este script produce:
Color:Rojo / Hex: #FF0000
Color:Verde / Hex: #00FF00
Color:Azul / Hex: #0000FF Color Hexadecimal
Rojo #FF0000
Verde #00FF00
Azul #0000FF
http://i.t.roprgm.net/?titulo&type=3&text=Distintos conceptos:
:Hola, si entendi bien tu detallada explicacion de un vector. en eso no hay duda de que esun array para guardar informacion y que como es una estructura de datos se puede utilizar en cualquier lenguaje de programacion,mi comentario mas que nada,es que al parecer estas confundiendo el vector (array) con una imagen vectorizada, comunmente llamada vector en diseño grafico,si observas los post de quienes suben vectores, todas son imagenes, las cuales se diferencian de una imagen resterizada, en que es una imagen vectorial osea esta formada pos muchos objetos geometricos y no com por ejemplo una imagen de bits,lo uqe permite que un vector (imagen) se pueda aumentar muchas veces su tamaño sin perder nada de calidad ni verse pixeleada,espero no molestarte,al contrario me parecio bueno tu post, pero creo k hay un malentendido en los conceptos.El 18.06.2009 a las 11:40:53, 70magna escribió:
>No entendi bien tu pregunta o al menos se entiende algo mezclado de todos modos el uso de los vectores estan dado a distintos criterios de cada programador com es mi caso. Si bien muchas personas los utilizan para lenguajes de programación, incluidos VBScript y Javascript, los vectores se denominan arrays y con esto te quiero decir que depende el uso de cada uno.pd: espero haber contestado tu pregunta!El 18.06.2009 a las 11:35:29, ultimatestark escribió:hola...disculpa mi intromision, per tu te refieres alos vectores como estructuras de programacion,en o cual tu explicacion es correcta,pero cuando usario publica vectores se refieren a graficos vectoriales.osea imagenes digitales formadas por objetos geométricos independientes por eso son puras imagenes..
Y eso es todo por hoy.

