Expoente em C++

1. Expoente em C++

Lucas de M. Corrêa
correalinux

(usa Outra)

Enviado em 13/03/2018 - 09:49h

Bom dia... Tarde... Noite, pessoal...

Então, estou começando a estudar C++ em um curso. E fiz o seguinte código, (que me foi pedido), para calcular a distância entre dois pontos.
#include <iostream>
#include <cmath>
using namespace std;

/***************************************************************
* Calcular e exibir distância entre dois pontos *
***************************************************************/

int main()
{

// Declarar variáveis:
float x1;
float x2;
float y1;
float y2;

// Atribuir dados às variáveis:
cout << "Coordenada de X1: ";
cin >> x1; // Atribuir dado ao ponto x1...
cout << "Coodenada de X2: ";
cin >> x2; // Atribuir dado ao ponto x2...
cout << "Coordenada de Y1: ";
cin >> y1; // Atribuir dado ao ponto y1...
cout << "Coordenada de Y2: ";
cin >> y2; // Atribuir dado ao ponto y2...

// Calcular e exibir resultados:
cout << "\nA Distância é: " << sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));

}


Queria saber de vocês em quais aspectos, e de quais maneiras eu posso melhorar este código, em especial a linha destacada...
Como posso calcular potenciações de forma mais simples? sem ter que multiplicar as bases...

LMC


  


2. Re: Expoente em C++

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 13/03/2018 - 10:06h

O código já tá bem simples, eu pessoalmente prefiro fazer do modo que você fez, tipo, sem usar uma função como pow para potenciação, já que é somente um calculo fixo de raiz quadrada chamar pow duas vezes só pra isso acho meio "pesado" (olha as aspas).

Em muitas bibliotecas de vetores matemáticos se ver muito essa forma da distância:
float Vector2::distance ( const Vector2 & b )
{
return sqrt((b.x - this->x) * (b.x - this->x) + (b.y - this->y) * (b.y - this->y));
}

Veja que é o mesmo que você fez.


3. Re: Expoente em C++

Lucas de M. Corrêa
correalinux

(usa Outra)

Enviado em 13/03/2018 - 10:25h

Obrigado @SamL...

Só mais uma coisa... Em questões de estética, seria melhor...
Assim:
cout << "\nA Distância é: " << cout << sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));
Ou assim:
cout << "\nA Distância é: ";
cout << sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));
?

LMC


4. Re: Expoente em C++

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 13/03/2018 - 10:30h

Cara tanto faz, faça como você mesmo pensa ser melhor. Além do mais se fosse um programa pra um ciente o que importa é que faça o trabalho corretamente, o cliente não ia ficar querendo ver seu código fonte, a não ser que você dê pra ele e mesmo assim ele teria de ser programador pra entender e até criticar o que você fez.


5. Re: Expoente em C++

Lucas de M. Corrêa
correalinux

(usa Outra)

Enviado em 13/03/2018 - 10:33h

SamL escreveu:

Cara tanto faz, faça como você mesmo pensa ser melhor. Além do mais se fosse um programa pra um ciente o que importa é que faça o trabalho corretamente, o cliente não ia ficar querendo ver seu código fonte, a não ser que você dê pra ele e mesmo assim ele teria de ser programador pra entender e até criticar o que você fez.

Uhhhmmm
Ok!

É porque ás vezes eu gosto de deixar as coisas o mais claras possíveis, para mim e para os outros, e uma coisa que me irrita, são linhas maiores que 80 colunas... Sei que às vezes é impossível de evitar, mas tento isso ao máximo...

LMC


6. Re: Expoente em C++

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 13/03/2018 - 11:35h

correalinux escreveu:
É porque ás vezes eu gosto de deixar as coisas o mais claras possíveis, para mim e para os outros, e uma coisa que me irrita, são linhas maiores que 80 colunas... Sei que às vezes é impossível de evitar, mas tento isso ao máximo...
LMC

Te entendo, eu também ultimamente tenho evitado linhas muito compridas, mas tem vezes que melhor deixar numa linha só e dividir em mais fica meio estranho. Eu uso a largura do meu monitor como padrão de medida, caso chegue muito perto da largura eu corto no meio a linha com um enter. Mas vai do bom senso de cada um.




7. Re: Expoente em C++

Paulo
paulo1205

(usa Ubuntu)

Enviado em 13/03/2018 - 12:12h

correalinux escreveu:

Em questões de estética, seria melhor...
Assim:
cout << "\nA Distância é: " << cout << sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));
Ou assim:
cout << "\nA Distância é: ";
cout << sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));
?


Dado que a primeira alternativa tem um erro (em destaque), a segunda acaba sendo melhor.

Mas como você depois perguntou sobre disposição do código em função da largura da linha, eis como eu costumo fazer.

cout
<< "A Distância é: "
<< sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))
<< '\n'
;


Note que eu não mudei apenas a disposição dos elementos da linha, mas também eliminei um nível redundante de parênteses, alguns espaços e, principalmente, coloquei o terminador de linha no seu lugar, que é no término da linha, não (esperançosamente) no início da linha seguinte.


8. Re: Expoente em C++

Lucas de M. Corrêa
correalinux

(usa Outra)

Enviado em 13/03/2018 - 12:24h

Valeu @paulo1205... O erro foi na hora de colar, nem tinha percebido... (falha minha rsrsrs)

Mas obrigado pela dica, este modo que você usa, eu ainda não conhecia em C++... Bem legal!


LMC


9. Re: Expoente em C++

Fernando
phoemur

(usa Slackware)

Enviado em 13/03/2018 - 13:16h

Considere que a distancia dos pontos é a raiz quadrada da soma de 2 quadrados ((x2-x1)^2 e (y2-y1)^2)

Isso é matematicamente correspondente à hipotenusa segundo o teorema de pitágoras, de forma que seria mais elegante escrever algo assim:


cout << "\nA Distância é: " << hypot(x2-x1, y2-y1);


E de fato se você colocar dois pontos em um plano cartesiano, a distância entre eles realmente vai ser a hipotenusa de um triângulo retângulo considerando como lados as projeções nos eixos X e Y. Fica até mais fácil de visualizar desse jeito.

Referência: http://en.cppreference.com/w/cpp/numeric/math/hypot

Um abraço






Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts