Cita:
Empezado por roman
Yo creo que podemos evitarnos el condicional:
Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i :Integer;
begin
Memo1.Text:='Numeros impares';
for i := 0 to 499 do
begin
Memo1.Lines.Add(IntToStr(2*i + 1));
end;
end;
LineComment Saludos
|
¡Estupendo!, al ver que has reducido el tiempo de ejecución a la mitad usando ingenio puro. Sólo resta mejorar aún más la velocidad de ejecución, aprovechando las nuevas herramientas, sin ser algo perfecto porque faltaría el tema del ordenamiento (aunque en el ejercicio no piden que sea ordenado)... así:
Agregando al uses las unidades System.Threading y System.SyncObjs...
Código Delphi
[-]procedure TForm1.Button2Click(Sender: TObject);
var
vCS: TCriticalSection;
vStringList: TStringList;
begin
vStringList := TStringList.Create;
try
vCS := TCriticalSection.Create;
TParallel.&For(0, 499,
procedure(pI: Integer)
begin
vCS.Acquire;
vStringList.Add((2 * pI + 1).ToString);
vCS.Release;
end);
Memo1.Text := 'Numeros impares';
Memo1.Lines.AddStrings(vStringList);
finally
vCS.DisposeOf;
vStringList.DisposeOf;
end;
end;
Ejecutando este mismo ejercicio hasta 10000 en lugar de 1000, en mi maquina con el método anterior se demoró 3150 milisegundos en promedio, sin embargo con el segundo método 295 milisegundos en promedio.
O cuando lo subí a 100000 el promedio con el ejercicio anterior fue de 33843 milisegundos, mientras que con el segundo ha sido de 2900 milisegundos.