Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Mayor De Un Array
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Mayor De Un Array 
 
Hola!.

¿ No hay una  propiedad o método en los arrays de gambas que diga cual es el mayor ?.  
Entonces hay que usar código para hacerlo, supongo....

Public Sub ValorMayorLista(lista As Integer[]) As Integer
  
  Dim mayor As Integer
  Dim x As Integer
  
  For x = 0 To lista.Max
    mayor = Max(mayor, lista[x])
  Next
  Return mayor
  
End
 


También se podría clasificar el array y tendríamos el ultimo elemento como el mayor.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Domingo, 21 Septiembre 2014, 10:27; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Mayor De Un Array 
 
Pues ya puesto, me gustaría saber cual tarda mas de los métodos de búsqueda del mayor, (creo que tardan igual).
Viéndolo con la herramienta perfilado.

Este es el ejemplo de código.

Tenemos una función para llenar la lista y dos funciones que hacen lo mismo.
Una con menos código que la otra.

Private alista As New Integer[]
Private Const nelementos As Integer = 1000

Public Sub Main()
  
  alista = llenarLista(alista)
  
  Print ValorMayorLista1(alista)
  'Print ValorMayorLista2(alista)
  
End

Public Function llenarLista(lista As Integer[]) As Integer[]
  
  Dim valor As Integer
  Dim x As Integer
  
  For x = 0 To nelementos - 1
    valor = Int(Rnd(1, nelementos - 1))
    lista.Add(valor)
  Next
  
  Return lista
  
End

Public Sub ValorMayorLista1(lista As Integer[]) As Integer
  
  Dim mayor As Integer
  Dim x As Integer
  
  For x = 0 To lista.Max
    mayor = Max(mayor, lista[x])
  Next
  Return mayor
  
End

Public Sub ValorMayorLista2(lista As Integer[]) As Integer
  
  lista.Sort
  Return lista[lista.Max]
  
End
 


El tiempo "total" con el primer método, después de varios intentos es de: 3,6 uS
El tiempo "total" con el segundo método, después de varios intentos es de: 2,8 uS

Si la lista fuera mas grande, supongamos 10000 elementos:
El tiempo total con el primer método sobre los 35uS
El tiempo total con el segundo método sobre los  26uS

Mas o menos se corresponde 10/1

Reflexionar sobre los métodos usados.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Domingo, 21 Septiembre 2014, 11:32; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Mayor De Un Array 
 
Si añado un bucle For Each:

Public Sub ValorMayorLista3(lista As Integer[]) As Integer
  
  Dim elemento As Integer
  Dim mayor As Integer
  
  For Each elemento In lista
    mayor = Max(mayor, elemento)
  Next
  Return mayor  
  
End
 


El tiempo es similar al del For, con un código más claro.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Mayor De Un Array 
 
Te recuerdo que los arrays pueden ser de distintos tipos, por lo que no creo que tenga mucho sentido tener un método que devuelve el mayor de los enteros, si el array es de tipo string, boolean, object o cualquier otro.

Lo que has hecho es lo correcto, bajo mi punto de vista. Aunque también puedes crear una clase heredada de Integer[] que implemente el método .Mayor() que devuelve el entero más grande dentro del array.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Mayor De Un Array 
 
Jesús:

Entonces debo usar Variant[]. Intento no usarlo mucho.

Curioso, nunca se me había ocurrido heredar de un tipo nativo de datos como tu dices. Es perfectamente valido.
Es una manera de ampliar los métodos de un tipo. Mejor que tocar el código interno de gambas, que eso si tiene que ser complicado.  
( Tampoco necesario )

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Mayor De Un Array 
 
Shell escribió: [Ver mensaje]
¿ No hay una  propiedad o método en los arrays de gambas que diga cual es el mayor ?.


Hola Shell,
no hay un método directo, pero tu puedes usar el método ".Sort()" .
Por ejemplo:
Public Sub Main()

  Dim bb As Byte[] = [90, 3, 50, 24, 200, 145, 0]   ' El nuestro array

' Reorganiza los valores en orden descendiente:
    bb.Sort(gb.Descent)
    
' El primero elemento ahora tiene el valor major:
    Print bb[0]


' ...o mas brevemente:
    Print bb.Sort(gb.Descent)[0]

End

 



 
última edición por vuott el Domingo, 21 Septiembre 2014, 15:37; editado 2 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Mayor De Un Array 
 
Otro ejemplo heredando de la clase nativa:

' Clase hInteger

Inherits Integer[]

Public Function Mayor() As Integer

    Dim elemento As Integer
    Dim iMayor As Integer

    For Each elemento In Me
        iMayor = Max(iMayor, elemento)
    Next
    Return iMayor

End
 



Código de prueba:

Public Sub Form_Open()

    Dim test As New HInteger

    test.Add(86)
    test.Add(16)
    test.Add(212)
    test.Add(1)
    test.Add(43)
    test.Add(18)

    Print test.Mayor()

End


El único inconveniente es que no puedes usar la asignación directa de un array a su instancia, porque gambas indica que no es del mismo tipo:

test = [86, 16, 212, 1, 43, 18]



Supongo que habrá alguna manera de de rodear ese problema, pero ahora mismo no lo sé.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Mayor De Un Array 
 
Vuott:

Que rara queda la expresión: (El orden que hace para realizar la operación)

..
Print bb.Sort(gb.Descent)[0]
 


Jesús:

Pues, si que es raro que no se pueda hacer directamente, da errores de distinta maneras.
Ya tenemos una buena pregunta para el foro internacional.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Mayor De Un Array 
 
Shell:

Citar:
Ya tenemos una buena pregunta para el foro internaciona

Lo acabo de preguntar, a ver que nos cuenta Benoit

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Mayor De Un Array 
 
Ya me han contestado:

http://sourceforge.net/p/gambas/mailman/message/32855177/

Citar:

test = [86, 16, 212, 1, 43, 18]

Mas o menos me vienen a decir que hay que:
-crear un método que acepte integer[] como parametro y asignarlo a la nueva clase (como se ha hecho usando .add() )
- usar  el evento _call para hacer la asignación como si fuera una función (esto no lo he conseguido hacer)

Osea, que no se puede usar la forma de asignación directa.

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Reto 12(v3ctor) Versión Es Mayor? v3ctor Retos de programación 0 Martes, 27 Diciembre 2016, 13:47 Ver último mensaje
v3ctor
No hay nuevos mensajes Ordenar Array De Array Shell General 1 Sabado, 29 Septiembre 2018, 19:34 Ver último mensaje
Shell
No hay nuevos mensajes Hay Un Mayor Numero De Lecturas En Los Post!! v3ctor Off-topic 0 Martes, 03 Diciembre 2019, 20:31 Ver último mensaje
v3ctor
No hay nuevos mensajes Insertar Array Dentro De Un Array Shell General 1 Lunes, 29 Junio 2020, 13:57 Ver último mensaje
vuott
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron