1
resposta

Calculando novamente a potência

Prezados, cheguei nesse resultado abaixo e gostaria de saber se atende ao enunciado do exercício.

#include <stdio.h>

void potencia (int* a,int* b, int* resultado) {
    for (int i=0; i<(*b); i++){
        (*resultado)*= ((*a)*1);
    }
    printf("A potência de %d elevado a %d é = %d", *a,*b,*resultado);
}

int main(){

int a = 10;
int b = 5;
int resultado =1;
potencia (&a,&b,&resultado);

}
1 resposta

Olá José!

Pelo que entendi, você está com dúvidas se o código que você escreveu atende ao enunciado do exercício. Vamos analisar!

No enunciado, é solicitado que a função potencia receba um ponteiro de inteiro para o resultado. No seu código, você está passando o endereço de memória da variável resultado para a função, o que está correto.

Além disso, você está utilizando corretamente o ponteiro para modificar o valor de resultado dentro do loop, elevando a à potência b.

No entanto, notei que você está multiplicando (*resultado) por ((*a)*1). Multiplicar por 1 não altera o valor, então você pode simplificar essa linha para (*resultado) *= (*a).

Outro detalhe é que você não está tratando o caso em que b é igual a 0. Nesse caso, a potência seria sempre 1. Você pode adicionar uma verificação no início da função para retornar 1 se b for igual a 0.

Com essas alterações, o seu código ficaria assim:

#include <stdio.h>

void potencia(int* a, int* b, int* resultado) {
    if (*b == 0) {
        *resultado = 1;
        return;
    }
    
    for (int i = 0; i < *b; i++) {
        *resultado *= *a;
    }
    
    printf("A potência de %d elevado a %d é = %d", *a, *b, *resultado);
}

int main() {
    int a = 10;
    int b = 5;
    int resultado = 1;
    potencia(&a, &b, &resultado);
}

Espero ter ajudado! Bons estudos!