Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/07/2018, 15:44
Avatar de Tachikomaia
Tachikomaia
 
Fecha de Ingreso: agosto-2011
Mensajes: 402
Antigüedad: 7 años, 4 meses
Puntos: 5
Respuesta: Duda sobre expresiones condicionales.

Creo que me han resuelto la duda aunque no el problema de fondo. Yo diría de cerrar este tema y abro otro, pero sino, sigo comentando.


Este link está muy bueno:
https://es.wikipedia.org/wiki/L%C3%B...o_suma_lógicas

Explica que el or equivale al + y el and a *. Me parece medio mágico que funcionen de la misma forma, pero parece ser así. Básicamente, los and se hacen 1ero. Lo he comprobado en el lenguaje que uso y además se supone que lo dice acá
https://msdn.microsoft.com/es-es/library/2bxt6kc4.aspx
Digo se supone porque no lo entendí del todo.
Cosas como "C1 o (C2 y C3) o C4" tiene el paréntesis de sobra, es como decir A+(B*C)+D, es redundante poner el paréntesis en la operación que se aplicará 1ero.

Eso resuelve mis dudas de cómo se interpretan expresiones condicionales que puse de ejemplo y todas en general.


Por otro lado, el 1er link habla de lo que llama propiedad disyuntiva, dando mal el 2ndo ejemplo creo, pero creo que lo entendí. ¡Consiste en nada más y menos que quitar los paréntesis!

(A+B)*(C+D) = A*C + A*D + B*C + B*D
Ej: (2+3)*(4+5) = 2*4 + 2*5 + 3*4 + 3*5
(2+3)*(4+5) = 5*9 = 45
2*4 + 2*5 + 3*4 + 3*5 = 8+10+12+15 = 18+27 = 45

(C1 o C2) y (C3 o C4) = C1 y C3 o C1 y C4 o C2 y C3 o C2 y C4

El 2ndo ejemplo de la wikipedia no requiere paréntesis y luego está mal formulado, creo , así que no me importa.

Eso parece resolver mi duda de cómo expresar cualquier condición sin usar paréntesis (hablo de las que no modifican las variables), pero como se alarga tanto la expresión no me gusta.

Esto me resulta mejor:
Código:
Si C1 or C2
   Si C3 or C4

¿Pero cual es mi duda de fondo?
Cómo hacer un programa que genere expresiones condiciones que no tengan redundancias ni incoherencias, y estén compuestas por X subexpresiones, donde X es elegido por un usuario.
Una subexpresión sería una relación entre variables.
Esto V1<V2 or V2<V3
Sería una expresión compuesta por 2 subexpresiones.

Dije:
"tengo que hacer un código que genere expresiones de condiciones. Básicamente si se quiere 8 expresiones, se elige una al azar"
Quise decir "una variable"

"Puedo generar por ejemplo esto:
C1 y C3 y C4 o C2 o C3 y C5"
Actualmente lo que necesitaría es poder indicar al programa dónde tienen sentido meter paréntesis, y seguir metiendo. Sería por azar si los metería o no cada vez.

Otra alternativa sería aprender a que genere ifs anidados como puse más arriba. Tal vez. O funciones, no sé mucho de eso.


-------------------------------------------------------------


tonigomila1988:
Cuando hice el tema ya entendía cómo resolver cosas como
(C1 o C2) y (C3 o C4)
C1 o (C2 y C3) o C4
C1 o (C2 y (C3 o C4))

Eso fueron interpretaciones que yo hice respecto a esto:
C1 o C2 y C3 o C4

O sea, no sabía cual de las de arriba, o alguna otra, era la interpretación correcta de esa.

Ahora ya sé que ni siquiera necesita paréntesis y sólo hay 1 interpretación correcta. Pero por si queda más claro, la interpretación correcta sería la 2nda.
C1 o C2 y C3 o C4 es true si se cumple
C1
o C2 y C3,
o C4

Mi confusión era que no sabía cómo había que interpretar esa expresión.

Fijate lo que escribí arriba si quieres.


Gracias.
__________________
"No se puede borrar hasta", PHPeros.

Última edición por Tachikomaia; 13/07/2018 a las 15:59