elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Mostrar en pantalla números cada vez más largos, de todo tipo e intercalando.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mostrar en pantalla números cada vez más largos, de todo tipo e intercalando.  (Leído 2,454 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.555


Hackentifiko!


Ver Perfil
Mostrar en pantalla números cada vez más largos, de todo tipo e intercalando.
« en: 31 Agosto 2024, 07:10 am »

Positivos, negativos y decimales. El - y el . cuentan en lo largo.

Al principio debería mostrar 0, 1, 2, y así hasta 9. Números de largo 1.

Luego -1, 10, -2, 11... y así, son de largo 2 y se van intercalando, me refiero a que no se muestra 1ero todos los negativos de largo 2 y luego todos los positivos de largo 2, sino que muestra un negativo de largo 2, luego un positivo de largo 2, y se repite eso hasta que no hayan de largo 2.

Luego 0.1, -10, 100, 0.2, -11, 101... la idea es la misma.

Luego 0.01, -0.1, 10.1, -100, 1000... creo que son 5 tipos, la idea es la misma. Los que tienen más decimales van 1ero, si 2 tipos tienen igual cantidad va el negativo 1ero. Probablemente se me está escapando algo pero más o menos es eso.

Lo que se me ocurre es algo como:
Código:
Largo = 1
MaxDecimalesActual = 0
// El último positivo de 0 decimales que se mostró es -1 (digamos):
LastPositivode0 = -1
// El último negativo de 0 decimales que se mostró es 0 (digamos):
LastNegativode0 = 0
Repetir hasta que el usuario lo indique
   Decimales = -1
   Repetir mientras Decimales < MaxDecimales
      Decimales++
      Divisor = Decimales
      Resumen = "LastPositivode"+Decimales
      // Aquí hay que multiplicar y luego dividir para evitar inexactitudes:
      NuevoNumero = eval(Resumen)+(1/
      LargodelNuevoNumero = (obtenerlo)
      Si LargodelNuevoNumero == Largo
         // Actualizar el último número de su tipo:
         set(Resumen, ProximoNumero)
         mostrar ProximoNumero
      sino si LargodelNuevoNumero < Largo
         //
         NuevoNumero = eval(Resumen)+1
         set(Resumen, ProximoNumero)
Hasta ahí llegué por ahora porque al número habría que sumarle en un caso 1, en otro caso 0.1, o 0.01, y así, o restarle, así que el modificador es variable, no me había dado cuenta. Ahora bien, ese código tiene el problema de que estaría haciendo sumas a ver si el número del tipo de turno puede mostrarse, lo cual es poco eficiente. En el mismo loop también se chequearía para el negativo. La cantidad de decimales iría aumentando, se resetearía al llegar al máximo y en ese punto aumentaría el largo.

Lo seguiré pensando pero si se les ocurre alguna solución o sugerencia díganme cual.


« Última modificación: 31 Agosto 2024, 07:17 am por Tachikomaia » En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.555


Hackentifiko!


Ver Perfil
Re: Mostrar en pantalla números cada vez más largos, de todo tipo e intercalando.
« Respuesta #1 en: 19 Septiembre 2024, 04:02 am »

Tengo un código. Funciona bien hasta la etapa 5. Esa etapa debería empezar así:
0.01
-0.1
10.1
-100
1000
y continuar sumando 1 a los positivos y restando 1 a los negativos.
Positivo de 2 decimales.
Negativo de 1 decimal.
Positivo de 1 decimal.
Negativo de 0 decimales.
Positivo de 0 decimales.

Pero por algún error o por errores inicia así:
0
0
9.9
-99
999
1000
y no muestra más números.

Si alguien encuentra el error favor dígame:
Código
  1. // Este programa produce números cada vez más largos,
  2. // intercalándolos según el tipo,
  3. // entre más decimales 1ero,
  4. // y secundariamente los negativos 1ero.
  5. //
  6. // El 0 aquí se refiere a la cantidad de decimales
  7. // (pero los números se guardan como enteros):
  8. LastPositivode0 = -1;
  9. // El programa tiene 5 etapas:
  10. // 1: Esta, donde sólo se definen cosas.
  11. // 2: Produce el 0 y números positivos de 0 decimales.
  12. // 3: Negativos y positivos, de 0 decimales.
  13. // 4: Positivos de 1, negativos y positivos de 0.
  14. // 5: Va creando 2 tipos de número.
  15. // Variables como esta determinan cuánto dura cada etapa,
  16. // o cuando se crean listas y sus máximos valores:
  17. MaxPositivoDe0 = 9;
  18. // Esto se repite en el frame 2:
  19. function Etapa2 () {
  20. // Producir el 0 o un número positivo:
  21. LastPositivode0++;
  22. trace (LastPositivode0);
  23. if (LastPositivode0 == MaxPositivoDe0) {
  24. // No hay más números de largo 1,
  25. // crear lista de negativos:
  26. LastNegativode0 = 0;
  27. // Indicar nuevos máximos:
  28. MaxPositivoDe0 = 99;
  29. MaxNegativoDe0 = -9;
  30. // Avanzar etapa:
  31. gotoAndStop (3);
  32. }
  33. }
  34. // Esto se repite en el frame 3:
  35. function Etapa3 () {
  36. // ¿Se puede producir un número negativo de largo 2?
  37. if (LastNegativode0>MaxNegativoDe0) {
  38. // Sí, producirlo:
  39. LastNegativode0--;
  40. trace (LastNegativode0);
  41. }
  42. // Positivo:
  43. LastPositivode0++;
  44. trace (LastPositivode0);
  45. if (LastPositivode0 == MaxPositivoDe0) {
  46. // No hay más números de largo 2.
  47. // crear lista de positivos de 1 decimal:
  48. LastPositivode1 = 0;
  49. // Indicar nuevos máximos:
  50. MaxPositivoDe0 = 999;
  51. MaxNegativoDe0 = -99;
  52. // Recuérdese que las listas de decimales...
  53. // son guardadas como enteros.
  54. MaxPositivoDe1 = 99;
  55. // Avanzar etapa:
  56. gotoAndStop (4);
  57. }
  58. }
  59. // Esto se repite en el frame 4:
  60. function Etapa4 () {
  61. // ¿Se pueda producir un número positivo de 1 decimal y largo 3?
  62. if (LastPositivode1<MaxPositivoDe1) {
  63. // Sí, producirlo:
  64. LastPositivode1++;
  65. // ¿Termina en 0?:
  66. Textualizado = String(LastPositivode1);
  67. LastChar = Textualizado.charat(Textualizado.length-1);
  68. if (LastChar == 0) {
  69. // Sí, ergo al convertirlo a decimales...
  70. // no tendrá largo 3, arreglarlo:
  71. LastPositivode1++;
  72. }
  73. Decimaleado = LastPositivode1/10;
  74. trace (Decimaleado);
  75. }
  76. // ¿Se puede producir un número negativo de largo 3?
  77. if (LastNegativode0>MaxNegativoDe0) {
  78. // Sí, producirlo:
  79. LastNegativode0--;
  80. trace (LastNegativode0);
  81. }
  82. // Positivo:
  83. LastPositivode0++;
  84. trace (LastPositivode0);
  85. if (LastPositivode0 == MaxPositivoDe0) {
  86. // No hay más números de largo 3,
  87. // crear nuevas listas:
  88. LastPositivode2 = 0;
  89. LastNegativode1 = 0;
  90. // Indicar nuevos máximos:
  91. MaxPositivoDe0 = 9999;
  92. MaxNegativoDe0 = -999;
  93. MaxPositivoDe1 = 999;
  94. MaxNegativoDe1 = -99;
  95. MaxPositivoDe2 = 999;
  96. // Para la siguiente etapa:
  97. MaxDecimales = 3;
  98. Decimales = 3;
  99. trace("Inicia la 5");
  100. gotoAndStop (5);
  101. }
  102. }
  103. // Esto se repite en el frame 5:
  104. function Etapa5 () {
  105. // ¿Se puede producir un número positivo de X decimales y largo Y?
  106. // X = Decimales.
  107. Resumen = "LastPositivode"+Decimales;
  108. Evalued = eval(Resumen);
  109. if (Evalued<eval("MaxPositivode"+Decimales)) {
  110. // Sí, producirlo:
  111. set (Resumen, Evalued+1);
  112. // ¿Termina en 0?:
  113. Textualizado = String(Evalued);
  114. LastChar = Textualizado.charat(Textualizado.length-1);
  115. if (LastChar == 0) {
  116. // Sí, ergo al convertirlo a decimales...
  117. // no tendrá largo 3, arreglarlo:
  118. set (Resumen, Evalued+1);
  119. }
  120. Decimaleado = Evalued/Math.pow(10, Decimales);
  121. trace (Decimaleado);
  122. }
  123. do {
  124. // Repetir mientras Decimales > 0:
  125. Decimales--;
  126. // ¿Se puede producir un número negativo de X decimales y largo Y?
  127. Resumen = "LastNegativode"+Decimales;
  128. Evalued = eval(Resumen);
  129. if (Evalued>eval("MaxNegativode"+Decimales)) {
  130. // Sí, producirlo:
  131. set (Resumen, Evalued-1);
  132. if (Decimales>0) {
  133. // ¿Termina en 0?:
  134. Textualizado = String(Evalued);
  135. LastChar = Textualizado.charat(Textualizado.length-1);
  136. if (LastChar == 0) {
  137. // Sí, ergo al convertirlo a decimales...
  138. // no tendrá largo 3, arreglarlo:
  139. set (Resumen, Evalued-1);
  140. }
  141. }
  142. Decimaleado = Evalued/Math.pow(10, Decimales);
  143. trace (Decimaleado);
  144. }
  145. // ¿Se puede producir un número positivo de X decimales y largo Y?
  146. // X = Decimales.
  147. Resumen = "LastPositivode"+Decimales;
  148. Evalued = eval(Resumen);
  149. if (Evalued<eval("MaxPositivode"+Decimales)) {
  150. // Sí, producirlo:
  151. set (Resumen, Evalued+1);
  152. if (Decimales>0) {
  153. // ¿Termina en 0?:
  154. Textualizado = String(Evalued);
  155. LastChar = Textualizado.charat(Textualizado.length-1);
  156. if (LastChar == 0) {
  157. // Sí, ergo al convertirlo a decimales...
  158. // no tendrá largo 3, arreglarlo:
  159. set (Resumen, Evalued+1);
  160. }
  161. }
  162. Decimaleado = Evalued/Math.pow(10, Decimales);
  163. trace (Decimaleado);
  164. }
  165. if (LastPositivode0 == MaxPositivoDe0) {
  166. // INDICAR SI CONTINÚA O PARA:
  167. // No hay más números de largo Y.
  168. // crear listas para números más largos:
  169. MaxDecimales++;
  170. set ("LastPositivode"+MaxDecimales, 0);
  171. set ("LastNegativode"+MaxDecimales, 0);
  172. // Indicar nuevos máximos:
  173. MaxPositivoDe0 = Math.pow(10, Decimales+1)-1;
  174. MaxNegativoDe0 = Math.pow(10, Decimales)*-1+1;
  175. Decimales = 0;
  176. Maximo1 = Math.pow(10, Decimales)-1;
  177. Maximo2 = Math.pow(10, Decimales-1)*-1+1;
  178. do {
  179. Decimales++;
  180. set ("MaxPositivode"+Decimales, Maximo1);
  181. set ("MaxNegativode"+Decimales, Maximo2);
  182. } while (Decimales<MaxDecimales);
  183. }
  184. } while (Decimales>0);
  185. }


« Última modificación: 19 Septiembre 2024, 04:31 am por Tachikomaia » En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.555


Hackentifiko!


Ver Perfil
Re: Mostrar en pantalla números cada vez más largos, de todo tipo e intercalando.
« Respuesta #2 en: 23 Septiembre 2024, 05:16 am »

Ya logré esto.
Código
  1. // Este programa produce números cada vez más largos,
  2. // intercalándolos según el tipo,
  3. // entre más decimales 1ero,
  4. // y secundariamente los negativos 1ero.
  5. //
  6. // El 0 aquí se refiere a la cantidad de decimales
  7. // (pero los números se guardan como enteros):
  8. LastPositivoDe0 = -1;
  9. // El programa tiene 5 etapas:
  10. // 1: Esta, donde sólo se definen cosas.
  11. // 2: Produce el 0 y números positivos de 0 decimales.
  12. // 3: Negativos y positivos, de 0 decimales.
  13. // 4: Positivos de 1, negativos y positivos de 0.
  14. // 5: Va creando 2 tipos de número.
  15. // Variables como esta determinan cuánto dura cada etapa,
  16. // o cuando se crean listas y sus máximos valores:
  17. MaxPositivoDe0 = 9;
  18. // Esto se repite en el frame 2:
  19. function Etapa2 () {
  20. // Producir el 0 o un número positivo:
  21. LastPositivoDe0++;
  22. trace (LastPositivoDe0);
  23. if (LastPositivoDe0 == MaxPositivoDe0) {
  24. // No hay más números de largo 1,
  25. // crear lista de negativos:
  26. LastNegativoDe0 = 0;
  27. // Indicar nuevos máximos:
  28. MaxPositivoDe0 = 99;
  29. MaxNegativoDe0 = -9;
  30. // Avanzar etapa:
  31. gotoAndStop (3);
  32. }
  33. }
  34. // Esto se repite en el frame 3:
  35. function Etapa3 () {
  36. // ¿Se puede producir un número negativo de largo 2?
  37. if (LastNegativoDe0>MaxNegativoDe0) {
  38. // Sí, producirlo:
  39. LastNegativoDe0--;
  40. trace (LastNegativoDe0);
  41. }
  42. // Positivo:
  43. LastPositivoDe0++;
  44. trace (LastPositivoDe0);
  45. if (LastPositivoDe0 == MaxPositivoDe0) {
  46. // No hay más números de largo 2.
  47. // crear lista de positivos de 1 decimal:
  48. LastPositivoDe1 = 0;
  49. // Indicar nuevos máximos:
  50. MaxPositivoDe0 = 999;
  51. MaxNegativoDe0 = -99;
  52. // Recuérdese que las listas de decimales...
  53. // son guardadas como enteros.
  54. MaxPositivoDe1 = 99;
  55. // Avanzar etapa:
  56. gotoAndStop (4);
  57. }
  58. }
  59. // Esto se repite en el frame 4:
  60. function Etapa4 () {
  61. // ¿Se pueda producir un número positivo de 1 decimal y largo 3?
  62. if (LastPositivoDe1<MaxPositivoDe1) {
  63. // Sí, producirlo:
  64. LastPositivoDe1++;
  65. // ¿Termina en 0?:
  66. Textualizado = String(LastPositivoDe1);
  67. LastChar = Textualizado.charat(Textualizado.length-1);
  68. if (LastChar == 0) {
  69. // Sí, ergo al convertirlo a decimales...
  70. // no tendrá largo 3, arreglarlo:
  71. LastPositivoDe1++;
  72. }
  73. Decimaleado = LastPositivoDe1/10;
  74. trace (Decimaleado);
  75. }
  76. // ¿Se puede producir un número negativo de largo 3?
  77. if (LastNegativoDe0>MaxNegativoDe0) {
  78. // Sí, producirlo:
  79. LastNegativoDe0--;
  80. trace (LastNegativoDe0);
  81. }
  82. // Positivo:
  83. LastPositivoDe0++;
  84. trace (LastPositivoDe0);
  85. if (LastPositivoDe0 == MaxPositivoDe0) {
  86. // No hay más números de largo 3,
  87. // crear nuevas listas:
  88. LastPositivoDe2 = 0;
  89. LastNegativoDe1 = 0;
  90. // Indicar nuevos máximos:
  91. MaxPositivoDe0 = 9999;
  92. MaxNegativoDe0 = -999;
  93. MaxPositivoDe1 = 999;
  94. MaxNegativoDe1 = -99;
  95. MaxPositivoDe2 = 999;
  96. // Para la siguiente etapa:
  97. MaxDecimales = 2;
  98. Decimales = 2;
  99. trace ("Inicia la 5");
  100. gotoAndStop (5);
  101. }
  102. }
  103. // Esto se repite en el frame 5:
  104. function Etapa5 () {
  105. // ¿Se puede producir un número positivo de X decimales y largo Y?
  106. // X = Decimales.
  107. Resumen = "LastPositivoDe"+Decimales;
  108. // trace("Resumen: "+Resumen);
  109. Evalued = eval(Resumen);
  110. // trace("Evalued: "+Evalued);
  111. if (Evalued<eval("MaxPositivoDe"+Decimales)) {
  112. // Sí, producirlo:
  113. Evalued++;
  114. // ¿Termina en 0?:
  115. Textualizado = String(Evalued);
  116. LastChar = Textualizado.charat(Textualizado.length-1);
  117. if (LastChar == 0) {
  118. // Sí, ergo al convertirlo a decimales...
  119. // no será del largo requerido, arreglarlo:
  120. Evalued++;
  121. }
  122. Decimaleado = Evalued/Math.pow(10, Decimales);
  123. trace (Decimaleado);
  124. // Guardarlo en la lista:
  125. set (Resumen, Evalued);
  126. }
  127. do {
  128. // Repetir mientras Decimales > 0:
  129. Decimales--;
  130. // ¿Se puede producir un número negativo de X decimales y largo Y?
  131. Resumen = "LastNegativoDe"+Decimales;
  132. // trace("Resumen: "+Resumen);
  133. Evalued = eval(Resumen);
  134. // trace("Evalued: "+Evalued);
  135. if (Evalued>eval("MaxNegativoDe"+Decimales)) {
  136. // Sí, producirlo:
  137. Evalued--;
  138. if (Decimales>0) {
  139. // ¿Termina en 0?:
  140. Textualizado = String(Evalued);
  141. LastChar = Textualizado.charat(Textualizado.length-1);
  142. if (LastChar == 0) {
  143. // Sí, ergo al convertirlo a decimales...
  144. // no será de largo Y, arreglarlo:
  145. Evalued--;
  146. }
  147. }
  148. Decimaleado = Evalued/Math.pow(10, Decimales);
  149. trace (Decimaleado);
  150. // Guardarlo en la lista:
  151. set (Resumen, Evalued);
  152. }
  153. // ¿Se puede producir un número positivo de X decimales y largo Y?
  154. // X = Decimales.
  155. Resumen = "LastPositivoDe"+Decimales;
  156. // trace("Resumen: "+Resumen);
  157. Evalued = eval(Resumen);
  158. // trace("Evalued: "+Evalued);
  159. if (Evalued<eval("MaxPositivoDe"+Decimales)) {
  160. // Sí, producirlo:
  161. Evalued++;
  162. if (Decimales>0) {
  163. // ¿Termina en 0?:
  164. Textualizado = String(Evalued);
  165. LastChar = Textualizado.charat(Textualizado.length-1);
  166. if (LastChar == 0) {
  167. // Sí, ergo al convertirlo a decimales...
  168. // no tendrá largo Y, arreglarlo:
  169. Evalued++;
  170. }
  171. }
  172. Decimaleado = Evalued/Math.pow(10, Decimales);
  173. trace (Decimaleado);
  174. // Guardarlo en la lista:
  175. set (Resumen, Evalued);
  176. }
  177. if (LastPositivoDe0 == MaxPositivoDe0) {
  178. // INDICAR SI CONTINÚA O PARA:
  179. // No hay más números de largo Y.
  180. // crear listas para números más largos:
  181. MaxDecimales++;
  182. set ("LastPositivoDe"+MaxDecimales, 0);
  183. set ("LastNegativoDe"+MaxDecimales, 0);
  184. // Indicar nuevos máximos:
  185. MaxPositivoDe0 = Math.pow(10, Decimales+1)-1;
  186. MaxNegativoDe0 = Math.pow(10, Decimales)*-1+1;
  187. Decimales = 0;
  188. Maximo1 = Math.pow(10, Decimales)-1;
  189. Maximo2 = Math.pow(10, Decimales-1)*-1+1;
  190. do {
  191. Decimales++;
  192. set ("MaxPositivoDe"+Decimales, Maximo1);
  193. set ("MaxNegativoDe"+Decimales, Maximo2);
  194. } while (Decimales<MaxDecimales);
  195. }
  196. } while (Decimales>0);
  197. Decimales = MaxDecimales;
  198. }
Al menos hasta donde probé, ese último if no llegó a ejecutarse.

He aquí el resultado a partir de la etapa 5:
0.01
-0.1
10.1
-100
1000
0.02
-0.2
10.2
-101
1001
0.03
-0.3
10.3
-102
1002
Y sigue.

Los errores que recuerdo eran:
- Había puesto "de" en vez de "De" en una parte.
- Modificaba Resumen, está bien, pero lo que necesitaba modificar en ese momento era Evalued.
- No ponía que Decimales vuelva a ser MaxDecimales.

No sé simplificar el programa, que sean menos etapas, y no sé si conviene.

Es probable que requiera una etapa 6 o algún límite para el largo de los números que produce.

También es probable que la parte de "Indicar nuevos máximos" en la etapa 5 esté mal, lo voy a consultar, pero bueno, ya está.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como mostrar la lectura de numeros?
Programación C/C++
razler 5 3,422 Último mensaje 26 Julio 2010, 03:45 am
por [L]ord [R]NA
Problema con números largos
Programación C/C++
DickGumshoe 6 4,156 Último mensaje 5 Julio 2012, 12:28 pm
por DickGumshoe
Mostrar paginas web cada ciertas visitas! « 1 2 »
Desarrollo Web
JETROX 19 8,623 Último mensaje 7 Septiembre 2012, 22:08 pm
por JETROX
[jQuery] Mostrar y Ocultar cada 5 segundos
Desarrollo Web
Shell Root 1 2,635 Último mensaje 26 Abril 2013, 21:13 pm
por engel lex
Mostrar números iguales en una misma linea
Programación C/C++
nemesis27 1 2,252 Último mensaje 23 Mayo 2017, 18:17 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines