Marzo 16, 2018, 02:16:23 PM Ultima modificación: Mayo 02, 2018, 02:36:53 PM por kostra
No conozco todas las funciones. El caso es que tengo un entero "189" por ejemplo, y quisiera separar en variables cada cifra por separado (aunque sea en array), sé que hay para las strings, entonces pensé en transformarla en string, separarlas y luego convertirlas en real, pero ni recuerdo las funciones que necesitaba y no encuentro por gúgol :S

Quiero hacer por ejemplo:

tenemos el numero 23
separamos cifras "2" y "3"
operamos con ellas sqr(2) y sqr(3)

ando estudiando los números y me propongo a hacer una tontería que calcule números felices xd
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

En la universidad me enseñaron que para descomponer un digito se usa el operador de modulo.

var digito;
var numero = 785;

digito = numero mod 10


eso quita el digito menos significativo, en este caso el 5, luego seria cuestion de actualizar el numero(es decir, quitarle el 5, para quedar 78):

numero = numero / 10

y asi sucesivamente para obtener todos los digitos.
Luego sencillamente los almacenarias en una lista o lo que fuera.

Asi lo podes hacer guardando en un array todos los numeros por separado:
[gml]
///EVENTO CREATE
numero=1897537623 ///ejemplo

for(i=0; i<string_length(string(numero)); i+=1) ///string convierte un numero real en una cadena
    { 
     lista=real(string_char_at(string(numero),i+1)) ///real hace lo inverso, convierte una cadena en un numero real. Los numeros se guardan en el array lista[]
    }

///EVENTO DRAW
for(i=0;i<string_length(string(numero));i+=1)
   {
    draw_text(100,50+(i*20), lista)
   }
[/gml]

bueno tengo esto:
[gml]
num = get_integer("Number","");
num = string(num);
cifras = string_length(num);
//num = real(num);

for (i=0;i<cifras;i++) {
    nm = string_char_at(num,i+1);
    }
res = 0;
for (j=0;j<cifras;j++) {
    res += sqr(real(nm));
    }
    show_message(string(res));
[/gml]
   
y mi finalidad es que agarre del numero (por ejemplo 23), el 2 y el 3, los elevo al cuadrado por separado y sumo los resultados (2*2+3*3) pero me salió este error

___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Create Event
for object onumerosfelices:

Push :: Execution Error - Variable Index [0,2] out of range [1,2] - -1.nm(100017,2)
at gml_Object_onumerosfelices_CreateEvent_1 (line 13) -     res += sqr(real(nm[i]));
############################################################################################

Aunque sé que en el texto del error sale qué error es, en este caso, no sé a qué se refiere con out of range ese, osea que no sé mi fail, no estoy muy acostumbrado a ponerme tan "matemático" xD
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Mira que en el segundo ciclo usas una variable j, mientrsa que -dentro de ese mismo- revisas una variable i.

PD: ¿Por qué usas GML para esto? xDDD, con lo fácil que sería programarlo en Python, o JS :v.
alaberga regué el café.

BA:STFW&RTFM

Ese error me parece que es porque estas buscando un valor que no existe.
Pude solucionar el problema:
[gml]
num=string(get_integer("Number", ""))
cifras=string_length(num)
res=0

for(i=0; i<cifras; i+=1)
   {
    nm=string_char_at(num, i+1)
    res+=sqr( real(nm) )
   }
   
show_message(string(res))
[/gml]

yo lo haria como dice Alice, es mas eficiente te ahorras el tener que covertirlo a string, guardarlo en un array y volver a convertirlo a real

int resultado = 0;
while (n > 0){
resultado +=  sqr(n%10);
n = n/10;
}


Creo que ya te solucionaron la duda. Este lenguaje es algo complicado, y la verdad es que no me gusta tocarlo mucho, la ultima vez que lo empleeé fue cuando trabajaba para una empresa de turismo donde les tuve que hacer una plataforma para administrar las mejores cabañas en Aysen.

Si si!! 3d géminis me dijo lo que era obvio y yo no había visto!, disculpen se me olvidó responder y esoo, muchas gracias a todos ya solucioné!! :D
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]