Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LucasGurgel

[Resolvido] Raiz quadrada

Recommended Posts

Estou com um problema em tirar a raiz quadrada de um número. Qualquer número colocado para operação sai como resultado 1.

 


#include <stdio.h>
#include <math.h>

int num,b;
int main () {


	scanf("%d",&num);

	b = pow(num,(1/2));

	printf("%d \n",B);

return 0;
}

 

Já tentei colocar ao invés de 1/2 , 0.5 mas ocorre um erro que não possibilita uso de variável, apenas número.

 

Ajudem !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então tem algo de errado.

 

Fiz isso daqui:

 

#include <math.h>
#include <stdio.h>
int main()
{
   float num;
   scanf("%f",&num);
   printf("%f\n",pow(num,(0.5/1)));
   return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei do mesmo jeito que você citou mas não funcionou. Tentei fazer uma função para calcular a raiz e depois chamei a função e ainda não funcionou. Olha:

 

#include <math.h>
#include <stdio.h>

   float num;

int square(int x){

	x = pow(num,(0.5/1));
	printf ("%d",x);

	return 0;
}

int main(){

	int num;

	scanf("%d",&num);
	square (num);

   return 0;

}

 

Quando modifico a var num por um número que tenha raiz exata na função square funciona sem erro, porém sairá apenas o resultado 3:

 

int square(int x){

	x = pow(9,(0.5/1));
	printf ("%d",x);

	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro é por que o gcc não carrega a lib math automaticamente. tente compilar assim:

 

gcc arquivo.c -lm

 

o "-lm" carrega a lib math

 

Agora compilou sem erros. Existe mais alguma lib que funcione apenas assim ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os dois problemas são simples, uma vez descobertas as causas. O primeiro foi resolvido pelo Beraldo.

 

Seu programa imprime 1 por causa da divisão inteira. Veja o protótipo de pow:

 

double pow(double x, double y);

 

O primeiro fato importante é que ela retorna valores de tipo double. Você está armazenando o resultado em um objeto de tipo int. Isto não é necessariamente um problema, mas pode ser que haja overflow.

 

Os resultados são todos um porque (1 / 2) é 0, e qualquer número elevado a 0 é um. Se você quiser evitar a divisão inteira, use (1.0 / 2.0):

 

// compilação: gcc -std=c99 -Wall -Wextra -pedantic -lm a.c -o a

#include <math.h>
#include <stdio.h>

int main(void)
{
   printf("\n\t%lf\n", pow(4, 1.0 / 2.0));
}

 

Boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os dois problemas são simples, uma vez descobertas as causas. O primeiro foi resolvido pelo Beraldo.

 

Seu programa imprime 1 por causa da divisão inteira. Veja o protótipo de pow:

 

double pow(double x, double y);
O primeiro fato importante é que ela retorna valores de tipo double. Você está armazenando o resultado em um objeto de tipo int. Isto não é necessariamente um problema, mas pode ser que haja overflow.

 

Os resultados são todos um porque (1 / 2) é 0, e qualquer número elevado a 0 é um. Se você quiser evitar a divisão inteira, use (1.0 / 2.0):

 

// compilação: gcc -std=c99 -Wall -Wextra -pedantic -lm a.c -o a

#include <math.h>
#include <stdio.h>

int main(void)
{
    printf("\n\t%lf\n", pow(4, 1.0 / 2.0));
}
Boa sorte.

 

Perfeito. O meu sempre deu o resultado 1, depois que coloquei pow(x,1.0/2.0); funcionou perfeitamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.