Búsqueda en matriz
Tengo la siguiente matriz e 3x3
0 3 8 20
5 2 4 9
6 7 12 18
15 16 17 30
Mi función me solicita que ingrese un valor. Por ejemplo 5,5.
Ahora mi función comienza a comparar los valores de la primera columna con el numero que ingrese yo. El recorrido es desde el principio al fin, y tiene que encontrar el mismo número, o el más próximo. Por ejemplo si ingrese el 5,5, la función me tendría que devolver la posición que ocupa el número 6.
El tema es que no puedo encontrar la forma que me devuelva el numero más próximo. Si lo se hacer para que me devuelva la intentar de un numero que es igual. Te paso el código que tengo. Espero que me hayas entendido, y gracias por tu ayuda!
Código
Public Function calculo(lontxt1 As Double, cautxt2 As Integer, planilla() As Integer) As Integer
Dim i As Integer
Dim fila As Integer
Dim j As Integer
Dim diametro As Integer
Dim columna As Integer
For i = 0 To 3 Step 1
If lontxt1 = planilla(i, 0) Then
fila = i
Else
If lontxt1 > planilla(i, 0) Then
i = i + 1
Else
If lontxt1 > 15 Then '15 es una constante que varia segun la planilla (columna de longitud de cañeria)
fila = 15
Else
fila = i
End If
End If
End If
Next i
For j = 0 To 3 Step 1
If cautxt2 = planilla(fila, j) Then
columna = j
'Else
' If cautxt2 < planilla(fila, j) Then
' columna = j
End If
Next j
calculo = planilla(0, columna)
End Function
Public Sub Form_Load()
planilla(0, 0) = 0
planilla(0, 1) = 3
planilla(0, 2) = 8
planilla(0, 3) = 20
planilla(1, 0) = 5
planilla(1, 1) = 2
planilla(1, 2) = 4
planilla(1, 3) = 9
planilla(2, 0) = 6
planilla(2, 1) = 7
planilla(2, 2) = 12
planilla(2, 3) = 18
planilla(3, 0) = 15
planilla(3, 1) = 16
planilla(3, 2) = 17
planilla(3, 3) = 30
End Sub
0 3 8 20
5 2 4 9
6 7 12 18
15 16 17 30
Mi función me solicita que ingrese un valor. Por ejemplo 5,5.
Ahora mi función comienza a comparar los valores de la primera columna con el numero que ingrese yo. El recorrido es desde el principio al fin, y tiene que encontrar el mismo número, o el más próximo. Por ejemplo si ingrese el 5,5, la función me tendría que devolver la posición que ocupa el número 6.
El tema es que no puedo encontrar la forma que me devuelva el numero más próximo. Si lo se hacer para que me devuelva la intentar de un numero que es igual. Te paso el código que tengo. Espero que me hayas entendido, y gracias por tu ayuda!
Código
Public Function calculo(lontxt1 As Double, cautxt2 As Integer, planilla() As Integer) As Integer
Dim i As Integer
Dim fila As Integer
Dim j As Integer
Dim diametro As Integer
Dim columna As Integer
For i = 0 To 3 Step 1
If lontxt1 = planilla(i, 0) Then
fila = i
Else
If lontxt1 > planilla(i, 0) Then
i = i + 1
Else
If lontxt1 > 15 Then '15 es una constante que varia segun la planilla (columna de longitud de cañeria)
fila = 15
Else
fila = i
End If
End If
End If
Next i
For j = 0 To 3 Step 1
If cautxt2 = planilla(fila, j) Then
columna = j
'Else
' If cautxt2 < planilla(fila, j) Then
' columna = j
End If
Next j
calculo = planilla(0, columna)
End Function
Public Sub Form_Load()
planilla(0, 0) = 0
planilla(0, 1) = 3
planilla(0, 2) = 8
planilla(0, 3) = 20
planilla(1, 0) = 5
planilla(1, 1) = 2
planilla(1, 2) = 4
planilla(1, 3) = 9
planilla(2, 0) = 6
planilla(2, 1) = 7
planilla(2, 2) = 12
planilla(2, 3) = 18
planilla(3, 0) = 15
planilla(3, 1) = 16
planilla(3, 2) = 17
planilla(3, 3) = 30
End Sub
Respuesta de adrianxxi
1