Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kostra en Marzo 16, 2018, 02:16:23 PM

Título: Separar cifras para operar por separado? [Solucionado]
Publicado por: kostra en Marzo 16, 2018, 02:16:23 PM
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
Título: Re:Separar cifras para operar por separado?
Publicado por: Alice en Marzo 16, 2018, 08:53:34 PM
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.
Título: Re:Separar cifras para operar por separado?
Publicado por: 3dgeminis en Marzo 17, 2018, 07:28:58 AM
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]
Título: Re:Separar cifras para operar por separado?
Publicado por: kostra en Marzo 19, 2018, 03:30:51 PM
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
Título: Re:Separar cifras para operar por separado?
Publicado por: bygdle en Marzo 19, 2018, 05:59:17 PM
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.
Título: Re:Separar cifras para operar por separado?
Publicado por: 3dgeminis en Marzo 19, 2018, 10:03:15 PM
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]
Título: Re:Separar cifras para operar por separado?
Publicado por: pixel king en Marzo 21, 2018, 09:44:07 AM
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;
}

Título: Re:Separar cifras para operar por separado?
Publicado por: JuanViajes en Marzo 26, 2018, 07:06:48 AM
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 (https://cabanaschilenas.com/cabanas-en-aysen/).
Título: Re:Separar cifras para operar por separado?
Publicado por: kostra en Mayo 02, 2018, 02:36:11 PM
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