Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Dúvida na aplicação de raiz quadrada


fredlink

Pergunta

Ler um numero real, se o numero for positivo imprima a raiz quadrada, senao imprima o numero ao quadrado.

Sou iniciante em C e fiz esse código abaixo. Ele quase funciona perfeito, só não entendi porque quando digito o numero positivo ele me retorna o resultado duplicando o dígito. Parece que ele entende como uma dízima periódica. Ex: quando n1=49 retorna 77 ao invés de 7.

Achei que estava relacionado há alguma limpeza de buffer, por isso inseri estes fflush(stdin), mas não adiantou. Peço sugestoes. Obrigado.

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int main(){
float n1, x;
printf("Digite um number: ");
scanf("%f", &n1);
printf("\n");
if (n1>0){
x = sqrt(n1);
fflush(stdin);
printf("%.f", x);
}else
x = pow(n1,2);
fflush(stdin);
printf("%.f\n\n", x);
system("pause");
return 0;
}
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

quando não colocamos chaves{} en else, esse mismo else somente tem alcance de uma só instruçao, ou seja que si eu tenho

...}else

x = pow(n1,2);
fflush(stdin);
printf("%.f\n\n", x);
ele só alcança a esa linha que esta em verde. Em outras palavras o anterior é como si fosse:

}else{

x = pow(n1,2);
}
fflush(stdin);
printf("%.f\n\n", x);

Para agrupar todas as intruçoes(uma ou mais) baixo else devemos fazer:

}else{

x = pow(n1,2);
fflush(stdin);
printf("%.f\n\n", x);

}

Seu programa arrumado seria:

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

int main() {
    float n1, x;
    
    printf ( "Digite um number:    " );
    scanf ( "%f", &n1 );
    printf ( "\n" );
    
    if ( n1 > 0 ) {
        x = sqrt ( n1 );
        fflush ( stdin );
        printf ( "%.f", x );
    } else {
        x = pow ( n1, 2 );
        fflush ( stdin );
        printf ( "%.f\n\n", x );
    }
    
    system ( "pause" );
    return 0;
    
}

E si ti interessa optimizar ele sem levar aos extremos:

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

int main() {
    float n1;
    
    printf ( "Digite um number:    " );
    scanf ( "%f%*c", &n1 );
    
    if ( n1 > 0 ) {
        printf ( "\nRAIZ%.f", sqrt(n1) );
    } else{
        printf ( "\nPOTENCIA%.f\n\n", pow(n1, 2) );
    }
    
    getchar();
    return 0;
    
}

Levando ao extremo seria:

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

int main() {
    float n1;
    
    printf ( "Digite um number:    " );
    scanf ( "%f%*c", &n1 );
    
    printf ( "%s: %.f", ( n1 > 0 ) ? "RAIZ" : "POTENCIA", ( n1 > 0 ) ? sqrt(n1) : pow(n1, 2) );

    getchar();
    return 0;
    
}
Editado por vangodp
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...