Ir ao conteúdo
  • Cadastre-se
Rager82

Saber se um número é quadrado perfeito

Recommended Posts

Olá,

sou iniciante na área de programação e estou com a seguinte dúvida: como saber se um numero é um quadrado perfeito.

Após muitas pesquisas cheguei nesse seguinte código, porém tenho algumas dúvidas sobre ele.

Queria entender por que o valor de "b" foi atribuido a "c"  c = b;

E após isso na condição "if" é verificado se "b" é menor ou igual a "c" ??

Agradeço desde de já!

#include <stdio.h>#include <stdlib.h>#include <math.h>main(){       int a, c;    float b;       printf("Digite um Numero Inteiro: ");    scanf("%d",&a);    b=sqrt(a);     c=b;    if(b<=c){             printf("\nO Numero Digitado e um Quadrado Perfeito");             printf("\nRaiz Quadrada de %d: %.f\n\n",a , ;    }    else        printf("\nO Numero Digitado nao e um Quadrado Perfeito\n\n");    system("pause");    return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

"b" é float e "c" é inteiro.

Parece que o c = b faz o seguinte:

 

Se "b" for um número inteiro, ele é armazenado em "c". Então "c = b" é verdade. Portanto o número é um quadrado perfeito.

Exemplo é o número 4. Raíz de 4 = 2.

 

Acho que nessa condição bastaria comparar b == c e não b <= c.

 

Se "b" for um número real (quando possui resto / quando o número não é inteiro, sobrando depois da vírgula), é certo que "c" vai receber um número menor do que o "b" vale.

Por isso ele cai no "Senão" da sua condição.

Exemplo: número 5. Raíz de 5 =~ 2,24

b =~ 2,24

c = 2 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como a variável c é do tipo inteiro, sempre que ela receber o valor de b fará um arredondamento.

Se por exemplo a variável 'a' receber 144, b e c serão iguais 12.

Agora se você entrar com 143, b recerá 11.958... e c apenas o inteiro 11. Logo, quando você comparar, c será menor que b e portanto o número não será um quadrado perfeito

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, boa tarde!
 

Vou tentar ajudar... vamos lá:

 

1.º  "por que o valor de "b" foi atribuído a "c"  c = b;" - Observe que "b" é uma variável do tipo FLOAT e "c" é do tipo INT.

Quando você pede que o programa que calcule a raiz de "a" (sqrt) e atribua a "b", caso o valor de "a" não seja um quadrado perfeito, o valor que será atribuído em "b" será um valor com casas decimais (Ex.: 3,186565). Porém quando você atribui em "c" (que é do tipo INT) o valor de "b" (que é do tipo FLOAT) o programa irá pegar a primeira casa e ignorar as outras.

Ex: a = 10

b = Sqrt 10 = 3,1622...

c = b => c = 3

 

2.º Quando no IF ele diz: if(b<=c){ printf("\nO Numero Digitado e um Quadrado Perfeito"); - é justamente pelo fato de que o numero somente será quadrado perfeito se a sua raiz for igual ao numero inteiro do seu resultado (o valor antes da virgula).
 

b = Sqrt 10 = 3,1622...

 

c = b => c = 3

 

Acho que deu pra dar uma clareada!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×