Nem sei se o nome do tópico está bom, mas… Estou estudando a partir de códigos prontos e queria saber quem é converteOct. À variável r está sendo atribuído n mod 8 +10 multiplicado com quem?
Seria a mesma coisa de eu dizer(se o n valer por exemplo, 7)
r = n % 8 + 10 * (7/8 )?
static int converteOct(int n){
int r;
if (n/8 == 0){
r = n % 8;
}else{
r = n % 8 + 10 * converteOct(n/8);
}
return r;
Esse método passa um numero n para a base octal… funcao semelhante a existente na calculadora cientifica do windows…
r é a varivavel que vai acumular o resultado… e n o numero que voce deseja converter(passado como parametro)…
ficaria
r =7 % 8 + 10 * (7/8 )
resto da divisao de 7 por 8 + 10 * ( 7 / 8 );
ddmizu
Isso é uma função que converte um número decimal num octal. É uma função recursiva.
Pro caso do número 7 o IF vai dar verdadeiro e por consequência r receberá n mod 8, ou seja 7. O que quer dizer que o número octal 7 equivale ao decimal 7.
Agora, pro caso do número 12, por exemplo, o programa ia entrar no else e entao
r = n % 8 + 10 * converteOct(n/8 )
r = 12 % 8 + 10 * converteOct(12/8 ) //atribuindo as variáveis
r = 4 + 10 * converteOct(1) //converte(1) entra no IF e o resultado é 1.
r = 4 + 10
r = 14
Essas funções recursivas costumam ser um pouco confusas, mas fui claro?
F
Felipe_Kan
Não entendi.
Eu quis dizer assim…
r = n % 8 + 10 * converteOct(n/8);
“r” recebe n(que é o valor de entrada) mod 8 + 10 multiplicado por converteOct. Acontece que converteOct é o nome da função. O que significa isso em termos mais… digamos, mais fáceis de compreender?
Como um inteiro( r) pode receber string?
Não sei se estou fazendo vcs entenderem a dúvida. De qualquer forma, eu não sei o que esse converteOct está fazendo aí.
ddmizu
Em termos mais simples quer dizer que a função chama ela msma!
Rpz… É q o negócio é confuso msmo. converteOct(int) retorna um numero e esse número ele usa na conta.
F
Felipefill
Seria legal, você utilizar um livro sobre Algoritmos… ajuda bastante no começo e vem com vários exemplos
F
Felipe_Kan
Eu já li alguns livros de algoritmos.
importjava.util.*;classRepr{publicstaticvoidmain(Stringargs[]){Scannerleitura=newScanner(System.in);intn,p;do{System.out.print("Digite um valor positivo: ");//primeiro ele pergunta ao usuárion=leitura.nextInt();}while(n<=0);System.out.println(n+" em representacao decimal é ");System.out.println(converteOct(n)+" em representacao octal ");}staticintconverteOct(intn){intr;if(n/8==0){/*se o n° digitado for 6, 6/8 não dá zero, então vai pro else.*/r=n%8;}else{r=n%8+10*converteOct(n/8);// 0,75*10+8 % n=0,5. // R vale 0,5. Está certo?}returnr;//r retorna 0,5 pra onde?
F
Felipe_Kan
Alguém pode me dizer?
clayton.d3
Comentei no código. Não sei se ficou claro, mas isso se chama recursividade. Dá uma lida sobre o assunto.
importjava.util.*;classRepr{publicstaticvoidmain(Stringargs[]){Scannerleitura=newScanner(System.in);intn,p;do{System.out.print("Digite um valor positivo: ");//primeiro ele pergunta ao usuárion=leitura.nextInt();}while(n<=0);System.out.println(n+" em representacao decimal é ");System.out.println(converteOct(n)+" em representacao octal ");}staticintconverteOct(intn){intr;if(n/8==0){/*se o n° digitado for 6, 6/8 não dá zero, então vai pro else.*//* 6/8 dá 0 sim, Este operador retorna o resultado inteiro, sem a parte decimal. E o operador % retorna o resto. */r=n%8;// então r recebe 6 e ele vai retornar 6 pro usuário}else{r=n%8+10*converteOct(n/8);// 0,75*10+8 % n=0,5. /* Supondo que o usuário digitou 10, por exemplo, ele entra neste else. Então r recebe o resto da divisão de 10 por 8 (2) + 10 * o resultado deste mesmo método, só que passando a parte inteira da divisão de 10 por 8 (1), que vai entrar no if e retornar 1. Então r = 2 + 10*1, que dá 12. */// R vale 0,5. Está certo?// como disse em cima, errado, dá 12.}returnr;//r retorna 0,5 pra onde?/* no meu exemplo usando 10, a primeira chamada fica esperando o retorno de uma nova chamada. Esta nova chamada retorna para a primeira chamada, que retorna para o usuário. */