Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Não obtenho o resultado correto!

Estou tentando resolver essa questão conforme o código abaixo, mas o resultado me retorna o valor 0 (zero) poderiam comentar? o prompt faz a pergunta sobre a base, depois sobre o expoente. O resultado retorna 0 no prompt.

# include <stdio.h>


int resultado = 1;

for (int i = 0; i<b; i++){

    resultado = resultado*a;
}

printf("Resultado é:%d \n", resultado);

}


    int main(){

int base;
int expoente;

printf("Qual a base? \n");
scanf (" %d", base);

printf("Qual o expoente: \n");
scanf (" %d", expoente);



potencia (base,expoente);


}

4 respostas

Olá Giliandro.

Primeiro, senti falta da função potencia no código que você postou, mas imagino que tenha sido um engano quando você colou aqui, assumi que a função era essa:

void potencia(int a, int b){

    int resultado = 1;

    for (int i = 0; i<b; i++){

        resultado = resultado*a;
    }

    printf("Resultado é:%d \n", resultado);

}

Outra modificação que fiz no código que você postou foi na entrada dos dados nas funções scanf, essa função espera que você envie o endereço de memoria das variais e fazemos isso incluindo o 'E' comercial ( & ) antes do nome da variável , como fiz abaixo:

printf("Qual a base? \n");
scanf (" %d", &base);

printf("Qual o expoente: \n");
scanf (" %d", &expoente);

Com essa modificação imagino que seu código deve funcionar normalmente.

Bons Estudos.

Olá Igor, Eu realmente errei ao copiar e colar o programa aqui por isso a falta da função potência! Adicionalmente, muito obrigado pela ajuda, de fato o programa com a correção sugerida rodou sem problemas, porém, gostaria de um esclarecimento do porquê de eu não conseguir gerar o resultado correto com transcrição abaixo:

Confesso que tenho certa dificuldade com o comando FOR e estou aqui no papel fazendo simulações. Mas pode avaliar esse pequeno programa abaixo e esclarecer?

MUITO GRATO desde já!

// Inclui as bibliotecas
# include <stdio.h>
# include <string.h>


void potencia (int a, int b){

    int resultado = a^b;


printf("Resultado é:%d\n", resultado);

}


    int main(){

int base;
int expoente;

printf("Qual a base? \n");
scanf (" %d", &base);

printf("Qual o expoente: \n");
scanf (" %d", &expoente);



potencia (base,expoente);


}



Olá Giliandro.

Nesse código que você trouxe você está utilizando o operador ( ^ ) que na linguagem C não significa potência, ele é utilizado para comparar dois bits e realizar a operação lógica de ou exclusivo ( XOR ).

int resultado = a^b;

E para entender melhor o for recomendo passarmos por cada interação dele.

   int resultado = 1;
    for (int i = 0; i<b; i++){

        resultado = resultado*a;
    }

Por exemplo se a tiver o valor 2 e b tiver o valor 3, na primeira interação se substituirmos os valores teremos:

    for (int i = 0; i<3; i++){

        resultado = 1*2;
    }

Já na segunda rodada agora com i valendo 1, teremos:

    for (int i = 1; i<3; i++){

        resultado = 2*2;
    }

E finalmente na ultima rodada com i valendo 2, teremos:

    for (int i = 1; i<3; i++){

        resultado = 4*2;
    }

Paramos por ai já que agora i vale 3 e 3 não é menor que 3 que é o valor de b, com isso o valor dentro da nossa variável resultado é 8.

Conseguiu entender melhor o funcionamento do for e do porque o operador ^ não trazer o resultado que você estava esperando ?

Bons Estudos.

solução!

Sensacional Igor! Foi busquei outras fontes aqui na internet e fiz uns rascunhos no papel, Com isso consegui essa mesma dedução que você mencionou acima. Só acho que o título da tarefa sugerida na plataforma é tendencioso ao fato de o sinal ^ ser um operador de potência, bem como estamos acostumados em algumas calculadores. Sugeri até que essa questão seja reformulada. No mais Obrigado novamente!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software