Galera to com um probleminha de lógica, preciso criar um método que armazena frações na forma reduzida, ou seja 2/4 fica 1/2, 3/9 fica 1/3, etc.
Até consigo fazer isso se definir i como 2 ou 3, mas queria fazer algo mais geral que permitar usar esse método para qualquer valor de entrada na fração.
Segue o código:
publicclassRational{privateintdenominador;//recebe o valor do denominadorprivateintnumerador;//recebe o valor do numeradorprivateintresult;//recebe o resultado da operaçãopublicvoidconstrutor(intnume,intdeno){inti=1;while(nume%i==0&&deno%i==0){while(nume%i==0){nume=nume/i;deno=deno/i;System.out.println(nume+"/"+deno);}i++;}}}
É mais eficiente usar o método das divisões sucessivas:
CÁLCULO DO M.D.C. PELO PROCESSO DAS DIVISÕES SUCESSIVAS
Nesse processo efetuamos várias divisões até chegar a uma divisão exata. O divisor desta divisão é o m.d.c. Acompanhe o cálculo do m.d.c.(48,30).
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.
Eu já vi uma implementação recursiva desse algoritmo no livro Mathematics and Physics for Programmers, do Kodicek.
M
mfjeng
Você quer mostrar as frações sendo reduzidas ou apenas mostrar o valor de MDC?
Mavericks
Valeu…
Mavericks
Quero apenas reduzir frações, o seu código funcionou perfeitamente, valeu Mauro e todos os outros brothers que ajudaram.
maquiavelbona
ViniGodoy:
É mais eficiente usar o método das divisões sucessivas:
CÁLCULO DO M.D.C. PELO PROCESSO DAS DIVISÕES SUCESSIVAS
…
Ou quem quiser procurar, procurem por Algoritmo de Euclides.
Até!
Alkamavo
publicclassRational{privateintdenominador;//recebe o valor do denominador privateintnumerador;//recebe o valor do numerador privateintresult;//recebe o resultado da operação publicintgreatestCommonDivisor(inta,intb){if(b==0)returna;elsereturngreatestCommonDivisor(b,a%b);}publicvoidconstrutor(intnume,intdeno){inti=1;while(nume%i==0&&deno%i==0){while(nume%i==0){nume=nume/i;deno=deno/i;intmdc=greatestCommonDivisor(nume,deno);intnum_final=nume/mdc;intden_final=deno/mdc;System.out.println(num_final+"/"+den_final);}i++;}}}