Comunidad de diseño web y desarrollo en internet online

Que el usuario pueda describir condiciones y qué hacer en ellas ...y q

Citar            
MensajeEscrito el 28 Abr 2015 07:17 pm
"Que el usuario pueda describir condiciones y qué hacer en ellas ...y que funcione."

Saludos, no tenía Internet ni suficientes ganas de comunicarme vía ciber café, pero sigo intentando hacer un programa que resuelva problemas.

----

Actualmente tengo la descripción así:

Sección 1-
Nro de la condición___Elemento 1___Comparador___Elemento 2
1___________________A__________==__________B
2___________________A__________>___________C

O sea, son columnas y filas, estilo Excel, aunque por ahora sólo 2 filas. Los datos en ellas son un ejemplo, el usuario podría cliquearlos y se abrirían ventanas donde podría modificarlos. Pero el nro indica también el nro de la fila, se establece automáticamente. Los elementos son como nombres de las variables.

Sección 2-
Nro de la relación__1
Condición 1_______1
Relación_________&&
Condición 2_______2

En cuanto al orden, estructura o como se diga, esto es al revés a lo anterior: Los datos se ponen en las columnas. Por ahora sólo hay una así.
El nro funciona más o menos como el caso anterior. En cuanto a lo demás, son los números o IDs de la sección anterior, separados por la relación entre ellos.

Sección 3-
Nro de la relación en que se producen los cambios.
Cambios especificados aquí hacia abajo.

La descripción de los cambios no es el tema. El nro aquí se basa en la sección anterior.

La aplicación, o sea, el código "para que funcione", por ahora lo tengo así:

Código :

// Cams
Oks = 0;
// Condiciones cumplidas.
OksReq = 1;
// Condiciones requeridas.
A = 0;
do {
    A = A+1;
    // Nro de cambio a chequear.
    B = eval("Cam"+A+"Cond");
    // Condición del cambio.
    C1 = eval("Grup"+B+"Cond1");
    // ID de la condición 1 en la relación de condiciones.
    // Partes de la condición 1:
    C1A1 = eval("Cond"+C1+"Elm1");
    C1C = eval("Cond"+C1+"Comp");
    C1A2 = eval("Cond"+C1+"Elm2");
    // Relación:
    D = eval("Grup"+B+"Rel");
    // ID de la condición 2 en la relación de condiciones.
    C2 = eval("Grup"+B+"Cond2");
    // Partes de la condición 2:
    C2A1 = eval("Cond"+C2+"Elm1");
    C2C = eval("Cond"+C2+"Comp");
    C2A2 = eval("Cond"+C2+"Elm2");
    // Si la relación es “&&”, el nro de condiciones requerido es 2:
    if (D == "&&") {
        OksReq = 2;
    }
    if (C1C == "==") {
       // Si la comparación es “==”
        if (C1A1 == C1A2) {
            // Si los elementos de la condición 1 son iguales,
            // aumentan las condiciones cumplidas
            Oks = Oks+1;
        }
    }
    // Esto es para la condición 2.
    if (C2C == "==") {
        if (C2A1 == C2A2) {
            Oks = Oks+1;
        }
    }
    // Si las condiciones cumplidas son iguales o más que las condiciones requeridas
    if (Oks>=ReqOks) {
        // Iniciar cambios.
    }
} while (A<Cams);


La verdad hace bastante que no pienso en ese código y me resulta complicado, así que no pongo las manos en el fuego ni siquiera en cuanto a su coherencia (de funcionamiento ni hablar). Algunas cosas en él pueden mejorarse, pero bueno, no es el tema. Lo puse porque la cuestión del tema requiere que pueda codificarse, o sea hacer que la cosa funcione. La cuestión es que el usuario pueda describir condiciones y qué se hace en ellas, y que el programa funcione de esa forma. Uds pueden recomendarme que haga esto o aquello, yo mismo tengo ideas, pero si codificarlas es extremadamente difícil, entonces no me serviría mucho por ahora. Por eso hice énfasis en que funcione.

Ahora, si no lo han hecho ya, los invito a buscar fallas o limitaciones en el sistema de descripción. Entonces pasaremos a la cuestión de cómo mejorarlo.

¿Listo?

Ok, diré fallas que yo veo:
- En la sección 1 son sólo 2 líneas, deberían ser más.
>>> No es posible hacer operaciones entre las variables (*).
>>> No es posible poner paréntesis.
- En la sección 2 es sólo 1 línea, idem.
>>> No es posible hacer relaciones entre más de 2 condiciones (**).
- Es molesto andar cambiando de secciones, es un clic extra y todo...
- Es molesto tener que memorizar o rever los ID de cada condición y relaciones.

(*): No es posible decir, por ejemplo, Math.floor(A) == A, ni tampoco A+B == C
(**): No es posible decir, por ejemplo, 1 && 2 && 3

Las que puse con >>> son las que me importan por ahora. Con las demás creo que podré manejarme o son los efectos no deseados y posiblemente inevitables de un remedio (***), por ahora me resulta secundario.
(***): La "enfermedad" era "tener que reescribir condiciones".

Ok, el tema de los operadores y paréntesis lo estoy dejando para más adelante. La cuestión entonces son las relaciones.

Pero lo que me preocupa no es tanto que puedan ser más, sino cómo se interpretarían.

Esto:
(A == B && B == C) or A>C
no sería lo mismo que esto:
A == B && (B == C or A>C)

Supongo que la compu tiene una interpretación por convención, al igual que las ecuaciones con esas reglas de * y / se aplican antes que + y -, todo en pos de que todo lo pensable pueda ser aplicado. En el caso de las ecuaciones no sé para qué los matemáticos lo hicieron así, lo aprendí y así lo usé, pero en el caso que nos compete quiero saber cuales serían los motivos de la convención si es que la/los hay, más allá de evitar que cada uno interprete diferente.

Además, tengo cierto "temor" de que si se interpreta de una forma entonces sería imposible expresar la otra.
Veamos. Para el 1er caso podría usar un if y un else if (***). Para el 2ndo podría usar un if y luego otro if dentro. No hay problema, pero con esas, con otras no sé.
(***): Pero hay que escribir 2 veces el mismo efecto.

So. Agradezco sugerencias y aclaraciones sobre estos asuntos.

Los símbolos de las relaciones no tienen por qué ser los mismos que se usan en los lenguajes de programación. De hecho un poco lo que pienso es crear alguno, porque quiero evitar los paréntesis, ellos me obligarían a crear más columnas en la descripción y complicarían bastante la interpretación en código.
También he pensado que sería necesario un símbolo que diga "pero no":
(A && B) pero no C
A && (B pero no C)
Por cierto en ese caso es lo mismo independientemente de dónde se pongan los paréntesis.
Supongo que dicho símbolo existe, pero bue, nunca lo usé... Para casos como este habría usado "si no C, entonces si A && B...".

En pos de ver en imágenes las posibles condiciones, he pensado en hacer representaciones al estilo conjuntos, fue lo que se me ocurrió. Es decir, quiero ver las posibilidades, y no parece cuestión de hacer combinatoria porque, como acabo de decir, algunas son lo mismo a pesar de las diferencias. Mis representaciones consisten en escribir 1 2 3 y hacer un circulo que encierre a las condiciones requeridas. Si hay 2 formas de validar entonces habrá 2 circulos. And so on. Pensé que no servía en casos complicados, pero acabo de ver uno y se me ocurrió una forma que ayer no. Cosas que pasan, aún así les dejo el método por si alguno me puede decir uno mejor. Para los casos "pero no" he pensado en poner, debajo del 1 2 3, x1 x2 x3. Y bueno el circulo encerraría uno u otro según el caso. Si no encierra alguno entonces esa condición sería irrelevante. Pero ese método no he probado mucho que sirva.

Gracias.

Por Tachikomaia

73 de clabLevel



 

chrome
Citar            
MensajeEscrito el 29 Abr 2015 05:49 am
Esto es parte del programa que estoy haciendo, lo que describí pero sin la aplicación
https://dl.dropboxusercontent.com/u/169164922/C01%2CA000%2CA001%2CA00000%2C0025%2Cshow.swf

Por Tachikomaia

73 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 May 2015 05:19 am
No entiendo bien qué problemas tenía ni cuales tengo, pero creo que zafé del que me preocupaba.

Antes:


Para indicar que un cambio se activara en las condiciones 1 o 2, había que elegir relación "or" (por ahora no hay condición 2 porque en la sección 1 sólo hay 1 línea, estaba pensando para casos por venir). Y esto, combinado con otras cosas, eran descripciones confusas como expliqué antes. Había que incluir paréntesis o algo así complicado -codificarlo- para evitarlo.
Lo que está todo rojo corresponde a la descripción de los cambios, que NO es el tema. El tema es la descripción de las condiciones en que se activan esos cambios.

Ahora:


Para indicar que un cambio se active en una condición u otras, se usa la sección 3 (ver imagen "Antes"): Donde dice Condición, se podrá agregar más campos de texto como ese y en cada uno poner una condición en que se active el cambio.
Lo que se ve en la nueva imagen es un cambio en la sección 2. Ya no se escribe la relación "or" y cada fila está dividida en 2. También cambió el sentido, antes eran columnas y ahora filas.
En la fila de arriba se ponen las condiciones con las cuales este grupo de condiciones NO se cumple.
En la de abajo las que son requeridas.

Por Tachikomaia

73 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.