Los números que mi programa produce, si tienen parte decimal ella no termina en 0, no me interesa el 30.000 porque es como un 30. En cambio 30.001 sí es admitido. La parte decimal no debe terminar en 0.
Ya hice lo que quería, sólo necesito marcar el límite correctamente como ya expliqué.
Este es el código completo, cada etapa (y función) se repite en distintos frames hasta que ella misma indique que se debe avanzar a la siguiente:
// Este programa produce números cada vez más largos,
// intercalándolos según el tipo,
// entre más decimales 1ero,
// y secundariamente los negativos 1ero.
//
// El 0 aquí se refiere a la cantidad de decimales
// (pero los números se guardan como enteros):
LastPositivoDe0 = -1;
// El programa tiene 5 etapas:
// 1: Esta, donde sólo se definen cosas.
// 2: Produce el 0 y números positivos de 0 decimales.
// 3: Negativos y positivos, de 0 decimales.
// 4: Positivos de 1, negativos y positivos de 0.
// 5: Va creando 2 tipos de número.
// Variables como esta determinan cuánto dura cada etapa,
// o cuando se crean listas y sus máximos valores:
MaxPositivoDe0 = 9;
// Esto se repite en el frame 2:
function Etapa2 () {
// Producir el 0 o un número positivo:
LastPositivoDe0++;
trace (LastPositivoDe0);
if (LastPositivoDe0 == MaxPositivoDe0) {
// No hay más números de largo 1,
// crear lista de negativos:
LastNegativoDe0 = 0;
// Indicar nuevos máximos:
MaxPositivoDe0 = 99;
MaxNegativoDe0 = -9;
// Avanzar etapa:
gotoAndStop (3);
}
}
// Esto se repite en el frame 3:
function Etapa3 () {
// ¿Se puede producir un número negativo de largo 2?
if (LastNegativoDe0>MaxNegativoDe0) {
// Sí, producirlo:
LastNegativoDe0--;
trace (LastNegativoDe0);
}
// Positivo:
LastPositivoDe0++;
trace (LastPositivoDe0);
if (LastPositivoDe0 == MaxPositivoDe0) {
// No hay más números de largo 2.
// crear lista de positivos de 1 decimal:
LastPositivoDe1 = 0;
// Indicar nuevos máximos:
MaxPositivoDe0 = 999;
MaxNegativoDe0 = -99;
// Recuérdese que las listas de decimales...
// son guardadas como enteros.
MaxPositivoDe1 = 99;
// Avanzar etapa:
gotoAndStop (4);
}
}
// Esto se repite en el frame 4:
function Etapa4 () {
// ¿Se pueda producir un número positivo de 1 decimal y largo 3?
if (LastPositivoDe1<MaxPositivoDe1) {
// Sí, producirlo:
LastPositivoDe1++;
// ¿Termina en 0?:
Textualizado = String(LastPositivoDe1);
LastChar = Textualizado.charat(Textualizado.length-1);
if (LastChar == 0) {
// Sí, ergo al convertirlo a decimales...
// no tendrá largo 3, arreglarlo:
LastPositivoDe1++;
}
Decimaleado = LastPositivoDe1/10;
trace (Decimaleado);
}
// ¿Se puede producir un número negativo de largo 3?
if (LastNegativoDe0>MaxNegativoDe0) {
// Sí, producirlo:
LastNegativoDe0--;
trace (LastNegativoDe0);
}
// Positivo:
LastPositivoDe0++;
trace (LastPositivoDe0);
if (LastPositivoDe0 == MaxPositivoDe0) {
// No hay más números de largo 3,
// crear nuevas listas:
LastPositivoDe2 = 0;
LastNegativoDe1 = 0;
// Indicar nuevos máximos:
MaxPositivoDe0 = 9999;
MaxNegativoDe0 = -999;
MaxPositivoDe1 = 999;
MaxNegativoDe1 = -99;
MaxPositivoDe2 = 999;
// Para la siguiente etapa:
MaxDecimales = 2;
Decimales = 2;
trace ("Inicia la 5");
gotoAndStop (5);
}
}
// Esto se repite en el frame 5:
function Etapa5 () {
// ¿Se puede producir un número positivo de X decimales y largo Y?
// X = Decimales.
Resumen = "LastPositivoDe"+Decimales;
// trace("Resumen: "+Resumen);
Evalued = eval(Resumen);
// trace("Evalued: "+Evalued);
if (Evalued<eval("MaxPositivoDe"+Decimales)) {
// Sí, producirlo:
Evalued++;
// ¿Termina en 0?:
Textualizado = String(Evalued);
LastChar = Textualizado.charat(Textualizado.length-1);
if (LastChar == 0) {
// Sí, ergo al convertirlo a decimales...
// no será del largo requerido, arreglarlo:
Evalued++;
}
Decimaleado = Evalued/Math.pow(10, Decimales);
trace (Decimaleado);
// Guardarlo en la lista:
set (Resumen, Evalued);
}
do {
// Repetir mientras Decimales > 0:
Decimales--;
// ¿Se puede producir un número negativo de X decimales y largo Y?
Resumen = "LastNegativoDe"+Decimales;
// trace("Resumen: "+Resumen);
Evalued = eval(Resumen);
// trace("Evalued: "+Evalued);
if (Evalued>eval("MaxNegativoDe"+Decimales)) {
// Sí, producirlo:
Evalued--;
if (Decimales>0) {
// ¿Termina en 0?:
Textualizado = String(Evalued);
LastChar = Textualizado.charat(Textualizado.length-1);
if (LastChar == 0) {
// Sí, ergo al convertirlo a decimales...
// no será de largo Y, arreglarlo:
Evalued--;
}
}
Decimaleado = Evalued/Math.pow(10, Decimales);
trace (Decimaleado);
// Guardarlo en la lista:
set (Resumen, Evalued);
}
// ¿Se puede producir un número positivo de X decimales y largo Y?
// X = Decimales.
Resumen = "LastPositivoDe"+Decimales;
// trace("Resumen: "+Resumen);
Evalued = eval(Resumen);
// trace("Evalued: "+Evalued);
if (Evalued<eval("MaxPositivoDe"+Decimales)) {
// Sí, producirlo:
Evalued++;
if (Decimales>0) {
// ¿Termina en 0?:
Textualizado = String(Evalued);
LastChar = Textualizado.charat(Textualizado.length-1);
if (LastChar == 0) {
// Sí, ergo al convertirlo a decimales...
// no tendrá largo Y, arreglarlo:
Evalued++;
}
}
Decimaleado = Evalued/Math.pow(10, Decimales);
trace (Decimaleado);
// Guardarlo en la lista:
set (Resumen, Evalued);
}
if (LastPositivoDe0 == MaxPositivoDe0) {
// INDICAR SI CONTINÚA O PARA:
// No hay más números de largo Y.
// crear listas para números más largos:
MaxDecimales++;
set ("LastPositivoDe"+MaxDecimales, 0);
set ("LastNegativoDe"+MaxDecimales, 0);
// Indicar nuevos máximos:
MaxPositivoDe0 = Math.pow(10, Decimales+1)-1;
MaxNegativoDe0 = Math.pow(10, Decimales)*-1+1;
Decimales = 0;
Maximo1 = Math.pow(10, Decimales)-1;
Maximo2 = Math.pow(10, Decimales-1)*-1+1;
do {
Decimales++;
set ("MaxPositivoDe"+Decimales, Maximo1);
set ("MaxNegativoDe"+Decimales, Maximo2);
} while (Decimales<MaxDecimales);
}
} while (Decimales>0);
Decimales = MaxDecimales;
}
El resultado en pantalla cuando empieza la etapa 5 es:
0.01
-0.1
10.1
-100
1000
0.02
-0.2
10.2
-101
1001
y sigue así.