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

1 respuesta

Respuesta
1
a ver... vamos por partes:
"Por ejemplo si ingrese el 5,5, la función me tendría que devolver la posición que ocupa el número 6."
¿Según la matriz que me muestras el "6" ocupa la intentar 2,0
pero lo que no entendí bien es a que llamas el numero más próximo?
¿Al 7? ¿O al que esta en el elemento de al lado del 6?
Exactamente! Si ingreso el 5,5 me tendría que devolver la intentar del numero más próximo, por ejemplo en este caso, sería el 6 el número más cercano, y la posición que este ocupa es la 2.
Al decir el numero más próximo me refiero a que la función tiene que evaluar las condiciones de los datos que yo igrese. Por ejemplo:
Pseudocódigo
Repetir por veces
si 5 = a la primera posicion entonces
x variable = a la intentar que ocupa el valor 5
sino
si 5 es > a x intentar entonces
x...
Fin si
Fin si
Fin repetir
El tema es que no se como comparar los datos que ingreso si no son enteros, ya que si ingreso el 5,5 la función tendría que evaluar si 5,5 es igual a un valor que se encuentra en la columna de la matriz, si no es igual tendría que encontrar el número más próximo que sea mayor, en este caso viendo la primera columna de la matriz, el valor más próximo a 5,5 sería el 6. Hay es cuando la función me devuelve la posición 2. Solamente la función compara la primera columna!
Disculpa que se tan confuso lo que intento explicar, lo que pasa es que recién me estoy iniciando en esto de la programación y me resulta difícil expresarme. Muchas gracias, y otra vez te pido disculpas por las confiusiones.
Ahora me va cerrando...
Pregunta:
¿Qué son los parámetros que pasas en la función?
Public Function calculo(lontxt1 As Double, cautxt2 As Integer, planilla() As Integer) As Integer
Comentame así lo puedo probar
Intento hacer un programa para calcular el diámetro de una cañería. Los valores de una planilla los paso como una matriz, y lo que me solicita el programa es que introduzca la longitud de la cañería, y elo caudal que pasa por ella. Con estos datos comienza a buscar los valores en la matriz, comenzando por la primera columna de arriba hacia abajo. Cuando encuentra un valor, guarda la posición que es ocupa en la matriz, y comienza a buscar el segundo valor que ingrese, tomando como referencia la intentar que guardo, y buscando desde el comienzo de la fila (derecha), hasta el final (izquierda).
Bien... ahora me estoy metiendo más en el asunto...
a ver... ¿el 5,5 del ejemplo seria entonces un cinco para la longitud y el otro para el caudal?
Explicame por que maneja tantos parámetros la función CALCULO. Qué son LONTXT1, CAUTXT2
No te preocupes porque ya lo resolví. Estuve todo el día pensando en eso y al fin encontré una solución!
Ahora tengo otra duda. Tengo una variables que es double. Y al aparecer lon números, me da con muchos decimales. Yo lo único que quiero es que me aparezcan dos decimnales, ejemplo: 6,23. En las propiedades ya puse que me aparezcan dos decimales nada más, pero no sucede nada. Por que es?
Usa la fuuncion FORMAT
xx=Format(2.3422,"####.##")
Xx sera igual a 2.35
Igual, hay muchos formatos para esta función... algunos ya definidos... urguea en la ayuda de VB que ahí están todos... selecciona FORMAT y presiona F1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas