Dúvida com uma multiplicação

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;

Então

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 );

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?

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í.

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.

Seria legal, você utilizar um livro sobre Algoritmos… ajuda bastante no começo e vem com vários exemplos

Eu já li alguns livros de algoritmos.

[code]import java.util.*;
class Repr{
public static void main (String args []){
Scanner leitura = new Scanner(System.in);
int n, p;
do{
System.out.print("Digite um valor positivo: ");
//primeiro ele pergunta ao usuário

		 n = leitura.nextInt(); 
	}while (n <=0);  
	  
	System.out.println(n + " em representacao decimal é ");
	System.out.println(converteOct(n) + " em representacao octal ");
}


	static int converteOct(int n){   
		int r;   
			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?
}

		return r;   
     //r retorna 0,5 pra onde?

[/code]

Alguém pode me dizer?

Comentei no código. Não sei se ficou claro, mas isso se chama recursividade. Dá uma lida sobre o assunto.

[code]import java.util.*;
class Repr{
public static void main (String args []){
Scanner leitura = new Scanner(System.in);
int n, p;
do{
System.out.print("Digite um valor positivo: ");
//primeiro ele pergunta ao usuário

		 n = leitura.nextInt(); 
	}while (n <=0);  
	  
	System.out.println(n + " em representacao decimal é ");
	System.out.println(converteOct(n) + " em representacao octal ");
}


	static int converteOct(int n){   
		int r;   
			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.
}

		return r;   
     //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. */

[/code]