Buscando la manera de hacer un ejemplo hice otro que me ha dejado un poco con dudas.
En este se hace el método de ordenación de burbuja no optimizado.
Mi cuestión es: Si las variables son locales.¿ como es que perduran ?. En el caso del array.
PUBLIC SUB Form_Open()
DIM anumeros AS Integer[] = [10, 1, 56, 18, 20, 3]
DIM unidos AS String
DIM n AS Integer
unidos = ""
FOR n = 0 TO anumeros.Max
PRINT anumeros[n]; " ";
unidos &= anumeros[n] & " "
NEXT
PRINT
PRINT String(Len(unidos) - 1, "-")
FOR n = 0 TO anumeros.Max
operavarios(anumeros)
NEXT
END
PUBLIC SUB operavarios(numeros AS Integer[])
DIM n AS Integer
DIM aux AS Integer
FOR n = 0 TO numeros.max - 1
IF numeros[n] > numeros[n + 1]
aux = numeros[n]
numeros[n] = numeros[n + 1]
numeros[n + 1] = aux
ENDIF
NEXT
FOR n = 0 TO numeros.Max
PRINT numeros[n]; " ";
NEXT
PRINT
END
DIM anumeros AS Integer[] = [10, 1, 56, 18, 20, 3]
DIM unidos AS String
DIM n AS Integer
unidos = ""
FOR n = 0 TO anumeros.Max
PRINT anumeros[n]; " ";
unidos &= anumeros[n] & " "
NEXT
PRINT String(Len(unidos) - 1, "-")
FOR n = 0 TO anumeros.Max
operavarios(anumeros)
NEXT
END
PUBLIC SUB operavarios(numeros AS Integer[])
DIM n AS Integer
DIM aux AS Integer
FOR n = 0 TO numeros.max - 1
IF numeros[n] > numeros[n + 1]
aux = numeros[n]
numeros[n] = numeros[n + 1]
numeros[n + 1] = aux
ENDIF
NEXT
FOR n = 0 TO numeros.Max
PRINT numeros[n]; " ";
NEXT
END
El resultado final fue este:
10 1 56 18 20 3
-------------------
1 10 18 20 3 56
1 10 18 3 20 56
1 10 3 18 20 56
1 3 10 18 20 56
1 3 10 18 20 56
1 3 10 18 20 56
No es que sea extraño, es lo que tiene que hacer, pero, ¿ por que se mantiene el array local ?
¿ No le estoy pasando 10 veces el mismo en la rutina principal ?.Se debería repetir tantas veces como el bucle.
Cada vez que salgamos del procedimiento operavarios el array debería ser olvidado.
Entonces de alguna manera por el bucle se mantiene?¿?
Ah, el código esta escrito en Gambas2.
Ok, probare en Gambas3.No hay diferencias.
Saludos.