Ver Mensaje Individual
  #2  
Antiguo 27-05-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Reputación: 17
Lord Delfos Va por buen camino
Me jugaría la cabeza a que es un problema de rango de los conjuntos.

Verás, un conjunto en Delphi tiene un máximo de 255 elementos, porque la estructura interna del conjunto usa 8 bits.

Cuando uno crea un conjunto "al vuelo" (con "[" y "]") si los valores sobrepasan el máximo de 8 bits ocurreo overflow y por eso si uno intenta evaluar valores mayores a 255, pues... no funciona porque los valores fueron truncados.

Por ejemplo:

Código Delphi [-]
var a, b, c: Integer;
begin
  a:= 270;
  b:= 345;
  c:= 30;
  if c in [a..b] then ShowMessage('sí');
end;

Da que 30 está entre 270 y 345 . Eso es porque en realidad el conjunto [a..b] quedó formado por los valores 14 y 89.

Así, si uno hace:

Código Delphi [-]
var a, b, c: Integer;
begin
  a:= 270;
  b:= 345;
  c:= 300;
  if c in [a..b] then ShowMessage('sí');
end;

Va a decir que 300 no está entre 14 y 89, aunque uno pensó que era entre 270 y 345...

EDITO: Esto es en Delphi 7, no sé si los conjuntos de D2009 serán igual.

Última edición por Lord Delfos fecha: 27-05-2010 a las 22:03:55.
Responder Con Cita