Calcular percentual de gordura

Bom dia pessoal, estou há uma semana já praticando Java direto por causa do estágio, mas preciso de uma ajuda.

Eu tenho a fórmula para calculcar o percentual de gordura, porém não consigo codifica-lo para linguagem java.
Seguem as fórmulas:

Para homens:
% de gordura = 495/(1.0324-.19077(log(cintura-pescoço))+.15456(log(altura)))-450 (logaritmos em base 10)

Para mulheres:
% de gordura = 495/(1.29579-.35004(log(cintura+quadril-pescoço))+.22100(log(altura)))-450 (logaritmos em base 10)

Alguém poderia codificar pelo menos a do homem pra ter uma base para eu mesmo fazer o da mulher? Grato. :slight_smile:

Ah tá.
Meu camarada, você precisa colocar essa cabecinha cheia de caraminholas para funcionar.
O que tentou fazer? Como tentou fazer? Deu erro?

O problema, neste caso, não me parece nem ser a linguagem, mas, a lógica. Isso é algo que você precisa praticar. Caso contrário, não poderá evoluir na programação. Logo, ao invés de esperar tudo pronto, ao menos tente fazer.

Ainda não tive tempo de fazer.
Acredito que se o problema fosse lógica não estaria nem estagiando, meu problema é com o log e a matemática.
Mas valeu.

float log = (float) Math.log(tamanhoCintura - tamanhoPescoco);

como o metodo log da classe Math retorna double e eu criei a variavel como float tive que fazer o cast, mas se tivesse criado a variavel log como double só seria colocar

double log = Math.log(tamanhoCintura - tamanhoPescoco);

o problema com o log esta resolvido…

o resto é só matematica…facil

[]s

Math.log(altura) … O resto é só matemática do ensino fundamental…

O ideal seria que você perguntasse se existe alguma biblioteca do Java que possui funções matemáticas, como logaritmo natural, base 10, etc.
Daí alguém responderia: a biblioteca Math. E ainda indicaria a procurar a documentação dela no site da Oracle (bastando que digitasse Java Math no google e clicasse no primeiro resultado)

[quote=JeffersonFelix]O ideal seria que você perguntasse se existe alguma biblioteca do Java que possui funções matemáticas, como logaritmo natural, base 10, etc.
Daí alguém responderia: a biblioteca Math. E ainda indicaria a procurar a documentação dela no site da Oracle (bastando que digitasse Java Math no google e clicasse no primeiro resultado)
[/quote]

Confesso que formulei mal a pergunta.

[quote=jkrfabio]Ainda não tive tempo de fazer.
Acredito que se o problema fosse lógica não estaria nem estagiando, meu problema é com o log e a matemática.
Mas valeu.[/quote]
O problema é lógica sim. É com ela que você vai identificar e entender o que precisa utilizar em termos de recursos. Já ouviu falar de algoritmo, cuja denominação alternativamente utilizada é lógica de programação?
Seu problema é que você não quer fazer, é preguiçoso.
Digo isso por você estar pedindo para alguém fazer algo que é uma tarefa tua e você sequer teve a petulância de tentar.
Você é o típico tipinho que eu detesto, não tenta, não pesquisa, não corre atrás. Espera que as coisas caiam do céu.
E o pior, sempre tem um idiota que vai e te ajuda, que acha que deve fazer algo para provar que é melhor, mais inteligente, superior, sei lá.

[quote=drsmachado][quote=jkrfabio]Ainda não tive tempo de fazer.
Acredito que se o problema fosse lógica não estaria nem estagiando, meu problema é com o log e a matemática.
Mas valeu.[/quote]
O problema é lógica sim. É com ela que você vai identificar e entender o que precisa utilizar em termos de recursos. Já ouviu falar de algoritmo, cuja denominação alternativamente utilizada é lógica de programação?
Seu problema é que você não quer fazer, é preguiçoso.
Digo isso por você estar pedindo para alguém fazer algo que é uma tarefa tua e você sequer teve a petulância de tentar.
Você é o típico tipinho que eu detesto, não tenta, não pesquisa, não corre atrás. Espera que as coisas caiam do céu.
E o pior, sempre tem um idiota que vai e te ajuda, que acha que deve fazer algo para provar que é melhor, mais inteligente, superior, sei lá.
[/quote]

Ok.

[quote=jkrfabio]Bom dia pessoal, estou há uma semana já praticando Java direto por causa do estágio, mas preciso de uma ajuda.

Eu tenho a fórmula para calculcar o percentual de gordura, porém não consigo codifica-lo para linguagem java.
Seguem as fórmulas:

Para homens:
% de gordura = 495/(1.0324-.19077(log(cintura-pescoço))+.15456(log(altura)))-450 (logaritmos em base 10)

Para mulheres:
% de gordura = 495/(1.29579-.35004(log(cintura+quadril-pescoço))+.22100(log(altura)))-450 (logaritmos em base 10)

Alguém poderia codificar pelo menos a do homem pra ter uma base para eu mesmo fazer o da mulher? Grato. :slight_smile: [/quote]

o pessoal do forum de uma forma geral não gosta de codificar para as pessoas, mas não se importam de pegar um começinho que você tenha (por mais básico que seja) e te dar um norte do tipo “olha, isso aqui que você fez na linha 10 não vai funcionar por causa de tal coisa, troque xxx.yyy por aaa.bbb”.

então, o que você não está conseguindo, criar o método principal (main), colocar a conta, o que seria?

pro caso de você não saber nem onde começar, faça como nesse roteiro abaixo:

crie um hello word (google o que é isso se você não souber). só precisa fazer escrever na tela o hello word

crie um programa que crie uma variavel com um valor para ela que você possa colocar no código e imprima o valor dela.

crie agora três variáveis sendo chamadas cintura, pescoço, altura e percentualGordura, a ultima que recebrá o valor total da conta.

crie um programa que calculo quanto é sei la, 2 + 2, usando variáveis e somando uma variável com a outra e exiba no console o valor (o programa que deve calcular, não vale você imprimir 4 direto).

enquanto eu estava escrevendo aqui vi que ja te falaram como calcular o logaritmo, ia falar para você pesquisar isso, enfim, faça um programa que calcule o logaritmo de algum numero qualquer, sei la, 5. Documentação: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#log(double)

agora que você ja sabe fazer essas coisas, crie o programa que faça o calculo que você postou, que envolve as coisas dos passos acima, que você vai ter aprendido quando chegar até aqui.

[quote=maior_abandonado][quote=jkrfabio]Bom dia pessoal, estou há uma semana já praticando Java direto por causa do estágio, mas preciso de uma ajuda.

Eu tenho a fórmula para calculcar o percentual de gordura, porém não consigo codifica-lo para linguagem java.
Seguem as fórmulas:

Para homens:
% de gordura = 495/(1.0324-.19077(log(cintura-pescoço))+.15456(log(altura)))-450 (logaritmos em base 10)

Para mulheres:
% de gordura = 495/(1.29579-.35004(log(cintura+quadril-pescoço))+.22100(log(altura)))-450 (logaritmos em base 10)

Alguém poderia codificar pelo menos a do homem pra ter uma base para eu mesmo fazer o da mulher? Grato. :slight_smile: [/quote]

o pessoal do forum de uma forma geral não gosta de codificar para as pessoas, mas não se importam de pegar um começinho que você tenha (por mais básico que seja) e te dar um norte do tipo “olha, isso aqui que você fez na linha 10 não vai funcionar por causa de tal coisa, troque xxx.yyy por aaa.bbb”.

então, o que você não está conseguindo, criar o método principal (main), colocar a conta, o que seria?

pro caso de você não saber nem onde começar, faça como nesse roteiro abaixo:

crie um hello word (google o que é isso se você não souber). só precisa fazer escrever na tela o hello word

crie um programa que crie uma variavel com um valor para ela que você possa colocar no código e imprima o valor dela.

crie agora três variáveis sendo chamadas cintura, pescoço, altura e percentualGordura, a ultima que recebrá o valor total da conta.

crie um programa que calculo quanto é sei la, 2 + 2, usando variáveis e somando uma variável com a outra e exiba no console o valor (o programa que deve calcular, não vale você imprimir 4 direto).

enquanto eu estava escrevendo aqui vi que ja te falaram como calcular o logaritmo, ia falar para você pesquisar isso, enfim, faça um programa que calcule o logaritmo de algum numero qualquer, sei la, 5. Documentação: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#log(double)

agora que você ja sabe fazer essas coisas, crie o programa que faça o calculo que você postou, que envolve as coisas dos passos acima, que você vai ter aprendido quando chegar até aqui.[/quote]

Obrigado, estou lendo a documentação. Valeu mesmo!

[quote=jkrfabio][quote=maior_abandonado][quote=jkrfabio]Bom dia pessoal, estou há uma semana já praticando Java direto por causa do estágio, mas preciso de uma ajuda.

Eu tenho a fórmula para calculcar o percentual de gordura, porém não consigo codifica-lo para linguagem java.
Seguem as fórmulas:

Para homens:
% de gordura = 495/(1.0324-.19077(log(cintura-pescoço))+.15456(log(altura)))-450 (logaritmos em base 10)

Para mulheres:
% de gordura = 495/(1.29579-.35004(log(cintura+quadril-pescoço))+.22100(log(altura)))-450 (logaritmos em base 10)

Alguém poderia codificar pelo menos a do homem pra ter uma base para eu mesmo fazer o da mulher? Grato. :slight_smile: [/quote]

o pessoal do forum de uma forma geral não gosta de codificar para as pessoas, mas não se importam de pegar um começinho que você tenha (por mais básico que seja) e te dar um norte do tipo “olha, isso aqui que você fez na linha 10 não vai funcionar por causa de tal coisa, troque xxx.yyy por aaa.bbb”.

então, o que você não está conseguindo, criar o método principal (main), colocar a conta, o que seria?

pro caso de você não saber nem onde começar, faça como nesse roteiro abaixo:

crie um hello word (google o que é isso se você não souber). só precisa fazer escrever na tela o hello word

crie um programa que crie uma variavel com um valor para ela que você possa colocar no código e imprima o valor dela.

crie agora três variáveis sendo chamadas cintura, pescoço, altura e percentualGordura, a ultima que recebrá o valor total da conta.

crie um programa que calculo quanto é sei la, 2 + 2, usando variáveis e somando uma variável com a outra e exiba no console o valor (o programa que deve calcular, não vale você imprimir 4 direto).

enquanto eu estava escrevendo aqui vi que ja te falaram como calcular o logaritmo, ia falar para você pesquisar isso, enfim, faça um programa que calcule o logaritmo de algum numero qualquer, sei la, 5. Documentação: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#log(double)

agora que você ja sabe fazer essas coisas, crie o programa que faça o calculo que você postou, que envolve as coisas dos passos acima, que você vai ter aprendido quando chegar até aqui.[/quote]

Obrigado, estou lendo a documentação. Valeu mesmo![/quote]

public class testeLog {
	

	static double altura = 1.79;
	static double tamanhoCintura = 60, tamanhoPescoco = 20;
	static double resultado = 495/(1.0324-.19077(Math.log(tamanhoCintura - tamanhoPescoco))+.15456(Math.log(altura)))-Math.log10(450);
	

	
	public static void main(String[] args) 
	{
		System.out.println("% gordura: "+resultado);
		
		/*Para homens:
% de gordura = 495/(1.0324-.19077(log(cintura-pescoço))+.15456(log(altura)))-450 (logaritmos em base 10)
*/
		
	}

}

Dá essa mensagem de erro:

Multiple markers at this line
- Syntax error on token “.19077”, [ expected after this
token
- Syntax error on token “.19077”, [ expected after this
token
- Syntax error on token(s), misplaced construct(s)
- Syntax error on token(s), misplaced construct(s)

Tentei fazer desse jeito, em que poderia melhorar?

OK…
Faltou o sinal de multiplicação (*) depois de .019077 e .15456…
você pode melhorar criando um método que receba os argumentos necessários, faça o cálculo e retorna o resultado.

Daí chama o método na main…
Faça o mesmo para calcular para mulheres…

[quote=JeffersonFelix]OK…
Faltou o sinal de multiplicação (*) depois de .019077 e .15456…
você pode melhorar criando um método que receba os argumentos necessários, faça o cálculo e retorna o resultado.

Daí chama o método na main…
Faça o mesmo para calcular para mulheres…[/quote]

public class calcular {
	
	static double altura, tamanhoPescoco, tamanhoCintura, resultado;
	static double logAltura, logCinturaPescoco, log450;

	public static void main(String[] args) 
	{
		calculaResultado();
	}

	private static void calculaResultado() 
	{
		logAltura = Math.log(altura);
		logCinturaPescoco = Math.log(tamanhoCintura - tamanhoPescoco);
		log450 = Math.log10(450);
		resultado = 495/(1.0324-.19077*(logCinturaPescoco))+.15456*(logAltura)-log450;
		System.out.println("% de gordura: "+resultado);	
	}

}

Uma pergunta, porque se as variáveis não forem do tipo static elas dão erro?
Ainda está com algum erro, pois os resultados não batem com essa calculadora online:


Calcule sua % de gordura SEM adipômetro.

:?

hummmm, está quase lá…
O que você pode fazer é passar parâmetros no seu método (como no método main que tem o parâmetro args), fazer o cálculo com eles e retornar o resultado.

E na classe main, fazer algo do tipo:

System.out.println(calculaResultado(1.60, 60, 20));

Sobre static, dá erro porque você só pode trabalhar dentro de métodos estáticos com variáveis estáticas. Isto já é um assunto de orientação a objetos.

O que você pode fazer é declarar as variáveis dentro do seu método calculaResultado, já que não utilizará elas em nenhum outro lugar. Daí, você não precisará do static.

Recomendo que faça seus estudos com apostilas de java da caelum. Lá no site tem as básicas que são gratuitas. São muito boas para quem está dando os primeiros passos.

[quote=JeffersonFelix]hummmm, está quase lá…
O que você pode fazer é passar parâmetros no seu método (como no método main que tem o parâmetro args), fazer o cálculo com eles e retornar o resultado.

E na classe main, fazer algo do tipo:

System.out.println(calculaResultado(1.60, 60, 20));

Sobre static, dá erro porque você só pode trabalhar dentro de métodos estáticos com variáveis estáticas. Isto já é um assunto de orientação a objetos.

O que você pode fazer é declarar as variáveis dentro do seu método calculaResultado, já que não utilizará elas em nenhum outro lugar. Daí, você não precisará do static.[/quote]

public class calcular {
	
	public static void main(String[] args) 
	{
		System.out.println(calculaResultado(1.80, 60, 20));
	}

	public void calculaResultado(double altura, double tamanhoCintura, double tamanhoPescoco) 
	{
		double logAltura, logCinturaPescoco, log450, resultado;
		
		logAltura = Math.log(altura);
		logCinturaPescoco = Math.log(tamanhoCintura - tamanhoPescoco);
		log450 = Math.log10(450);
		resultado = 495/(1.0324-.19077*(logCinturaPescoco))+.15456*(logAltura)-log450;
		
	}

}

Acho que fiz errado, mas estou quase lá.

[quote=jkrfabio][quote=JeffersonFelix]OK…
Faltou o sinal de multiplicação (*) depois de .019077 e .15456…
você pode melhorar criando um método que receba os argumentos necessários, faça o cálculo e retorna o resultado.

Daí chama o método na main…
Faça o mesmo para calcular para mulheres…[/quote]

public class calcular {
	
	static double altura, tamanhoPescoco, tamanhoCintura, resultado;
	static double logAltura, logCinturaPescoco, log450;

	public static void main(String[] args) 
	{
		calculaResultado();
	}

	private static void calculaResultado() 
	{
		logAltura = Math.log(altura);
		logCinturaPescoco = Math.log(tamanhoCintura - tamanhoPescoco);
		log450 = Math.log10(450);
		resultado = 495/(1.0324-.19077*(logCinturaPescoco))+.15456*(logAltura)-log450;
		System.out.println("% de gordura: "+resultado);	
	}

}

Uma pergunta, porque se as variáveis não forem do tipo static elas dão erro?
Ainda está com algum erro, pois os resultados não batem com essa calculadora online:


Calcule sua % de gordura SEM adipômetro.

:? [/quote]

Porque você está executando em um contexto estático. Para usar as variáveis sem o “static” (variável de instância), terá que criar uma instância da sua classe e chamar o método (que também não precisa ser estático) que você criou.

[quote=jkrfabio][quote=JeffersonFelix]hummmm, está quase lá…
O que você pode fazer é passar parâmetros no seu método (como no método main que tem o parâmetro args), fazer o cálculo com eles e retornar o resultado.

E na classe main, fazer algo do tipo:

System.out.println(calculaResultado(1.60, 60, 20));

Sobre static, dá erro porque você só pode trabalhar dentro de métodos estáticos com variáveis estáticas. Isto já é um assunto de orientação a objetos.

O que você pode fazer é declarar as variáveis dentro do seu método calculaResultado, já que não utilizará elas em nenhum outro lugar. Daí, você não precisará do static.[/quote]

public class calcular {
	
	public static void main(String[] args) 
	{
		System.out.println(calculaResultado(1.80, 60, 20));
	}

	public void calculaResultado(double altura, double tamanhoCintura, double tamanhoPescoco) 
	{
		double logAltura, logCinturaPescoco, log450, resultado;
		
		logAltura = Math.log(altura);
		logCinturaPescoco = Math.log(tamanhoCintura - tamanhoPescoco);
		log450 = Math.log10(450);
		resultado = 495/(1.0324-.19077*(logCinturaPescoco))+.15456*(logAltura)-log450;
		
	}

}

Acho que fiz errado, mas estou quase lá.[/quote]

pois é… quanto a parte do código, era isso mesmo que eu esperava que você chegasse quando dei aquelas dicas, perceba que você quando pediu o negócio pronto, ninguém quis ajudar, mas quando postou duvidas, como por exemplo pro que o método deve ser estatico, veio alguém e respondeu, a tendencia do forum é essa mesmo, se você se mostrar não ser folgado o pessoaltende a ajudar :wink:

como disse, quanto ao código é isso, se está errado então falta ver mesmo é o calculo, você tinha postado as formulas abaixo:

Para homens:
% de gordura = 495/(1.0324-.19077( log(cintura-pescoço) )+.15456(log(altura)))-450 (logaritmos em base 10)

e o código:

	logAltura = Math.log(altura);
	logCinturaPescoco = Math.log(tamanhoCintura - tamanhoPescoco);
	log450 = Math.log10(450);
	resultado = 495/(1.0324-.19077*(logCinturaPescoco)[b])[/b]+.15456*(logAltura)-log450;

perceba que o parenteses depois da divisão ("/") está sendo fechado no segundo parenteses depois do uso da sua variavel “logCinturaPescoco”, antes do trecho “+.15456”, se percebi bem não é assim que ficou na sua formula (mas o erro é no calculo, ja é um avanço).

editando, só pra avisar que negritei o parenteses que estou falando.

[quote=maior_abandonado][quote=jkrfabio][quote=JeffersonFelix]hummmm, está quase lá…
O que você pode fazer é passar parâmetros no seu método (como no método main que tem o parâmetro args), fazer o cálculo com eles e retornar o resultado.

E na classe main, fazer algo do tipo:

System.out.println(calculaResultado(1.60, 60, 20));

Sobre static, dá erro porque você só pode trabalhar dentro de métodos estáticos com variáveis estáticas. Isto já é um assunto de orientação a objetos.

O que você pode fazer é declarar as variáveis dentro do seu método calculaResultado, já que não utilizará elas em nenhum outro lugar. Daí, você não precisará do static.[/quote]

public class calcular {
	
	public static void main(String[] args) 
	{
		System.out.println(calculaResultado(1.80, 60, 20));
	}

	public void calculaResultado(double altura, double tamanhoCintura, double tamanhoPescoco) 
	{
		double logAltura, logCinturaPescoco, log450, resultado;
		
		logAltura = Math.log(altura);
		logCinturaPescoco = Math.log(tamanhoCintura - tamanhoPescoco);
		log450 = Math.log10(450);
		resultado = 495/(1.0324-.19077*(logCinturaPescoco))+.15456*(logAltura)-log450;
		
	}

}

Acho que fiz errado, mas estou quase lá.[/quote]

pois é… quanto a parte do código, era isso mesmo que eu esperava que você chegasse quando dei aquelas dicas, perceba que você quando pediu o negócio pronto, ninguém quis ajudar, mas quando postou duvidas, como por exemplo pro que o método deve ser estatico, veio alguém e respondeu, a tendencia do forum é essa mesmo, se você se mostrar não ser folgado o pessoaltende a ajudar :wink:

como disse, quanto ao código é isso, se está errado então falta ver mesmo é o calculo, você tinha postado as formulas abaixo:

Para homens:
% de gordura = 495/(1.0324-.19077( log(cintura-pescoço) )+.15456(log(altura)))-450 (logaritmos em base 10)

e o código:

	logAltura = Math.log(altura);
	logCinturaPescoco = Math.log(tamanhoCintura - tamanhoPescoco);
	log450 = Math.log10(450);
	resultado = 495/(1.0324-.19077*(logCinturaPescoco)[b])[/b]+.15456*(logAltura)-log450;

perceba que o parenteses depois da divisão ("/") está sendo fechado no segundo parenteses depois do uso da sua variavel “logCinturaPescoco”, antes do trecho “+.15456”, se percebi bem não é assim que ficou na sua formula (mas o erro é no calculo, ja é um avanço).

editando, só pra avisar que negritei o parenteses que estou falando.
[/quote]

Coloquei para depois que fecho o primeiro parênteses em altura.
Não mencionei que está dando erro na hora de imprimir, teste só aí

public class calcular {
	
	public static void main(String[] args) 
	{
		System.out.println(calculaResultado(1.80, 60, 20));
	}

	public void calculaResultado(double altura, double tamanhoCintura, double tamanhoPescoco) 
	{
		double logAltura, logCinturaPescoco, log450, resultado;
		
		logAltura = Math.log(altura);
		logCinturaPescoco = Math.log(tamanhoCintura - tamanhoPescoco);
		log450 = Math.log10(450);
		resultado = 495/(1.0324-.19077*(logCinturaPescoco)+.15456*(logAltura))-log450;
		
	}

}

The method println(boolean) in the type PrintStream is not applicable for the arguments (void)
Cannot make a static reference to the non-static method calculaResultado(double, double, double) from the type calcular