Autor Tema: Programa asigna valores a partes de una comparación ¿falla?

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

25 Junio, 2024, 09:07 am
Leído 739 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Código: (actionscript) [Seleccionar]
// Este programa genera una comparación simple y su evaluación, pero:
// Debe haber alguna parte cuyo contenido no está definido.
// Ejemplo: 1 < ... : true
// Luego intenta asignar los contenidos faltantes.
// Las siguientes funciones se usan en Resolvedor:
function Comparacion() {
trace("Probando: "+P1+" "+P2+" "+P3+": "+P4);
if (P2 == "==") {
Resultado = P1 == P3;
} else if (P2 == "!=") {
Resultado = P1 != P3;
} else if (P2 == "<=") {
Resultado = P1 <= P3;
} else if (P2 == ">=") {
Resultado = P1 >= P3;
} else if (P2 == "<") {
Resultado = P1 < P3;
} else {
Resultado = P1 > P3;
}
return Resultado+"" == P4;
}
function ModificarP1() {
if (P1<10) {
P1++;
} else {
Puntero++;
// ¿Se puede modificar el contenido de otra parte?
if (Puntero > Indefinidos) {
// Sí, resetear esta y modificar esa:
P1 = 0;
eval("ModificarP"+eval("Indefinido"+Puntero))();
} else {
// No, indicar que el resolvedor se detenga:
Continuar = "No";
}
}
}
function ModificarP2() {
if (P2Valor<6) {
P2Valor++;
P2 = PosiblesSignos[P2Valor];
Puntero = 1;
} else {
Puntero++;
// ¿Se puede modificar el contenido de otra parte?
if (Puntero > Indefinidos) {
// Sí, resetear esta y modificar esa:
P2Valor = 0;
P2 = "==";
eval("ModificarP"+eval("Indefinido"+Puntero))();
} else {
// No, indicar que el resolvedor se detenga:
Continuar = "No";
}
}
}
function ModificarP3() {
if (P3<10) {
P3++;
Puntero = 1;
} else {
Puntero++;
// ¿Se puede modificar el contenido de otra parte?
if (Puntero > Indefinidos) {
// Sí, resetear esta y modificar esa:
P3 = 0;
eval("ModificarP"+eval("Indefinido"+Puntero))();
} else {
// No, indicar que el resolvedor se detenga:
Continuar = "No";
}
}
}
function ModificarP4() {
if (P4 == "true") {
P4 = "false";
Puntero = 1;
} else {
Puntero++;
// ¿Se puede modificar el contenido de otra parte?
if (Puntero > Indefinidos) {
// Sí, resetear esta y modificar esa:
P4 = "true";
eval("ModificarP"+eval("Indefinido"+Puntero))();
} else {
// No, indicar que el resolvedor se detenga:
Continuar = "No";
}
}
}
// Se repite en F2:
function Resolvedor () {
if (Comparacion()) {
trace ("Solución hallada, ver respuesta.");
Mensaje = Mensaje+"\n"+P1+" "+P2+" "+P3+": "+P4;
gotoAndStop (3);
} else if (Continuar == "Sí") {
// Se modificará el candidato:
eval(ModificadoraUsar)();
} else {
trace ("No se pudo hallar una solución.");
gotoAndStop (3);
}
}
PosiblesTiposDeContenido = ["Normal", "Indefinido"];
PosiblesSignos = ["==", "!=", "<=", ">=", "<", ">"];
// Generar los contenidos de las 4 partes hasta que alguno sea indefinido:
do {
Indefinidos = 0;
// Parte 1 (cosa 1 a comparar):
TipoDelParte1 = PosiblesTiposDeContenido[random(PosiblesTiposDeContenido.length)];
if (TipoDelParte1 == "Normal") {
Parte1 = random(10);
} else {
Parte1 = "...";
Indefinidos++;
set("Indefinido"+Indefinidos, 1);
}
// Parte 2 (símbolo comparador):
TipoDelParte2 = PosiblesTiposDeContenido[random(PosiblesTiposDeContenido.length)];
if (TipoDelParte2 == "Normal") {
Parte2 = PosiblesSignos[random(6)];
} else {
Parte2 = "...";
Indefinidos++;
set("Indefinido"+Indefinidos, 2);
}
// Parte 3 (cosa 2 a comparar):
TipoDelParte3 = PosiblesTiposDeContenido[random(PosiblesTiposDeContenido.length)];
if (TipoDelParte3 == "Normal") {
Parte3 = random(10);
} else {
Parte3 = "...";
Indefinidos++;
set("Indefinido"+Indefinidos, 3);
}
// Parte 4 (evaluación):
TipoDelParte4 = PosiblesTiposDeContenido[random(PosiblesTiposDeContenido.length)];
if (TipoDelParte4 == "Normal") {
// Definir esta parte según las anteriores:
// ¿Fueron definidas?
if (Parte1 != "..." && Parte2 != "..." && Parte3 != "...") {
// Sí, ver qué definición corresponde:
if (Parte2 == "==") {
Parte4 = Parte1 == Parte3;
} else if (Parte2 == "!=") {
Parte4 = Parte1 != Parte3;
} else if (Parte2 == "<=") {
Parte4 = Parte1 <= Parte3;
} else if (Parte2 == ">=") {
Parte4 = Parte1 >= Parte3;
} else if (Parte2 == "<") {
Parte4 = Parte1 < Parte3;
} else {
Parte4 = Parte1 > Parte3;
}
} else {
// No toda parte fue definida,
// definir esta al azar:
Parte4 = random(2);
if (Parte4 == 0) {
Parte4 = "true";
} else {
Parte4 = "false";
}
}
} else {
Parte4 = "...";
Indefinidos++;
set("Indefinido"+Indefinidos, 4);
}
} while (Indefinidos == 0);
Mensaje = Parte1+" "+Parte2+" "+Parte3+": "+Parte4;
// Preparar variables, asignar valores a los contenidos indefinidos:
// Parte 1:
if (Parte1 != "...") {
P1 = Parte1;
} else {
P1 = 0;
}
// Parte 2:
if (Parte2 != "...") {
P2 = Parte2;
} else {
P2Valor = 0;
P2 = "==";
}
// Parte 3:
if (Parte3 != "...") {
P3 = Parte3;
} else {
P3 = 0;
}
// Parte 4:
if (Parte4 != "...") {
P4 = Parte4;
} else {
P4 = "true";
}
// Usado para variar qué contenido de P se modifica:
Puntero = 1;
ModificadoraUsar = "ModificarP"+Indefinido1;
// Marca si algún cantenido puede modificarse:
Continuar = "Sí";

Ejemplo:
8 ... ...: ...
Probando: 8 == 0: true
Probando: 8 != 0: true
Solución hallada, ver respuesta.

Otro ejemplo:
... > 4: ...
Probando: 0 > 4: true
Probando: 1 > 4: true
Probando: 2 > 4: true
Probando: 3 > 4: true
Probando: 4 > 4: true
Probando: 5 > 4: true
Solución hallada, ver respuesta.

¿Funciona bien siempre? ¿detectan algo en el código que podría generar fallas?

Si pongo un botón de resetear ¿habrá problema? Pondría las funciones en el frame 1, la comparación se generaría en el 2 y el resolvedor se repetiría en el 3; mi temor es que una variable no eliminada, que no estaba definida al inicio, cause un error.