Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-05-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
Problema recorriendo ListView

Hola, tengo un problema con un Tlistview, estoy tonteando con el tipico programa de los numeros de la loteria, es decir, el listView tiene seis columnas y (por el momento) 100 filas, en cada celda se almacena un numero aleatorio del 1 al 49, hasta ahí todo bien. El problema viene cuando quiero recorrer todo el listView para buscar los 6 numeros que mas se repiten de entre todas las celdas.
El codigo ahora mismo lo tengo escrito para buscar un solo numero, en teoria el que mas se repite de entre todos.

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  elemento: tlistitem;
begin
numtot:= 0;
for y := 0 to listView1.Items.Count -1 do
  for z := 0 to 49 - 1 do
      begin

        elemento := listView1.FindCaption(0,(IntToStr(z)),true,true,true); //.Findcaption(0,18,true,true,false) then
          if (elemento <> nil) and (z = 10) then
           inc(numtot);
           label7.Caption:= IntToStr(numtot);
      end;

end;

Cuando se ejecuta este trozo del codigo, el resultado siempre es 0
¿donde está el error? ¿no debería ir aumentando el valor de 'numtot' según se vaya repitiendo el número 18 y mostrarlo luego en el label7?
¿Existe otra forma de encontrar los numeros que mas se repiten de entre todas las celdas?

Otro problema que tengo y esto si es un error, es que si ejecuto la aplicacion el pc se cuelga, pero si la ejecuto con delphi abierto de fondo, NO se cuelga. ¿? abajo pongo el texto de la ventana de error que devuelve windows. El numero de veces que se realizan los cálculos aletarios es 21.600.000 veces, por que recorre dos FOR, uno que va hasta 100.000 y otro que va hasta 216 (que es multiplo de 6 (6*6*6)) igual el numero es muy elevado pero deberia fallar aunque delphi este abierto y no solo cuando ejecuto la aplicación con delphi cerrado.

Cita:
Firma con problemas:
Nombre del evento de problema: AppHangB1
Nombre de aplicación: aleatorios.exe
Versión de la aplicación: 0.0.0.0
Marca de tiempo de la aplicación: 5190d797
Firma de bloqueo: 0c4f
Tipo de bloqueo: 0
Versión del sistema operativo: 6.1.7600.2.0.0.256.48
Id. de configuración regional: 3082
Firma adicional de bloqueo 1: 0c4f0997d399d366524a814f7832f13b
Firma adicional de bloqueo 2: 57cc
Firma adicional de bloqueo 3: 57ccfdb22112c570b5d960f240e02003
Firma adicional de bloqueo 4: 0c4f
Firma adicional de bloqueo 5: 0c4f0997d399d366524a814f7832f13b
Firma adicional de bloqueo 6: 57cc
Firma adicional de bloqueo 7: 57ccfdb22112c570b5d960f240e02003
Gracias y saludos.

Última edición por Casimiro Noteví fecha: 13-05-2013 a las 16:48:20.
Responder Con Cita
  #2  
Antiguo 13-05-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #3  
Antiguo 13-05-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
hola casimiro, lo hice creeme, pero cuando le doy a previsualizar mensaje, desaparece y lo pone como texto normal y corriente, siempre me pasa lo mismo cuando he escrito en este foro, y ya aburrido (te soy sincero), opte por ponerlo asi como aparece en el mensaje.

un saludo.
Responder Con Cita
  #4  
Antiguo 13-05-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
La solución es fácil y simple: "no le des primero a "previsualizar"
Verás que sale bien. Y si acaso hay algo mal, no te preocupes, porque podrás editarlo sin problema.
Es un pequeño fallo que tiene esa opción.
Responder Con Cita
  #5  
Antiguo 13-05-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
ah, vale gracias por el aviso. saludos.
Responder Con Cita
  #6  
Antiguo 13-05-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Código Delphi [-]
A ver, esto es una prueba.
  Segunda línea con sangrado de dos espacios.
    Tercera línea con sangrado de cuatro espacios.
Acá no hubo ningún problema cuando presioné el botón de vista previa (Firefox 20.0.1).
Responder Con Cita
  #7  
Antiguo 13-05-2013
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 947
Poder: 25
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Prueba este código a ver si te sirve...

Crea un nuevo proyecto
Código Delphi [-]
procedure TForm3.BitBtn1Click(Sender: TObject);
var
  Item, Item2:TlistItem;
  Col:TListColumn;
  i, j, Value, count:Integer;
begin
     Randomize;

     Col:=ListView1.Columns.Add;
     Col.Caption:='Número';
     Col:=ListView1.Columns.Add;
     Col.Caption:='Frecuencia';

     Col:=ListView2.Columns.Add;
     Col.Caption:='Fila';

     Col:=ListView2.Columns.Add;
     Col.Caption:='Col 1';

     Col:=ListView2.Columns.Add;
     Col.Caption:='Col 2';

     Col:=ListView2.Columns.Add;
     Col.Caption:='Col 3';

     Col:=ListView2.Columns.Add;
     Col.Caption:='Col 4';

     Col:=ListView2.Columns.Add;
     Col.Caption:='Col 5';

     Col:=ListView2.Columns.Add;
     Col.Caption:='Col 6';

     ListView1.ViewStyle:=vsReport;
     ListView2.ViewStyle:=vsReport;

     ListView1.Items.Clear;  //Frecuencias de aparición del número en la tabla...
     ListView2.Items.Clear;  //Tabla con números aleatorios...

     {Completado de Tabla de Números para contar la frecuencia...}
     for i:=0 to 49 do
     begin
          Item2:=ListView1.Items.Add;
          Item2.Caption:=IntToStr(i);
          Item2.SubItems.Add('0');
     end;

     //Completado de Tabla con números aleatorios.
     for i:=1 to 100 do
     begin
          Item:=ListView2.Items.Add;

          Item.Caption:=IntToStr(i);

          for j := 0 to 5 do
          begin
               Value:=Random(49);
               Item.SubItems.Add(IntToStr(Value));

               //Busqueda del número aleatorio generado en tabla de Frecuencias...
               Item2:=ListView1.FindCaption(0,IntToStr(Value),false,True,true);
               if Item2<>nil then
               begin
                    //Incrementa la frecuencia del número aleatorio generado...
                    TryStrToInt(Item2.SubItems[0],Count);
                    Inc(Count);
                    Item2.SubItems[0]:=IntToStr(Count);
               end;
          end;

     end;
end;

Saludos cordiales...
Responder Con Cita
  #8  
Antiguo 13-05-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por Al González Ver Mensaje
Código Delphi [-]A ver, esto es una prueba. Segunda línea con sangrado de dos espacios. Tercera línea con sangrado de cuatro espacios.

Acá no hubo ningún problema cuando presioné el botón de vista previa (Firefox 20.0.1).
Es cuando le das a "vista previa" antes de nada, antes de guardar incluso.

je, je... me he citado a mí mismo
Responder Con Cita
  #9  
Antiguo 13-05-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
Hola, gracias por la ayuda, estoy intentando implementar mi programa con este codigo por que ya tengo echa la parte que genera los numeros aleatorios y por tema de diseño y demas, no quisiera modificarlo, asi en que en vez de copiar y pegar miro el codigo y me rompo un poco mas la cabeza, pero me esta costando un poco, ademas tengo dos label, en uno me dira los 6 numeros que mas se repiten de entre todo el listado y en otro label, mostrare cual seria la combinación una vez se tengan los 6 numeros.

A ver si lo consigo, saludos y gracias.
Responder Con Cita
  #10  
Antiguo 14-05-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
danielmj,

Cita:
Empezado por danielmj
...tengo un problema con un Tlistview...seis columnas...100 filas...cada celda almacena un numero aleatorio del 1 al 49...
...El problema...buscar los 6 numeros que mas se repiten de entre todas las celdas...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TModa = record
     Number : Integer;
     Count : Integer;
  end;

const
  Secuencia : Array[0..5] of String = ('primero','segundo', 'tercero', 'cuarto', 'quinto', 'sexto');
  Max = 50; // Número máximo de elementos a generar aleatoriamente
  Rows = 100; // Número máximo de lineas del control TListview

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Genera números aleatorios de 0 a Max-1
procedure TForm1.Button1Click(Sender: TObject);
var
   i : Integer;
begin
   Randomize;
   ListView1.Clear;
   for i := 1 to Rows do
   begin
     with ListView1.Items.Add do
     begin
        SubItems.Add(IntToStr(Random(Max)));
        SubItems.Add(IntToStr(Random(Max)));
        SubItems.Add(IntToStr(Random(Max)));
        SubItems.Add(IntToStr(Random(Max)));
        SubItems.Add(IntToStr(Random(Max)));
        SubItems.Add(IntToStr(Random(Max)));
     end;
   end;
   ListView1.Items.Count
end;

// Muestra los seis primeros números repetidos de una secuencia aleatoria
procedure TForm1.Button2Click(Sender: TObject);
var
   i, j, p : Integer;
   ModaCount : Array[0..Max] of Integer;
   AModa : Array[0..5] of TModa;
   b : Boolean;

begin

   // Cuenta cuantas ocurrencia hay de un número
   // la posición del arreglo corresponde al número generado aleatoriamente
   // El valor del arreglo corresponde a la cantidad de ocurrencias encontradas para ese número
   FillChar(ModaCount,Sizeof(ModaCount),0);
   for i := 0 to ListView1.Items.Count - 1 do
   begin
      for j := 0 to ListView1.Items.Item[i].SubItems.Count - 1 do
      begin
         p := StrToInt(ListView1.Items.Item[i].SubItems.Strings[j]);
         ModaCount[p] := ModaCount[p] + 1;
      end;
   end;

   // Genera un arreglo con los 6 primeros números en orden de repetición
   FillChar(AModa,Sizeof(AModa),-1);
   for i := Low(AModa) to High(AModa) do
      for j := Low(ModaCount) to High(ModaCount) do
      begin
         if AModa[i].Count < ModaCount[j] then
         begin

            for p := 0 to 5 do
               if (AModa[p].Number = j) then
                  b := True;

            if not b then
            begin
               AModa[i].Number := j;
               AModa[i].Count := ModaCount[j];
            end;

            b := False;

         end;
      end;

   // Muestra los primeros números repetidos en secuencia hasta un máximo de 6
   for i:= 0 to 5 do
   begin
      if (AModa[i].Count <> 0) then
         ShowMessage(Format('El %s número es %d con %d ocurrencias',[Secuencia[i],AModa[i].Number,AModa[i].Count]));
   end;

end;

end.
El código anterior genera números aleatorios entre 0 y 49 en un control TListView de 100 filas. Variando los valores de las constantes Max y Rows se puede analizar la salida del código de forma más manejable.

El ejemplo esta disponible en el link: http://terawiki.clubdelphi.com/Delph...om_Numbers.rar

Espero sea útil

Nelson.
Responder Con Cita
  #11  
Antiguo 14-05-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Casimiro Notevi,

Cita:
Empezado por Casimiro Notevi
...Recuerda poner los tags al código fuente...
Cita:
Empezado por danielmj
...cuando le doy a previsualizar mensaje, desaparece y lo pone como texto normal y corriente...
Cita:
Empezado por Casimiro Notevi
...solución..."no le des primero a "previsualizar"...
Un procedimiento para poder pre visualizar y enviar el código fuente con sus correspondientes Tags es el siguiente:

1- Colocar el código fuente a enviar con sus correspondientes Tags y texto asociados y pulsar Vista Previa de Mensaje.

2- Si hay errores pulsar el Botón de Página Previa en el Navegador y corregir el error, nuevamente pulsar Vista Previa de Mensaje y repetir el paso 1 y 2 tantas veces se requiera.

3- Cuando la información a enviar este debidamente formateada y verificada en la opción de Vista Previa de Mensaje no utilizar el botón de Enviar Respuesta, en su defecto pulsar el Botón de Página Previa en el Navegador y desde esa página pulsar Enviar Respuesta con lo cual el código fuente quedara debidamente formateado.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 14-05-2013 a las 05:41:01.
Responder Con Cita
  #12  
Antiguo 14-05-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Buena idea
Responder Con Cita
  #13  
Antiguo 14-05-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
Lo tendre en cuenta para futuros post jeje. gracias.

En cuanto al codigo nlsgarcía, sencillamente perfecto, es lo que buscaba, de todos modos, voy a ver como hago para que envez de usar un msg muestre los 6 numeros en etiquetas a modo de resumen, sin tener que pulsar el boton 5 veces.

saludos y gracias!
Responder Con Cita
  #14  
Antiguo 14-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 nlsgarcia Ver Mensaje
danielmj,



Revisa este código:

...

El ejemplo esta disponible en el link: http://terawiki.clubdelphi.com/Delph...om_Numbers.rar

Espero sea útil

Nelson.
Muy buen ejemplo Nelson.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 14-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 danielmj Ver Mensaje
...
de todos modos, voy a ver como hago para que envez de usar un msg muestre los 6 numeros en etiquetas a modo de resumen, sin tener que pulsar el boton 5 veces.
Hola.

Bastaría con agregar un TListBox o TMemo a tu form y reemplazar en el código de nlsgarcia la palabra ShowMessage por el nombre de tu ListBox o Memo.

Saludos.

Edito: Me faltó especificar: "Usando sus métodos Items.Add y Lines.Add respectivamente..."
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-05-2013 a las 00:00:02.
Responder Con Cita
  #16  
Antiguo 15-05-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
Hola ecfisa, perfecto!! juassssss muchas gracias a todos, ahora solo falta que la combinacion generada se la premiada jaja

Un saludo y gracias!
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
Problema con ListView, angelp4492 Varios 2 12-05-2011 18:07:13
Problema con ListView angelp4492 Varios 2 21-12-2007 10:52:04
Problema con ListView angelp4492 Varios 1 21-12-2007 06:06:06
problema con listview cristian_abb Varios 2 22-06-2006 16:47:12
Problema con ListView Magneto Varios 2 18-07-2003 15:55:39


La franja horaria es GMT +2. Ahora son las 21:31:11.


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