Jump to content

Potência em C


askazy
 Share

Recommended Posts

Crie uma função, que recebe um valor n passado por valor e dois inteiros b e k passados por referência.Sua função deve retornar em b e k valores tal que b^k=n e b seja o menor possível.

(b elevado a k)

#include <stdio.h>
void teste(int n, int *b, int *k)
{
   int i, j, pot = 1;
   for (i = 0; pot != n; i++) {	    /*Enquanto a potencia for diferente do numero incrementa */
    pot = 1;
    for (j = 0; pot <= n; j++) {    /*incrementa o expoente até ser menor ou igual a n */
	    pot = pot * i;
    }
   }
   *b = i;					 /*armazena a base */
   *k = j;					 /*armazena o expoente */
}
int main()
{
   int n, b, k;
   scanf("%d", &n);
   teste(n, &b, &k);
   printf("Os valores de b e k são %d e %d respectivamente\n", b, k);
   return 0;
}

Está dando valores absurdos e não estou conseguindo achar o motivo.

Link to comment
Share on other sites

O programa chega a terminar?

O primeiro problema que vejo nesse programa está no facto de inicializares o i a 0. Neste caso, qual é que achas que vai ser o resultado de pot = pot * i;? Para o 1 tens um problema semelhante. Assim, é capaz de ser vou ideia tratar estes valores fora do ciclo.

O segundo problema está no for (j = 0; pot <= n; j++), pois estás a mandar fazer mais uma iteração mesmo que pot já seja igual a n. Vais precisar ainda de ter em atenção o valor do i, pois muito provavelmente vais estar a incrementá-lo mais vezes do que devias. Mas quando corrigires o resto, isto também se vê facilmente como corrigir.

Por último, não é grande ideia usares o pot != n no for. Isto porque se o n não for uma potência de um número, o teu programa não vai terminar.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.