Foros del Web » Programando para Internet » ASP Clásico »

Matrices

Estas en el tema de Matrices en el foro de ASP Clásico en Foros del Web. Hola El caso es que la matríz ArrSinRepeticion contiene un valor más del que por lógica debería de tener @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ASP: Ver original ...
  #1 (permalink)  
Antiguo 13/01/2010, 08:37
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Matrices

Hola

El caso es que la matríz ArrSinRepeticion contiene un valor más del que por lógica debería de tener

Código ASP:
Ver original
  1. <&#37;
  2. Dim ArrOriginal, ArrSinRepeticion(), i, comparacion, x
  3. ArrOriginal = Array(8,3,5,2,9,2,3,5,8)
  4. Redim preserve ArrSinRepeticion(1)
  5. ArrSinRepeticion(0) = ArrOriginal(0)
  6. For i = 0 to (UBound(ArrOriginal)-1)
  7. comparacion = 0
  8.  
  9. For x = 0 to (UBound(ArrSinRepeticion)-1)
  10. comparacion = StrComp(ArrSinRepeticion(x), ArrOriginal(i), 1)
  11. IF (comparacion = 0) then ' está repetido
  12. Exit For 'x
  13. END IF
  14. Next 'x
  15. IF (comparacion <> 0) then
  16. 'Response.Write UBound(ArrSinRepeticion)+1 &"<br />"
  17. Redim preserve ArrSinRepeticion(UBound(ArrSinRepeticion)+1)
  18. ArrSinRepeticion(UBound(ArrSinRepeticion)-1) = ArrOriginal(i)
  19. Response.Write "(" & UBound(ArrSinRepeticion)-1 & ") => " & ArrOriginal(i) &" "
  20. END IF
  21. Next 'i
  22.  
  23. Response.Write "<br /><br /><b>Arreglo Original</b><br />"
  24. Response.Write Join(ArrOriginal, ", ")
  25. Response.Write "<br /><br /><b>Arreglo Original sin valores duplicados</b><br />"
  26. Response.Write Join(ArrSinRepeticion, ", ")
  27. Response.Write "<br /><br />"
  28. Response.Write ArrSinRepeticion(5)
  29. %>

Tengo este arreglo Array(8,3,5,2,9,2,3,5,8) y lo que quiero hacer, es eliminar los valores repetidos. Es decir el arreglo ya limpio quedaría Array(8,3,5,2,9). Esto lo viene a demostrar esta prueba de escritorio Response.Write "(" & UBound(ArrSinRepeticion)-1 & ") => " & ArrOriginal(i) &" " que imprime esto (1) => 3 (2) => 5 (3) => 2 (4) => 9 . Pués al parecer no es así, ya que cuando hago el Join, esto es lo que imprime 8, 3, 5, 2, 9, con esa coma al final. Lo que me hace pensar que el subindice llega hasta 5. Esto lo demuestra Response.Write ArrSinRepeticion(5) que en lugar de dar error, puesto que estaría fuera del intervalo, imprime un valor vacío

¿Alguna idea?

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #2 (permalink)  
Antiguo 13/01/2010, 08:52
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 4 meses
Puntos: 57
Respuesta: Matrices

La funcion ubound regresa el indice mayor del arreglo, no regresa el numero de elementos (como sucede en C, java, javascript, etc.)

por ejemplo
Código:
dim x(5)
response.write ubound(x)
te deberia imprimir 5. Esto significa que puedes acceder a los elementos con indice desde 0 hasta 5. O sea que el arreglo tiene 6 elementos

Última edición por posman; 13/01/2010 a las 09:02
  #3 (permalink)  
Antiguo 14/01/2010, 05:49
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Matrices

Hola

Cita:
Iniciado por posman Ver Mensaje
La funcion ubound regresa el indice mayor del arreglo, no regresa el numero de elementos (como sucede en C, java, javascript, etc.)

por ejemplo
Código:
dim x(5)
response.write ubound(x)
te deberia imprimir 5. Esto significa que puedes acceder a los elementos con indice desde 0 hasta 5. O sea que el arreglo tiene 6 elementos
Eso está superado ya hace algunos años

El problema estás en que en el vector ArrSinRepeticion se añade un valor vacío y no logro saber por qué

Gracias por tu interés
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 14/01/2010, 08:37
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 4 meses
Puntos: 57
Respuesta: Matrices

Código asp:
Ver original
  1. ArrOriginal = Array(8,3,5,2,9,2,3,5,8)
  2. Redim preserve ArrSinRepeticion(1)
  3. ArrSinRepeticion(0) = ArrOriginal(0)
Aqui ArrSinRepeticion lo estas declarando de 2 elementos y unicamente estas asignando un valor al primer elemento. Desde aqui ya tienes vacio el ultimo elemento del arreglo

Código asp:
Ver original
  1. For i = 0 to (UBound(ArrOriginal)-1)
  2. comparacion = 0
  3.  
  4. For x = 0 to (UBound(ArrSinRepeticion)-1)
ArrOriginal tiene 9 elementos y unicamente estas recorriendo 8. Ubound(ArrOriginal) es igual a 8 y tu estas recorriendo desde 0 hasta 7. Lo mismo sucede para el ciclo que recorre ArrSinRepeticion. Aunque creo que aqui no habria tanto problema porque desde el inicio, la ultima posicion del arreglo esta vacia (pero sigue estando ahi)

Ahora, para esta parte
Código asp:
Ver original
  1. Redim preserve ArrSinRepeticion(UBound(ArrSinRepeticion)+1)
  2. ArrSinRepeticion(UBound(ArrSinRepeticion)-1) = ArrOriginal(i)
Para la primera vez en que los elementos son distintos estas haciendo esto :
Código asp:
Ver original
  1. Redim preserve ArrSinRepeticion(2)
  2. ArrSinRepeticion(1) = ArrOriginal(i)
Ahora el arreglo es de 3 elementos (posiciones desde 0 hasta 2), las posiciones con indice 0 y 1 tienen valor pero la posicion 2 esta vacia.

Última edición por posman; 14/01/2010 a las 08:58
  #5 (permalink)  
Antiguo 15/01/2010, 08:22
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Matrices

Hola

Sí, el error está en usar UBound. Lo suyo es usar un contador

Código ASP:
Ver original
  1. Dim contador, ArrOriginal, ArrSinRepeticion(), i, comparacion, x
  2. contador = 1
  3. ArrOriginal = Array(8,3,5,2,9,2,3,5,8)
  4. Redim ArrSinRepeticion(1)
  5. ArrSinRepeticion(0) = ArrOriginal(0)
  6.  
  7. For i = 0 to (UBound(ArrOriginal))
  8.  
  9. comparacion = 0
  10.        
  11.     For x = 0 to (UBound(ArrSinRepeticion))
  12.     comparacion = StrComp(ArrSinRepeticion(x), ArrOriginal(i), 1)
  13.  
  14.         IF (comparacion = 0) then ' está repetido
  15.         Exit For 'x
  16.         END IF
  17.  
  18.     Next 'x
  19.  
  20.  
  21.     IF (comparacion <> 0) then
  22.     Redim preserve ArrSinRepeticion(contador)
  23.     ArrSinRepeticion(contador) = ArrOriginal(i)
  24.     contador = contador+1
  25.         END IF
  26.  
  27. Next 'i
  28.    
  29. Response.Write "<b>Arreglo Original</b><br />"
  30. Response.Write Join(ArrOriginal, ", ")
  31.  
  32. Response.Write "<br /><br /><b>Arreglo Original sin valores duplicados</b><br />"
  33. Response.Write Join(ArrSinRepeticion, ", ")

Gracias por tu tiempo
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />

Etiquetas: matrices
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:22.