Calculo potencia numero real sem math pow() [RESOLVIDO]

26 respostas
L

Bom dia pessoal!
Tenho que fazer o seguinte exercicio, e estou aqui quebrando a cabeça devido a minha fraqueza com java, alguem pode ajudar?

Escrever um metodo em java que realize o calculo da potencia de um numero real A por um numero inteiro b, sem a utilização do math.pow.

Segue o esboço do meu codigo abaixo.

Sei que não posso simplesmente multiplicar a base pelo expoente.

import javax.swing.*; 
public class Exercicio01 {
	    
		public static float exp(float n1)     
		{  
		    int base;
		 	float total=0;  
		      if (base ==0)
		    	  total=1;
		      
		      else
		      for(int i=0;i<n1;i++){
		    	  	      
		           total *= n1;    
		            i++;  
		     return total;   
		      } 
		}  
		  	         
		    //metodo principal  
		    public static void main(String args[]){  
		        //Declaração de Variáveis  
		        float num1;
		        int num2;  
		          
		        //Entrada de Dados do Usuário  
		        num1 = Float.parseFloat(JOptionPane.showInputDialog("Digite um número"));    
		        num2 = Integer.parseInt(JOptionPane.showInputDialog("Digite outro número"));    
		          
		        //Exibição dos dados  
		          
		        JOptionPane.showMessageDialog(null, exp(num1));  
		          
		    }  
		      
		}

26 Respostas

P

O teu problema não é de JAVA mas sim de matemática.

Como é que se calcula uma potência?

L

[b]A base quantas vezes o expoente aparecer…

:frowning:

Não precisa chamar de burro nao cara…hauahauahauahaua

[/b]

P

Simplesmente implementa isso!
Multiplica a base por ela própria quantas vezes o expoente aparecer.

L

Valeu cara, to fazendo isso aqui…
E desculpe a vergonha ae!!!

P

:slight_smile:

L

Cara,

Agora me tira a duvida, ta dando pau na hora de passar como parametro isso aqui:

import javax.swing.*; 
public class Exercicio01 {
	    
		public static float exp(float base, float expoente)     
		{  
		    float resultado=0;
		    
			if(base ==0){
		    	resultado=0;
		    }
			else
				for(int i=1; i< expoente;i++){
					resultado=base*i;
				}
		      
		}  
		  	         
		    //metodo principal  
		    public static void main(String args[]){  
		        //Declaração de Variáveis  
		        float base;
		        float expoente;  
		          
		        //Entrada de Dados do Usuário  
		        base = Float.parseFloat(JOptionPane.showInputDialog("Digite um número"));    
		        expoente = Float.parseFloat(JOptionPane.showInputDialog("Digite outro número"));    
		          
		        //Exibição dos dados  
		          
		        JOptionPane.showMessageDialog(null, exp(base, expoente));  
		          
		    }  
		      
		}

Passo dois floats e o maldito me fala q não posso passar parametro float...

Erro dado pelo eclipse

[Exception in thread "main" java.lang.Error: Unresolved compilation problem:
This method must return a result of type float

at Exercicio01.exp(Exercicio01.java:4)
at Exercicio01.main(Exercicio01.java:30)

J

Como nosso amigo ali já disse, seu problema é de lógica e matematica mesmo
É só vc passar para o método o valor da base, e o valor da potencia
dai vc cria um for que repete o numero de vezes da potencia, e dentro do for coloca uma variavel acumulando o seu próprio valor vezes o valor da base digitada
mais ou menos assim

for (i = 0; i < potencia; i++) {
resultado *= base;
}

Simples

Leonardo Augusto:
Cara,

Agora me tira a duvida, ta dando pau na hora de passar como parametro isso aqui:

import javax.swing.*; 
public class Exercicio01 {
	    
		public static float exp(float base, float expoente)     
		{  
		    float resultado=0;
		    
			if(base ==0){
		    	resultado=0;
		    }
			else
				for(int i=1; i< expoente;i++){
					resultado=base*i;
				}
		      
		}  
		  	         
		    //metodo principal  
		    public static void main(String args[]){  
		        //Declaração de Variáveis  
		        float base;
		        float expoente;  
		          
		        //Entrada de Dados do Usuário  
		        base = Float.parseFloat(JOptionPane.showInputDialog("Digite um número"));    
		        expoente = Float.parseFloat(JOptionPane.showInputDialog("Digite outro número"));    
		          
		        //Exibição dos dados  
		          
		        JOptionPane.showMessageDialog(null, exp(base, expoente));  
		          
		    }  
		      
		}

Passo dois floats e o maldito me fala q não posso passar parametro float...

Erro dado pelo eclipse

[Exception in thread "main" java.lang.Error: Unresolved compilation problem:
This method must return a result of type float

at Exercicio01.exp(Exercicio01.java:4)
at Exercicio01.main(Exercicio01.java:30)

vc tem um método com retorno, mas nao ta retornando nada Oo
tem que retornar um valor (do tipo float) ueh

e sua conta no for ali vai ficar errada
faz que nem expliquei ali emcima

N
double value = Math.pow(2, 4);
System.out.println(value);
		
double result = 1;
for(int i = 0; i < 4; i++) {
    result = result * 2;
}
System.out.println(result);

Pequeno exemplo.

L

Valeu pessoal e desculpe o amadorismo ae!

L

[b]Nel,

Não posso usar o math pow, senão era facil!!!
hauahauahauahaua ou não né!!![/b]

L

jvkirk,

Consegui resolver os problemas com os valores…
hehehehehehe, agora vou partir pra logica!!!

:slight_smile:

N

Leonardo Augusto:
[b]Nel,

Não posso usar o math pow, senão era facil!!!
hauahauahauahaua ou não né!!![/b]

Por isso fiz usando laço de repetição.
Demonstrei com o Math apenas como exemplo.

L

Valeu a todos pela força...

Problema Resolvido!!!

Segue o codigo caso alguem necessite utilizar...

Ou seja um iniciante em java!!!

import javax.swing.*; 
public class Exercicio01 {
	    
		public static float exp(float base,float expoente)     
		{  
		    float resultado=1;
		    
			if(base ==0){
		    	resultado=0;
		    }
			else
				for(int i=0; i< expoente;i++){
					resultado*=base;
				}
			return resultado;
			
		      
		}  
		  	         
		    //metodo principal  
		    public static void main(String args[]){  
		        //Declaração de Variáveis  
		        float base;
		        float expoente;  
		          
		        //Entrada de Dados do Usuário  
		        base = Float.parseFloat(JOptionPane.showInputDialog("Digite um número"));    
		        expoente = Float.parseFloat(JOptionPane.showInputDialog("Digite outro número"));    
		          
		        //Exibição dos dados  
		          
		        JOptionPane.showMessageDialog(null, exp(base, expoente));  
		          
		    }  
		      
		}
V

Boa tarde, Leonardo!

Veja o meu como fica:
import java.util.Scanner;
public class pow{
	public static void main(String[] args){
		Scanner entrada = new Scanner(System.in);
		System.out.print("Valor da base: ");
		int base = entrada.nextInt();
		System.out.print("Valor do expoente: ");
		int exp = entrada.nextInt();

		System.out.print(base+" elevado a "+exp+": "+pow(base, exp));

	}
	// Parte que te interessa do código
	public static int pow(int b, int e){
		if(e == 0)
			b = 1;
		int total = b;
		while(e > 1){
			total *= b;
			e--;
		}
		return total;
	}
}
EDIT: adicionei condição para expoente = 0... Vlw pmlm

Abraço!

P

Vingdel:
EDIT: adicionei condição para base = 0…


Condição errada.

Quando a base é 0, o resultado é zero. No teu caso vai dar um.
Pelo contrário, quando o expoente é 0 o resultado deve ser um. No teu caso vai dar zero.

V

pmlm:
Vingdel:
EDIT: adicionei condição para base = 0…


Condição errada.

Quando a base é 0, o resultado é zero. No teu caso vai dar um.
Pelo contrário, quando o expoente é 0 o resultado deve ser um. No teu caso vai dar zero.

Opa pmlm, falta de atenção mesmo… Corrigi lá. Obrigado!

Abraço!

J

Esqueceram que número inteiro não quer dizer natural.

public static double calculaPotenca(double base, int potencia){
		if(potencia == 0)return 1;
				
		if(potencia &gt; 0){			
			return getPotencia(base, potencia);
		} else {
			potencia*=-1;			
			return 1/getPotencia(base, potencia);
		}		
	}
	
	private static double getPotencia(double base, int potencia){
		double resultado=base;
		for(;potencia&gt;1;potencia--){
			resultado*=base;
		}
		return resultado;
	}

Relembrar é reviver kkk

J

JhowTroMundo:
Esqueceram que número inteiro não quer dizer natural.

Relembrar é reviver kkk

noh, bem lembrado auhuaha

V

JhowTroMundo:
Esqueceram que número inteiro não quer dizer natural.

public static double calculaPotenca(double base, int potencia){
		if(potencia == 0)return 1;
				
		if(potencia &gt; 0){			
			return getPotencia(base, potencia);
		} else {
			potencia*=-1;			
			return 1/getPotencia(base, potencia);
		}		
	}
	
	private static double getPotencia(double base, int potencia){
		double resultado=base;
		for(;potencia&gt;1;potencia--){
			resultado*=base;
		}
		return resultado;
	}

Relembrar é reviver kkk


Boa, aplicou bem a propriedade… Só acho que esse for do seu método getPotencia() ficaria melhor se fosse um while(). DeJaVu.

Ahhh Lembrar é reviver… Relembrar é reviver de novo… kkk

Abraço!

J

Ótimo exercício pra relembrar recursividade também (Sem nada o q fazer no trabalho dá nisso kkk).

public static double calculaPotencaRecursiva(double base, int potencia){
		if(potencia == 1) return base;		
		if(potencia == 0)return 1;
		if(base == 0) return 0;	
		
		double resultado = base;
		if(potencia&gt;0){
			return resultado*calculaPotencaRecursiva(base, --potencia);
		} else {
			potencia*=-1;
			double res = resultado*calculaPotencaRecursiva(base, --potencia);
			return 1/res;
		}
	}
L

[b]Grande Vingdel

Só que eu nao posso utilizar o metodo pow, você utilizou se nao me engano!!!

Mais valeu!![/b]

L

[b]Grande JhowTroMundo

Boa essa ae hein!!!
[/b]

V

Leonardo Augusto:
[b]Grande Vingdel

Só que eu nao posso utilizar o metodo pow, você utilizou se nao me engano!!!

Mais valeu!![/b]

Leonardo,

Eu imaginava que você diria isso. Você deveria olhar o código todo. Eu não usei o Math.pow(). O que eu fiz foi criar um método com o nome pow, o nome pode ser qualquer um (pot, potencia, power, numeroElevadoAOutro).

Preste atenção no código (entenda-o), não só no meu, assim você vai aprender bastante. Você vai ver que existem várias maneiras de fazer o que você quer.

Abraço!

L

Vingdel:
Leonardo Augusto:
[b]Grande Vingdel

Só que eu nao posso utilizar o metodo pow, você utilizou se nao me engano!!!

Mais valeu!![/b]

Leonardo,

Eu imaginava que você diria isso. Você deveria olhar o código todo. Eu não usei o Math.pow(). O que eu fiz foi criar um método com o nome pow, o nome pode ser qualquer um (pot, potencia, power, numeroElevadoAOutro).

Preste atenção no código (entenda-o), não só no meu, assim você vai aprender bastante. Você vai ver que existem várias maneiras de fazer o que você quer.

Abraço!

Grande Vingdel ,

Me perdoe pela vergonha passada, depois que pus a cabeça no travesseiro é q fiquei pensando na burrada…
Pensei e peço mil desculpas novamente pela vergonha…
Irei prestar mais atenção ao codigo e valeu pelas dicas!!!

V

Leonardo Augusto:
Vingdel:
Leonardo Augusto:
[b]Grande Vingdel

Só que eu nao posso utilizar o metodo pow, você utilizou se nao me engano!!!

Mais valeu!![/b]

Leonardo,

Eu imaginava que você diria isso. Você deveria olhar o código todo. Eu não usei o Math.pow(). O que eu fiz foi criar um método com o nome pow, o nome pode ser qualquer um (pot, potencia, power, numeroElevadoAOutro).

Preste atenção no código (entenda-o), não só no meu, assim você vai aprender bastante. Você vai ver que existem várias maneiras de fazer o que você quer.

Abraço!

Grande Vingdel ,

Me perdoe pela vergonha passada, depois que pus a cabeça no travesseiro é q fiquei pensando na burrada…
Pensei e peço mil desculpas novamente pela vergonha…
Irei prestar mais atenção ao codigo e valeu pelas dicas!!!

Que isso, Leonardo!

O importante é que no final o assunto fique entendido, se foi de imadiato ou se foi com alguns empurrões são apenas detalhes.
Fique a vontade para argumentar pois isso enriquece o tema.

Abraço!

E

Método em [color=#aa0000]JAVA[/color] que resolve potência
by Ermeson Silva:[color=red] [/color] https://www.facebook.com/ermeson.silva.54966

package potencia;

public class Potencia {
	public static void main(String[] args) {
		
	System.out.println(potencia(2, 10.5)); 	//O resultado será 110.25

	System.out.println(potencia(-2, 10)); 	//O resultado será 0.01

	System.out.println(potencia(0, 10)); 	//O resultado será 1
	}
	
	public static double potencia(int exp, double base){  
		double res = 1;  
		double d;  
		if(exp>0){  
		  for(int i=0; i<exp; i++){  
		   res *= base;  
		  }  
		}else if(exp<0){  
		  for(int i=0; i<exp*(-1); i++){  
		   res *= base;    
		  }  
		   d = 1/res;  
		   res = d;
		}  
		 return res;  
		}
}
Criado 26 de outubro de 2011
Ultima resposta 31 de jan. de 2015
Respostas 26
Participantes 7