Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-12-2011
CarlosAlberto CarlosAlberto is offline
Miembro
 
Registrado: ago 2010
Posts: 78
Poder: 14
CarlosAlberto Va por buen camino
Máximo o mínimo valor en un listbox

Estimados miembros del club: ¿cómo puedo obtener el máximo o el mínimo valor de una serie de datos colocados en un "Listbox"?
Gracias y saludos cordiales.
Carlos Alberto
Responder Con Cita
  #2  
Antiguo 01-12-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Se me ocurre que crees un TStringList, copies los elementos, ordenes y cojas el primero y el último.


Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #3  
Antiguo 01-12-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por fjcg02 Ver Mensaje
Se me ocurre que crees un TStringList, copies los elementos, ordenes y cojas el primero y el último.
O eso, o realizar un recorrido manual con un for y quedarte tú con los dos valores, pero me gusta la propuesta por fjcg02 (es que yo soy mucho de TStringList ;-D ).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 01-12-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Cita:
Empezado por Neftali Ver Mensaje
O eso, o realizar un recorrido manual con un for y quedarte tú con los dos valores, pero me gusta la propuesta por fjcg02 (es que yo soy mucho de TStringList ;-D ).
Seguro que el chino es más eficiente que cualquiera de nosotros. Además, si alguien trabaja por nosotros, siempre nos setiremos más importantes...

Respecto a los stringlist, al final vía listas, se pueden hacer casi todas las cosas, y desde luego bajo mi punto de vista, son mucho más cómodas de usar que cualquier otra cosa, como arrays por ejemplo. Y si no mirad cómo funciona python...

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 01-12-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Quizá no necesite un StringList:

Código Delphi [-]
with ListBox1 do
begin
  Sorted := true;
  ShowMessage(Format('Min: %s, Max: %s', [Items[0], Items[Count - 1]]));
end;

// Saludos
Responder Con Cita
  #6  
Antiguo 01-12-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
Quizá no necesite un StringList
Por supuesto, si puede ordenarlo.
Tal vez hemos "asumido" equivocadamente que no podía hacerlo directamente con el control.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 01-12-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Efectivamente, si puede cambiar el orden de los elementos del objeto, se ahorra unas cuantas líneas de código...
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 01-12-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Si los requisitos indican que los elementos del TListBox van a estar ordenados, obtener el máximo y el mínimo se convierte en una operación elemental como bien lo apunta roman.

Ahora bien, forzar una ordenación para hacer este proceso elemental es un desperdicio.
En primer lugar no hace falta ordenar para extraer el máximo y/o el mínimo, basta con recorrer la lista y evaluar.
En segundo lugar, aún utilizando un algoritmo de ordenamiento tan rápido como QuickSort es un proceso lento comparado con un simple recorrido. QuickSort tiene en promedio una complejidad O(n * log n) mientras que un recorrido SIEMPRE es O(n).
Y aún utilizando algoritmos más avanzados que QuickSort, si fueran aplicables y viables a las necesidades, como TimSort que tiene una complejidad O(n) sigue siendo un desperdicio.

A menos que exista una verdadera necesidad de contar con los datos ordenados, es mucho más barato lanzar un for y evaluar máximo y mínimo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #9  
Antiguo 01-12-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
La verdad es que es aplastante la respuesta que ofreces, Delphius, y no admite duda.

Pero haciendo un pequeño ejercicio de coste/beneficio, y teniendo en cuenta que si se trata de un listbox no debería tener demasiados elementos... me atrevería a decir que en este caso nos cuesta más la salsa que la perdiz. Y que conste que tu respuesta es "la respuesta".

Un saludo "ordenado"
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #10  
Antiguo 01-12-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Estoy de acuerdo con Delphius, es más eficiente el recorrido simple. Además, quizá la perdiz no es tan cara (*):

Código Delphi [-]
var
  MinMax, Val: TPoint;
  I: Integer;

begin
  MinMax := Point(MaxInt, -MaxInt);

  with ListBox1 do
    for I := 0 to Count - 1 do
    begin
      Val := Point(StrToIntDef(Items[i], MaxInt), StrToIntDef(Items[i], -MaxInt));

      if Val.X < MinMax.X then MinMax.X := Val.X;
      if Val.Y > MinMax.Y then MinMax.Y := Val.Y;
    end;

  ShowMessage(Format('Min: %d, Max: %d', [MinMax.X, MinMax.Y]));
end;

// Saludos

-----
(*) En México decimos que es más caro el caldo que las albóndigas
Responder Con Cita
  #11  
Antiguo 01-12-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por fjcg02 Ver Mensaje
La verdad es que es aplastante la respuesta que ofreces, Delphius, y no admite duda.

Pero haciendo un pequeño ejercicio de coste/beneficio, y teniendo en cuenta que si se trata de un listbox no debería tener demasiados elementos... me atrevería a decir que en este caso nos cuesta más la salsa que la perdiz. Y que conste que tu respuesta es "la respuesta".

Un saludo "ordenado"
Hola, fjcg02.
Pues no comprendo tu punto. Aún siendo, y con más razón, pocos los elementos del TListBox es por lejos más preferible un simple recorrido.
Lo lógico sería pensar al revés: cuanto más elementos, convendría ordenar. ¿Para que ordenar, pocos elementos? ¿Aporta en algo? En realidad, no hay beneficio alguno. Si asumiéramos que la máquina es perfecta y tuviera siempre un valor de factor c constante, aplicar un ordenamiento consume O(n), mientras que con QuickSort en el mejor caso O(n * log n). Si hacemos cálculos, que para simplificar c = 1:
n = 10 => O(n) = 10, O(n * log n) = 10. Dif = 0
n = 100 => O(n) = 100, O(n * log n) = 200. Dif = 100
n = 1000 => O(n) = 1000, O(n * log n) = 3000. Dif = 2000

Con n menores a 10 se aprecia mejor mi planteo:
n = 5 => O(n) = 5, O(n * log n) = 3,49. Dif = 1,51
n = 2 => O(n) = 2, O(n * log n) = 0,60. Dif = 1,4
n = 1 => O(n) = 1, O(n * log n) = 0. Dif = 1

No se "gana" demasiado cuando más chico sea ¿O no? . Y como quedó demostrado, cuando mayor sea la lista más conveniente es el recorrido.
Esto demuestra que para pocos elementos se peca demasiado en esforzarse ordenarlos.

Incluso alguien se podría llegar a pensar que para el caso, para pocos elementos podríamos aprovechar burbuja mejorado. Ufff... ¡peor! Éste es O(n^2).

Si me explicas mejor tu punto...

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 01-12-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Delphius, veo que no me pillas el punto...

En definitiva, si puedo escribir una línea de código, mejor que dos, siempre y cuando el rendimiento no penalice al usuario. Es que cuando uno es vago, es vago .... sin más... y eso, para mi vale más que cualquier cosa.

Y sí, no hace falta que me lo expliques, que tienes razón. Con runge kuta o sin él...

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #13  
Antiguo 01-12-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por fjcg02 Ver Mensaje
Delphius, veo que no me pillas el punto...

En definitiva, si puedo escribir una línea de código, mejor que dos, siempre y cuando el rendimiento no penalice al usuario. Es que cuando uno es vago, es vago .... sin más... y eso, para mi vale más que cualquier cosa.

Y sí, no hace falta que me lo expliques, que tienes razón. Con runge kuta o sin él...

Saludos
Ha... iba por cuestión de LDC

Es que para mi las LDC no son de todo una buen métrica de eficiencia y productividad.

Incluso aún escribiendo un ciclo como el que aportó román me animaría a decir que es poca cosa el "costo", sino me equivoqué al hacer cuentas rápidas, la V(G) es 4; y LDC/V(G) da un valor 7/4 = 1,75. Este valor es muy bajo... y me indica que no llega a 2 LDC en promedio por cada V(G) del algoritmo... algo que una simple prueba a dedo, permitiría comprobar que es un algoritmo de poca cosa.

Dime... ¿Cuántas LDC implica y V(G), requiere, indirectamente el uso de un QuickSort?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 02-12-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por fjcg02 Ver Mensaje
En definitiva, si puedo escribir una línea de código, mejor que dos, siempre y cuando el rendimiento no penalice al usuario. Es que cuando uno es vago, es vago .... sin más... y eso, para mi vale más que cualquier cosa.
Entiendo tu punto y hasta podría decir que lo apoyo. Pero en este caso sigo dándole la razón a Delphius. Vamos a ver si realmente tenemos menos líneas de código.

Asumamos, por lo que han comentado antes, que debemos usar un StringList separado para no alterar la lista original. Podríamos hacer algo así:

Código Delphi [-]
var
  List: TStringList;

begin
  List := TStringList.Create;

  try
    with ListBox1 do
    begin
      List.AddStrings(Items);
      List.Sort;

      ShowMessage(Format('Min: %s, Max: %s',[List[0], List[Count - 1]]));
    end;
  finally
    List.Free;
  end;
end;

Que no es tan cortito. Pero aún hay más. No sirve. De hecho, tampoco el código que puse originalmente con Sorted := true sirve (punto extra al que diga por qué no sirve ) Hay que usar el método CustomSort del StringList y proveer una función de comparación, con lo cual yo creo que hasta rebasamos las líneas de código del recorrido simple.

// Saludos
Responder Con Cita
  #15  
Antiguo 02-12-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Aquí alguien más que patinar derrapa.

1.- En mi 4º intervención ya digo que teneis razón.
2.- Mi única intención era ayudar a alguien a resolver un problema ( seguro que de la manera menos acertada )
3.- Para leer este foro e intentar ayudar a alguien quito tiempo de mi trabajo y de mi sueño, que son los que me permiten vivir económicamente y reparar mi cansancio.
4.- No me dedico profesionalmente a la programación desde hace más de 12 años, ni con delphi ni con ninguna otro lenguaje.
5.- Me siento como un palomino al que le han descerrajado 5 cartuchazos a bocajarro sin venir a cuento.

Por lo expuesto, y dado que no quiero gastar ni un ápice de esfuerzo en seguir con esta txuminada...

Ahí os quedais.

Adios ClubDelphi. Me paso a los foros de titis, que me tratan mejor... Seguid tratando así a la gente.

Adios para siempre. Sin acritud.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #16  
Antiguo 02-12-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Compañeros....

Creo que nuestro amigo CarlosAlberto ha salido corriendo acojonado.
__________________
Be water my friend.
Responder Con Cita
  #17  
Antiguo 02-12-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por newtron Ver Mensaje
Compañeros....
Creo que nuestro amigo CarlosAlberto ha salido corriendo acojonado.
O peor aún, en un nuevo mensaje nos comenta: Muchachos, los datos de la serie se agregan al ListBox recorriendo una consulta ordenada por los mismos...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #18  
Antiguo 02-12-2011
CarlosAlberto CarlosAlberto is offline
Miembro
 
Registrado: ago 2010
Posts: 78
Poder: 14
CarlosAlberto Va por buen camino
Máximo y mínimo de los datos de un Listbox

Estimados amigos: probé el código del moderador Roman y funcionó, pero el de fjcg02 no.
Gracias por la ayuda.
Saludos
Carlos Alberto
Responder Con Cita
  #19  
Antiguo 02-12-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por fjcg02 Ver Mensaje
Aquí alguien más que patinar derrapa.
Supongo que me toca parte de esto. En todo caso lamento que tomes esta decisión que, espero, reviertas. Si sentiste que te estaba atacando te pido una sincera disculpa pero no era mi ánimo molestarte. Para mi, se trataba de una mera discusión academica sana. De las discusiones realizadas con respeto siempre salen cosa positivas para todos.

Como dije, te ofrezco disculpas si te sentiste ofendido y confío en que reconsideres tu decisión.

// Saludos
Responder Con Cita
  #20  
Antiguo 02-12-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Amigo fjcg02.

Aunque me puedes decir que quien me ha dado vela en este entierro porque no he intervenido en este debate pero a lo mejor te hablo desde un punto de vista más objetivo precisamente por eso.

En los distintos mensajes de este hilo lo único que he visto es un pequeño debate sobre la conveniencia o no de usar determinadas técnicas u otras. En ningún momento he visto ningún ataque a tu persona, solo argumentos para apoyar las técnicas recomendadas.

Si es cierto que a veces estos debates se extienden demasiado por tonterías pero bueno, a mi particularmente me sirven para adquirir conocimientos que de otra manera no tendría.

De una manera o de otra pienso que todas las opiniones de todos nosotros son válidas aunque nos equivoquemos, todos estamos aquí para intentar echar una mano de la mejor forma posible y al mismo tiempo para que nos la echen cuando nos hace falta.

Resumiendo, no te enfades tío, que tu presencia en el foro es apreciada por todos con toda seguridad.

Saludos
__________________
Be water my friend.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
consultar el maximo valor beatriz g SQL 4 16-08-2006 17:35:53
width con valor mínimo edusus Varios 1 02-04-2006 11:58:11
2 SubConsultas con Maximo y Minimo AGAG4 SQL 18 03-09-2004 21:34:03
Minimo y Maximo en un campo DATETIME y Consulta OnTimer bustio SQL 2 08-06-2004 07:27:57
consulta con Valor maximo isc_hilda SQL 3 29-04-2004 22:17:20


La franja horaria es GMT +2. Ahora son las 02:47:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi