• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bertolo

x^n

9 mensagens neste tópico

Boas!

Queria fazer um programa que me desse o resultado da expressão x^n.

Comecei a escrever o programa, até que me deparei com algumas duvidas. Testei o programa em 8 situações diferentes, conclui que so me dava resultado certo para x e n inteiros e com n positivo.

O meu código é:

#include <stdio.h>

float plot( float x, float n){
int b;
double res;
b=0;
res=1;
if(n<0)
{while(b>n){
res=res*x;
b++;
}
return res;}
else
	while(b<n){
	res=res*x;
	b++;
	}
	return res;
	}

int main (void){

double final;
float n,x;

printf("x^n\nIntroduz x:");
if((scanf("%f",&x)) ==0)
	printf("Erro\n");
else
	{printf("Introduz n:");
if((scanf("%f",&n)) ==0)
	printf("Erro\n");
else		
	{final=plot(x,n);
	printf("x^n = %.0f\n", final);}}
return 0;	
}

Gostava que me ajudassem a resolver estes bugs.

cumps [[]]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

GeSHi


quanto ao programa, pelo menos o n convém ser inteiro, caso contrário não podes fazer as contas dessa forma.

não percebi para que era o 'b', não podias simplesmente decrementar o 'n'?

mais um pormenor: x^-n <=> 1/(x^n)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ficou Assim:

#include <stdio.h>

float plot( float x, float n){
int b;
double res;
b=0;
res=1;
if(n<0)
{while(0>n){
res=res*x;
n++;
}
return 1/res;}
else
	while(n>0){
	res=res*x;
	n--;
	}
	return res;
	}

/*************************/

int main (void){

double final;
float n,x;

printf("x^n\nIntroduz x:");
if((scanf("%f",&x)) ==0)
	printf("Erro\n");
else
	{printf("Introduz n:");
if((scanf("%f",&n)) ==0)
	printf("Erro\n");
else		
	{final=plot(x,n);
	if(n>0)
	printf("x^n = %e\n", final);
	else
	printf("x^n = %e\n", final);}}

return 0;	
}

Tem alguns problemas resolvidos, mas ainda não funciona com decimais.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

esse método só funciona para expoentes inteiros.

para decimais, vais ter que usar a função 'pow'. por exemplo x^(a.:)=plot(x,a)*pow(x,0.:P

mas acho que devias fazer apenas para inteiros.

já agora, essa função podia ser optimizada...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mais uma vez thks.

o que posso mudar ainda no programa anterior, tendo em conta que é so para inteiros?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para começar o tipo de dados na assinatura da função.

e já agora, parece-me que o 'b' não está aí a fazer nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora