Por ejemplo "las que 1ero fueron contactadas desde la izquierda". Confirmar que el programa funcione bien es una tarea más larga y aburrida que hacer el programa, pero tal vez si uds ven el código noten algún error. Es de Macromedia Flash, supuestamente Action Script 1.0:
La lista de variables es tan larga que por las dudas no la pongo, pero por ejemplo:
Variable _level0.Fi = 3
Variable _level0.Fd = 3
Variable _level0.Fa = 1
Variable _level0.T1 = 3
Variable _level0.Ts = 4
...
Variable _level0.NoFi = 4
Variable _level0.NoFd = 4
Variable _level0.NoFa = 6
Variable _level0.NoSi = 4
Variable _level0.NoSd = 5
...
Variable _level0.FioFd = 6
Variable _level0.FioFa = 4
Variable _level0.FioT1 = 4
Variable _level0.FioTs = 6
Variable _level0.FiyTs = 1
A ver, algunas explicaciones, pero será mejor que pregunten.
Las variables que tienen una "o" significan que cuentan (o deberían contar) las veces que una escalera cumple una condición u otra.
Las que dicen "y" deberían contar las veces que una escalera cumple las 2 condiciones que dice la variable.
Son combinaciones de condiciones.
La idea es ahorrar tiempo. Son datos que pueden deducirse a partir de los datos iniciales al principio del código. La idea es que los deduzca el programa. Hay combinaciones que son un sin sentido, que siempre van a dar 0 o el mismo valor de 1 parte, si la otra es redundante, pero evitar que sucedan ciertas combinaciones implicaría más código y más tiempo dedicado, así que quedó así.
Me cuesta entender el programa, pero a ver, para que se produzcan las combinaciones me pareció que lo más sencillo era que las posibilidades estuvieran en una lista y un par de contadores en whiles vayan variando. Para eso cree la lista de variables, o sea, no sólo existen las variables (los contadores de cosas relativas a escaleras), sino una lista de ellas: Nombre1, Nombre2, etc, cuyos valores indican a las variables. Asi, usando contador en un while, se indica la variable, o más bien su nombre, que ha de combinarse con otras.
También hay variables que indican si las variables simples deben aumentar, así cuando se combinan se sabe si deben aumentar o no.
Código:
// Programa para contar cosas...
// relativas a contactos con escaleras.
//
// Datos sobre la escalera 1:
// Lugar por el que fue contactada 1ero:
Escalera1First = "I";
// Veces que fue contactada por la izq, etc:
Escalera1Izq = 3;
Escalera1Der = 0;
Escalera1Arr = 0;
// Lugar por el que fue contactada por última vez:
Escalera1Last = "I";
// Datos sobre la escalera 2:
Escalera2First = "D";
Escalera2Izq = 0;
Escalera2Der = 2;
Escalera2Arr = 0;
Escalera2Last = "D";
// 3:
Escalera3First = "I";
Escalera3Izq = 1;
Escalera3Der = 0;
Escalera3Arr = 0;
Escalera3Last = "I";
// 4:
Escalera4First = "D";
Escalera4Izq = 2;
Escalera4Der = 1;
Escalera4Arr = 1;
Escalera4Last = "I";
// 5:
Escalera5First = "A";
Escalera5Izq = 1;
Escalera5Der = 0;
Escalera5Arr = 1;
Escalera5Last = "I";
// 6:
Escalera6First = "D";
Escalera6Izq = 0;
Escalera6Der = 1;
Escalera6Arr = 0;
Escalera6Last = "D";
// 7:
Escalera7First = "I";
Escalera7Izq = 1;
Escalera7Der = 0;
Escalera7Arr = 0;
Escalera7Last = "I";
// Inicio variables para más claridad al ver resultados:
// Escaleras que 1ero fueron contactadas por la izq:
Fi = 0;
// derecha:
Fd = 0;
// arriba:
Fa = 0;
// Escaleras que fueron contactadas sólo 1 vez:
T1 = 0;
// más de 1 vez:
Ts = 0;
// Escaleras que sólo fueron contactadas por (lado):
Si = 0;
Sd = 0;
Sa = 0;
// Escaleras que por la izquierda fueron contactadas 0 veces:
I0 = 0;
// sólo 1 vez:
I1 = 0;
// alguna vez (>0):
Ia = 0;
// más de una vez:
Is = 0;
// Lo mismo pero por la derecha:
D0 = 0;
D1 = 0;
Da = 0;
Ds = 0;
// Lo mismo pero por arriba:
A0 = 0;
A1 = 0;
Aa = 0;
As = 0;
// Escaleras que por última vez fueron contactadas desde (lado):
Li = 0;
Ld = 0;
La = 0;
// Escaleras que 1ero y al final fueron contactadas por el mismo lado (e=equal):
FeL = 0;
// x=distinto
FxL = 0;
// Escaleras que por la izquierda fueron contactadas...
// la misma cantidad de veces que por la derecha:
IeD = 0;
// desde la izquierda menos (l=lees):
IlD = 0;
// desde la izquierda más (m=more):
ImD = 0;
// lees or equal:
IleD = 0;
// equal or more:
ImeD = 0;
// diferente:
IxD = 0;
// Todo lo mismo pero en vez de derecha, arriba:
IeA = 0;
IlA = 0;
ImA = 0;
IleA = 0;
ImeA = 0;
IxA = 0;
// Todo lo mismo pero en vez de izquierda, abajo:
DeA = 0;
DlA = 0;
DmA = 0;
DleA = 0;
DmeA = 0;
DxA = 0;
// Negativas de las que no tienen ya definidas:
NoFi = 0;
NoFd = 0;
NoFa = 0;
// Por ejemplo "No solo izq" no significa que haya sido...
// contactada por la izq y por otro lado,
// sino simplemente que fue contactada por algún lado que...
// no es izq, independientemente de si fue contactada por izq.
// Ponerle otro nombre complicaría el programa:
NoSi = 0;
NoSd = 0;
NoSa = 0;
NoI1 = 0;
NoIs = 0;
NoD1 = 0;
NoDs = 0;
NoA1 = 0;
NoAs = 0;
NoLi = 0;
NoLd = 0;
NoLa = 0;
function NadaAumentado () {
Variable = 0;
do {
Variable++;
set("DebeAumentarLaVar"+Variable, "No");
} while (Variable < 43);
}
function ParaTotalPorUnLado () {
if (Res2 == 0) {
set("DebeAumentarLaVar"+(9+PunteroDeVariables), "Sí");
} else if (Res2 == 1) {
set("DebeAumentarLaVar"+(10+PunteroDeVariables), "Sí");
set("DebeAumentarLaVar"+(11+PunteroDeVariables), "Sí");
} else if (Res2 > 1) {
set("DebeAumentarLaVar"+(11+PunteroDeVariables), "Sí");
set("DebeAumentarLaVar"+(12+PunteroDeVariables), "Sí");
}
}
function ParaRelacionDeTotales () {
if (Res2 == Res3) {
set("DebeAumentarLaVar"+(26+PunteroDeVariables), "Sí");
set("DebeAumentarLaVar"+(29+PunteroDeVariables), "Sí");
set("DebeAumentarLaVar"+(30+PunteroDeVariables), "Sí");
} else if (Res2 < Res3) {
set("DebeAumentarLaVar"+(27+PunteroDeVariables), "Sí");
set("DebeAumentarLaVar"+(29+PunteroDeVariables), "Sí");
set("DebeAumentarLaVar"+(31+PunteroDeVariables), "Sí");
} else {
set("DebeAumentarLaVar"+(28+PunteroDeVariables), "Sí");
set("DebeAumentarLaVar"+(30+PunteroDeVariables), "Sí");
set("DebeAumentarLaVar"+(31+PunteroDeVariables), "Sí");
}
}
// Cosas que pueden contarse:
// First:
Nombre1 = "Fi";
Nombre2 = "Fd";
Nombre3 = "Fa";
// Total:
Nombre4 = "T1";
Nombre5 = "Ts";
// Solo:
Nombre6 = "Si";
Nombre7 = "Sd";
Nombre8 = "Sa";
// Total desde un lado:
Nombre9 = "I0";
Nombre10 = "I1";
Nombre11 = "Ia";
Nombre12 = "Is";
Nombre13 = "D0";
Nombre14 = "D1";
Nombre15 = "Da";
Nombre16 = "Ds";
Nombre17 = "A0";
Nombre18 = "A1";
Nombre19 = "Aa";
Nombre20 = "As";
// Last:
Nombre21 = "Li";
Nombre22 = "Ld";
Nombre23 = "La";
// Relación First y Last:
Nombre24 = "FeL";
Nombre25 = "FxL";
// Relación entre el total de un lado y otro:
Nombre26 = "IeD";
Nombre27 = "IlD";
Nombre28 = "ImD";
Nombre29 = "IleD";
Nombre30 = "ImeD";
Nombre31 = "IxD";
Nombre32 = "IeA";
Nombre33 = "IlA";
Nombre34 = "ImA";
Nombre35 = "IleA";
Nombre36 = "ImeA";
Nombre37 = "IxA";
Nombre38 = "DeA";
Nombre39 = "DlA";
Nombre40 = "DmA";
Nombre41 = "DleA";
Nombre42 = "DmeA";
Nombre43 = "DxA";
//
Escalera = 0;
do {
NadaAumentado();
Escalera++;
trace("Analizando datos de la escalera "+Escalera);
// Ver qué debe aumentar por datos de esta escalera:
// Resumen:
Res = "Escalera"+Escalera;
// First:
if (eval(Res+"First") == "I") {
DebeAumentarLaVar1 = "Sí";
} else if (eval(Res+"First") == "D") {
DebeAumentarLaVar2 = "Sí";
} else {
DebeAumentarLaVar3 = "Sí";
}
// Total:
Contactos = eval(Res+"Izq")+eval(Res+"Der")+eval(Res+"Arr");
if (Contactos == 1) {
DebeAumentarLaVar4 = "Sí";
} else {
DebeAumentarLaVar5 = "Sí";
}
// Sólo por un lado:
if (Contactos - eval(Res+"Izq") == 0) {
DebeAumentarLaVar6 = "Sí";
} else if (Contactos - eval(Res+"Der") == 0) {
DebeAumentarLaVar7 = "Sí";
} else if (Contactos - eval(Res+"Arr") == 0) {
DebeAumentarLaVar8 = "Sí";
}
// Total desde un lado:
Res2 = eval(Res+"Izq");
PunteroDeVariables = 0;
ParaTotalPorUnLado();
Res2 = eval(Res+"Der");
PunteroDeVariables = 4;
ParaTotalPorUnLado();
Res2 = eval(Res+"Arr");
PunteroDeVariables = 8;
ParaTotalPorUnLado();
// Last:
if (eval(Res+"Last") == "I") {
DebeAumentarLaVar21 = "Sí";
} else if (eval(Res+"Last") == "D") {
DebeAumentarLaVar22 = "Sí";
} else {
DebeAumentarLaVar23 = "Sí";
}
// Relación First y Last:
if (eval(Res+"First") == eval(Res+"Last")) {
DebeAumentarLaVar24 = "Sí";
} else {
DebeAumentarLaVar25 = "Sí";
}
// Relación entre el total de un lado y otro:
// Izq y Der:
Res2 = eval(Res+"Izq");
Res3 = eval(Res+"Der");
PunteroDeVariables = 0;
ParaRelacionDeTotales();
// Izq y Arr:
Res3 = eval(Res+"Arr");
PunteroDeVariables = 6;
ParaRelacionDeTotales();
// Der y Arr:
Res2 = eval(Res+"Der");
PunteroDeVariables = 12;
ParaRelacionDeTotales();
// Aaumentar variables marcadas como que deben aumentar:
Variable = 0;
do {
Variable++;
if (eval("DebeAumentarLaVar"+Variable) == "Sí") {
// La variable está marcada como que debe aumentar, aumenta:
set(eval("Nombre"+Variable), eval(eval("Nombre"+Variable))+1);
if (eval("Nombre"+Variable) == "Fi") {
trace("Aumentó Fi");
}
// Aumentar las mezclas "o" con otras,
// y si corresponde, las "y":
Variable2 = Variable+1;
while (Variable2 < 43) {
set(eval("Nombre"+Variable)+"o"+eval("Nombre"+Variable2), eval(eval("Nombre"+Variable)+"o"+eval("Nombre"+Variable2))+1);
if (eval("Nombre"+Variable2) == "T1") {
trace("Aumentó FioT1");
}
if (eval("DebeAumentarLaVar"+Variable2) == "Sí") {
set(eval("Nombre"+Variable)+"y"+eval("Nombre"+Variable2), eval(eval("Nombre"+Variable)+"y"+eval("Nombre"+Variable2))+1);
}
Variable2++;
}
} else {
if (eval("Nombre"+Variable) == "Fi") {
trace("Fi no aumentó");
}
// Ver si su negativa existe:
if (eval("No"+eval("Nombre"+Variable)) != undefined) {
// Aumenta:
set("No"+eval("Nombre"+Variable), eval("No"+eval("Nombre"+Variable))+1);
}
// Ver si alguna mezcla debe aumentar:
Variable2 = Variable+1;
while (Variable2 < 43) {
if (eval("DebeAumentarLaVar"+Variable2) == "Sí") {
set(eval("Nombre"+Variable)+"o"+eval("Nombre"+Variable2), eval(eval("Nombre"+Variable)+"o"+eval("Nombre"+Variable2))+1);
if (eval("Nombre"+Variable2) == "T1") {
trace("Aumentó FioT1");
}
}
Variable2++;
}
}
} while (Variable < 43);
} while (Escalera<7);
Variable _level0.Fi = 3
Variable _level0.Fd = 3
Variable _level0.Fa = 1
Variable _level0.T1 = 3
Variable _level0.Ts = 4
...
Variable _level0.NoFi = 4
Variable _level0.NoFd = 4
Variable _level0.NoFa = 6
Variable _level0.NoSi = 4
Variable _level0.NoSd = 5
...
Variable _level0.FioFd = 6
Variable _level0.FioFa = 4
Variable _level0.FioT1 = 4
Variable _level0.FioTs = 6
Variable _level0.FiyTs = 1
A ver, algunas explicaciones, pero será mejor que pregunten.
Las variables que tienen una "o" significan que cuentan (o deberían contar) las veces que una escalera cumple una condición u otra.
Las que dicen "y" deberían contar las veces que una escalera cumple las 2 condiciones que dice la variable.
Son combinaciones de condiciones.
La idea es ahorrar tiempo. Son datos que pueden deducirse a partir de los datos iniciales al principio del código. La idea es que los deduzca el programa. Hay combinaciones que son un sin sentido, que siempre van a dar 0 o el mismo valor de 1 parte, si la otra es redundante, pero evitar que sucedan ciertas combinaciones implicaría más código y más tiempo dedicado, así que quedó así.
Me cuesta entender el programa, pero a ver, para que se produzcan las combinaciones me pareció que lo más sencillo era que las posibilidades estuvieran en una lista y un par de contadores en whiles vayan variando. Para eso cree la lista de variables, o sea, no sólo existen las variables (los contadores de cosas relativas a escaleras), sino una lista de ellas: Nombre1, Nombre2, etc, cuyos valores indican a las variables. Asi, usando contador en un while, se indica la variable, o más bien su nombre, que ha de combinarse con otras.
También hay variables que indican si las variables simples deben aumentar, así cuando se combinan se sabe si deben aumentar o no.
