askazy Posted July 11, 2014 Report Share Posted July 11, 2014 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 More sharing options...
Rui Carlos Posted July 11, 2014 Report Share Posted July 11, 2014 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. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now