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
public
end;
TModa = record
Number : Integer;
Count : Integer;
end;
const
Secuencia : Array[0..5] of String = ('primero','segundo', 'tercero', 'cuarto', 'quinto', 'sexto');
Max = 50; Rows = 100;
var
Form1: TForm1;
implementation
{$R *.dfm}
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;
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
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;
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;
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.