Conectar-se
Quem está conectado
30 usuários online :: 2 usuários cadastrados, Nenhum Invisível e 28 Visitantes

rafaelviodres1, Vikintor

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota B
Notas recebidas : B
Data de inscrição : 25/07/2010
Número de Mensagens : 630
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuáriohttp://clubmaker.forumeiros.com

[resolvido]Ajuda à entender código

em Sex 22 Jul 2011, 23:56
Eu estava trabalhando com matemática no game maker e me desafiei, estava tentando fazer um script que me diga qual é o máximo divisor em comum que dois números inteiros possuem, por exemplo, o máximo divisor que 6 e 12 possuem em comum, é 6, pois
Divisores de 12 = {1,2,4,6,12}
Divisores de 6 = {1,2,3,6}
O máximo divisor comum, que é conhecido como m.d.c de 12 e 6 é :6. Se eu pedir o m.d.c(48,30), uma das formas de resolução do problema é dividir o maior pelo menor termo, e depois dividir os restos até que não sobre nada.
Spoiler:
Regra prática:
1º) dividimos o número maior pelo número menor;
48 / 30 = 1 (com resto 18)
2º) dividimos o divisor 30, que é divisor da divisão anterior, por 18, que é o resto da divisão anterior, e assim sucessivamente;
30 / 18 = 1 (com resto 12)
18 / 12 = 1 (com resto 6)
12 / 6 = 2 (com resto zero - divisão exata)
3º) O divisor da divisão exata é 6. Então m.d.c.(48,30) = 6.
Então vamos ao assunto, passei mais de 2 horas tentando interpretar a resolução do problema em GML, minha idéia era fazer um loop, que vá dividindo até o resto chegar a 0. porém a prática não foi muito boa, tentei muito e resolvi pedi ajuda a um amigo, porém ele apenas re-passou o código que eu fiz, só que correto, porém teve uma parte que eu não entendi bem, segue abaixo o código passado:
Código:

var _x,_y,_mdc;
_x=argument0;//valor = 48
_y=argument1;//valor = 30
_mdc=_x mod _y;//no caso daria 18

while(_mdc)//enquanto o mdc for ???
{
_tx=_y;
_y=_x mod _y;
_x=_tx;
_mdc=_x mod _y;
};
return (_y);//retorna y por que ???
//essa parte do while eu não entendi nada...
Se vocês poderem explicar por que ele fez isso e qual o valor das variáveis a cada momento, tipo, me explica qual a lógica usada no código. Grato desde já.


Última edição por .:Allison:. em Seg 25 Jul 2011, 15:37, editado 1 vez(es)
Data de inscrição : 06/10/2010
Número de Mensagens : 84
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

Re: [resolvido]Ajuda à entender código

em Sab 23 Jul 2011, 09:15
Código:

var _x,_y,_mdc,_tx;
_x=argument0;//valor = 48
_y=argument1;//valor = 30
_mdc=_x mod _y;//no caso daria 18

while(_mdc)//enquanto o mdc for diferente de 0
{
_tx=_y;
_y=_x mod _y;
_x=_tx;
_mdc=_x mod _y;
};
return (_y); // retorna _y porque ele é a variavel que guarda o resto das divisoes ,  no caso ele começa com 30 , depois 18 , depois 12 , depois 6
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6036
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: [resolvido]Ajuda à entender código

em Dom 24 Jul 2011, 15:36
Comentei o código:
Código:
var _x,_y,_mdc;
_x=argument0;//valor = 48
_y=argument1;//valor = 30
_mdc=_x mod _y;//no caso daria 18

while(_mdc)//enquanto o resto for maior que 0
{
_tx=_y; //na primeira vez será 30
_y=_x mod _y; //o mdc é esse, aqui dá 18
_x=_tx; // o x vai virar 30, que vai ser o próximo divisor
_mdc=_x mod _y; // o resto será 30 mod 18 = 12
}; //o ciclo vai se repetir até obter o resultado

return (_y);//retorna o mdc

Até mais!
avatar
Ranking : Nota B
Notas recebidas : B
Data de inscrição : 25/07/2010
Número de Mensagens : 630
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuáriohttp://clubmaker.forumeiros.com

Re: [resolvido]Ajuda à entender código

em Seg 25 Jul 2011, 15:37
Muito obrigado, aos dois, tópico resolvido. Pode trancar.
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum