Distância entre dois pontos
Criar uma função que receba as coordenadas de dois pontos (A e B) e retorna distância entre esses dois pontos. O algoritmo deve ler as coordenadas X e Y de cada um dos pontos e mostrar essa distância.
Solução sem criar uma função
#include <stdio.h>
#include <math.h>
int main()
{
int x1,x2,y1,y2;
float distancia;
scanf("%i %i %i %i", &x1, &y1, &x2, &y2);
distancia = sqrt( pow(x2-x1, 2) + pow(y2-y1, 2) );
printf("%f", distancia);
return 0;
}
Solução elaborando uma função
#include <stdio.h>
#include <math.h>
float calculaDistancia(int x1, int y1, int x2, int y2) {
return sqrt( pow(x2-x1,2) + pow(y2-y1, 2) );
}
int main() {
int x1,y1,x2,y2;
float distancia;
printf("Informe as coordenadas para o primeiro ponto: ");
scanf("%i %i", &x1, &y1);
printf("Informe as coordenadas para o segundo ponto: ");
scanf("%i %i", &x2, &y2);
distancia = calculaDistancia(x1,y1,x2,y2);
printf("Distancia: %f", distancia);
}
Eu já tinha codificado uma solução semelhante em Python e apresentei em http://www.galirows.com.br/meublog/programacao/exercicios-resolvidos-em-python-2/, Existia uma pequena diferença no exercício e vou aproveitar ela para uma consideração.
A diferença estava em que o enunciado pedia que: se a distância for maior do que zero, deve ser mostrada essa distância, caso contrário deve ser solicitado outras coordenadas. É uma questão simples e o código que propus inicialmente era o seguinte.
#include <stdio.h>
#include <math.h>
float calculaDistancia(int x1, int y1, int x2, int y2) {
return sqrt( pow(x2-x1, 2) + pow(y2-y1, 2) );
}
int main()
{
int x1,x2,y1,y2;
float distancia;
distancia = 0;
while (distancia == 0) {
scanf("%i %i %i %i", &x1, &y1, &x2, &y2);
distancia = calculaDistancia(x1,y1,x2,y2);
}
printf("%f", distancia);
return 0;
}
A solução seria melhor utilizando um bloco do…while. Isso porque eu preciso necessariamente fazer o bloco pelo menos uma vez. Usando simplesmente o while eu tive que forçar passar no teste pela primeira vez, inicializando a variável distancia com zero.
do {
scanf("%i %i %i %i", &x1, &y1, &x2, &y2);
distancia = calculaDistancia(x1,y1,x2,y2);
} while (distancia == 0);
Mas o que eu queria realmente fazer era uma consideração quanto a eficiência computacional. Na solução apresentada eu calculei a distância entre os pontos para constatar que ela é zero. Para isso todo o cálculo da equação da distância entre os dois pontos foi feita. Mas apenas quando os pontos forem iguais é que a distância será zero e fazer esse teste (verificar se x1 e x2, y1 e y2 são iguais) é mais eficiente computacionalmente e seria melhor para a solução, com o mesmo resultado.
Confira o vídeo em: https://youtu.be/NmL8wtsxmuk