Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

procedimiento recursivo

Estas en el tema de procedimiento recursivo en el foro de Visual Basic clásico en Foros del Web. hola! aqui os planteo otra duda haber si me la podeis solucionar. he creado un procedimiento recursivo: Public Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long) ...
  #1 (permalink)  
Antiguo 12/11/2008, 05:11
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
procedimiento recursivo

hola!
aqui os planteo otra duda haber si me la podeis solucionar.
he creado un procedimiento recursivo:

Public Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)
For i = 0 To nLevel - 1
sPadStr = sPadStr + " "
Next i
Range("C1").Select
vChild = swComp.GetChildren
For i = 0 To UBound(vChild)
Set swChildComp = vChild(i)
konfigMatrix = swModel.GetConfigurationNames
For j = 0 To UBound(konfigMatrix)
ActiveCell.FormulaR1C1 = konfigMatrix(j)
ActiveCell.Offset(0, 1).Select
Next j
Erase konfigMatrix
TraverseComponent swChildComp, nLevel + 1
Next i
End Sub

el caso es q el programa no termina o termina y me da un error 28. lo logico seria poner un if para q finalice el ciclo pero como ando con dos arrays dinamicos (vChild y konfigMatrix) desconozco sus longitudes x lo q no se q condicion poner en el if. alguien me puede ayudar?
gracias!
  #2 (permalink)  
Antiguo 12/11/2008, 08:53
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: procedimiento recursivo

¿Para qué esta línea?:
Código vb:
Ver original
  1. TraverseComponent swChildComp, nLevel + 1
Estás ejecutando una y otra vez la función a cada paso del bucle, es es la razón por la que nunca termina.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 12/11/2008, 09:25
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: procedimiento recursivo

con esa linea es con la q entra de nuevo en el procedimiento. lo q pasa q no entiendo muy bien para q sirve el nLevel+1.

For i = 0 To nLevel - 1
sPadStr = sPadStr + " "
Next i
se supone q este bucle es el encardo de parar el programa no?? pero tampoco la entiendo muy bien.
seria + facil meter un do until/loop para parar el bucle pero al no saber la longitud de los arrays...
gracias de todos modos! seguiré probando!
  #4 (permalink)  
Antiguo 12/11/2008, 09:28
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: procedimiento recursivo

Yo no entiendo la razón de existir del parámetro nLevel, ni tampoco de ese primer bucle. Simplemente no hacen nada y no son utilizados en ninguna otra parte.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 12/11/2008, 09:38
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: procedimiento recursivo

osea q si lo elimino igual igual.
ahora mi problema es como decirle al programa q cuanto carge los arrays por ultima vez y tenga todos los datos en excel q deje de repetir el procedimiento?

tendria q meter TraverseComponent swChildComp dentro del for i=... para q cuando termine el for termine de repetir. a mi otra opcion no se me ocurre.
  #6 (permalink)  
Antiguo 12/11/2008, 09:40
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: procedimiento recursivo

No entendí la pregunta, y tampoco entendí por qué vuelves a llamar al procedimiento desde dentro del procedimiento si los parámetros no cambian y al final la acción es la misma, eso provocará que nunca termine el proceso, ya que se ejecuta y ejecuta vez tras vez. Simplemente quita la llamada al procedimiento y debería terminar correctamente.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 12/11/2008, 09:51
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: procedimiento recursivo

ya, tienes razon. una ultima consulta: si hago erase nombre_vector borro el vector no? o lo dejo en blanco? sino para añadir datos tendre q usar el redim/redim preserve.
gracias x tu ayuda!
  #8 (permalink)  
Antiguo 12/11/2008, 09:58
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: procedimiento recursivo

El comportamiento de Erase depende de cómo has definido el array. Si lo has definido con índices borra todos los datos de los índices, si lo has definido como dinámico, pierde todos los índices y tendrás que usar nuevamente ReDim para inicializarlo.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 13/11/2008, 01:30
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: procedimiento recursivo

gracias x tu ayuda!
  #10 (permalink)  
Antiguo 18/11/2008, 05:44
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: procedimiento recursivo

recuperando el tema, porq no me deja llamar de nuevo al procedimiento??? gracias!

Sub niños(swComp As object)

Dim vChildComp As Variant
Dim i As Integer
Dim ConfigName As String
Dim b As object
Dim swChildComp As object


vChildComp = swComp.GetChildren 'carga unos objetos en la matriz vChildComp


For i = 0 To UBound(vChildComp)
Set swChildComp = vChildComp(i)

Set b = swChildComp.GetModelDoc
deitura b 'llama a otro procedimiento

umeak swChildComp ' yo creo q aqui esta el fallo, no me lo reconoce!!lo q hace es ignorar la rellamada al procedimiento y solo ejecuta el for.
Next i

End Sub
  #11 (permalink)  
Antiguo 18/11/2008, 06:59
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: procedimiento recursivo

¿Qué hay dentro de la función "umeak"?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #12 (permalink)  
Antiguo 18/11/2008, 07:17
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: procedimiento recursivo

sorry, me he confundido.

Sub niños(swComp As object)

Dim vChildComp As Variant
Dim i As Integer
Dim ConfigName As String
Dim b As object
Dim swChildComp As object


vChildComp = swComp.GetChildren 'carga unos objetos en la matriz vChildComp


For i = 0 To UBound(vChildComp)
Set swChildComp = vChildComp(i)

Set b = swChildComp.GetModelDoc
deitura b 'llama a otro procedimiento

niños swChildComp ' yo creo q aqui esta el fallo, no me lo reconoce!!lo q hace es ignorar la rellamada al procedimiento y solo ejecuta el for.
Next i

End Sub
  #13 (permalink)  
Antiguo 18/11/2008, 07:55
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: procedimiento recursivo

Creo que no, lo que sí puede estar pasando es que al volver a llamar al procedimiento se ejecuta nuevamente el bucle for, y nuevamente... no termina.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #14 (permalink)  
Antiguo 18/11/2008, 08:06
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: procedimiento recursivo

sabes de alguna posible solucion. ami lo unico q se me ocurre es en vez de hacer un procedimiento recursivo hacer un bucle anidado. meter un for dentro de otro y asi pero esq no se hasta cuantas veces lo tendria q hacer...estoy perdida!
  #15 (permalink)  
Antiguo 18/11/2008, 08:12
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: procedimiento recursivo

Es que yo nunca trabajé con eso de SdlWorks, ni siquiera sé de qué va. Así que no sé cuál sería el mejor método, tal vez si revisas el manual de ese componente...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #16 (permalink)  
Antiguo 18/11/2008, 08:17
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: procedimiento recursivo

ok, tranquilo!
gracias x tu ayuda!
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 22:28.