Comunidad Gambas-es
Alternativa a GetUpperBound() de VB.NET - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Alternativa a GetUpperBound() de VB.NET (/thread-797.html)



Alternativa a GetUpperBound() de VB.NET - dariodr - 03-01-2022

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


RE: Alternativa - tincho - 03-01-2022

(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



RE: Alternativa - jguardon - 03-01-2022

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


RE: Alternativa - dariodr - 03-01-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


RE: Alternativa - vuott - 03-01-2022

(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



RE: Alternativa a GetUpperBound() de VB.NET - dariodr - 04-01-2022

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