Olá Natan, td bem? espero que sim!
há um equívoco na função "calcular()", pois ela gera um valor diferente do resultado esperado. Esse bug ocorre na expressão :
for (int i = 0; i < potencia; i ++)
{
(*resultado) = base * base; // o bug está nessa linha;
}
o resultado aq sempre será "base * base", isso não vai iterar, tornando o laço "for()" inutilizado. vamos ver um "debug" de como esse codigo funciona com a base 5 e expoente 3;
base = 5
expoente = 3
resultado = 0
iterar de 0 ate expoente (3x)
resultado = 5 * 5
//resultado vai ser 25;
//proximo laço
resultado = 5 * 5
//resultado vai ser 25;
//proximo laço
resultado = 5 * 5
//resultado vai ser 25;
//fim do laço
O resultado esperado de 5^3 seria 125, mas o código retornou como resultado 25.
isso poderia ser corrigido com o operador "+=", assim o resultado iria incrementando, mas nessa expressão isso ia continuar fora do esperado, pois está sendo calculado a operação matemática:
resultado = expoente * (base * base)
//se base base = 5 e expoente = 3 resultado = 75;
//mas o resultado da operação deveria retornar 125;
segue o código corrigido e funcional:
#include <stdio.h>
//a função retorna o resultado da operação, assim ela fica mais generiaca
int calcularPotencia(int base, int expoente){
//se expoente == 0, o resultado é 1
if(expoente == 0) { return 1; }
//se expoente > 0, já vamos iniciar o resultado como a base
int resultado = base;
//por já ter iniicado o resultado, vamos inicializar o iterador como 1
for (int i = 1; i < expoente; i ++)
{
resultado *= base; //o mesmo que resultado = resultado * base;
}
return resultado;
}
int main(){
int base, potencia;
printf("Informe o valor da base ");
scanf("%d", &base);
printf("Informe o valor da potencia");
scanf("%d", &potencia);
//como a função ficou generica, ela fica mais versátil
int resultado = calcularPotencia(base, potencia);
printf("resultado: %d\n", resultado);
return 0;
}
espero ter ajudado :)
Bons estudos!