Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: Bazooka en Julio 03, 2011, 07:33:10 pm
-
Hola gente tengo una serie de arrays con este formato :
5,7,15,22,23,30,37,47,57,58,60,64,78,84,88
Y necesitaría distribuir esos 15 numeros en una cuadricula de 3 filas por 9 columnas. Ahora la distribucion deberia ser uniforme ya que son 15 numeros que se distribuirian en 27 cuadros (9 filas X 3 columnas).
El orden de los números es relevante en forma ascendente y de izquierda a derecha debería ser de menor a mayor
aqui va un ejemplo de como podria quedar la combinación anterior (5,7,15,22,23,30,37,47,57,58,60,64,78,84,88) (el cero representa un espacio vacio))
|00|15|22|00|00|57|00|00|84|
|05|00|23|30|47|00|60|78|00|
|07|00|00|37|00|58|64|00|88|
Sería perfecto si fuese adpatable a una matriz no fija por que en este caso son 15 números pero podrían llegar a ser 12 o 18 y la cuadricula tambien podria variar tener 3 filas y 8 columnas etc. etc.
Muy agradecido a quien me pueda ayudar yo estoy haciendo mis intentos que no los pongo aca por que son bastantes malos!!
y reamente esto me complicaaaaaaaaaa!
-
Los 00 van al azar?
-
No son solo para rellenar los espacios vacios en realidad
-
entonces los N numeros los distribuyes en posiciones al azar siempre y cuando mantenga el orden ascendente de arriba-abajo e izquierda-derecha? y los que se quedan sin nada pones 00 ?
-
Si amigo asi es como lo planteas!! alguna idea?
-
Hola te paso un ejemplo rapido que por supuesto podria ser un poco mas optimo.
Option Explicit
Private Sub Form_Load()
Dim ArrNumbers As Variant
Dim TheMatrix() As String
Dim i As Long, j As Long
Dim Rows As Long, Columns As Long
Rows = 3
Columns = 9
ArrNumbers = Split("5,7,15,22,23,30,37,47,57,58,60,64,78,84,88", ",")
GetRndMatrix ArrNumbers, Rows, Columns, TheMatrix
For j = 0 To Rows - 1
For i = 0 To Columns - 1
Debug.Print TheMatrix(j, i) & "|";
Next
Debug.Print
Next
End Sub
Private Function GetRndMatrix(ArrNumbers As Variant, ByVal Rows As Long, ByVal Columns As Long, ByRef OutMatrix() As String) As Boolean
Dim UBoundNum As Long
Dim UBoundMatrix As Long
Dim ArrFlags() As Byte
Dim lCount As Long
Dim lPos As Long
Dim i As Long
Dim j As Long
UBoundNum = UBound(ArrNumbers)
UBoundMatrix = (Rows * Columns) - 1
If UBoundNum > UBoundMatrix Then Exit Function
ReDim OutMatrix(Rows - 1, Columns - 1)
ReDim ArrFlags(UBoundMatrix)
Randomize
Do
lPos = CLng(UBoundMatrix * Rnd)
If ArrFlags(lPos) = 0 Then
ArrFlags(lPos) = 1
lCount = lCount + 1
End If
If lCount = UBoundNum Then Exit Do
Loop
lPos = 0
lCount = 0
For i = 0 To Columns - 1
For j = 0 To Rows - 1
If ArrFlags(lPos) = 1 Then
OutMatrix(j, i) = Format(ArrNumbers(lCount), "00")
lCount = lCount + 1
Else
OutMatrix(j, i) = "00"
End If
lPos = lPos + 1
Next
Next
GetRndMatrix = True
End Function
-
Buenisismo LEadndro !!! re capo sos che! funciona! ahora me pongo a estudiarla y ver como la puedo adapatar para optimizarla!!
abrazos!!