[resolvido]Ajuda à entender código

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Resolvido [resolvido]Ajuda à entender código

Mensagem por .:Allison:. 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)

.:Allison:.

Ranking : Nota B
Número de Mensagens : 630
Idade : 19
Data de inscrição : 25/07/2010
Notas recebidas : B
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://clubmaker.forumeiros.com

Voltar ao Topo Ir em baixo

Resolvido Re: [resolvido]Ajuda à entender código

Mensagem por diego333 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

diego333

Número de Mensagens : 84
Data de inscrição : 06/10/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [resolvido]Ajuda à entender código

Mensagem por PedroX 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!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Resolvido Re: [resolvido]Ajuda à entender código

Mensagem por .:Allison:. em Seg 25 Jul 2011, 15:37

Muito obrigado, aos dois, tópico resolvido. Pode trancar.

.:Allison:.

Ranking : Nota B
Número de Mensagens : 630
Idade : 19
Data de inscrição : 25/07/2010
Notas recebidas : B
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://clubmaker.forumeiros.com

Voltar ao Topo Ir em baixo

Resolvido Re: [resolvido]Ajuda à entender código

Mensagem por Conteúdo patrocinado Hoje à(s) 08:15


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum