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

Tentando calcular distancia entre dois pontos.


SirPlinio

Pergunta

Bem, olá.

Sou novo no fórum, acabei de me cadastrar, não conhecia nenhum bom fórum sobre C/C++ e espero que esse seja bom.

Sou aluno do ensino médio, e uma das coisas que eu gosto de fazer para passar o tempo e treinar as linguagens que eu aprendo é fazer programas que façam os cálculos que eu faço na escola. Eu estou tentando fazer com que ele calcule a distancia entre dois pontos no plano cartesiano, mas de forma alguma ele funciona! Na verdade o programa compila e roda, mas independente das coordenadas o resultado é sempre 1. Peço por favor que me ajudem.

Aqui vai o código:

void distPontos()
{    
    float dst, x1, x2, y1, y2;
    cout << "Digite as coordenadas do primeiro ponto:\n";
    cin >> x1;
    cin >> y1;
    cout << "Digite as coordenadas do segundo ponto:\n";
    cin >> x2;
    cin >> y2;
    dst = ( pow( (x1-x2) , 2) ) + ( pow( (y1-y2) , 2) );
    if (dst < 0)
    {
       dst = dst * (0-1);
    }
    dst = pow(dst,1/2);
    cout << "A ditancia e: " << dst << "\n";
    cout << "Deseja fazer outra operacao? (S/N)\n";
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

O problema ocorre ao tirar a raiz quadrada. Você está passando 1/2 para a função, mas o C++ está tratando o 1 como inteiro, ou seja, 1/2 = 0. Como x^0 = 1, o programa retornava sempre 1.

Para resolver o problema, você pode converter o 1 para float. Exemplo:

dst = pow(dst,(float)1/2);

Link para o comentário
Compartilhar em outros sites

  • 0

E não precisa dessa parte:

if (dst < 0)
    {
       dst = dst * (0-1);
    }
Já que dist nunca vai ser negativo porque o quadrado de um número sempre vai ser positivo e a soma de dois números positivos vai dar positivo. Você poderia simplificar fazendo assim:
dst = pow(  (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) ,  0.5 );

Troquei float 1/2 por 0.5. É só uma dica. Abraço.

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...