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

[b]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.[/b]

[code]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));  
	          
	    }  
	      
	} [/code]

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

Como é que se calcula uma potência?

[b]A base quantas vezes o expoente aparecer…

:frowning:

Não precisa chamar de burro nao cara…hauahauahauahaua

[/b]

1 curtida

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

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

:slight_smile:

Cara,

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

[code]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));  
	          
	    }  
	      
	}  

[/code]

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

Erro dado pelo eclipse

[[i][b]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)

[/b][/i]

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

[quote=Leonardo Augusto]Cara,

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

[code]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));  
	          
	    }  
	      
	}  

[/code]

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

Erro dado pelo eclipse

[[i][b]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)

[/b][/i][/quote]

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

[code]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);[/code]

Pequeno exemplo.

1 curtida

Valeu pessoal e desculpe o amadorismo ae!

[b]Nel,

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

jvkirk,

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

:slight_smile:

[quote=Leonardo Augusto][b]Nel,

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

[/quote]

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

[b]Valeu a todos pela força…

Problema Resolvido!!!

Segue o codigo caso alguem necessite utilizar…

Ou seja um iniciante em java!!!

[/b]

[code]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));  
	          
	    }  
	      
	}  

[/code]

Boa tarde, Leonardo!

Veja o meu como fica:

[code]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;
}

}[/code]EDIT: adicionei condição para expoente = 0… Vlw pmlm

Abraço!

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

[/quote]
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.

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

[/quote]
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.[/quote]

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

Abraço!

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

[quote=JhowTroMundo]Esqueceram que número inteiro não quer dizer natural.

Relembrar é reviver kkk[/quote]

noh, bem lembrado auhuaha

[quote=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[/quote]
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!