comparacion muy larga

Started by Futu-block, January 08, 2012, 04:12:25 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Futu-block

tengo una comparacion muy larga que me dá error, no comprendo por que...
Quoteif (mojito[1] and mojito[2] and mojito[3] and mojito[4] and mojito[4] and mojito[5] => nivel)


resulta que cuando algun dato del array es negativo me lo acepta, incluso sin tener que que ser el mismo que el nivel...


SplinterGU

nah, tenes que hacer comparacion por comparacion... ahi estas diciendo que cualquiera de 1 a 4 son distintos de 0, y que el 5 >= nivel, entonces se cumple la condicion.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

KeoH

ademas mojito[4] esta repetido xD

FreeYourMind

Es que se toma siempre 2 del numero 4  ;D

Futu-block

claro, lo que hace el alcohol ;D

y otra cosa relacionada, ya que las comparaciones no son tan faciles como creia, para algo como centrar en una coordenada, por ejemplo, ¿como se puede simplificar esto?
Quote
if (x > 200 and x < 100)


por que no se puede poner

Quote
if (x > 200 and < 100)


igual que equis me refiero a otra variable o suma, que a partir de la variable se ponga el rango deseado
¿no?

FreeYourMind

Poner sólo "if (x > 200 and < 100)" seria un disparate autentico, crear un compilador que soportará eso seria un calvario (pues tendria que saber que el '<' se referia al x anterior), mission casi imposible, te aconsejaria a mirar algun libro de lógica o compiladores, no para que aprendas como van pero sólo para que veas el pequeño gran disparate que has sugerido xD

Simplificado seria algo asi:

if (100 > x > 200)

aunque no creo que chute en Bennu (estoy medio dormido xD prueba a ver)


Futu-block

joño, sabia que se podia simplificar :D

BlySntK

¿Rula? Otra cosa nueva que sé xDDDDDDD Esa simplificación me recuerda mucho al código C, ahí se puede hacer algo así
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

SplinterGU

#8
Quote from: FreeYourMind on January 09, 2012, 08:49:42 AM
Poner sólo "if (x > 200 and < 100)" seria un disparate autentico, crear un compilador que soportará eso seria un calvario (pues tendria que saber que el '<' se referia al x anterior), mission casi imposible, te aconsejaria a mirar algun libro de lógica o compiladores, no para que aprendas como van pero sólo para que veas el pequeño gran disparate que has sugerido xD

Simplificado seria algo asi:

if (100 > x > 200)

aunque no creo que chute en Bennu (estoy medio dormido xD prueba a ver)



no, eso no es correcto... ni en BennuGD ni en ningun lenguaje...

lo que hara eso es ejecutar primero ( x > 200) ( 100 > x ) y al resultado de eso (que dara 1 o 0) compararlo con 200, cosa que nunca se cumplira el if... porque seria o if ( 1 > 200 ) o if ( 0 > 200 )

prueba:


splinter@splinter-portatil:/tmp> cat p.c
#include <stdio.h>
int main( int argc, char *argv[])
{
int x;
x=100; if (100 > x > 200) printf("1\n");else printf("0\n");
x=0; if (100 > x > 200) printf("1\n");else printf("0\n");
x=1; if (100 > x > 200) printf("1\n");else printf("0\n");
x=200; if (100 > x > 200) printf("1\n");else printf("0\n");


x=100; if (100 > x > 0) printf("1\n");else printf("0\n");

}
splinter@splinter-portatil:/tmp> ./p
0
0
0
0
0


Quote from: Futublock on January 09, 2012, 09:47:31 AM
joño, sabia que se podia simplificar :D

la forma de simplicar lo que quieres es hacer

if ( x > 200 and x < 100 )

aunque esa condicion nunca se ejecutar, porque un numero nunca puede ser mayor a 200 y menor a 100 a la vez.

Quote from: BlySntK on January 09, 2012, 11:06:16 AM
¿Rula? Otra cosa nueva que sé xDDDDDDD Esa simplificación me recuerda mucho al código C, ahí se puede hacer algo así

c??? imposible, ni de coña...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Macho, si la condicion es imposible, es logico que no funcione en mi ejemplo, lo mismo ocurre en el tuyo!
Pero si es un x posible, la condición es valida tanto como la tuya, y la mia es mas simplificada.

SplinterGU

#10
free, a ver si lo explico facil...

lo que estas diciendo como simplificada no existe... es imposible...

no entendes que una condicion retorna 0 o 1? sabes lo que son precedencia de operadores?

si pones a > b > c... nunca sera si b < a y b > c... sera siempre... a > ( b > c ) (a>b) > c... o sea, ejecuta primero b > c  a>b y al resultado de eso (como resultados posibles solo obtendras, 0 o 1) lo compara contra "a" c... lo que seria: a > 0 u a > 1 c > 0 o c > 1...

nunca sera valida tu simplificacion, no en computacion... en matematicas puede serlo, pero en computacion, no...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

#11
igual, tienes razon, el ejemplo estaba mal...

aca pongo el correcto para que lo entiendas...


splinter@splinter-portatil:/tmp> ./p
0
0
0
0
splinter@splinter-portatil:/tmp> cat p.c
#include <stdio.h>
int main( int argc, char *argv[])
{
int x;
x=150; if (200 > x > 100) printf("1\n");else printf("0\n");
x=0; if (200 > x > 100) printf("1\n");else printf("0\n");
x=1; if (200 > x > 100) printf("1\n");else printf("0\n");


x=100; if (100 > x > 0) printf("1\n");else printf("0\n");

}
splinter@splinter-portatil:/tmp>


me autocorrijo... el > separa el termino, asi que primero se ejecuta a > b y al resultado de eso 0 o 1, se le use para c, asi ( a > b ) > c


splinter@splinter-portatil:/tmp> ./p
200
100
0
200
100
0
200
100
0
100
0
splinter@splinter-portatil:/tmp> cat p.c
#include <stdio.h>
int v200()
{
        printf("200\n");
        return 200;
}
int v100()
{
        printf("100\n");
        return 100;
}

int main( int argc, char *argv[])
{
int x;
x=150; if (v200() > x > v100()) printf("1\n");else printf("0\n");
x=0; if (v200() > x > v100()) printf("1\n");else printf("0\n");
x=1; if (v200() > x > v100()) printf("1\n");else printf("0\n");


x=50; if (v100() > x > 40) printf("1\n");else printf("0\n");

}


detallando un poco mas...


splinter@splinter-portatil:/tmp> make p
cc     p.c   -o p
splinter@splinter-portatil:/tmp> ./p
0
0
0
0
1
0
0
1
splinter@splinter-portatil:/tmp> cat p.c
#include <stdio.h>
int v200()
{
//      printf("200\n");
        return 200;
}
int v100()
{
//      printf("100\n");
        return 100;
}

int main( int argc, char *argv[])
{
int x;
x=150; if (v200() > x > v100()) printf("1\n");else printf("0\n");
x=0; if (v200() > x > v100()) printf("1\n");else printf("0\n");
x=1; if (v200() > x > v100()) printf("1\n");else printf("0\n");


x=50; if (v100() > x > 40) printf("1\n");else printf("0\n");

x=150; if (v200() > x && x > v100()) printf("1\n");else printf("0\n");
x=0; if (v200() > x && x > v100()) printf("1\n");else printf("0\n");
x=1; if (v200() > x && x > v100()) printf("1\n");else printf("0\n");


x=50; if (v100() > x && x > 40) printf("1\n");else printf("0\n");

}


como sea, no se puede simplificar como decis...

y sorry por la confusion que pude generar...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ahi fixee los mensajes para que si se hace una busqueda no se tenga una informacion erronea...

repito, como sea, no se puede simplificar de esa forma.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

BlySntK

Quote from: SplinterGU on January 09, 2012, 01:18:04 PM
Quote from: FreeYourMind on January 09, 2012, 08:49:42 AM
Poner sólo "if (x > 200 and < 100)" seria un disparate autentico, crear un compilador que soportará eso seria un calvario (pues tendria que saber que el '<' se referia al x anterior), mission casi imposible, te aconsejaria a mirar algun libro de lógica o compiladores, no para que aprendas como van pero sólo para que veas el pequeño gran disparate que has sugerido xD

Simplificado seria algo asi:

if (100 > x > 200)

aunque no creo que chute en Bennu (estoy medio dormido xD prueba a ver)



no, eso no es correcto... ni en BennuGD ni en ningun lenguaje...

lo que hara eso es ejecutar primero ( x > 200) ( 100 > x ) y al resultado de eso (que dara 1 o 0) compararlo con 200, cosa que nunca se cumplira el if... porque seria o if ( 1 > 200 ) o if ( 0 > 200 )

prueba:


splinter@splinter-portatil:/tmp> cat p.c
#include <stdio.h>
int main( int argc, char *argv[])
{
int x;
x=100; if (100 > x > 200) printf("1\n");else printf("0\n");
x=0; if (100 > x > 200) printf("1\n");else printf("0\n");
x=1; if (100 > x > 200) printf("1\n");else printf("0\n");
x=200; if (100 > x > 200) printf("1\n");else printf("0\n");


x=100; if (100 > x > 0) printf("1\n");else printf("0\n");

}
splinter@splinter-portatil:/tmp> ./p
0
0
0
0
0


Quote from: Futublock on January 09, 2012, 09:47:31 AM
joño, sabia que se podia simplificar :D

la forma de simplicar lo que quieres es hacer

if ( x > 200 and x < 100 )

aunque esa condicion nunca se ejecutar, porque un numero nunca puede ser mayor a 200 y menor a 100 a la vez.

Quote from: BlySntK on January 09, 2012, 11:06:16 AM
¿Rula? Otra cosa nueva que sé xDDDDDDD Esa simplificación me recuerda mucho al código C, ahí se puede hacer algo así

c??? imposible, ni de coña...

Dije que me lo recordaba, no que fuera la misma simlificación porque en mi vida había visto algo semejante. Lo que sí he visto muchas veces es el condicional if simplificado al condicional: ? que creo que era; ? 1:0 no lo recuerdo bien
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

Futu-block

Quote from: SplinterGU on January 09, 2012, 01:18:04 PM

if ( x > 200 and x < 100 )

aunque esa condicion nunca se ejecutar, porque un numero nunca puede ser mayor a 200 y menor a 100 a la vez.


c??? imposible, ni de coña...


correccion, queria decir un numero mayor de cien y menor de doscientos: (x > 100 and x < 200)

habia otra forma de poner el and que es || pero sigue siendo lo mismo ¿no? o al final sirve para no poner la x (en este caso)