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

pmlm

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]

pmlm

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!!!

pmlm

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

jvkirk

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

nel
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:

nel

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

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!

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.

Vingdel

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!

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

jvkirk

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

Relembrar é reviver kkk

noh, bem lembrado auhuaha

Vingdel

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!

JhowTroMundo

Ó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]

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!

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!!!

Vingdel

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!

ErmesonSilva1999

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