Delphi - While vs For

 
Vista:

While vs For

Publicado por Dr Juzam (821 intervenciones) el 11/05/2005 14:29:16
Hola, amigos. Esto no es una consulta per se y además no me corre nada de prisa ;-). Sólo quería comentaros una cosa: Estuve el otro dia tocando el código de una aplicación que realicé y quería mejorar una función en concreto. La función usaba un for para operar sobre todos los caracteres de un texto. La cambié a while para simplificarme la vida (debía poder aumentar la variable de control dentro del loop). Ejecute el programa y se colgó. Revisé el código (parecía todo correcto) y ejecuté de nuevo. Mismo resultado. Cambio a for y funciona. Probé con otro código que lo único que hacía era recorrer todos los caracteres (para descartar que hubiese metido la pata) con while y for. Resultado: Con while se colgaba y con for funcionaba. Debo decir que era un texto con muchos caracteres (unas 2000 lineas de texto) y que con menos lineas funcionaban los dos.
Ahí dejo el comentario sobre el rendimiento del for y del while, a ver si alguno me arroja un poco de luz diciéndome por qué el while tiene un rendimiento tan bajo en comparación (uso D6, por si sirve de algo).
PD: Probé con repeat y dio el mismo resultado que el While (era de sospechar).
Un saludo.
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:While vs For

Publicado por emilio (78 intervenciones) el 11/05/2005 14:54:46
Te recomiendo que revises la estructura del codigo escrito con While y la condicion de para; pues casi siempre se cuelga por eso. Segun entendi efectuas operaciones en un texto, pues tu condicion de para deberia tener algo como While I< Length(Texto ) do .....
Espero que tengas suerte...!
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:While vs For

Publicado por Dr Juzam (821 intervenciones) el 11/05/2005 15:37:24
Hehecho la prueba d enuevo: Untexto y dos botones, con los siguientes códigos:

procedure TForm1.Button1Click(Sender: TObject);
var
i: LongWord;
begin
for i:=1 to Length (Memo1.Text) do begin
end;
ShowMessage ('El texto tiene '+IntToStr(i)+' caracteres');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i: LongWord;
begin
i:=1;
while i<=Length (Memo1.Text) do begin
inc (i);
end;
ShowMessage ('El texto tiene '+IntToStr(i)+' caracteres');
end;

Con pocos caracteres funcionan ambos. A patir de los 17000 empiezo a notar un descenso de la velocidad en el bucle del while. Con un texto de 1.500.000 caracteres el for lo hace en menos de 1 segundo y el while... (me fui a la ducha, volví y seguía sin mostrar ningún mensaje, lo que se dice colgado, colgado).
Debe ser algo de la implementación del while, porque más simple el código no puede ser. Bueno, ya se que si quiero rapidez elijo el for...
Gracias de todos modos.
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
Asi sin probar, estoy CASI seguro que el FOR evalua la condicion solo la primera vez y el WHILE cada vez. Si pasas a una variable el resultado de Length (Memo1.Text) imagino seria igual o casi tan rapido...

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:While vs For

Publicado por Dr Juzam (821 intervenciones) el 11/05/2005 20:35:13
Eres un crack, Mamcx. Dicho y hecho. Muchas gracias.
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