Ir ao conteúdo
  • Cadastre-se

Saber se um número é quadrado perfeito


Rager

Posts recomendados

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;}
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...