Considerando a estrutura:
struct Ponto{
int x;
int y;
};
para representar um ponto em uma grade 2D, implemente uma função que indique se um ponto
está localizado dentro ou fora de um retângulo. O retângulo é definido por seus vértices inferior esquerdo v1 e superior direito v2. A função deve retornar 1 caso o ponto esteja localizado dentro do retângulo e 0 caso contrário. Essa função deve obedecer ao protótipo:
int dentroRet (struct Ponto* v1, struct Ponto* v2, struct Ponto* p);
struct Ponto{
int x;
int y;
};
int dentroRet (struct Ponto* v1, struct Ponto* v2, struct Ponto* p);
Passo 1
Resumo do problema: a gente tem uma struct Ponto com campos x e y em uma grade 2D. Dois desses pontos, v1 e v2, definem um retângulo (v1 no canto inferior esquerdo e v2 no canto superior direito). Precisamos de uma função que receba ponteiros para v1, v2 e um ponto p, e retorne 1 se p estiver dentro (ou na borda) desse retângulo, ou 0 caso contrário. Vamos usar conceitos de ponteiros em C, acesso a campos de struct e operadores relacionais e lógicos.
Passo 2
Entendendo ponteiros e acesso a struct: em C, quando você tem um ponteiro pra uma struct, por exemplo struct Ponto *v1, o acesso a cada campo é feito com o operador ->. Ou seja, v1->x é equivalente a (*v1).x e dá o valor do x do ponto apontado por v1. Vamos usar isso para comparar as coordenadas de p com as de v1 e v2.
Passo 3
Definindo a condição de “dentro”: um ponto p está dentro (ou na borda) do retângulo se sua coordenada x satisfaz v1->x <= p->x <= v2->x e sua coordenada y satisfaz v1->y <= p->y <= v2->y. Essas duas comparações devem ser verdadeiras ao mesmo tempo, então a gente vai usar o operador lógico &&.
Passo 4
Implementando a função em C: com tudo entendido, é só traduzir a lógica para código. A função vai testar a condição acima e retornar 1 se for verdadeira, ou 0 caso contrário.
Resposta
int dentroRet(struct Ponto* v1, struct Ponto* v2, struct Ponto* p) {
if (p->x >= v1->x && p->x <= v2->x &&
p->y >= v1->y && p->y <= v2->y) {
return 1;
} else {
return 0;
}
}