Bueno(a)s: dias, tardes, noches. Hay alguna alternativa a GetUpperBound (comando de VB.NET) en gambas.
Vean este ejemplo:
Private mat(2, 4) As Integer
Como las matrices son objetos en Visual Basic .Net disponemos de un método llamado GetUpperBound(numero de índice) que le pasamos como parámetro la dimensión y nos retorna el valor de dicha dimensión.
Para la definición de la matriz indicada arriba si accedemos a la primera dimesión con el método GetUpperBound retorna un 2:
Console.WriteLine(mat.GetUpperBound(0))
Si accedemos a la segunda dimesión se imprime un 4:
Console.WriteLine(mat.GetUpperBound(1))
La primer dimensión son la cantidad de filas más uno y la segunda dimensión son la cantidad de columnas más uno de la matriz.
Saludos
(03-01-2022, 07:50)dariodr escribió: [ -> ]Private mat(2, 4) As Integer
Para obtener los ítems de una lista como la que pasaste basta con
en gambas se define:
Código:
Print aiMat[0] 'para obtener el 2
Print aiMat[1] 'para el 4
En este caso tincho, creo que dariodr está hablando de arrays multidimensionales, concretamente de 2 dimensiones y 4 elementos cada dimensión. Una matriz de 2x4.
Ahora mismo estoy desde el móvil y no puedo desarrollar la respuesta, solo diré que es muy fácil manejarse con matrices igual que en VB.net. La sintaxis es array[a][b] y los mismos métodos de arrays simples funcionan para las matrices, que por supuesto son enumerables.
Ahí lo dejo de momento, por si alguien puede completar mi respuesta.
Saludos y Feliz 2022
Tengo este codigo en VB.NET y lo quiero pasar a GAMBAS, los unicos problemas son el ReDim y el GetUpperBound, alguien sabe cual es la alternativa. Lo demas ya esta hecho.
Código:
Public Class Matriz5
Private mat(,) As Integer
Public Sub Cargar()
Dim filas, columnas As Integer
Console.Write("Cuantas fila tiene la matriz:")
filas = Console.ReadLine()
Console.Write("Cuantas columnas tiene la matriz:")
columnas = Console.ReadLine()
ReDim mat(filas - 1, columnas - 1)
Dim f, c As Integer
For f = 0 To mat.GetUpperBound(0)
For c = 0 To mat.GetUpperBound(1)
Console.Write("Ingrese componente:")
mat(f, c) = Console.ReadLine()
Next
Next
End Sub
Public Sub Imprimir()
Dim f, c As Integer
For f = 0 To mat.GetUpperBound(0)
For c = 0 To mat.GetUpperBound(1)
Console.Write(mat(f, c) & " ")
Next
Console.WriteLine()
Next
End Sub
Public Sub ImprimirUltimaFila()
Dim c As Integer
Console.WriteLine("Ultima fila")
For c = 0 To mat.GetUpperBound(1)
Console.Write(mat(mat.GetUpperBound(0), c) & " ")
Next
End Sub
End Class
Sub Main()
Dim ma As New Matriz5()
ma.Cargar()
ma.Imprimir()
ma.ImprimirUltimaFila()
Console.ReadKey()
End Sub
Saludos
(03-01-2022, 12:22)jguardon escribió: [ -> ]arrays multidimensionales,
Si
dariodr prefiere una matrix
anidada:
Código:
[hr]
[quote='dariodr' pid='4236' dateline='1641214822']
ReDim
[/quote]
Parecería corresponder al Método ". Resize()" de la Clase [i]Array[/i].
Pero las matrices multidimensionales no pueden ser redimensionadas:
https://gambaswiki.org/wiki/comp/gb/array/resize?l=es
Yo adoptaría esta estratagema:
[code]
Public Sub Main()
Dim a, b As Integer
a = 4
b = 5
mat = New Integer[a, b]
Print mat.Bounds[0] ' Parecido a "mat.GetUpperBound(0)"
Print mat.Bounds[1] ' Parecido a "mat.GetUpperBound(1)"
End
Gracias vuott ya lo pude pasar a Gambas.
Estare preguntando algunas cosas.
Salu2