Delphi - Ayuda para optimizar un procedimiento

   
Vista:

Ayuda para optimizar un procedimiento

Publicado por MSP (29 intervenciones) el 20/09/2009 08:14:10
Hola mi problema es el siguiente realice un procedimiento que me genera un listado de palabras y no tengo ningún problema, pero no creo que sea la forma mas correcta espero me puedan ayudar a optimizar el procedimiento.

procedure GenerarPalabras;
const
Diccionario = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
var
i01, i02, i03, i04, i05: Integer;
Lista: TStrings;
begin
Lista := TStringList.Create;
for i01 := 1 to 62 do begin
Lista.Add( Diccionario[ i01 ] );
for i02 := 1 to 62 do begin
Lista.Add( Diccionario[ i01 ] + Diccionario[ i02 ] );
for i03 := 1 to 62 do begin
Lista.Add( Diccionario[ i01 ] + Diccionario[ i02 ] + Diccionario[ i03 ] );
for i04 := 1 to 62 do begin
Lista.Add( Diccionario[ i01 ] + Diccionario[ i02 ] + Diccionario[ i03 ] + Diccionario[ i04 ] );
for i05 := 1 to 62 do begin
Lista.Add( Diccionario[ i01 ] + Diccionario[ i02 ] + Diccionario[ i03 ] + Diccionario[ i04 ] + Diccionario[ i05 ] );
end;
end;
end;
end;
end;
Lista.SaveToFile( 'c:\Palabras.txt' );
Lista.Free;
end;

Como veran mi situacion es la siguiente si quiesiera aumentar la longitud a 6 caracteres tendria que agregar otra linea como esta

for i06 := 1 to 62 do begin
Lista.Add( Diccionario[ i01 ] + Diccionario[ i02 ] + Diccionario[ i03 ] + Diccionario[ i04 ] + Diccionario[ i05 ] + Diccionario[ i06 ]);
end;

ahora si requiero que generar longitudes de 50 caracteres tendría que escribir demasiado código supongo que debe haber una mejor opción espero puedan ayudarme
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda para optimizar un procedimiento

Publicado por E.T. (1108 intervenciones) el 21/09/2009 19:23:22
La solución es un procedimiento recursivo, te lo dejo aqui

procedure TForm1.GeneraPalabas(longitud, fciclo:integer; cadena:string);
var
i, ciclo:integer;
const
Diccionario = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
begin
ciclo:=1;
for i := 1 to longitud do begin
Lista.Items.Add(cadena+Diccionario[i]);
if fciclo > ciclo then begin
GeneraPalabas(longitud,fciclo-ciclo, cadena+Diccionario[i]);
end;
Form1.Repaint;
end;
end;

Cambie el List que tu tenias por un ListBox, pues a mi me da un error de overFlow.

Para usar el procedimiento usa esta linea

GeneraPalabas(62,StrToInt(Edit1.Text),'');

En el edit escribes la longitud de la palabra que deseas generar.
NOTA, si usas un valor digamos de 6 en delante preparate para esperar un buen rato para ver los resultados.

Tal ves se pueda usar en thread para ver los resultados sin esperar a que termine, luego te aviso si se puede
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda para optimizar un procedimiento

Publicado por MSP (29 intervenciones) el 21/09/2009 20:58:45
Excelente ET muchas gracias, lo he integrado a un hilo y todo va bien gracias una vez mas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar