Comunidad Gambas-es

Versión completa: Alternativa a GetUpperBound() de VB.NET
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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:
GAMBAS
  1. Dim aiMat as Integer[] = [2,4]
  2. Print aiMat[0] 'para obtener el 2
  3. 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:
GAMBAS
  1. Private mat[2, 4] As Integer



(03-01-2022, 15:00)dariodr escribió: [ -> ]ReDim
Parecería corresponder al Método ". Resize()" de la Clase Array.
Pero las matrices multidimensionales no pueden ser redimensionadas:
   https://gambaswiki.org/wiki/comp/gb/array/resize?l=es

Yo adoptaría esta estratagema:
GAMBAS
  1.  
  2. Public Sub Main()
  3.  
  4.   Dim a, b As Integer
  5.   
  6.   a = 4
  7.   b = 5
  8.  
  9.   mat = New Integer[a, b]
  10.  
  11.   Print mat.Bounds[0]   ' Parecido a "mat.GetUpperBound(0)"
  12.   Print mat.Bounds[1]   ' Parecido a "mat.GetUpperBound(1)"
  13.  


Gracias vuott ya lo pude pasar a Gambas.
Estare preguntando algunas cosas.
Salu2