¿Somos comprensibles? Ayuda para describir mejor.

Avatar de Usuario
Tachikomaia
Mensajes: 15819
Registrado: 10 Ago 2011, 20:39
Rango personalizado: 1st Year Class D

¿Somos comprensibles? Ayuda para describir mejor.

Mensaje por Tachikomaia »

Contexto para quien lo quiera:
Spoiler: show
En otro foro me dijeron o inspiraron una "técnica" para algo de programación, que me gustó. Intenté modificar un código mío para usarla, pero no pude, quizá porque mis vecinirijillos pusieran música alta de noche otra vez (aunque esta vez fui a la comisaría a ver si me dejaban quedarme un rato ahí, suena boludo pero es mejor que intentar golpear a mis vecinos por algo que aparentemente es legal que hagan :/ ). En eso, en vez de reintentarlo de la misma forma, decidí "empezar desde 0", aunque esta vez describiendo mejor los códigos y (aunque esto aún no lo hice) poniendo uno al lado de otro para, en caso de "marearme", leer el más simple, luego otro más complejo viendo más fácil las diferencias, y así sucesivamente hasta llegar al que me tenga "mareado".

Cuando modifico los códigos lo grabo en un nuevo archivo, pero llega un punto en que no sé cuales funcionan, no sé describir del todo bien los cambios y a veces grabo apurado...
No sé si debo dejar de hacer eso, pero recomiendo que las versiones que funcionan (aunque sean más simples que el código final que se quiere) estén claramente diferenciadas de las que están a medio hacer. Comenzaré a hacer eso también.
Y así, de repente me di cuenta que no sé cómo describir ciertas cosas y que estaría bueno hacer las descripciones de modo que incluso la gente que no programa pueda entenderlo. Aunque luego de algunas aclaraciones, porque al fin y al cabo el texto es para mí no para cualquiera y por lo tanto hay cosas que no las he aclarado.

Aclaraciones:
Las siguientes imágenes implican códigos que sirven para generar cosas. Uno genera números enteros positivos, otro caracteres, otro texto, y bueno mi idea es llegar a más cosas... por ejemplo sentencias condicionales óptimas.
- Las "cosas" a generar se dicen en el título.
- Luego se muestra cómo es que esas cosas se mostrarían en pantalla, aunque la utilidad de los códigos no es necesariamente "mostrar esas cosas en pantalla", eso podría obviarse. Pero para saber que los códigos funcionan bien, es útil que muestren esas cosas. Los puntos suspensivos no se mostrarían en la pantalla, significan que continuaría mostrando las cosas siguiendo el mismo criterio que habían usado.
- En los códigos, una fila en blanco significa una nueva etapa. Lo correcto al describirlo sería ponerles títulos por ejemplo "Etapa 1", pero como son códigos cortos me pareció innecesario, los alargaría y complicaría a la vista innecesariamente.

Imagen
¿Alguien no entiende eso?

Examen para quien lo quiera:
Spoiler: show
1- ¿Qué debe hacerse para que el 1er número que se muestre, en vez de ser 1, sea 10?
2- ¿Qué debe hacerse para que en vez de ir aumentando de a 1, el número aumente de a 10?
3- ¿Qué debe hacerse para que en vez de ir aumentando de a 1, el número se vaya multiplicando por 10?
4- ¿Qué pasaría en el programa si esto "Num = Num+1;" intercambiara su posición con esto "trace(Num);"?
5- ¿Qué pasaría en el programa si esto "trace(Num);" se cambia por esto "trace(Num+1);"?
Respuestas:
Spoiler: show
1- Cambiar el 1 inicial por 10.
2- Cambiar el 2ndo 1 por 10.
3- Cambiar el +1 por *10.
4- El 1er número en mostrarse sería 2.
5- Misma respuesta. Porque una variable cambia sólo cuando se la está definiendo o redefiniendo, usando "(Nombre de la variable) = (Valoraquí)". Mencionar una en los paréntesis luego de trace sólo es copiarla, y se puede modificar el resultado de esa copia, pero eso no implica cambiar la variable en sí en este caso.
Imagen
En rojo puse algo que "se entiende", pero en realidad está mal. Porque no es que aumente el caracter sino un número que representa al caracter. Intenten describirlo uds a ver qué sale.

Lo demás, alguna cosa: ¿Alguien no la entiende?

Examen para quien...:
Spoiler: show
¿Qué pasaría en el programa si...
1- sustituimos el 0 por 2?
2- sustituimos el 26 por 2?
3- esto "CharID = 0;" lo movemos al comienzo de la etapa 2?
4- a la lista de posibles caracteres agregamos ,. +-?
5- Para lograr que se muestre "A1", luego "B1" y así sucesivamente ¿habría que usar esto "trace (Chars.charAt(CharID+1));" o esto "trace (Chars.charAt(CharID)+1);"?
Respuestas:
Spoiler: show
1- Se comienza mostrando C, o sea, no se muestra ni A ni B.
2- Se muestra hasta C nada más.
3- Siempre se mostraría "A", y el programa no terminaría.
4- Sería más pesado y quedaría listo para ciertas modificaciones. Nada más, porque mientras esté indicado que se detenga al llegar al caracter 26 (Z), los demás no se mostrarán.
5- Lo 2ndo. Lo 1ero muestra el caracter nro "CharID+1" de la variable Chars, o sea que mostraría desde 1 (B) hasta 27 (inexistente). Lo 2ndo usa CharID sin modificarlo y luego de copiar el caracter le "suma" (concatena) 1.
Imagen
En rojo una cosa que me gustaría escriban uds. O me ayuden a entender cómo decirla. Y luego hay cosas que también me faltan completar.

¿Algo que no entiendan?
Me imagino que eval y set.
eval es confuso pero útil. Cuando uno quiere copiar una variable, la nombra donde se requiera y listo. Pero cuando uno quiere nombrar una variable u otra dependiendo de ciertas circunstancias... eso puede hacerse con eval, porque "evalúa" un texto, que puede estar compuesto de variables y por lo tanto ser variable (de hecho, si no lo fuera no tendría sentido usar eval); lo convierte en una llamada, o referencia (o copia) a una variable.
set es similar. Cuando se quiere definir una variable, se la nombra y luego se pone el signo "=" y demás. Pero cuando se quiere definir una u otra según las circunstancias... eso se puede hacer con set. Convierte un texto compuesto de variables, en el nombre de una variable.

Este programa se puede hacer de varias otras formas, pero no sé bien y además estoy practicando para otros en que ciertas formas no servirían.
Spoiler: show
Por ejemplo en vez de usar partes representantes que luego deban convertirse en texto, el texto podría estar siempre actualizado, o sea, cuando haya que cambiar un caracter se busca en la lista y se lo sustituye por el que venga luego, o por A en caso de ser Z. El tema es que eso sirve si las posibles cosas están en una variable, pero no siempre es tan fácil. Las cosas podrían estar en variables diferentes y cada una marcar cual es la siguiente, por ejemplo A="B", B="C", pero de nuevo, eso no sirve con otras cosas, m... me parece. Y sería complicado si se quiere aumentar más de "+1".
Otra mejora "idealista" es que cuando se modifica una parte representante de un caracter se modifique también el caracter, o sea, que no haya necesidad de reformar el texto. No sabía cómo se podía hacer esto fácil, o sea, cómo modificar 1 caracter, pero ahora se me ocurre que quizá es así:
Variable.charAt(posición del caracter) = Nuevo caracter
En cualquier caso, eso sólo serviría si se quiere modificar caracteres, pero si fuesen palabras de un largo variable identificar cuales son me parece menos óptimo que tenerlas indicadas en variables "Partes".

Sobre formas de hacer ese programa en realidad ya he preguntado así que no es el tema, sólo decía. Si quieren díganme formas pero ¿qué les parece si 1ero aprendemos a describir bien? Porque me suele ocurrir que me cuesta entender lo que dicen otros en estos asuntos. Claro que puede ser un problema mío de entendimiento y no de todos (yo incluido) de cómo describir, pero eso lo estoy analizando acá.
Examen... (suponiendo que el programa no pudiera mejorarse):
Spoiler: show
1- ¿Por qué es importante la variable TxLargo?
2- ¿Por qué la variable Tx queda sin contenido al iniciar el proceso Concatenar?
3- ¿Por qué es "} while (Parte < TxLargo);", o sea "<". en vez de "<="?
4- ¿Qué hace Parte, cómo varía?
5- ¿Cual es la idea del programa en general?
Respuestas:
Spoiler: show
1- Porque marca cuántas partes hay que concatenar para formar el texto, desde qué parte hay que modificarlo, ayuda a determinar cuando se hicieron todas las combinaciones con cierto largo, marca y qué parte se creará en caso de necesitarse.
¿Se puede saber cuántas partes deben concatenarse si no está marcado cuántas son? Parece que no.
¿Se puede saber desde qué parte hay que modificar si no se sabe cual es la última? Si estuvieran ordenadas al revés se empezaría desde la 1, pero si no está marcada cual es la final estamos en la misma. Parece que no.
¿Se puede determinar cuando se hicieron todas las combinaciones de cierto largo si no se sabe cual es el largo? No parece.
¿Se puede saber qué parte debe crearse cuando el largo aumenta, si no se sabe el largo? Idem.
2- Porque en dicho proceso el texto se crea a partir de unir las partes. Como dije lo ideal es unir las partes modificadas nada más, o que se actualice al instante, etc, pero eso de momento está descartado. Si la variable no quedara en blanco, entonces lo que se muestre en pantalla sería lo anterior más lo nuevo, por ejemplo en vez de "A", "B", "C" sería "A", "AB", "ABC".
3- La idea es unir todas las partes desde la 1 hasta TxLargo. Cuando el proceso llega hasta ahí con los valores igualados la parte correspondiente a TxLargo ya fue unida, así que el proceso no debe continuar, o sea, cuando ya son iguales debe terminar, por eso es sólo válido mientras sea menor. Por ejemplo si TxLargo es 3, se une la parte 1, la 2, la 3, y ahí el proceso debe terminar, 3 no es menor a 3.
Con ciertos cambios sería diferente, pero no sé si es mejor. Chequear < en vez de <= creo que es más eficiente... pues son menos posibilidades a chequear.
4- Señala distintas partes del texto, lo cual es usado para modificarlo, chequearlo, etc. En la etapa 2 comienza siendo igual a TxLargo, lo cual significa que en principio señala la última parte del texto. Si dicha parte no es aumentable, o sea, si el caracter señalado es Z, entonces el programa avanza a la etapa 3, donde Parte baja si es mayor que 1.
5- Usar números, que es simple, y convertirlos en caracteres, que no es tan complicado. El tema es que acá los números no serían del 0 al 9 sino del 0 al 26, por lo que uno no puede hacer 26+1 y esperar que le de 0 0, con espacios y todo... Así que hay que crear un "sistema de sumas", al menos para el +1. Simplemente se mira cual es el último valor o la última parte, el que está en la derecha o la correspondiente a TxLargo, y si es menor al máximo aumenta, sino queda al mínimo. Es igual que cuando uno tiene por ejemplo 14, queda 15, pero si tiene 19 queda 20, o sea, la última parte volvió al mínimo, 0. En el último caso se repite el proceso con la parte anterior y así sucesivamente, como se haría con un número. El resultado es algo muy similar a un número, o sea, como dije puede iniciar con 0 y está separado con espacios, pero bueno... el caso es que luego eso se transforma en caracteres.
¿Preguntas?

Intento hacer códigos que produzcan cosas más útiles, pero por ahora es lo que hay. Gracias.

Lo siguiente es para imprimirlo en un ciber, luego lo borro, no le den bola.
Spoiler: show

Código: Seleccionar todo

Escena 1
   actions for fotograma 1
      Chars = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
      CharID1 = 0;
      Tx = "A";
      TxLargo = 1;
      function Concatenar () {
         Tx = "";
         Parte = 0;
         do {
            Parte = Parte+1;
            Tx = Tx+Chars.charAt(eval("CharID"+Parte));
         } while (Parte<TxLargo);
      }
   actions for fotograma 2
      trace (Tx);
      Parte = TxLargo;
   actions for fotograma 3
      if (eval("CharID"+Parte)<26) {
         set ("CharID"+Parte, eval("CharID"+Parte)+1);
         Concatenar();
         gotoAndPlay (2);
      }
   actions for fotograma 4
      set ("CharID"+Parte, 0);
      if (1<Parte) {
         Parte = Parte-1;
         gotoAndPlay (3);
      } else {
         TxLargo = TxLargo+1;
         set ("CharID"+TxLargo, 0);
         Concatenar();
         gotoAndPlay (2);
      }
Imagen
Responder