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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  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 449 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.372


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.372


Hackentifiko!


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

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: Ayer a las 04:31 por Tachikomaia » 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,170 Último mensaje 26 Julio 2010, 03:45 am
por [L]ord [R]NA
Problema con números largos
Programación C/C++
DickGumshoe 6 3,828 Último mensaje 5 Julio 2012, 12:28 pm
por DickGumshoe
Mostrar paginas web cada ciertas visitas! « 1 2 »
Desarrollo Web
JETROX 19 7,849 Último mensaje 7 Septiembre 2012, 22:08 pm
por JETROX
[jQuery] Mostrar y Ocultar cada 5 segundos
Desarrollo Web
Shell Root 1 2,385 Ú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 1,918 Último mensaje 23 Mayo 2017, 18:17 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines