Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-11-2003
Legolas Legolas is offline
Miembro
 
Registrado: nov 2003
Posts: 22
Poder: 0
Legolas Va por buen camino
quien me aclara este error

He comenzado a utilizar delphi 7 hace unos días, y la verdad, me ha dejado muy sorprendido un error, que no se por que ocurre, el error es el siguiente:


if a=b and b<>c and c>=d and d<=a then
..............................................;


esta linea de codigo, que hasta ahora siempre la he utilizado en pascal, por ejemplo, me genera el error de tipos incompatibles, y ya estoy harto, porque no se porque me da el error, alguien me lo podría explicar, por favor.
Responder Con Cita
  #2  
Antiguo 03-11-2003
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
La solución rápida es poner entre paréntesis las comparaciones.
Código:
f (a=b) and (b<>c) and (c>=d) and (d<=a) then
Si no pones paréntesis, el compilador no puede saber si el AND esta siendo usado para enmascarar los bits de alguna variable. Esto es una sentencia válida:
Código:
if a=(b and c) then
Obviamente no es lo mismo que
Código:
if (a=b) and c then
siendo c una variable del tipo boolean.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 04-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Y de hecho, esto tiene que ver con la precedencia de los operadores. Hasta donde recuerdo, la expresión equivalente en C:

Código:
if (a==b && b!=c && c>=d && d<=a)
{
}
sí hace lo que uno supondría. Más aun, la ayuda de Delphi tiene el siguiente texto:

Cita:
Parentheses are sometimes needed in situations where, at first glance, they seem not to be. For example, consider the expression

X = Y or X = Z

The intended interpretation of this is obviously

(X = Y) or (X = Z)

Without parentheses, however, the compiler follows operator precedence rules and reads it as

(X = (Y or X)) = Z

which results in a compilation error unless Z is Boolean.
Siempre me ha llamado la atención que si Borland mismo admite que la interpretación obvia es

(X = Y) or (X = Z)

por qué $%&·"@# escogió otra precedencia para los operadores.

// Saludos

pd: El enojo es porque a mi siempre me pasa los mismo que a Legolas

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


La franja horaria es GMT +2. Ahora son las 02:34:37.


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