Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-11-2006
Johnny Q Johnny Q is offline
Miembro
 
Registrado: may 2005
Ubicación: Colombia
Posts: 172
Poder: 19
Johnny Q Va por buen camino
Unhappy 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.
Responder Con Cita
  #2  
Antiguo 17-11-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 17-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 17-11-2006
Johnny Q Johnny Q is offline
Miembro
 
Registrado: may 2005
Ubicación: Colombia
Posts: 172
Poder: 19
Johnny Q Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 18-11-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Solo para agregar, el detalle de la optimización: http://www.clubdelphi.com/foros/show...96&postcount=5

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con rave report. Se queda generando páginas como si estuviera en un ciclo mglucero Impresión 1 21-06-2007 19:43:49
Problema extraño con showmodal =S Ken_Masters Varios 3 15-11-2006 01:57:11
Problema extraño en FireBird Sick boy Firebird e Interbase 4 20-10-2006 12:39:54
crear label por codigo en un ciclo for.. las beses de el ciclo sakuragi .NET 3 29-09-2005 05:04:29
Extraño problema con Quick Report cone220 Impresión 3 13-05-2004 16:29:11


La franja horaria es GMT +2. Ahora son las 21:52:42.


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
Copyright 1996-2007 Club Delphi