[RESUELTO]no le entiendo del todo el and, or , not y xor

Iniciado por theghost_te, 12 Marzo 2013, 04:07 AM

0 Miembros y 1 Visitante están viendo este tema.

theghost_te

el and , or yo lo se usar de esta forma:

Código (vb) [Seleccionar]
if txtclave.text = "popeye" and txtnombre.text = "coder" then
    msgbox "nombre y clave correctos"


lo interpreto asi: si clave es "popeye" Y nombre es "coder" entonces mostrar "clave y nombre correcto"
esto es facil de entender, pero en muchis codigos que he checado , lo usan de otra forma muy complicadisima incluso le agregan sumas y restas:

Código (vb) [Seleccionar]
if (x and b) + (h or d) then


¿¿¿??? ¿que es esto? como se interpreta?, ademas lo guardan en una variable :

Código (vb) [Seleccionar]
R = (x and b) + (h or d)

otra cosa que no le entiendo es cuando le ponen el not :

Código (vb) [Seleccionar]
[code]if not (x and b) + (h or d) then[/code]


peor se me hace dificilisimo entender cuando le ponen muchas sumas restas muliplicacion y division , porque no se le entiende cual de las operaciones es la que se realiza primero, jemplo he checado codes como este:

Código (vb) [Seleccionar]
R = not b and g or t and d + 45 or 2 * 5

¿¿¿???

ayuda, no logro entender, me duele la cabeza.

79137913

HOLA!!!

Leete este reto completo y podras apreciar como funcionan internamente esos operadores:
   [RETO] Reemplazo de Operadores Binarios.

Ante cualquier duda que surja me avisas

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Danyfirex

#2
mira esto así lo entiendes.

http://es.wikipedia.org/wiki/Puerta_l%C3%B3gica


Igual te explico lo tuyo.

Recuerda que cuando haces operaciones >,=,< Etc. siemrpe obtienes un retorno booleano de esa operacion.

Código (vbnet) [Seleccionar]
Private Sub Form_Load()
Dim c As Boolean
c = 1 = 1 ' si son iguales obtienes true(Verdadero)
MsgBox (c)
c = 1 = 2 ' si son iguales Diferente False(falso)
MsgBox (c)
End Sub



Código
if txtclave.text = "popeye" and txtnombre.text = "coder" then
    msgbox "nombre y clave correctos"

Respuesta:

Eso quiere decir.

que si el texto del textbox es igual a popeye otenemos un "true" y el textbox2 igual a coder otendremos otro "true"

como usamos la compueta AND. Mira la tabla AND en wikipedia
entonces

llevandolo a lo logico nos queda

true and true

segun la tabla nos dice que

1 and 1 = 1 lo mismo que decir true and true=true

y asi todo quedo resuelto segun la tabla de la compuerta logica AND.

Código
if (x and b) + (h or d) then


¿¿¿??? ¿que es esto? como se interpreta?, ademas lo guardan en una variable :

Respuesta.

Código (vbnet) [Seleccionar]
Private Sub Form_Load()
Dim c As Boolean
Dim a As Boolean
Dim b As Boolean
'Seria algo así,claro respectivamente de los valores. yo te puse con true y false
a = (True And False)
b = (True or True) ' te toca mirar la tabla de la compuerta or en wikipedia
c = a + b
MsgBox (c)

End Sub





Código
R = (x and b) + (h or d)

respuesta:


aquí igual que arriba solo que asignas el resultado a una variable booleana.




otra cosa que no le entiendo es cuando le ponen el not :

Código
if not (x and b) + (h or d) then


Respuesta:


Esta es la mas fácil porque not que hace es invertir si es Not(true) te da false. y not(false) te da true.




peor se me hace dificilisimo entender cuando le ponen muchas sumas restas muliplicacion y division , porque no se le entiende cual de las operaciones es la que se realiza primero, jemplo he checado codes como este:

Código
R = not b and g or t and d + 45 or 2 * 5

¿¿¿???

ayuda, no logro entender, me duele la cabeza.

Respuesta:

Ahi lo unico que tienes que hacer es usar "()" para ordenarlo y verlo mas comodo

Código (vbnet) [Seleccionar]
R = Not ((b And g) Or (t And d) + (45 Or 2 * 59))



Lo mas importante practicar. y mirar la wiki un buen rato.

Perdon por los errores escribi rapido.  espero se entienda.
Saludos

$Edu$

#3
Código (vb) [Seleccionar]
if (x and b) + (h or d) then

Ahi lo que hace es hacer un And y un Or con esas variables, si miraste lo que dejo 79137913 entonces ya sabras que cuenta han hecho (con sus binarios), y luego suma los 2 binarios resultantes, para quedar con un numero binario, que si es distinto de 0 entonces sera True la condicion del if y por lo tanto se cumple la condicion y hara lo que sigue despues del Then.
Recuerda que True es un booleano pero pasado a integer es 1. Y False a integer es 0.
Y 0 pasado a booleano es False, pero cualquier otra numero distinto de 0 pasado a booleano es True.

Código (vb) [Seleccionar]
R = (x and b) + (h or d)

Ahi lo que hace es guardar el numero en una variable, esa variable puede ser booleana o un integer por ejemplo, no recuerdo si en vb6 era necesario hacer el cambio de tipo de variables o si lo hace solo, creo que lo hace solo si. Asi que si esa suma da un numero distinto de 0 entonces pondra True a la variable R en caso de que sea booleana pero si es una variable integer entonces pondra el numero que le corresponda, por ejemplo 23512 que se yo.

Código (vb) [Seleccionar]
if not (x and b) + (h or d) then

Lo unico que cambia ahi es el uso de "not" que es para hacer lo opuesto al resultado, es decir, si la suma esa da True, entonces la condicion dice: Si NO es True, entonces... Es decir, es como si fuera if (x and b) + (h or d) = False then. Pero algunos odian poner eso y se ahorran poner el "igual a " ya que si no pones nada entonces se sabe que se refiere a que queres que el valor de esa condicion sea True.


Código (vb) [Seleccionar]
R = not b and g or t and d + 45 or 2 * 5

Aca te recomiendo mirar esto, si no entiendes ingles, lo puedes traducir:

http://msdn.microsoft.com/en-us/library/fw84t893

pd: Gracias Danyfirex por el link.

theghost_te

#4
grax a todos me sirvio, Danyfirex ese ejemplo que das es facil de entender, yo antes ni sabia que una expresion te daba un resultado true-false, ahora segun mis apuntes los parentesis es para indicar que lo que esta dentro se ejecute antes que lo demas, pero tengo una duda : si no le pongo nada de parentesis como se ejecutarian? es decir que orden, por ejemplo la sgte linea:

R = not b and g or t and d + 45 or 2 * 5

¿cuales se ejecutarian antes que las demas?, otra preguntita el not niega a todo lo que se encuenbtra a su derecha, incluyendo todas las expresionmes que haya?


R = not b and g or t and d + 45 or 2 * 5

se niega solo "b" o todo el resultado que de todas las expresiones?



gracias

edit:

algun enlace donde aprender estas cosas del not, and, or etc pero en vb? el tema me queda claro , lo que no me queda muy claro es el orden en que se ejecutan, porque varias veces hay lineas de code muy pero muuuuuuuuuuuy anidados (NOTs dentro de ANDs dentro de ORs con sumas, restas y llamadas a otras funciones), o si pudieran explicarme se lo agradeceria, necesito entender al 100 % este tema.


edit 2:

cuando hacemos un Not asi :
if Not Funcion(Parametro) = 0 then

se obliga al if a que espere un resultado tipo false, o se invierte el resultado de la expresion?

tincopasan

quizá deberiás usar el debugger de vb y realizar cada operación línea a línea, así verias el resutado de cada operación y sabrías que toma o no.

MCKSys Argentina

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


$Edu$

Ya te habia dejado un link que responde a todas tus preguntas...

arts

Un truquito:
Sabiendo que true = 1 y false = 0 y que los AND se suelen corresponder por multiplicaciones y los Or por Sumas. entonces según esto....

1 And 1 = es como decir 1 * 1 = 1 y 1 hemos dicho que era true
1 Or 1 = es como decir 1+1 pero como solo se usan 1 y 0 se queda en 1
false And true = es como decir 0*1 = 0 es decir false

Así sucesivamente con todos.

theghost_te

 :D  :D  :D  :D  gracias gracias gracias eso era lo que me faltaba entender.

$Edu$ , si tienes razon solo que no lo entendia bien porque esta en english, igual gracias.

MCKSys Argentina , muchas grax man en los 2 primeros enlaces esta exactamente lo que queria, creo que el primer es la version en español del enlace que me paso $Edu$ ¿o me parece?

ahora a imprimirlo y leerlo.


salu2