Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   problema extraño con ciclo for (https://www.clubdelphi.com/foros/showthread.php?t=37613)

Johnny Q 17-11-2006 20:17:58

problema extraño con ciclo for
 
Un cordial saludo a todos.

Tengo un problema extraño con un ciclo for, lo inicializo
Código:

for i := 0 to 3
y cuando entra al ciclo extrañamente inicia en 3 y comienza a decrementarse.

Es algo muy raro, nunca me habia sucedido en delphi y tampoco en cualquier otro lenguaje.

Agradezco cualquier ayuda que me puedan brindar.

Bicho 17-11-2006 20:33:01

Hola, no tienes que preocuparte, es culpa del optimizador de Delphi, cuando compilas el proyecto, si tienes activada la opción usar el optimizador, te haces como esta, cambiarte internamente el bucle for..downto en lugar de un for..to, eliminar variables que no va a usar, etc.
Si vas a las opciones del programa->compilar y creo que es el primer check que aparece a la izquierda (creo que se llama optimizer), lo desmarcas ya toca ir bien.

Espero te sirva,

Saludos

seoane 17-11-2006 20:33:14

Bueno no pones el código completo, pero puedo intentar adivinar lo que pasa. Si dentro del bucle no utilizas el valor de la variable i la optimización del compilador hace que la variable i disminuya en vez de incrementarse ya que esta esta manera es mas eficiente. Es decir, si tenemos esto:

Código Delphi [-]
var
  i: integer;
begin
  for i:= 0 to 3 do
  begin
    Windows.Beep(200,100);
  end;
end;

Y ejecutamos nuestro programa paso a paso veremos que i toma el valor 4, 3, 2, 1 debido a la optimización del compilador. En principio el pitido se sigo oyendo 4 veces así que lo que haga el compilador no nos importa. Sin embargo si tenemos esto otro:

Código Delphi [-]
var
  i: integer;
begin
  for i:= 0 to 3 do
  begin
    Windows.Beep(200*i,100);
  end;
end;

Y lo vuelves a ejecutar paso a paso, veras que ahora la i toma los valores correctos, 0, 1, 2, 3.

Johnny Q 17-11-2006 21:11:44

muchas gracias por sus respuestas, probe con ambas respuestas y Seoane tiene razón, lo que no entiendo es porque si tengo un codigo como el siguiente el for no funciona
Código:

for i := 0 to 3
begin
  if valor <> 0 then
    Query1CODIGO.value := miarreglo[i].valor;
end;

en donde miarreglo es un arreglo de tipo Record.

delphi.com.ar 18-11-2006 21:27:46

Solo para agregar, el detalle de la optimización: http://www.clubdelphi.com/foros/show...96&postcount=5

Saludos!


La franja horaria es GMT +2. Ahora son las 16:34:27.

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