Eu tinha que fazer um programa que dissesse se um ponto P (xp, yp) se encontra dentro, fora, ou na borda de um retangulo determinado por coordenadas também cartesianas: canto inferior esquerdo: x1, y1. E o canto superior direito: x2, y2.
O programa recebe os tres pares de valores e tem que dizer o que falei acima, se o ponto está dentro, fora ou na borda.
Dias atrás, com a ajuda de um colega aqui do forum, o código foi finalizado, mas hoje senti a curiosidade de ver se conseguia montar o código de outra maneira sem deixar de usar Struct, porque minha atividade pedia isso. Não consegui.
OBS: O retorno do resultado não pode ser alterado também. Se for menor que zero o ponto está fora, se for maior que zero, no caso 1, o ponto está dentro. Senão o ponto está fora.
Segue o código:
#include //aqui seria iostream
#include <stdlib.h>
using namespace std;
struct Ponto {
int x, y;
};
struct Retangulo {
Ponto xy1;
Ponto xy2;
};
void ehretangulo(Retangulo retangulo){
if(retangulo.xy1.x == retangulo.xy2.x || retangulo.xy1.y == retangulo.xy2.y){
cout<<"Retangulo invalido!";
exit(0);
}
}
Retangulo organizarpontos(Retangulo retangulo) {
if(retangulo.xy1.x > retangulo.xy2.x) {
int aux = retangulo.xy1.x;
retangulo.xy1.x = retangulo.xy2.x;
retangulo.xy2.x = aux;
}
if(retangulo.xy1.y > retangulo.xy2.y) {
int aux = retangulo.xy1.y;
retangulo.xy1.y = retangulo.xy2.y;
retangulo.xy2.y = aux;
}
return retangulo;
}
int verificarpontos(Ponto ponto, Retangulo retangulo) {
if (retangulo.xy1.x < ponto.x && ponto.y < retangulo.xy2.x && retangulo.xy1.y < ponto.y && ponto.y < retangulo.xy2.y ) {
return 1;
}
else if(ponto.x == retangulo.xy1.x || ponto.x == retangulo.xy2.x || ponto.y == retangulo.xy1.y || ponto.y == retangulo.xy2.y){
return 0;
}
else{
return -1;
}
}
int main(int argc, char **argv){
Retangulo ret;
Ponto point;
cout <<"Insira o valor de x1: ";
cin >> ret.xy1.x;
cout <<"Insira o valor de y1: ";
cin >> ret.xy1.y;
cout<<"Informe o valor de x2: ";
cin >> ret.xy2.x;
cout <<"Informe o valor de y2: ";
cin >> ret.xy2.y;
cout<<"Informe o valor de xp: ";
cin >> point.x;
cout<<"Informe o valor de yp: ";
cin >> point.y;
ehretangulo(ret);
ret = organizarpontos(ret);
int resultado = verificarpontos(point, ret);
if(resultado < 0){
cout<<"O ponto P está fora do retangulo";
}
else if(resultado > 0){
cout<<"O ponto P esta dentro do retangulo";
}
else{
cout<<"O ponto P está na borda do retangulo";
}
return 0;
}
Tem alguma outra maneira de montar o código nesse caso?